Voxel rendering Multi-Threading supported?

Hi,all
When I used Krakatoa 1.5 to direct rendering some FumeFx Smoke( with Voxel Rendering Mode),
the windows task manger show me the CPU usage is about 13%(RenderNode is a 8 core machine) that means only one cpu full working.

Did Krakatoa support Multi-Threading when rending with Voxel Rendering Mode?

Thanks for any help

Hi,

Yes, in general Voxel Rendering should use a lot more than 13% - I have an 8 core machine too and when not using FumeFX (for example when using PRT Volume or PRT Loader), I get between 65 and 75%.
There are certain steps in the process that are multi-threaded and some that are not, so you cannot expect 100%, but it shouldn’t be 1 core only.

That being said, I will have to look at my Task Manager when voxel-rendering FumeFX directly - there might be something in the FumeFX data access that is affecting the threading.

Particle rendering on the other hand is single-threaded - only the loading of PRT files is somewhat multi-treaded (two threads) and sorting it fully multi-threaded, but the drawing isn’t.

Ok, I tested it on the office machine using the Fume example seen in the documentation.

  1. FumeFX itself is single-threaded, so the first part of “Getting Particles” is at 13% CPU. This is where Krakatoa asks FumeFX to provide the voxel data to be turned into particles.
  2. Then the second part of “Getting Particles” loads the data from FumeFX into memory while applying any materials/shaders/KCMs to populate the respective channels. I was testing with the Temperature as Gradient example, so I had a gradient ramp mapped to particles via the Temperature channel turned into UVs by a global KCM. In this phase, I had CPU load between 35 and 45%, mostly around 40%.
  3. The voxel shading phase depends on several things but FumeFX is not in the play anymore - all particles are already in memory. So the important factors are voxel size, output image resolution and Filter Radius. Filter Radius kills the multi-threading significantly. The higher the output resolution, the better the cores are loaded:
    *Using Voxel Size of 0.5, Filter Radius of 1 and Resolution of 640x480, I got a load of about 25% (2 cores).
    *Increasing the Filter Radius to 2 lowered the load to about 16-17%, at Radius of 3 I was down to 14-15%.
    *Keeping the Voxel Size at 0.5 and Filter Radius at 1, I increased the Resolution (using the Double feature of the Iterative option) to 1280x960. CPU load was between 40 and 50%.
    *Increasing the Voxel Size to 1.0 reduced the CPU load to around 30-40%.
    *Increasing the Voxel Size to 10.0 brought it down to 20-25%.
    *Then I increased the resolution again to 2560x1920 while reducing the Voxel Size to 0.5 and keeping Filter Radius at 1. The CPU load jumped to 70-80%.
    As you can see, the multi-threading performance is highly dependent on your settings.

Hi , Bobo
Thanks for reply
Very usefully info & explanation, I thought I can handle it now :slight_smile:

I hava a other question about save(Export) particles.
I did a other test using FumeFX , in that test I remove the Smoke Channle and only Fule(Fire) has been simulated.
Now,the problem is , when I pressed [Save Particle] button , Krakatoa give me a error message like this
“get_fume_fx_particle_istream()-The file “xxx.fxd” did not have the requisite smoke channel”
I tried remove [Density Channle] from Krakatoa’ Channle rollout , but it still no working.

So ,I did other simulation , this time included smoke(very very small value,about 0.01) and fire both , and problem solved…

Does this mean , if save particle from FumeFX directly , it must included a smoke data ?

This is correct, you need the smoke channel to be present for Krakatoa to be able to access voxel data from FumeFX.

I saw your comments in other topic(viewtopic.php?f=22&t=3303)
It seem FumeFX’s SDK limition
Thanks for help :slight_smile: