SKulpt W3D - Classic Amiga version

Introduction

sKulpt aims at being (someday J ) the modern reincarnation of the ancient but beloved Amiga 3D modeling and ray tracing software Sculpt Animate 3D / 4D by Eric Graham and Byte By Byte.

Sculpt was (and still is) a model for simplicity and ergonomy, and many pictures were drawn by it, in amateur and professional contexts.

Furthermore, it was cheap, although it packed many features and was almost bug-free.

Alas... It seems like Byte By Byte is out of business (since long on the Amiga market anyway), unreachable, and the source code for Sculpt was not released in open form.

I would still be using it nowadays if...

SKulpt will someday cover these features in a fully usable form, if I have enough spare time to finish it... You can help, since I provide the source.

At the moment, sKulpt is a project in development, yet supporting :

I'd say that around 60 percent of its features are implemented and available. More are actually in the code. This is because I first developed sKulpt on the PC, with the scope of porting it back to the Amiga afterwards. Developing under Microsoft's Visual C++ v6 is much faster than under SAS/C, and when I started the project, I did not know about StormC, which I bought since !

SKulpt thus also exists as a 32 bit Windows program, relying on the Microsoft DirectX v7 libraries (available under Windows 98 and 2000), with exactly the same features as the Amiga version (since both share most of the source code). If you know a bit of both Windows APIs and Amiga programming, give a look at the sources of both versions, you'll see how you can port something from Windows to Amiga (of course, it is easier if thought from the start). As an example, all dialog boxes on the Amiga version reside in the "gfx/sampler.res" file, which is a Microsoft Visual Studio's AppStudio resource editor compiled file, the very same which is linked into the PC executable. The dialog definitions are loaded from this file when required, and translated on the fly into GadTools windows and gadgets. Funny isn't it ? Furthermore, the dialog box handling code is the same also, and stub functions provide the Win32 emulation when necessary. We did this because setting up a dialog box with AppStudio is a child's play (even if limited in functionality), whereas GUI editors on the Amiga rely on much more complex concepts like fully resizable windows, font sensitive dialogs etc. which could simply not be shared with the PC. I would not like to have to keep up to date two different sets of GUI definitions.

Both versions live at the same level of functionality, one always having a slight advance over the other, depending on which platform I feel it will be easier to add a feature. Porting it to other platforms (Linux, BeOS, NextStep and MorphOS) could be done easily.

Requirements

To run sKulpt, you need :

You CAN'T run sKulpt if you don't have all the above.

Don't try to run sKulpt if the Warp3D samples provided in the Warp3D user archive don't fully work. Among these samples, WarpTest provides an easy GUI to test many Warp3D features.

The 060 version will run on any 32 bit 680x0 (from 020 to 060), and the PPC version will run on Blizzard PPC and Cyberstorm PPC boards (yet the 060 version is optimized for the 060 and the PPC version is optimized for the 604e).

Warp3D should run under Picasso96, but I encountered some problems with this setup, so I can only say it works well with CybergraphX (which I advise running in its latest release, 4.2p7).

Warp3D does not provide a software renderer, so if you have a PPC but no CV64/3D or B|Cvision PPC, you won't be able to run sKulpt. If you have a 030/50, 8 Megs of free RAM and a CV64/3D in an A2000, it will work (I can tell, as such a configuration is used as a test system for sKulpt).

If you would like to run sKulpt without a 3D accelerated board, write to HAAGE & PARTNER saying you want to write the software renderer for Warp3D, and be prepared to code a pretty complex but very interesting piece of software.

A word on 3D hardware acceleration, for the curious unaware. What's covered under these words of much hype is :

All these functions were available since many years, but only in expensive CAD workstations or high-end CAD-dedicated video boards. Thanks to Mr. Carmack and his Quake hit, these features, crucial in 3D game programming, came to the desktops in almost all PCs at affordable prices. One of the first chips implementing these features at a reasonable price was the S3 ViRGE, which is the heart of the CyberVision 64/3D (while completely outdated on the PC scene).

What is left to software (on the Amiga) is :

