Open Source Seamless 3D Modelling Software 2.157

2009 Sep 13, 02:12 GMT

Version Update Index

Rewritten Filing System

Rewriting the filing system is where most of my time has been spent developing 2.157 and which has made me much of a recluse both online and offline for the last few weeks. You may wonder how I have spent so much time on this. It surprised me too (not that I should ever be surprised knowing the unpredictable nature of software development) but if you want to get an idea of what was involved, just take a look at the new "file.cpp" file that was written for this version. None of the code it contains is terribly complicated and most of the functions are kept small but it's the sheer number of different scenarios and options that makes it all add up. Despite all this new source code, seamless still compiles to being less than Flash to download for the end user.

The main motivation for rewriting the filing system came from learning that the robot demos could not operate a standard Microsoft's file dialogue box on every computer. By making it so that files are opened and saved using seamless's native GUI this problem should now be bypassed.

The new file interface may not have all the frills available from a standard Microsoft dialoged box but I much prefer using it because its safer (I will explain shortly why), much faster and because it displays all the files in a list (this is how everyone else I know would prefer file dialoged boxes to default to).

Often I find I want to save a file over a file and few realize just how dangerous this is because its very easy to overwrite the wrong file by mistake and MS Windows has no recover system for this scenario like it does for deleting files.

To avoid this problem in the past I tried to make it a policy to always rename the old file first but if rushed for time I may skip this procedure which is the very time I am most likely to make a mistake.

2.157 automatically renames any file before overwriting it. This should make seamless much safer than other filing systems but always backup as much as you can especially for a new version like this that has not had lots of testing time.


Seamless's new file dialogue box should be mostly straight forward for anyone use to standard Microsoft file dialogue boxes.

To open a folder click it once.

To open a different drive type in the drive letter followed by a colon where you would normally write the file name. If for example you want to open the D drive, enter in D: and click open.

You can also still open a file from a different drive by double clicking on it from windows explorer.

To display files in order of their date, click the sortByDate field and to sort by name leave this field unchecked.

Recent Files

Whenever seamless is now launched it will display a clickable list of the 6 most recent files. You can also access this list from the F10->file->recent files menu. The previous file is no longer automatically opened when seamless is launched because of the problem that can arise from seamless being locked into launching a file that instantly causes a non recoverable crash. Although the likelihood of this has been greatly reduced over time and the remedy has always been pretty simple, most newbies will not bother to read the survival guide and so may never try seamless again. For this reason I am glad to be finally rid of this old feature. It was handy but was probably always too flawed for newbies and I prefer anyway having a list of 6 recent files to choose from.

Auto Recover

I have entirely rewritten bumpy's auto recover feature as this was getting to be quite a problem by giving false warnings all the time and because it was saving backup files all over the place that were already saved by seamless's undo feature.

Now after seamless exits unexpectedly, when launched seamless will prompt you to recover the file. If you click yes it will open the recover folder and select the very last file saved so all you should have to do is click open for it to recover the last file but you have the option of selecting a second last, third last or whatever file that was last saved to the recover folder. Seamless will not delete the files in the recover folder until you save the file you recovered or if you click no when prompted to recover. If you don't want to immediately recover the files but do not want to loose all the files in the recover folder, click the cancel button when prompted. If you want to save the file you recovered without loosing the undo files, before saving the recovered file copy all the files manually from the Recover folder to another folder using windows explorer.

Previous versions did not have any automatic feature like 2.157 has for deleting backed up files left from a crash. The undoCache folder has been replaced with the Recover folder so the old undoCache folder can be deleted which is a good idea if it contains lots of old files wasting disk space.

Launching BVH Files

If you register Seamless3d to open BVH files you can now launch BVH files from windows explorer by double clicking on them.

Mirroring hand edited polymaps

One of the great things about the Stem node is it lets you use hand edited poly-maps for specific regions for a polygon independent avatar.

