Ayam Icon
Ayam

Start
News
Gallery
Features
Download
Community
Docs

News

11. Apr 2018

A new version of the Ayam 1.25 Linux 64 bit binary distribution has been released, as the original version was broken. Get the new version from the download page.
 

25. Jan 2018

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

15. Dec 2017

The Ayam CVS repository has been converted to Mercurial which is a distributed version control system. See this new section of the Ayam homepage for instructions on how to use it. You can also browse the repository through a simple web interface.
 

20. Nov 2017

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

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.

 

10. Nov 2017

As the SourceForge hosting platform terminates CVS write support effective 30. Nov 2017, the Ayam source code will be transferred to a Git Mercurial repository on 15. 25. Nov 2017.

 

21. Oct 2017

Modelling Action Improvements
 
The past months saw some considerable improvements of the modelling actions:
  • drag selection is now supported in the set mark, initial numeric edit, find u, and split curve actions,
  • inserting points into curves now allows immediate interactive placing of the new points,
  • the weight edit action now works in a more predictable way and visualizes the current weights by color (see also the image below),

Weight Visualization
 
  • the find u and split curve actions now display the breakpoints (distinct knots) of the curve as rhombuses (see also the image below),

Breakpoint Display
 
  • the breakpoints are also pickable and the picked/selected knots can be used by other tools like the refine knots tool.

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

 

29. Apr 2017

Periodic Birails Revisited
 
While periodic birails are already supported for quite some time in Ayam, their use is somewhat limited by the standard birail surface creation algorithm that does not rotate planar cross section curves to be perpendicular to either rail, even though the most probable use case of a periodic birail is an object with cylindrical topology where such behavior would indeed be desirable. The resulting surface always looks similar to a sweep with the rotate option turned off. See also the image below.

Periodic Birails (l: Parameter Curves, r: Resulting Surface)  
 
To improve this situation, the Ayam team introduces a new surface creation algorithm called DualSweep.
The DualSweep algorithm draws inspiration from the final step of the Gordon surface creation algorithm, which is a boolean combination of three partial surfaces (two skinned surfaces and a interpolating surface).
In similar fashion, the DualSweep algorithm combines two swept surfaces with an additional interpolation control surface (a new feature of the tween surface tool as of Ayam 1.25). The swept surfaces, in turn, are created with adapted cross section curves and, of course, rotation of the cross section curves to be perpendicular to the trajectory. The adaptation merely makes sure, that the respective swept surface interpolates the corresponding end of the cross section curve to fulfill a promise also kept by the birailing algorithm.
The results of this approach are impressive, as can be seen in the examples below.

DualSweep (l: Parameter Curves, r: Resulting Surface)  
 
Here is a direct comparison of the NURBS surfaces created by the birail and DualSweep variants.

Birail DualSweep Comparison  
 
The DualSweep algorithm is encoded in / available as a Ayam Script object.
 

6. Mar 2017

A new version of the Mac OS X / X11 binary distribution has been released, as the original version of the X3D import/export plugin was broken.
 

24. Jan 2017

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

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.
All done!

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  

 

 

Archive

Read the old news from:

top of page


Randolf Schultz, 12. Jan 2018
randolf.schultz@gmail.com