Ayam Icon



6. Dec 2016

The Ayam team is happy to announce the feature freeze and public beta test of Ayam 1.24.

Test binaries may be downloaded from the SourceForge File Release System.

Report bugs via forum or e-mail.

See Changes.txt for a complete list of the bug fixes and changes since the last release.

20. Mar 2016

The x3dom NURBS playground has opened.

6. Mar 2016

NURBS for x3dom
It is much easier now to publish your NURBS models on the web, as the Ayam team introduced a lightweight implementation of the <NurbsPatchSurface> and <NurbsTrimmedSurface> X3D nodes for x3dom.
The tessellator is an adaption of the simple recursive tessellator by A. J. Chung and A. J. Field. See the following example:

Trimmed NURBS display in x3dom  
In contrast to the original algorithm and example code,
  • memoization is employed to avoid re-calculating surface and curve points multiple times,
  • trim curves are sampled with greater fidelity, but linear trim segments are not refined to speed up the intersection tests,
  • partially trimmed triangles are not drawn completely and transparent (as suggested by the original authors) but instead split again at the trim intersection.
Still to do:
  • complete the NURBS support wrt. texture coordinates,
  • use the X3D tessellation quality attributes for sampling control,
  • see if the last kinks in the trim outline can also be removed,
  • enhance the splitEdge() function to consider curvature and/or trim vicinity,
  • improve the x3dom integration by e.g. proper reaction to fieldChanged()-events,
  • put the tessellator into a webworker to avoid interaction lags and employ multi core CPUs.
See the source of the above 3D scene and the source of the NURBS tessellator.

21. Feb 2016

The marsrakete scene has been exported to x3dom using a simple GLSL toon shader as material.

To facilitate export with such advanced material properties to x3dom, the X3D export of material objects now supports adding arbitrary XML data to the respective <Appearance> and <Material> nodes.

Conversion of tool objects with caps and bevels now preserves the caps and bevels as tags.

See Changes.txt for a complete list of other changes since the last release.


13. Jan 2016

Ayam 1.23 has been released. Get the new version from the download page, see also the complete list of changes.

20. Nov 2015

The Ayam team is happy to announce the feature freeze and public beta test of Ayam 1.23.

Test binaries may be downloaded from the SourceForge File Release System.

Report bugs via forum or e-mail.

See Changes.txt for a complete list of the latest changes since the last release.


9. Nov 2015

Interaction Improvements
Introducing a new interactive selection action for polymesh boundaries that eases the application of the manual polymesh gap filling / connect tool below. See the following image:

Boundary Selection (Origin)
The gap filling / connect tool requires completely selected (all points) boundaries, but how do you do this in this sea of points?

Simply start the boundary selection action and pick a single point on the boundary. See below image.

Boundary Selection (Picking)
Wrongly selected points would do no harm, one can just pick another point until the boundary is complete. The action also works for multiple selected objects, i.e. in our example actually two boundaries will be selected by a single click, see the below image.

Boundary Selection (Result)
Now the gap filling / connect tool can be started, see its result in the image below.

Polymesh Gap Filling (blue: original meshes, white: new triangles)

See Changes.txt for a complete list of the other changes in the CVS head.


3. Oct 2015

Towards Watertight Tessellation
The attentive visitor surely noticed, that the example for the RoundToNormal bevel mode below exhibits minor defects (holes) where the surface based on the extracted trim curve meets the base surface. These defects are caused by different tessellation/sampling densities at the respective edges that in turn result from the surfaces being incompatible (different number of control points and/or order) and simply adjusting the tessellation parameters will not help much.
The holes will not be visible when exporting the scene to a RenderMan renderer that samples the NURBS surfaces to pixel precision anyway. But if a flawless polygonal mesh is the goal, those holes can now be filled with a new polymesh tool that connects two mesh edges by first offsetting them in the direction of the respective surface tangents and then creating a strip of new triangles between the edges.
See the following example:

Connected Polymeshes (l: Unconnected, r: Connected)  

Get the CVS-Head for your own experiments.

16. Sep 2015

The Return of the Quads
Merely by accident1 the Ayam team lately discovered that under certain circumstances, the GLU NURBS tessellator indeed generates and sends us quads as primitives. But in previous versions Ayam immediately tore them down to triangles. Those quads can now be kept intact. We introduced a tessellation option that controls which primitives to generate (triangles or triangles and quads). There is also a third mode where neighboring triangles are combined to quads if their face normals are compatible. Whether this third mode should also generate degenerate quads is currently under consideration.
See the following example tessellations:

Tessellation Primitives (l: Triangles, m: Triangles and Quads, r: Quads)  

In the above examples the tessellated cone consists of 176 triangles [l], 152 triangles and (GLU generated) quads [m], and 108 (Ayam generated) quads [r] whereas the number of control points is constant (117). The use of quads leads to a decreased file size of about 10%.

1 a forgotten debug printf-command


29. Jul 2015

Introducing a script, cvview, that displays control point arrays in a Tk canvas as property. The current control point position is shown as tool tip and control points can be selected by clicking. Very helpful when control points lump together in 3D space or have irregular values that let OpenGL freak out. CVView works with all editable curves and parametric surfaces. See the following image:

Screenshot of CVView Property
The object search UI has been streamlined by introducing a new user interface element hat toggles display of seldom used options, see the following image:

Screenshot of Object Search Dialog
The online version of the documentation has been updated.

14. Jul 2015

All Ayam 1.22 Linux release archives have been updated for improved installation support on non-Debian distributions.

25. Jun 2015

Ayam 1.22 has been released. Get the new version from the download page, see also the complete list of changes.

6. Jun 2015

The Ayam team is happy to announce the feature freeze and public beta test of Ayam 1.22.

Test binaries may be downloaded from the SourceForge File Release System.

Report bugs via forum or e-mail.

See Changes.txt for a complete list of the latest changes in the CVS head.


30. May 2015

Here is a summary of recent changes of Ayam in the CVS head:
  • There is now an option to switch between display of rational points in homogeneous or euclidean style.
  • The STESS NURBS tessellation uses less memory and is much faster now. Furthermore, to avoid constant re-tessellation when switching interactive modelling actions, there are now two versions of the tessellation stored.
  • RIB import is now handling the handedness of the scene correctly, even if switched in the file via RiOrientation.
  • RIB import of object instances improved in terms of attribute handling, plus, for multiple surfaces there will now be an enclosing Level object to ease later creation of Instances via Automatic Instancing.
  • Custom knots of concatenated curves/surfaces now preserve the relative knot spacing of the parameter curves/surfaces.
There were also some serious bug fixes, so that the release of the next version (1.22) is scheduled for next month (June 2015). As always, if you are interested in the project: get the latest release or CVS head and report bugs.

15. Mar 2015

The Linux release archives have been updated with improved installation support (we now correctly install the libtiff.so).

7. Feb 2015

Ayam 1.21 has been released. Major improvements are
  • 64 bit Linux build,
  • caps and bevels for all NURBS objects,
  • more bevel options (3D, round-to-cap, round-to-normal),
  • extraction of trim boundaries,
  • trim support in surface concatenation,
  • higher tessellation quality at trim edges,
  • STESS tessellation is faster, more robust, uses less memory, and features a new high quality mode for planar trimmed surfaces,
  • new display mode "HiddenWire" (with silhouette detection),
  • scripting in Lua,
  • better visibility and handling of the mark,
  • direct export to x3dom,
  • the usual slew of bug fixes.
Get the new version from the download page, see also the complete list of changes.

16. Jan 2015

The Ayam team is happy to announce the feature freeze and public beta test of Ayam 1.21.

Test binaries may be downloaded from the SourceForge File Release System.

Report bugs via forum or e-mail.

See Changes.txt for a complete list of the latest changes in the CVS head.


20. Dec 2014

Here is a summary of recent changes of Ayam in the CVS head:
  • The NURBS tessellation can now generate texture coordinates from TC tags (or knot values) automatically.
  • The conversion tag management is more flexible now: not only TP (tessellation parameter) tags can be preserved, but a set of user defined tags.
  • Added a script that allows to save/restore the point selection to/from a tag.
  • Visibility of mark and direction annotation improved.
  • Added a rounding/normalization mechanism that prevents rounding errors in complex interactive modelling operations like rotating about the mark.

15. Nov 2014