Typically you only need to hand edit one half of a region and duplicate the mirrored half for the other side. For color per vertex the mirrored half can be easily created after the polygons have been curved into shape but when applying a texture map you are likely to want to do this at the "flat stage" and so if you want a non mirrored texture too, the polymap must be mirrored before the "curving stage". This is what the new Stem's mirror field is designed for. The mirror field replaces the need for a number of extra build nodes that would otherwise be needed for this task.

Converting color per vertex to texture

Because seamless's nurbs polymaps are much like a texture map in that they are made up of 2D coordinates within the space of a 1 unit square, I could see it should be possible to convert the colors in a polymap to a texture by simply taking a screen shot of the polymap. Typically however the vertices are colored after the triangles have been curved into shape. To get around this problem I added a feature that copies the colors from the curved surfaces back to the polymap source. To use this feature right click on the Stem node (which should contain a blue source part for the flat polymap) and select copy color to polymap. This should work so long as an ExitBuild is inserted before any of the vertices are transferred or joined. Another issue however arises. In the case of Lucy who has an already colored polymap for her face but where the blush is applied later in the pipeline. The problem here is varying amounts of opacity is used to apply the blush to the skin color, so if this is done more than once, the blush will be added to the blush that has already been added to the polymap.

To get around this problem I decided to add a feature that creates a texture directly (so there is no need to take a screen shot) for the polymap from the colors in the curved surface and without modifying the colors already contained in the polymap.

To use this feature click on the Stem node (which should contain a source part for the flat polymap) and select export color to texture.

The texture is saved to a 2048 by 2048 bmp file. The reason such a large image is generated is to get good anti-aliasing when using a paint program to reduce the image to the desired size. PhotoFiltre is a free non bloated program that I can recommend (originally recommended to me by Alain) for reducing and editing textures. Another free small program that seems to do a good job that I have used is Paint.NET

Import animation and automatically recalc the default pose

When importing animations and using seamless's recalc default pose feature for the imported animation, I found my self wanting to have both avatars in the same scene so that I could examine the difference between the 2 default poses. This made me realized this work and much of the other work involved for recalculating an animation could be easily performed by seamless and it would be more precise too. Adding this feature was only a day's work but an issue asserted itself that made me realize using this feature wont be a 100% non brainer to use like I had originally hoped though it does seem to come close. The problem I encountered was if a parent part has more than one child part branching directly from it (such as the pelvis), the parent part gets recalculated by the 2 child parts one after the other (the second child part messes up the first child's part's orientation). To overcome this problem I have made it so that the user can control which parts get recalculated by making it so that hidden parts do not get recalculated. So if its only the shoulders you want to recalculate, only leave the shoulders showing. TIP: you can hide the pelvis and all its descendents by right clicking on the pelvis part in the scene tree and selecting hide all, Then you can show only the parts you want by double clicking on them.


To use this feature right click on the scene node and select:
paste->children->import->Anim nodes and recalc

Importing pivot points

This simple feature lets you import pivotPoints from another avatar that have matching part names.

To use this feature right click on the Seamless node and select:

import pivotPoints

Importing pivotPoint distances

Much like the previous feature except it allows you to make a skeleton match another without changing the default orientations for any branching part.

To use this feature right click on the seamless node and select:
import pivotPoint distances

Direct writing in of rotation and translation values

When posing an avatar for a key frame, you can now directly write or paste values into a Part's rotation or translation field which allows for precise values to be entered.

Direct IP Address Option

I have added the option of being able to write the seamless server's IP address directly into the OpenNetFile's serverUrl field. This allows the user to log into a seamless server directly (without the client first fetching the IP from an online file). This should make logging in faster but has the disadvantage of not allowing the client to be switched to another server by the operator who controls the site the serverUrl field addresses. When writing in a direct IP address to the serverUrl field, it should not be preceded by http:// (it should be nothing else but the IP address) otherwise the client will attempt to load the IP address indirectly (the default way).

