[Soc-2011-dev] Weekly progress report #9 - Dynamic Paint

Miika Hämäläinen miika.hamalainen at kolumbus.fi
Fri Jul 22 23:50:52 CEST 2011


> 1) what you did this week
I finished last weeks optimization experiments. While doing stress 
testing on large scenes I also tracked down some old bugs.

Instead of octree I decided to use a regular grid as a space 
partitioning structure. Generating it is fast enough to not outweight 
resulting speedup on moving surfaces, when grid has to be recalculated 
every frame. Using this method I achieved up to 10x speedup on a 
non-moving 2048x2048 image sequence surface using 5 substeps. For vertex 
surfaces the speedup is usually insignificant because Blender's viewport 
performance drops earlier.

I also managed to greatly improve particle brush performance when using 
random sized particles. In that case it's not possible to just check 
closest particle but all particles within randomized range have to be 
considered. Previously speed dropped exponentially as particle count and 
radius increased. With new optimizations I tested 6x speedup when using 
20.000 particles and increase should be much higher with even more 
particles.

Here is a full commit log:
* Surface bake data is no longer recalculated every frame, but only when 
surface mesh has moved/transformed. Results in multiple times better 
performance on high resolution surfaces when using sub-steps or surface 
is still.
* Heavily optimized particle brushes when random particle size enabled. 
Up to 10x speedup with large radius particles.
* Added an additional "grid" space partitioning structure for surfaces.
* Added bounding box checks for brushes.
* Smaller overall optimization.
* Further OpenMP parallelization.
* Added physics tab link to modifier panel.
* Fix: "Point Density" texture cache wasn't properly updated. Brushes 
can now use Point Density textures as well.
* Fix: Paint dissolve resulted in black color.
* Fix: KD-tree checkups weren't completely thread safe. Fixes possible 
crash with OpenMP enabled particle brushes.
* Fix: When brush was set to use a specific material, it was saved 
incorrectly and resulted in potential crashes on next load.

> 2) what you will do next week
Next week I'm going to do smaller improvements and tweaking based to-dos 
I gathered during previous weeks.


More information about the Soc-2011-dev mailing list