In Ayam, complex objects can be constructed by connecting simple patches or patch creating tool objects (like Revolve or Skin) smoothly via their boundaries. This is easy for normal boundaries as tangents and normals can be extracted from the underlying surface. It is tricky for trim boundaries, as the surface tangents generally point into the wrong directions. Nevertheless, this time we are introducing a new bevel mode, RoundToNormal, that allows to connect surfaces via trim boundaries smoothly. See the following example:

Round to Normal Bevel on Extracted Trim Boundary  
In the example above a bevel was constructed on the extracted hole trim boundary curve, starting in the direction of the surface tangent and rounding off to the mean normal. The remote boundary of this bevel was then used as parameter curve for a skin surface. Also compare this smooth surface connection with the sharp surface connection below.

See Changes.txt for a complete list of other changes in the CVS head.


25. Oct 2014

The curve extraction facility in Ayam has been enhanced to support the extraction of trim boundaries. Even though there can not be an exact solution to this problem in the general case, just tessellating enough points on the trim boundary and then constructing an interpolating curve can yield satisfactory results, as can be seen in the following example:

Trim Boundary Extraction  
In the example above the extracted hole trim boundary curve, which is non-planar, as the trim curve is not circular, was used as parameter curve for a skin surface.

See Changes.txt for a complete list of other changes in the CVS head.


25. Sep 2014

The Extrude and Text objects have, finally, been converted to use the new offset based bevel creation algorithms. As consequence, even in the challenging case of bevelling font outlines, where Ayam 1.20 really struggles, now convincing geometry results, as can be seen in the following image:

Beveled Font Outline
For comparison, here is what Ayam 1.20 creates:

Beveled Font Outline (Ayam 1.20)
Here is a tessellation of the beveled font outline:

Tessellation of Beveled Font Outline  

See Changes.txt for a complete list of other changes in the CVS head.


27. Aug 2014

The quest for NURBS tessellation quality continues. This time we introduce a new specialized tessellation mode for planar trimmed NURBS patches in Ayam's own tessellator (STESS). This new mode views the tessellated trim curves as complex polygon with potential holes and tessellates this polygon with the GLU polygon tessellator for shaded display, see the following example image:

Specialized Polygon based Tessellation for Trimmed Planar NURBS
For comparison, here is what the normal STESS tessellation creates:

STESS Tessellation for Trimmed Planar NURBS

The results are surely already better than what Ayam 1.20 delivers, but there are still missing and extraneous patches.

See Changes.txt for a complete list of other changes in the CVS head.


18. Jul 2014

When tessellating trimmed NURBS patches with Ayam, the underlying GLU API offers two functions for the specification of trim curves, gluNurbsCurve() and gluPwlCurve(). The latter is for polygonal trims (Pwl standing for piecewise linear) that often appear as outer trim loop to limit the parameter space or generate triangular surfaces. gluPwlCurve() also has a simpler interface than gluNurbsCurve() as there is no need to specify the order or a knot vector.

The usage of gluPwlCurve(), however, has an unpleasant and undocumented side effect in tessellators that stem from the SGI GLU sample implementation: edges of the tessellated surface that are generated by / run along such polygons will often not be broken down into smaller pieces but rather appear unchanged in the tessellation.
In order to fulfill the contract wrt. surface fidelity, dictated by the respective tessellation mode and parameters, GLU therefore must generate many triangles in the form of thin spikes adjoining those edges. The coarse trim edges may even result in clearly off-surface triangles:

Poor Tessellation Caused by gluPwlCurve()
When, instead of gluPwlCurve(), gluNurbsCurve() is used for the specification of the polygonal trim, a much more pleasant tessellation results:

Good Tessellation Using gluNurbsCurve() Instead of gluPwlCurve()

Therefore, since Ayam 1.21, there is a new hidden parameter (AvoidPwlCurve) that instructs Ayam to avoid the usage of gluPwlCurve(). This parameter is enabled by default.

Users of the current release (Ayam 1.20) can enforce this by elevating the order of all polygonal trims to 3 prior to tessellation.

Depending on the actual tessellation mode, the tessellation fidelity near the trims may still leave something to be desired. This can be ameliorated by refining the trim curves for tessellation. Consequently, the tessellation GUI and TP tags have been enhanced with another parameter (RefineTrims) that controls how many times the trim curves are to be refined before being sent to GLU. See the following example of a simple planar NURBS patch trimmed by the standard NURBS circle:

