CPU vs Memory

Krakatoa relies heavily on particle-on-particle interactions that simulate the volumetric attenuation of light. You can think of it as solving for the number of particles that a light ray intersects between a particle and the camera/light in addition to the distance. If we split the particles into Z-based layers, almost all of the self-shadowing would be destroyed in the general case.



In this case it would be more fruitful to split the particles into buckets similar to a ray-trace renderer. There are complications to this however, because particles do not completely fall onto a single pixel for most filtering modes. This means that there is a certain amount of overlap between buckets. If you throw DOF into the mix, it further complicates things.



That being said, this is not an impossible task it just is not the “low hanging fruit” of multi-threading efforts.