We’ve been doing a fair bit multi-threaded testing and optimizing. In theory voxel graphics should scale nearly linearly to the number of cores. That said you never know to break out the benchmarks and prove it. The following graph shows the scaling factors for a few of the operations. The first item, PureCPU is a scaling test of just a set of float operations. The machine we used us an Amazon AWS cc2.8xlarge instance. This contains 16 cores with hyperthreading turned on. We max out at 20X faster then single threaded. Not perfect scaling but a fairly nice speed up. The erosion operation is fundamental to a bunch of voxel algorithms and it scales up to 13.6X faster. Subtraction is a boolean subtraction and it scales to 14.8X. When we implement a multi-threaded version of a an operation it get’s a MT appended to its name, such as SubtractMT. The original operation is unit tested against the multi-threaded version to make sure they give the same result.
So far we have multi-threaded versions of the morphological operations Erode and Dilate, the boolean operations of Subtract and Intersect and the core GridMaker and voxel to triangle classes. Over time we’ll migrate the rest of the operations over as we use them in projects.
We’ve also been playing around with some fun voxel space operations. The following screenshot shows a volumetric sculpting example. This object is created by intersecting a sphere with a volumetric gyroid function. The goal is to make it easy space fill objects with regular patterns. This allows you to change the looks and material properties of your items. You could make an item cheaper to print, more flexible or change how it distributes heat.
Here is another example, a solid shoe model that’s been made much more interesting and cheaper to print.