Hello everyone. Last couple of days me and Morten Mikkelsen were working on extending baking from multi-resolution mesh with an ambient occlusion baking. Here I would want to briefly describe go\\how to use it, show some results and most important part would be comparison of different acceleration structures which could be used for this kind of baking.

Usage

Using of this new baker is very much straightforward. First of all mesh (or meshes) with multi-resolution modifiers need to be selected. It is important that multires modifier is the last active in the stack and that preview level is higher than 0. After this Bake Mode should be set to Ambient Occlusion and Bake from Multires should be enabled.

There’re two options which could be controlled:

  1. Number of Rays defines how many rays would be used to determine illumination of each single pixel on the texture. More rays means more accurate result, but also means longer baking time.
    Depending on particular model, 512 or even 256 rays could br enough.
  2. Bias means how much far away from face surface rays would be traced. Small bias could lead to precision issues and false intersection will happen, large bias could make it so rays will be traced from inside of mesh (i.e. if there are cavities on the mesh). Large bias could also reduce accuracy of baking by skipping ray intersections.

When all this properties are set up, baking could start. Baker will bake illumination caused by ambient occlusion from hi-resolution mesh (which corresponds to multi-resolution mesh set to highest subdivision level)  onto lo-resolution mesh which corresponds to multi-resolution mesh with preview level of subdivisions.

Please note, that main aim of this baker is low memory usage, not speed, so baking would be slower than regular ambient occlusion baking.

Another thing to be noted here is that currently multires baker is not threaded at all. There’re plans to make it threaded eventually, but it’ll take some time.

Acceleration structures comparison

There’s one option which isn’t so much visible for users and bet which wasn’t actually used a lot before. But this option is really important here — it’s called Acceleration structure, could be found in Performance panel of Render buttons. Different structures will require different amount of memory and will lead to different baking times. In the table below there’s comparison of memory peak and render time of all the structures.

It was used a Sintel’s body model from production files from Durian project. All the modifiers were disabled and multires modifier with 5 subdivisions was added, preview level was set to 1. So baking happened from subdivision level 5 (with approx. 6M faces) onto level 1 (approx 23K faces). Number of rays was bumped to maximum — 1024. Bias is 0.001.

Standard baker:

Acceleration structure Multires Peak Memory (MB) Time (sec)
SIMD SVBVH 3934.772 63.058748
SIMD QBVH 3465.827 61.056303
Octree 2787.455 374.502576
BLI BVH 3078.414 41.701314
vBVH 2940.943 107.060645

Baking from multires:

Acceleration structure Multires Peak Memory (MB) Time (sec)
SIMD SVBVH 2579.420 1062.407619
SIMD QBVH 2205.680 1094.006140
Octree 1104.496 12971.653590
BLI BVH 1912.766 3632.610446
vBVH 1783.457 2555.407953

NOTE: Standard baker was configured different from multires one: basically it didn’t use the same number of rays and used default 5 samples only. It’s not possible to configure it in the same exact way as multires baker. So just don’t compare speed of multirs vs. standard baker, timing is mostly about comparing different acceleration structures used for the same type of baking.

From this table looks like vBVH has got the best balance between memory consumption and rendering time. After switching multires baker to multi-threaded model, it’ll be really nice alternative to default AO baker. But even now it should be pretty much useful.

I would want to note here that default acceleration structure is SIMD SVBVH, which is the fastest one but currently requires lots of memory. Interesting fact that it requires lots of memory at build time and after BVH was fully built it’ll use even less memory than vBVH. Perhaps in theory it is possible to reduce memory consumption at build time, but that’s completely another story.

Bake results

Here’s original Sintel’s body model from Durian production files and AO bake result achieved with 256 rays:

Update

Few days after this post was written, multi-threading support was added to multires baker and Number of Rays was renamed to Samples to match other parts of Blender properties.