Example Tessellations (left: RefineTrims 0, right: RefineTrims 2)
Note the rugged tessellation along the trim curve on the left patch whereas the trim on the right patch displays a nearly perfect circular hole. But we need much more triangles to do this, right? Wrong! The left tessellation results in 201 triangles, whereas the much nicer tessellation on the right hand side consists of 208 triangles.

See Changes.txt for a complete list of changes.


29. Jun 2014

The wire support for NURBS patches in X3D export has been enhanced to also cover trimmed patches:

X3D Export Wire Support for Trimmed NURBS  
The partially invisible wires are due to lower sampling quality of the underlying surface, to keep the file size down to a manageable 308kB. (The Ayam scene file of this object weighs a mere 1464 bytes, as the trim curves are generated by a Clone object and bevel and cap surface are also automatically generated.)
The trimmed wire geometry stems from the STESS tessellation, which has been improved greatly in terms of robustness, speed, and memory consumption in the progress.
Current work in this area is focused on improving the visibility of the wires by an adaptive offset and more tessellation configuration options.

See Changes.txt for a complete list of changes.


23. May 2014

A draft of the documentation for the upcoming Ayam 1.21 is now available.

20. May 2014

  • In the course of the retirement of SourceForge hosted apps, the Ayam Wiki was disabled altogether. You did not use it anyway.
  • The Trim object now has an option to control how the trim curves are to be scaled to the surface parameter space and works better with curve providing objects as trim curves.
  • Gordon objects automatic corner matching now also works with ACurve, ICurve, and curve providing objects (but the latter are never modified).
  • There is now a stripped down version of the notifyOb command available in Script objects. Thus, Script objects can now create and control tool objects (e.g. Sweep) more easily.
  • Based on the already working basis transformation for bicubic patches (see the new command tobasisPM), current activities are focused on improving the PatchMesh conversion to NURBS patches and therefore display of PatchMeshes with arbitrary bases.

5. Apr 2014

Here is a summary of other changes of Ayam in the CVS head:
  • Automatic instancing and recursive resolving of instances now have a scope parameter.
  • Removing complex object hierarchies with instances, and management of those hierarchies using the object clipboard works much better now.
  • The rendering GUI is more stable and can read progress data from the stderr channel (this is important for e.g. Gelato).
  • In object picking mode, the potentially picked objects can now be highlighted when the mouse pointer hovers over them, as it already works for points in the point edit modes. See the new hidden preference setting FlashObjects.
  • For illustration purposes, there is now also a plugin that exports data from the feedback buffer (i.e. OpenGL fragments) to vector based image formats (e.g. PostScript or SVG). The plugin is based on gl2ps and more useful for line drawings than shaded displays.

30. Mar 2014

Introducing a new drawing mode HiddenWire with advanced (albeit image based) silhouette detection:

HiddenWire Drawing Mode

The silhouette display works even better in anti-aliased mode:

HiddenWire Drawing Mode with AA

For comparison, here is the result of the normal wire drawing mode:

Wire Drawing Mode

Get the CVS-Head for your own experiments.


17. Mar 2014

Complementing the 3D-bevels there is now a 3D cap generation mode, that, in conjunction with round to cap bevels (see below), closes the heavily edited truncated cone smoothly:

3D Cap and Round to Cap Bevel  

23. Jul 2013

There is a new bevel mode that properly rounds to the cap surface:

Round to Cap Bevels  
The same object with slightly modified shape and simple caps:

Round to Cap Bevels and simple Caps  

See Changes.txt for a complete list of changes.


28. Jun 2013

  • Dissatisfying experiments with display lists have been cancelled, instead a second set of display/drawing parameters has been introduced that is now used for interactive actions.
  • Bevels on closed surfaces have been improved.
  • Another example for a Script object has been added: truncated cone.
  • Ayam 1.20 setup and application have been tested (and found to work ok) on ReactOS 0.3.15. Note that the MSVC 2005 runtime from the ReactOS software collection needs to be installed for Ayam (just like on XP).

    Ayam on ReactOS (click for larger version)

    Ayam on ReactOS (click for larger version)

See Changes.txt for a complete list of changes.


22. May 2013

Ayam now supports unclamping of curves and surfaces as well as extending curves to a specified point in space (adding one control point and maintaining the current shape of the curve), see this example:

