mirror of
git://projects.qi-hardware.com/wernermisc.git
synced 2024-12-24 21:45:31 +02:00
157 lines
4.6 KiB
Plaintext
157 lines
4.6 KiB
Plaintext
Comparison of Free scripted 3D CAD systems, part 2
|
|
==================================================
|
|
|
|
Werner Almesberger <werner@almesberger.net>
|
|
|
|
This is the continuation of my evaluation of scripted 3D CAD systems.
|
|
It shows new findings and improvements since the last test.
|
|
|
|
|
|
Introduction
|
|
============
|
|
|
|
This file and the sources of the models can be found in
|
|
http://projects.qi-hardware.com/index.php/p/wernermisc/source/tree/master/cad/test2/
|
|
|
|
|
|
New findings and hypotheses
|
|
===========================
|
|
|
|
The first test revealed several problems in both OpenSCAD and
|
|
Cadmium. It turned out that most of them could be resolved by making
|
|
small changes to the models.
|
|
|
|
|
|
The road to hell is paved with good intentions
|
|
----------------------------------------------
|
|
|
|
The original model tried to prevent the creation of artefacts through
|
|
rounding errors. It turned out that this isn't only unnecessary with
|
|
Cadmium, but it massively slows down the rendering.
|
|
|
|
Also, after removing these preventions the bug the "noise" parameter
|
|
worked around no longer appeared.
|
|
|
|
This is a comparison of run time (in seconds) and mesh size:
|
|
|
|
real user system faces vertices
|
|
Before: 4901.0 4904.4 1.5 8362 3183
|
|
After: 316.3 315.9 0.3 2942 1473
|
|
|
|
This makes Cadmium only about 4-5 times slower than OpenSCAD's CGAL
|
|
rendering, a marked improvement from the previous factor of 57. The
|
|
resulting mesh is now less than half the size of the mesh generated
|
|
by OpenSCAD.
|
|
|
|
Furthermore, the model is much easier to design and more
|
|
understandable without these extra tolerances.
|
|
|
|
|
|
Background: preventing artefacts
|
|
--------------------------------
|
|
|
|
When subtracting volumes from each other, surfaces that coincide in
|
|
both the original volume and the one subtracted from it can remain
|
|
as arbitrarily thin artefacts.
|
|
|
|
This 2D example illustrates the effect:
|
|
|
|
- given an original shape like this
|
|
|
|
+---------------+
|
|
| |
|
|
| |
|
|
| |
|
|
| |
|
|
| |
|
|
+---------------+
|
|
|
|
- we want to subtract the following shape from it:
|
|
|
|
+--------+
|
|
| |
|
|
+--------+
|
|
|
|
- expecting this to result in something like
|
|
|
|
+---------------+
|
|
| |
|
|
| +--------+
|
|
| |
|
|
| +--------+
|
|
| |
|
|
+---------------+
|
|
|
|
- however, if the subtraction isn't perfectly exact, we may get this
|
|
instead:
|
|
|
|
+---------------+
|
|
| |
|
|
| +--------+
|
|
| | |<--- very thin surface
|
|
| +---^----+
|
|
| | |
|
|
+----------|----+
|
|
|
|
|
empty space
|
|
|
|
- to avoid this problem, we could enlarge the shape that is
|
|
subtracted:
|
|
|
|
+---------+
|
|
| |
|
|
+---------+
|
|
|
|
|
|
Artefacts in OpenSCAD's mesh were rounding errors
|
|
-------------------------------------------------
|
|
|
|
The artefacts found in the mesh produced by OpenSCAD were also caused
|
|
by rounding errors. In this case, the problem were parts that were
|
|
fused along a common surface. As in the above example, this could be
|
|
solved by making the parts overlap a little.
|
|
|
|
This change affected the rendering performance as follows:
|
|
|
|
real user system faces vertices
|
|
Before: 85.5 85.0 0.4 7798 3351
|
|
After: 68.8 65.4 0.5 6508 3258
|
|
|
|
The resulting mesh looks as good as the one generated by Cadmium.
|
|
|
|
|
|
OpenCSG problems may be an OpenGL compatibility issue
|
|
-----------------------------------------------------
|
|
|
|
It could be that OpenCSG showing volumes to be removed just with a
|
|
different color without actually removing them is caused by using
|
|
OpenGL emulation in Mesa. This needs further investigation.
|
|
|
|
|
|
Conclusion
|
|
==========
|
|
|
|
The model used in the first test contained constructs that were meant
|
|
to help avoid ambiguous situations. It turned out that Cadmium did
|
|
not need this "help" and removing the constructs substantially
|
|
increased the rendering speed.
|
|
|
|
OpenSCAD is the exact opposite: it produces clearly visible
|
|
artefacts in ambiguous cases and rendering speed also benefits from
|
|
manual resolution of these issues. The cost of doing so is an
|
|
increase of the complexity of the model.
|
|
|
|
Performance after the model changes (times are in seconds):
|
|
|
|
real user system faces vertices
|
|
OpenSCAD: 68.8 65.4 0.5 6508 3258
|
|
Cadmium: 316.3 315.9 0.3 2942 1473
|
|
|
|
The sources of the models used are in
|
|
http://projects.qi-hardware.com/index.php/p/wernermisc/source/tree/master/cad/test2/
|
|
|
|
The meshes can be downloaded from
|
|
http://downloads.qi-hardware.com/people/werner/cad/test2/
|
|
|
|
---------------------------------------------------------------------
|