These images, while pretty, are extremely inefficient due to the how the cloud 'particles' are placed and rendered (taking on the scale of 1hr on an a brand new Nvidia Tesla 32gb).
The code goes through a 3d array (shape = (128,1024,1024), each point represents a $(25m)^3$ block) and places a primitive box at that location.
bpy.ops.mesh.primitive_cube_add(radius=8*0.999/1024); orig_cube = bpy.context.active_object; mat = bpy.data.materials.get('CloudMatv0.1') orig_cube.data.materials.append(mat) orig_cube.name = 'Cloud Particle' bpy.ops.mesh.primitive_plane_add() o = bpy.context.active_object me = o.data bm = bmesh.new() for particle in cloudarray: bm.verts.new().co = [particle, particle, particle] bm.to_mesh(me); o.dupli_type = 'VERTS'; orig_cube.parent = o;
The material utilizes the light attenuation equation to estimate light absorption (overall not terribly inefficient), and a volume scatter node (very time consuming). Materials and camera are all built to work in cycles. As each of these particles is essentially a clone of the base block, the shape and visual effect that I am looking for is present, however it takes too long.
I need to maintain the cube shapes with volumetric rendering to be as realistic as possible. The most time consuming part of the render is 'building object flags', which I believe to the a direct result of the way the fields are set up, with many particles leading to a parent block.
Things I have Tried
- Limiting cloud particle placement by the azimuthal angle to reflect the camera's FOV (80$\deg$)
- Reducing light path sampling
- Placing blocks/ merging them for each cloud/ removing inside vertices and faces
- More efficient volume materials (or engine)
- Point Cloud Skinner (haven't had luck with this)
- Writing python script to manually build surface of mesh from point cloud (worst case scenario)