Original Curve (u) and Original Curve with Extended Curve Superimposed (l)

See Changes.txt for a complete list of changes.


12. Apr 2013

Recent advances of Ayam in the CVS-Head are:
  • There is a new view action that zooms out to the whole scene, bound to the <Backspace> key.
  • Zoom to object and Zoom to all now adjust the clipping planes and lighting parameters to facilitate working with very large (coordinate values in the range of 10.000) or very tiny (coordinate values in the range of 0.00001) objects.
  • With the help of a new winding detection algorithm for 3D curves extracted from surfaces, the Bevel creation is now invariant wrt. surface winding/orientation. This means that the default bevel parameters always lead to the same bevel shape, resulting in consistent behaviour and less tweaking.
See Changes.txt for a complete list of changes.

The Ayam SourceForge project has been converted to the new SourceForge platform.


12. Mar 2013

X3D wire export has been extended to cover PolyMesh objects:

X3D Export of a PolyMesh with Wires  
In addition, X3D export gained a special export mode for x3dom, that embeds the scene to be exported into an existing XHTML template file.

25. Feb 2013

The Ayam team is currently evaluating the application of x3dom to improve the Ayam documentation and this news section with interactive 3D-views. Those 3D-views will replace existing 2D imagery that, naturally, always has a hard time to convey all the information as the author intended. The replacement will take place upon user request (as x3dom itself and the 3D assets are a bit heavy in comparison to the simple GIF/PNG data they replace). Possibly, pure 3D-versions of the documents will also be provided, or a global switch to enable all 3D-views at once; this is still undecided.
In the course of the evaluation of x3dom, the X3D export of Ayam was improved and a special mode for the export of NURBS surfaces was implemented. This mode allows to present models in the same way as in the Ayam view windows Shade-and-Draw display mode, i.e. a combined shaded and wireframe display of the surface, where the wires represent distinct knot values of the underlying NURBS representation.
Ongoing work in this area is to extend the wire-mode to PolyMesh objects and to optimize the size of the exported X3D files.

If you have a WebGL enabled browser you can try one of our first results now, by clicking on the "Toggle3D!"-button below. Note that, unfortunately, the line primitives for the aforementioned wireframe display are currently not supported by the x3dom SWF-fallback (this affects e.g. all IE users).

X3dom Example  

Here is some help on the keyboard commands and mouse bindings in x3dom.

If it did not work at all (this is not unexpected), maybe a visit to the x3dom browser check brings some enlightenment.


21. Dec 2012

New in the CVS head are C1 fillets for concatenated curves, see the following screenshot for an example and comparison with the old G1 fillets (blue curve) which continue to be available of course:

G1 vs. C1 fillets (click for larger version)
G1 vs. C1 Fillets (click for larger version)

As you can see in the lower right corner, the shading for the C1 fillets changes more smoothly to the corner (i.e. it is hard to say where the fillet actually begins), however, the corner itself has a somewhat higher curvature. As the shape of the fillet is completely controlled by the C1 condition, smoother corners could only be achieved by moving the respective end points of the concatenated curves further apart.


31. Oct 2012

Welcome back 3D-bevels:


1. Oct 2012

Some property GUI user interface elements have been redesigned (default menu buttons and parameter value changing buttons no longer use text labels, menu entries layout improved on Aqua):


30. Sep 2012

Introducing object search that allows to search for objects given criteria, like e.g. names, types, materials, property values, master-instance relationships, or return values of arbitrary commands/procedures. The found objects can just be highlighted in the object tree, or arbitrary commands can be executed on them:


28. Jun 2012

The list of frequently asked questions (FAQ) has been updated.

Recent advances in the CVS-Head:

  • There are now two new cap creation modes, simple and simple integrated. Both work with non-planar curves, but can not cope with concave input. The integrated variant is combined into the capped surface via the concat surface mechanism.
  • Also bevels can now be integrated into the respective parameter surfaces.
  • As many tool objects now get the capabilities for bevel/cap creation on all four sides, the increased number of options to control bevels and caps are placed in new property GUI sections.
  • For easier management of properties, there is now a dialog that helps in creation/removal of NP/RP tags.

24. Apr 2012