As you may have heard, on the PC platform, modern graphics boards like nVidia's GeForce ® © J take these two functions into hardware, thus freeing the processor for other calculations. At the time of this writing, this is not the case on the Amiga.

Principles

SKulpt is a 3D scene editor, and an image / animation renderer.

The purpose of sKulpt is to enable one to draw 3D objects, set their respective positions, their appearance properties through association with materials, associate textures with materials, add lights, and render everything into an image. Additional animation features enable rendering a succession of images, between which the scene is modified (object or light movements etc.)

To use sKulpt, one must understand the following concepts :

Thus, the only things you will see in the 3D window are triangles, since vertices and edges don't define surfaces by themselves, so can't be rendered.

Various other considerations are taken into account in rendering, like face normals, blending etc., but for a quick introduction this is sufficient.

The process of creating a 3D object is the following :

This is sufficient to create a 3D scene, which gets rendered as a 2D picture in the 3D view J

This process can be eased by the use of productive tools, like extrusion, curve filling, etc.

The work of vertex / edge / triangle setup is done in 3 2D windows (face, top and side view).

For a more detailed introduction, please give a look at the original Sculpt documentation, which I can't reproduce here for copyright reasons, or at the reference user's guide chapter in this document.

Quick features overview for the Sculpt-aware

Same menu structure as in Sculpt 3/4D, mostly same features at same place.

Able to load, view and rework Sculpt 3/4D scenes, except paths and object names. All the provided ".scene" sample scenes are actually original Sculpt 3D demo scenes. If you have a Sculpt scene which won't load in sKulpt, tell me.

Able to load / save its own binary file format (IFF ".sk3D", pretty fast).

Able to load / save Microsoft's DirectX X file format (".x") (not fully functional in the current release).

Modeling in 3 2D windows (top, face, side views) :

Modeling with 5 cursors :

A white line always links camera and target.

These ease triangle creation, which is available with :

Vertex creation is made at main cursor location, either with the point gadget or with 'P' key.

Modeling with tools (not all available at the moment) :

Release the current tool with either menu or the space bar.

Edit materials with 'm'.

Edit selected faces material association with 'f'.

Edit lamps with 'l'.

Reposition all windows with the ESC key.

All selecting, editing, transforming features of Sculpt 3/4D (not all available at the moment).

Able to draw 3D as solid, wireframe or vertices.

Very sophisticated mesh triangulation engine, based on the Triangle project, supporting holes, optimization and more.

User's reference

Introduction

SKulpt offers various flexible ways to do the same thing. For instance :

This chapter aims at giving you the purpose of the various sKulpt commands, be they entered by menu entries, window gadgets, keys. SKulpt embeds various ways to do the same thing, as this was the case with the original Sculpt software, so that you can find the way which is most convenient to you. In the future, this concept will be pushed further, through introduction of customizable menus, a customizable graphical pad which will enable gathering your most useful commands, accessible through small icons, scripting features, with either the embedded sKulpt scripting language (similar to the original Sculpt), and AREXX availability of variables and commands.

This chapter then demonstrates these commands in action in simple scene creations.

If you feel it should be organized or illustrated in a different way, don't hesitate, tell me.

The GUI

The GUI stands for "Graphical User Interface". This chapter is meant to explain its principles to unfamiliar users.

It is what you see on your screen when running sKulpt.

The GUI is made of the following entities :

All this is shown above (here in a 640x480x15 screen, but you can use whatever screen mode you want provided you have enough free graphics board video memory) :

Contents of the 2D windows

The 2D windows represent the projection of your virtual 3D space along the 3 planes of a Cartesian coordinate system defined this way :

The face view shows the projection of all objects on the X/Y plane. The top view shows the projection of all objects on the X/Z plane. The right view shows their projection on the Z/Y plane.