I have also made it so that the seamless server can now be launched without an argument (without specifying an online PHP file url). When launched this way the seamless server wont write to an online PHP file to notify clients of its IP address.

Being able to specify IP addresses directly also will make things easier for a beginner to set up a server and test things out.

Changes made to the freeCPU feature

This feature was added sometime ago and I have never needed it myself but if you find seamless seems to freeze you mouse and or keyboard you may need to set it to a value greater than zero.

The freeCPU field simply specifies how many milliseconds the CPU is forced to sleep for each frame which allows for the mouse and keyboard some processing time (at least this is the theory)

In previous versions I found that when I set the freeCPU field to a value greater than zero it could make animation horribly jerky whenever I moved the mouse and would cause timing issues for the robot demos.

I have now made it so the freeCPU field no longer causes these problems but since i don't get the problem it's designed to cure I need feedback from others to verify that it still offers beneficial effects.

Poly model Avatar Demo Replaces the Immediate Avatar Demo

If you want to run the poly model demo you must first download a file it needs, see the tutorial for instructions.

The poly-model demo is not complete yet so it will be announced fully for a later version. I am excited about it because it will be shorter and more inspiring to watch however at the same time I feel sad to announce the end of the immediate avatar demo/tutorial because it took one third of a year to create and the work was both intensive and stressful. It took much longer than I had expected and because of all the time consuming challenges that appeared I contemplated abandoning the project in favor of remaining focused only on writing build node tutorials (seamless has been primarily designed for build nodes) but I did not want to loose all the time already invested in the project so I carried on to the bitter sweet end. Perhaps the saddest thing about the demo was it took 3 hours and 20 minutes for the robot to complete which I fear did little to inspire anyone to make their own avatar. However it proved seamless is very stable modelling software when used correctly and no awkward procedure was skipped to make things easier to explain than they really are. Also I don't think this time is long if you are realistic about the time it takes to make art, compare this to drawing an avatar using a pencil. A big advantage of using 3D vector graphics is you don't have to create the avatar from scratch each time you want to make a variation. It's also wrong to only focus on the time it takes because you have to do it for the love of it which is how it has to be when making any kind of art. I want to take this opportunity to thank Matthieu for translating the immediate tutorial back in 2007. I feel sorry the tutorial did not last longer but it did last more than 2 years which is not bad. It would have felt more worthwhile to have heard someone actually used it but how many people do you know who actually make their own avatars from scratch? Most think it's too much work and will settle for using commercial software that does not really let you be the artist but I believe its only a matter of time before many will learn making genuine 3D art is very rewarding like making art always has been since rocks were used.

Robot Demo no longer interrupted by a Microsoft Timer

Now that seamless is no longer dependent on Microsoft's file dialogue boxes I have been able to make it so that the robot demos no longer need to be constantly interrupted by a Microsoft Timer. Though I never noticed any problems from these interrupts, it does simplify things for seamless internally which can only be good.

Zero/Blaxxun height Floor Option

In the past the floor was always set to the default blaxxun height of -1.75 meters but now when the user adds a floor they are prompted to select either a zero height floor or a blaxxun height floor.

Bug fixes

Euler angles (yaw, pitch, and roll) order corrected

I discovered seamless was exporting BVH with the Euler angles in the wrong order. This was not noticeable for the animation I tested before announcing the feature back in June but after using it more it became obvious and so now it's corrected.

BVH Import/Export timing sorted out

I found seamless was not exporting the last frame and it was not taking the timing of the last frame into account.

The following simple BVH example verifies seamless exports and imports back correctly:

ROOT partA
    OFFSET 0 0 0
    JOINT partB
        OFFSET 0 10 0
        CHANNELS 3 Yrotation Zrotation Xrotation
        End Site
            OFFSET 0 10 0
Frames: 5
Frame Time: .2
0 0 0
0 0 -90
-90 0 -90
180 -45 180
0 0 0