Recent advances in the CVS-Head:
There is now a plugin that supports scripting in the Lua scripting language.
Similar to the JavaScript plugin jsinterp, the new luainterp plugin defines a Tcl command to run Lua code (luaEval), wraps the Ayam scripting interface commands as functions (e.g. crtOb()) and additionally defines the functions tclvar(), tclset(), and tcleval(). Lua code can, of course, also be run in Ayam Script objects:

Lua Script Object (click for larger version)
Lua Script Object (click for larger version)

10. Apr 2012

The Ayam 1.20 Linux release archives and setup executables have been updated with a statically linked ayslx plugin (compiled with Aqsis 1.8.1).

31. Mar 2012

Here is what is planned for the next release of Ayam (1.21):
  • improvement of section placement in Sweep, Birail1, Birail2, and Clone objects for trajectory curves with multiple knots/control points (preserving sharp corners and linear sections),
  • faster NURBS display while modelling or view actions are active through employment of display lists,
  • support for degenerate surfaces for OffsetNP,
  • selection mechanism for faces and lines to improve Subdivision-NURBS modelling,
  • custom bevels for all tool objects (not just for the Bevel object),
  • improved draw/shade quality of quadrics,
  • Lua scripting language integration

28. Mar 2012

Ayam 1.20 has been released. Get the new version from the download page, see also the complete list of changes.

21. Mar 2012

Ayam 1.20 preliminary installer executables for the Linux and Win32 platforms are now available for pre-release testing purposes on request.

19. Mar 2012

A feature freeze for the next official release, Ayam 1.20, scheduled for mid to end april is in effect as of today. The version of the CVS-Head has been bumped accordingly and interested parties may download and test Ayam to find bugs before release.

2. Mar 2012

Fillets and custom knots are now available to ConcatNP in the CVS-Head. A simple experiment with two quadrics, a half torus and a cylinder, leads to this piping, the smooth transition is created automatically:

Concatenated NURBS Surfaces with Fillet (click for larger version)
Concatenated NURBS Surfaces with Fillet (click for larger version)

22. Jan 2012

Recent advances in the CVS-Head:
  • The ConcatNP object can now be configured to split selected parameter patches in V direction and also to revert the patches before concatenation:

    Consequently, it is now much easier to use other tool objects as parameter objects.

  • Also curve objects can now be mixed in the ConcatNP parameter objects freely:

    Fillets and discontinuous transitions may be constructed this way.

  • Much work is also currently put in the documentation: more figures, less historic information directly in the text, improved layout of tables etc. lead to better readability.

22. Dec 2011

News from the CVS-Head:
To comfortably manipulate the multiplicity of NURBS curve control points there are now two modelling actions that increase/decrease the multiplicity of all tagged/selected points:


11. Jun 2011

News from the CVS-Head:
A new object type IPatch for direct work with interpolating surfaces is now available:


16. May 2011

The first hotfix for Ayam 1.19 is now available for download, it fixes some problems with dynamic property GUIs (e.g. shaders).

16. Mar 2011

New release Ayam 1.19 is now available for download, see also the complete list of changes.

15. Mar 2011

The ohloh badge on the Ayam home page now displays more correct data as MF3D, libsub, BWidgets and tkwidget code was excluded from the analysis, leading to massive drop in the LOC count.

The Ayam 1.19 release is imminent. As this release will contain a major change in the way rational coordinates are represented internally (from homogeneous to euclidean), developers should immediately download and test the CVS-Head.


8. Mar 2011

News from the CVS-Head:
The ExtrNC tool object now creates normals and stores them in a PV tag that the new 3DPVN mode of the OffsetNC tool object can use, in other words, there are now true 3D offset curves from extracted curves:


20. Feb 2011

News from the CVS-Head:
  • There is a new plugin named subdiv, that, with the help of the "Subdivide2.0" library by Biermann et.al., provides subdivision capabilities (Catmull-Clark and Loop) for the SDMesh object. Creases are currently not supported, but the original library has code for them.
  • Offset surfaces now support closed/periodic surfaces in any possible combination of open/closed/periodic for the U and V dimensions. Support for degenerate surfaces (e.g. surfaces with poles) is in the works.

3. Feb 2011

The first hotfix for Ayam 1.18.2 is now available for download, it fixes a nasty problem with the Add Bevel command entries.




Read the old news from:

top of page

Randolf Schultz, 15. Nov 2014