If I add a circle to my scene, which is centered on the origin, and turns around the Z axis (let's say Z), this circle is in the X/Y plane, and the 3 2D views will show like this :

In the 2D windows, you also see above :

These essential elements can fall in a non-visible space area, since when you pan or zoom in, they don't move in space. To expose them, either zoom out, or pan, or center the views on the main cursor (see this later).

Apart from these essential elements, the objects you create in your scenes display as follow :

This is all what can be seen in the inner region (light blue delimited by white rectangle) of the 2D windows.

To illustrate this, here is a face view of 3 triangles, 5 edges and 2 lamps. A few vertices are selected (yellow) :

On this picture, you can also discover the window gadgets. They are the small icons taking place in the dark blue border surrounding the inner window region. Their functions are described in a further chapter.

We are done with 2D windows.

Contents of the 3D window

The 3D window will display the perspective view of the scene, seen from the camera position, looking at the target position.

What gets actually drawn is only the triangles (since they are the only basic entities to define a visible surface, as points and edges don't).

Triangles get drawn according to :

 

Remark 1 : in the current pre-version, the specular component of both materials and lights are not taken into account by the lighting engine.

Remark 2 : in the current pre-version, the normals at each vertex are calculated per triangle (and not globally), thus the shading is ok inside the triangle, but the same vertex shared by another triangle will have a different normal, thus the shading will not be smooth across triangles.

Remark 3 : in the current pre-version, only the point light type is implemented. Directional and spot will follow.

Remark 4 : in the current pre-version, the range parameter of lights is not taken into account, thus the attenuation is computed whatever be the distance between a lamp and a vertex.

SKulpt offers two lighting models : the first is fast and inaccurate, considering there is only one light, which is located at the same place as the camera. This is for fast preview. The second is a complete lighting module conforming to a large part of the specifications of the Direct3D v7 lighting module. Light sources in Direct3D emit diffuse, ambient, and specular colors as distinct light components that factor into lighting computations independently of each other. SKulpt determines the distance between a light source and a vertex being lit by taking the magnitude of the vector that exists between the light's position and the vertex : D == ||VL||. D is the distance being calculated, V is the position of the vertex being lit, and L is the light source's position. If D is greater than the light's range property, no further attenuation calculations are made and no light effects from the light are applied to the vertex. If the distance is within the light's range, SKulpt then applies the following formula to calculate light attenuation over distance for point lights and spotlights (directional lights don't attenuate) : A = 1 / (attn0 + D x attn1 + D² x attn2). In this attenuation formula, A is the calculated total attenuation and D is the distance from the light source to the vertex. The dvAttenuation0, dvAttenuation1, and dvAttenuation2 values are the light's constant, linear, and quadratic attenuation factors as specified by the properties of a light object. The system normalizes D to be within the range [0.0,1.0], where 0.0 indicates no light at the vertex, and 1.0 indicates full light intensity at the vertex. The constant, linear and quadratic attenuation factors act as coefficients in the formula—you can produce a wide variety of attenuation curves by making simple adjustments to them. You could set the constant attenuation factor to 1.0 to create a light that doesn't attenuate (but will still be limited by range), or you can experiment with different values to achieve various attenuation effects. The attenuation formula used by SKulpt computes an attenuation value that typically ranges from 1.0 at the light source to 0.0 at the maximum range of the light. The attenuation value is multiplied into the red, green and blue components of the light's color to scale the light's intensity as a factor of the distance light travels to a vertex. After computing the light attenuation, SKulpt should also consider spotlight effects (if applicable), the angle that the light reflects from a surface, as well as the reflectance of the current material to come up with the diffuse and specular components for that vertex.

In the current release, the complete lighting process is the following (will evolve to get more complete) :

step 1 : calculate the 3 vertex normals

step 2 : preset the RGB color values for the 3 vertices to the following sum : (material emissive + material ambient * ambient light) (for the Alpha component, only the Diffuse is taken into account, and it is the same for the 3 vertices)

step 3 : for each lamp, calculate its contribution to vertex lighting :

step 4 : calculate the vertex Gouraud shading weighting factors : cosine(vector(lamp-vertex), vertex normal)

step 5 : calculate the 3 lamp / vertex distances

step 6 : calculate the 3 attenuation factors

step 7 : calculate the non-attenuated lamp's RGB diffuse contributions (lamp * material)

step 8 : calculate the non-attenuated lamp's RGB ambient contributions (lamp * material)

step 9 : accumulate into the RGB color values for the 3 vertices the lamp's attenuated diffuse and ambient contributions

step 10 : top all calculated RGB's to 1 (so not to overflow the video RAMDAC)

Contents of the trace window

The trace window displays either informative messages, or error messages (if you ask for something impossible like creating a triangle with only 2 vertices, or if sKulpt encounters an internal error).

All these messages have a unique number, which you should mention when you report strange situations or bugs to the author.

The trace window is not refreshed when overdrawn, to save graphics memory. Thus if you really care for the traces, either look in the shell window in which you started sKulpt (which holds a copy of all traces), or set the window positions in such a way that the trace can hold what you are looking after. I suggest using a console manager like KingCon in the shell, so that you can review the traces in the review buffer. You can even copy/paste all traces since startup in your eMails when reporting something to me.

Window manipulation

Window manipulation conforms to the Amiga standards. Windows have front/back gadgets, a title / drag bar, a size gadget. To have more information on this topic, please browse your Workbench documentation.

Menu entries

In the following table, all white menu entries are not available yet.

Menu

Menu entry

Sub items

Function

Notes

Projet

Charger

Scène Sculpt 3D / 4D

Load a genuine Sculpt 3/4D scene

1

Scène sKulpt D3D/W3D

Load a new sKulpt file format scene

 

Scène DirectX

Load a Microsoft DirectX text file format scene

2

Image

 

 

Objet

 

 

Script

 

 

Objet nommé

 

 

Prise de vue

 

 

Animation

 

 

Fonte

 

 

Plugin

 

 

Sauver

Scène Sculpt 3D / 4D

 

 

Scène sKulpt D3D/W3D

Save a new sKulpt file format scene

 

Scène DirectX

Save a Microsoft DirectX text file format scene

3

Image

 

 

Objet

 

 

Objet nommé

 

 

Montrer

Image

 

 

Animation

 

 

Preview

 

 

Décharger

Image

 

 

Animation

 

 

Preview

 

 

Fonte

 

 

Plugin

 

 

Batch

 

 

 

A propos

 

Show About requester

 

Résumé

 

Show used vertex / edge / triangle / lamp slots & frag

4

Quitter

 

 

 

Edition

Sélectionner

Tout sauf lampes

Select all vertices (but no lamp)

 

Noeuds connexes

Select all vertices connected to already selected vertices

 

Noeud indiqué

Select vertex closest to main cursor

 

Lampe indiquée

Select lamp closest to main cursor

 

Toutes les lampes

Select all lamps

 

Noeuds par nom

 

 

Arête indiquée

 

 

Spline indiquée

 

 

Trajectoire indiquée

 

 

Inverser la sélection

Unselect selected and select unselected vertices

 

Désélectionner

Tout

Unselect all

 

Noeud indiqué

Unselect vertex closest to main cursor

 

Lampe indiquée

Unselect lamp closest to main cursor

 

Toutes les lampes

Unselect all lamps

 

Noeuds par nom

 

 

Arête indiquée

 

 

Inverser la sélection

Unselect selected and select unselected vertices

 

Effacer

Tout

Erase everything

 

Noeud indiqué

Erase vertex closest to main cursor

 

Noeuds sélectionnés

Erase selected vertices

5

Arêtes sélectionnées

Erase selected edges

6

Triangles sélectionnés

Erase selected triangles

7

Lampe indiquée

Erase lamp closest to main cursor

 

Lampes sélectionnées

Erase selected lamps

 

Toutes les lampes

Erase all lamps

 

Noeuds par nom

 

 

Spline indiquée

 

 

Trajectoire indiquée

 

 

Modifier

Matériaux

Edit material properties

8

Facettes

Edit selected triangle material associations

9

Lampes

Edit lamp properties

 

Origine locale

 

 

Noeud de trajectoire indiqué

 

 

Tangente de trajectoire indiqué

 

 

Prise de vue

 

 

Transformer

Agrandir / réduire

Expand / reduce size of selection

10

Remplir

Fill closed curve with triangles

11

Subdiviser

Subdivide each selected triangle into 3 triangles

 

Unslice

 

 

Symétrie

 

 

Répliquer sur hélice

Replicate selection along helix

12

Répliquer sur spline

 

 

Répliquer sur trajectoire

 

 

Lisser les noeuds sélectionnés

Smooth vertex normals of selection across triangles

13

Dé-lisser les noeuds sélectionnés

Un-smooth normals : come back to per-triangle normals

 

Montrer la trajectoire

 

 

Cacher les noeuds sélectionnés

Hide (in 2D & 3D) the selection

 

Révéler les noeuds cachés

Un-hide all hidden vertices, edges & triangles

 

Repositionner les fenêtres

Reset all window positions

 

Auto texture mapping

Planaire best fit

 

 

Planaire XY

 

 

Planaire YZ

 

 

Planaire XZ

 

 

Planaire libre

 

 

Cylindrique best fit

 

 

Cylindrique X

 

 

Cylindrique Y

 

 

Cylindrique Z

 

 

Cylindrique libre

 

 

Sphérique best fit

 

 

Sphérique XY

 

 

Sphérique YZ

 

 

Sphérique XZ

 

 

Sphérique libre

 

 

Ajouter

Clône de la sélection

Add a clone of the selection, select it, set grabber tool

 

Point

Add a vertex under the main cursor

 

Arête ou triangle

Add an edge or triangle

14

Sphère

Add a sphere

15

Hémisphère

Add an hemisphere

16

Tore

Add a torus

17

Boing ball

Add a boing ball

18

Cube

Add a cube

19

Prisme

Add a prism

20

Disque

Add a disk

21

Cercle

Add a circle

22

Cylindre

Add a cylinder

23

Tube

Add a tube

24

Cône

Add a cone

25

Chaîne de caractères

 

 

Lampe

Add a lamp

 

Coller

Curseur sur noeud le plus proche

Snap cursor onto closest vertex

 

Curseur sur centre de la sélection

Snap cursor onto center of selection

26

Curseur sur barycentre

 

 

Curseur sur grille

Snap cursor on closest grid cross

27

Noeuds sélectionnés sur grille

 

 

Noeuds connectés sur sphère

 

 

Noeuds sélectionnés sur plan

 

 

Nommer

Noeuds connectés

 

 

Trajectoire indiquée

 

 

Lampe indiquée

 

 

Grille

Grille

Activate the grid

28

Pas

Set grid step

 

Coordonnées

 

Toggle show / hide coords in the 2D windows

 

Outils

Aucun

 

Activate no tool

 

Sélecteur

 

Activate selector tool

29

Désélecteur

 

Activate unselector tool

30

Aimant

 

 

 

Courbe

Courbe

Activate curve tool

31

Finir

Finish current curve

32

Extrudeur

 

Activate extruder tool

33

Spline

 

 

 

Pince

 

Activate grabber tool

34

Environnement

Mode

Vue 3D désactivée

Stop refreshing the 3D view (to speed up things)

 

Points

Show only triangle vertices in 3D view (lit, textured)

35

Fil de fer

Show only triangle edges in 3D view (lit, textured)

35

Facettes

Show full triangles in 3D view

 

Faces cachées (Z-Buffer)

Toggle activate hidden triangle removal with Z-buffer

 

Lighting complet

Toggle fast / full lighting engine

 

Définir observateur

 

Set camera position at main cursor

 

Définir visée

 

Set view target position at main cursor

 

Objectif

Normal

 

 

Grand angle

 

 

Télé

 

 

Spécial

 

 

Exposition

Automatique

 

 

Manuelle

 

 

Anti-aliasing

Aucun

 

 

Bon

 

 

Très bon

 

 

Dithering

 

 

Pencher

 

 

 

Monde

Ciel

 

 

 

Sol

 

 

 

Illumination globale

 

Set global scene ambient lighting properties

36

Spécificités Warp3D

Optimisation vitesse / qualité

 

Warp3D hinting

37

Renderstate

Transparence alpha blending

 

 

Eclairage spéculaire

 

 

Antialias

 

 

BackFace culling mode

None

 

 

CW

 

 

CCW

 

 

Timedemo

 

Run timedemo 1

38

 

Notes

  1. The loader of Sculpt original files does not load paths nor name hierarchies. Everything else is loaded (vertices, edges, triangles, lamps, observer & target position etc.). The loader does not erase existing entities in memory, but rather adds the contents of the file to the existing scene. All dimensions of objects in the file are scaled to fit within the current window dimensions. At the moment, sKulpt is not able to save original Sculpt files.
  2. The loader for ".x" DirectX object files does not load animation sets. All hierarchies are melted into the scene (i.e. you loose mesh / frame decomposition). The X loader does not support binary files, but only the text variant. If you want to load binary X files, please use the converter provided by Microsoft to convert them to text files. The X loader does not support pre-defined meshes and materials then referenced by their names (although this feature is often used in X files). This will be available in later releases, as well as a converter from animation sets into sKulpt paths. Please note that everything is erased prior to loading an X file, which is a different behavior from the original Sculpt loader. The native sKulpt format (".sk3d") loader acts as the X file loader, that is it erases all before loading. The X file format does not include camera / target / lamp definitions. Thus, camera / target location is not affected by loading an X file, and you may have to add lamps to "see something" in the 3D window after loading an X file.
  3. The saver for ".x" DirectX object files is far from complete, it is just a quick hack which should generate files that can be loaded with the Xfile viewer on the PC side. The saver does not generate files that can then be re-read by sKulpt (it will come later). At the moment, the format of choice (and the only format indeed) to load and save scenes is the native sKulpt format, ".sk3d" (which is an IFF format btw).
  4. The "Résumé" option puts the number of vertices, triangles, edges, lamps, materials etc. present in the scene. As sKulpt works with static tables, these tables may fragment as you delete entities, and in this case the "frag %" will not be 0 for the various entities. If you want to "garbage collect", or reorganize the tables to speed up things, you may enter the "!" command, which will do this automagically for you.
  5. Erasing vertices will also erase the edges or triangles which the vertices were part of.
  6. Erasing edges will leave the vertices untouched.
  7. Erasing triangles will leave the vertices untouched.
  8. Edit materials brings the following requester to the screen, leaving you play with the various attributes of the materials :

    The top slider enables choosing the material you are working on. The first 5 materials (# 0 to 4) can not be deleted. Apart from this, all materials can be fully edited.

    The Diffusion sliders let you adjust the RGBA properties of diffusion light properties for the material. See the lighting engine for additional info, and play with this to discover its use. Note that diffuse properties only show under light exposure, apart from the A which defines the A for the whole triangle.

    The Ambient sliders let you play with the RGBA properties. They define the way the object "exposes" the ambient light definition made with the "Monde > Illumination globale" menu.

    The Emission properties define the way the faces will emit light, i.e. they will seem lighted from the inside.

    The Specular properties define the way the faces will "shine".

    Notes : at the moment, the A components of Ambient, Emission and Specular are ignored. The Specular properties are also ignored.

    The Name is the material name, which you can fully edit up to 80 char.

    The Texture radio button and slider will let you choose whether this material is textured or not, and which texture will be mapped.

    The OK button lets you validate all your changes. The Annuler (cancel) button will let you cancel the changes you made on the current material and close the requester. The Restaurer (restore) button will let you cancel the changes made on the current material without closing the requester. The Nouveau (new) button will let you duplicate the current material into a new one. The Supprimer (delete) button will let you delete the current material.

  9. Edit Faces will bring the following requester :

    The purpose of this dialog is to enable you to choose which material is applied to the selected faces, and if the material is texture mapped, how the triangles project onto the texture.

    When you enter this dialog, both the 2D and the 3D views get redrawn, and the triangle face on which you are currently working is outlined with a green line.

    You can go to the 2D windows to move the target / camera while editing faces, so that you can always pick the best point of view.

    In the dialog, the "<" and ">" let you navigate among the selected faces.

    The top slider lets you choose the material to apply to the current face.

    If the material is texture mapped, you will see the texture image drawn (like the above).

    You can set the U/V (texture projection coordinates) for each of the 3 triangle vertices with the 1, 2, 3 horizontal & vertical sliders.

    You can also premap the triangle to one of the 4 corners of the texture using the 4 small buttons above the U/V coordinates. These buttons cycle through the various combinations of 3 vertices to 3 texture corners.

    The replicate button will spread the current face settings to all the selected faces, without affecting the destination face's U/V.

    The replicate + button will also affect the U/V.

    The OK button closes the dialog.

    The other controls are not active at the moment.

     

    Edit Lamps will bring the following requester :

    This will let you edit the lamp properties. If there is no lamp in the scene, you won't have access to this requester. Otherwise, you can choose the lamp to edit using the top slider. The currently edited lamp gets drawn in green in the 2D windows.

    The Diffuse / Ambient / Specular RGBA properties speak for themselves, give a look at the lighting engine chapter.

    The other properties are lit / unlit, lamp type (point / spot / directional), the 3 distance attenuation coefficients, the range, falloff, teta and phi parameters.

    In the current release, the spot / directional types are not implemented, and the range, falloff, teta and phi parameters are ignored.

  10. The expand / reduce command will bring the following requester :

    These commands only apply to the selected entities. The X/Y/Z factors speak for themselves ; the top radio button lets you lock the proportions. The Apply / reset buttons let you either apply the changes to the selection, or come back to the original settings, without closing the dialog. The OK / Cancel buttons do the same, closing the dialog.

  11. The Fill command invokes the mesh triangulator. You must select a set of closed curves prior to invoking this command. The triangulator will try to arrange a set of triangles which fit in the curves, which are defined by vertices of the curves. This helps creating arbitrary shapes.

    Here is a curve before and after triangulation :

     

    This is a very powerful feature, saving hours of work, particularly combined with extrusion. Here is the above triangulated curve extruded a bit :

    Note that the edges are not removed from the curve (so that you can reuse them). You can remove them by the "edit > remove selected edges" command.

    This feature supports holes and more, but at this moment, the hole definition procedure is not available on the Amiga. Although I am not able to test this, I guess you should use a standard math library setup otherwise the triangulator may crash, as it is very sensitive to accuracy. If it crashes, it will give you an error message that you should report to me.

  12. The Replicate on helix command is also very powerful. It enables quick creation of translated AND / OR rotated clones of the selection.

    The dialog lets you choose whether the clones will be linked or not, if the clones are to be rotated and / or translated, the translation and rotation axes (which are smartly preset according to the 2D window which is active when you invoke the command), the angle in degrees per rotation step, the advance per translation step, and the number of steps.

    Here is a sample of a curve, rotated and not translated to produce a glass shape :

     

    Here is a sample of a triangle, both translated and rotated, to create a stairs shape :

    Here is a sample of a cube set, translated and not rotated, to create a brick wall shape :

  13. The smooth / unsmooth faces command is only working in the PC version by now. I am not certain how I will implement this on the Amiga, Warp3D being unaware of normals (in other words, I have to handle per vertex normal calculation by myself L ).
  14. This command will do nothing if there are neither 2 nor 3 selected vertices. Otherwise it will add an edge (2) or a triangle (3).
  15. This command will add a sphere, bringing a requester in which you can set the number of slices. The revolution axis is normal to the 2D window which was active when you invoked the command.
  16. Same as above, for an hemisphere.
  17. Same as above, for a torus.
  18. The boing ball has its properties pre-defined.
  19. N/a
  20. The prism is a cone with 4 vertices at its base. The revolution axis is normal to the 2D window which was active when you invoked the command.
  21. A requester asks for the number of slices. The revolution axis is normal to the 2D window which was active when you invoked the command.
  22. Same as above.
  23. Same as above.
  24. Same as above.
  25. Same as above.
  26. The main cursor will be centered to the unweighted average center of the selection.
  27. The main cursor will be centered to the closest grid step.
  28. This command is a toggle for grid activation. Grid introduces steps for the cursor locations, in both X/Y/Z axes. It helps creating vertices which are part in multiple triangles, for regularly shaped objects. Note that sKulpt has a smart feature which determines if it should consider two vertices as the same and when to do so.
  29. The selector tool is reminded by an 'S' next to the main cursor. Its influence zone is the yellow square around the main cursor.
  30. Same as above. The unselector's letter is 'U', and the influence zone is black.
  31. The curve tool lets you create free connected edge suites, otherwise named as curves. To create a point in the current curve at the current main cursor location, press 'p' or click the '…' window gadget. To finish the curve without closing it, simply select no tool (or press space). To finish the curve closing it to its first point, press 'q' or select "curve > finish". Take care to what is selected at the end before extruding or grabbing.
  32. See above.
  33. The extruder tool creates a clone of the selection, linked to the selection, selects the clone, and selects the grabber tool. When you then drag the main cursor, you will see an elevation of your original selection. To unselect the grabber tool, either press space or select the "Tool > none" menu command, or click on the grabber icon (the lower left 2D window gadget).
  34. The grabber tool lets you move all the selected vertices (the edges and triangles will follow). To unselect the grabber tool, either press space or select the "Tool > none" menu command, or click on the grabber icon (the lower left 2D window gadget). Take much care in what is actually selected when you use the grabber tool (even what you don't see because of panning and zooming). There is currently no way to put things in their original location. This also applies to the extruder tool, which is a special form of the grabber.
  35. The show points or edges commands let you reduce the time necessary to update the 3D view, by rendering only the vertices or triangle edges. It is also a creative tool. See the tiger sample above. Note : on the Permedia2 chip, the points and lines are fully textured, while on the ViRGE chip, the points and lines are only Gouraud shaded.

Window gadget commands

These icons enable you to :

 

 

Keyboard commands

Sample workshops

To be written.

To do

Tech notes regarding the Amiga version

Rendering without a 3D graphics board could be done (given the relative conceptual simplicity of Warp3D), but the fill rate would be so slow with a 68K that it would seriously hurt...

Here are the optimization schemes used in sKulpt on the Amiga to reach an acceptable (from my point of view) performance level :

This both faster (on calculation side) and slower (on Intuition and clipblitting side) behavior of the PPC version is well shown when you load a big scene and move the camera around it : you are almost not slowed by calculation, but by the overhead of going to 68K, as the camera moves at the same speed as when you don't have any object ! Kudos to the Jordan and Frieden team because when you run WipeOut in windowed mode, you face the same problems but it does not feel sluggish. Wow.

DownLoad

Mailing List

Author

I am a software engineer working in a subsidiary of a large and great French IT firm, Steria.

Over all, sKulpt is one of an Amiga-fond programmer's projects, which aims at maintaining me fluent with modern programming techniques and environments on the Classic Amiga, a machine I consider superior to others, due to the expandability of all its aspects and design concepts. Do you know a machine and its OS from the mid-eighties, which can run on the Web, with RTG, 3D graphics, 16-bit sounds etc. and still provide excitement to many of us ? Apart from the Classic Amiga, I don't see. Try expanding a Macintosh 512K, an Atari 1040ST or a PC/AT etc. to reach this level of functionality.

Fond, I am of the Amiga (I own and use a 500+, a 1000, various 2000 and 2 4000s), but also of the Apple //s (a //e, a IIc, a IIgs), a Mac SE/30 (brilliant integrated machine), a NextCube, an Atari 1040 ste, and a PC (plus various other less important 8 bit machines). Hours, many (thousands since the early 80's) I spent on these keyboards, diving in system software and writing application software and system tools. Smart Motorola CPU's tend to be the heart of smart machines...

Another Amiga project of mine is AmiVNC (available on Aminet), a VNC server for the Amiga, which should get a deep rework before the end of the year (involving porting from SAS/C to StormC).

Thanks

Legalese

I hope no one will find a copyright infringement in all this stuff, as its only purpose is have fun with open source software, experiment and share, and bring life back into an ancient model of the smart software without having ripped any single of its source line.

" The author of this software can not be pursued in any case …"

" Use at your own risk …"

" Make backups … "

" Please if you propagate this software, do so using the original archives …"

" Send me back your enhancement ideas and source code …"

" Have fun …"