In this example each frame has a timing period of .2 seconds. Because there are 5 frames the duration of the "movie" will add up to one second.

When imported into seamless however the duration (period) will be one frame less which adds up to .8 seconds rather than 1 second, because same as for vrml, the last pose has no time after it. This is where movies differ a little in concept to real time animation. For movies we think in terms of every frame lasting a period of time (including the last frame) but for real time animation the last pose has no concept of how long it lasts for, it is the end point in time. When exported back to bvh the Frame Time will be set to .2 and the sequence of frames will add up back to 1 second.

Not that the human eye will be able to detect the difference but many of the exported Euler angles will be very close aproximations, not the exact original values. This is due to the conversion to "Rotation Axis" types and back to Euler again. I am considering adding native Euler support. This will not only allow BVH to be able to be imported and expoted without degredation, orienation data will be more compact.

I have fixed a bug for the following scenario: Stem with a TextureMapper, a source part and the add field ticked.

In seamless chat the viewpoint no longer resets for everyone else in the world each time a visitor enters the world.


I have fixed a bug that prevented visual clue for the HarmonicPatch from being displayed in the 3d window corectly.



Vec3f Quaternion::eulerYZX(); adpated from:

Many thanks to Dajamma for the many tests she ran that helped me get the new version to work for Windows 7

Thanks much to nontiti for his tests on a Japanese computer and helping me be a little more aware of the issues facing computers that use characters greater than 8 bits in size for files and folders. Thanks too to nontiti for looking at my preview of the poly model demo and for his positive words.

Thanks much to Laz for his feedback which resulted in me filling in some missing bits of code needed for the Anim bar to capture values when manually entered into the rotation & translation fields.

Thanks much to Alain for his email replies that gave me moral support in the dark midst's of development. It has taken 6 weeks to develop this version with little time to spare for the garden or make art.


Few can comprehend how much work has gone into developing seamless and the challenges it has addressed.

AntiVir Harmony for 2.158

2009 Sep 14, 18:02 GMT

Avira AntiVir was giving false alarms for the non TTS version of 2.157
I found the TTS version did not have this problem because it was not using the ShellExecute function to launch the default browser and notepad.
2.158 uses CreateProcess instead of using ShellExecute and so false alarms from AntiVir have been bypassed. Using CreateProcess also has the advantage of not freezing Seamless for the time it takes to launch the external application. However CreateProcess is a lower level function, it does not open your default browser but you can specify your browser of choice in the htmlBrowser field. The full path must be included. If for example you want Seamless to launch Firefox and your Program Files folder is located in the C drive, paste the following into the htmlBrowser field:

C:\Program Files\Mozilla Firefox\firefox.exe

If the htmlBrowser field is left empty Seamless will launch Internet Explorer.

Transition Fix & Enter Key to Open/Save for 2.159

2009 Sep 15, 23:43 GMT

2.159 has an important bug fix. It addresses the issue that arises if a version prior to 2.157 last saved a filename in the seamless3dSetup.wrl (the settings file) that did not include the drive and path. When upgrading to 2.157 with this scenario the file dialogue box was unable to function. This could be remedied by launching Seamless by double clicking a file in Windows Explorer but 2.159 can deal with this issue without causing any confusion. Many thanks to fabricator for his feedback that alerted me to this problem.

When using the file dialogue box, the Enter key can now be used instead of clicking the open/save button.

The filename field is now active soon as the file dialogue box is opened. This is to help the user know where to type in the filename (the flashing cursor(caret) will clue the user) and so that the user can immediately type into the filename field without clicking it first.

9 New File Features for 2.160:

2009 Sep 22, 09:01 GMT

Other changes:
Folders are now opened using double click instead of single click.
A number of bugs fixed.

Thanks to steveTheGong, Ep and Alain for their feedback that influenced this version.


[3d Modelling Software] [Tutorials] [Forum] [Features] [Download] [Gallery] [FAQ] [Worlds] [Avatars] [Links] [Thyme]