In a previous blog post from 25th of August 2015 we talked about the Haunted Hallway scene already and showed images rendered with Blender’s global illumination renderer Cycles. Today I would like to talk about Luxrender and Pixar’s RenderMan implementation PRMan (version 20).
Let’s start with Luxrender. On the forum I asked for help how to achieve god rays as in the Cycles renderer. I got a response and the resulting file renders like this:
Right now my own exporter does not support volumes (yet), so let’s summarize what was added to the exported .lxs file by hand.
# Camera
LookAt ...
...
Film "fleximage"
...
"integer outlierrejection_k" [ 1 ] #changed
...
VolumeIntegrator "single" # new
Accelerator "qbvh" # new
I don’t know why the outlierrejection_k value changed, but we need a VolumeIntegrator for sure.
...
WorldBegin
MakeNamedVolume "dusty air" "homogeneous" # new
"float fresnel" [1.000000000000000]
"color g" [0.00000000 0.00000000 0.00000000]
"color sigma_a" [0.00000000 0.00000000 0.00000000]
"color sigma_s" [0.00853225 0.00853225 0.00853225]
MakeNamedMaterial "dusty air" # new
"string type" ["null"]
...
The volume dusty air will be used later. You can raise or lower the color sigma_s values for the volume to get more or less scattering.
...
AttributeBegin # "dust box" # new
Transform [...]
NamedMaterial "dusty air"
Interior "dusty air"
Shape "mesh" ... "string name" ["dust box"]
AttributeEnd
...
A cube called dust box, big enough to contain all objects in the hallway, was added to the scene. Everything inside is filled with dusty air (therefore the Interior).
...
# light_bulb
AttributeBegin
Transform [...]
NamedMaterial "light_bulb"
LightGroup "light_bulb"
Exterior "dusty air" # new
AreaLightSource "area" ...
Shape "mesh" ...
AttributeEnd
...
The volume dusty air is used as an Exterior for the light bulb.
...
Exterior "dusty air" # new
WorldEnd
The volume dusty air is used as an Exterior for the camera (which is defined before WorldBegin).
What’s interesting in regard of finding good values for the light sources for other renderers is the ability of Luxrender to use light groups. While the renderer is rendering you can turn those light groups on or off to see the effect of a single light, here the light bulb, emitting red light:
Here the daylight system (sun and sky), emitting green light, which is unusual for a daylight system, but you can do that:
Actually I defined the colors while running Luxrender and stored the settings (tonemapping values and light group colors) in a file called hallway.ini:
[tonemapping]
...
[lightgroup_Sun]
...
LG_scaleRed=0.380392156862745
LG_scaleGreen=1
LG_scaleBlue=0.349019607843137
...
[lightgroup_light_bulb]
...
LG_scaleRed=1
LG_scaleGreen=0.172549019607843
LG_scaleBlue=0.101960784313725
...
You can load that file (during rendering) via File->Load Panel Settings….
Let’s have a look at the result we got from Pixar’s PRMan 20.0 renderer:
There are two Blender files for this scene in the download section (via the Cycles link). Beside the changes regarding using a volume for the god rays I replaced the sun light (using PxrEnvDayLight) by a spot light. This was mainly done for Cycles which currently can’t use a daylight system for volumetric lighting, but I kept this change for RenderMan as well. So I replaced this piece of the RIB file:
...
# Sun
Attribute "identifier" "string name" ["Sun"]
AttributeBegin
AreaLightSource "PxrEnvDayLight" "Sun"
"float intensity" [0.001]
"vector direction" [...]
"float haziness" [2.0]
"color sunTint" [0.382 1.0 0.34]
Sides 1
Opacity [1 1 1]
Bxdf "PxrLightEmission" "visibleToCamera"
Rotate 180 0 1 0 # right handed
Scale -1 1 1 # right handed
Geometry "envsphere"
AttributeEnd
...
The direction of the spot light is pretty similar (moving the light along the same vector), but the resulting bright spot on the floor is still not exactly the same (because a spot light has a position):
...
# Spot
AttributeBegin
Attribute "identifier" "string name" ["Spot"]
Transform [
-0.9844222068786621 -0.17582131922245026 -1.4901162970204496e-08 0.0
0.13712269067764282 -0.7677489519119263 0.6259064078330994 0.0
-0.11004770547151566 0.6161562204360962 0.7798981070518494 0.0
-12.677900314331055 126.31094360351562 120.90076446533203 1.0
]
AreaLightSource "PxrStdAreaLight" "Spot"
"string rman__Shape" ["spot"]
"float exposure" [22.0]
"color lightColor" [0.3819217383861542 1.0 0.3401939868927002]
"float coneAngle" [10.0]
"float penumbraAngle" [0.0]
Bxdf "PxrLightEmission" "Spot_emit"
Disk 0 0.5 360
AttributeEnd
...
Now let’s talk about the god rays and how to define a volume to create those. The volume contains the whole scene, including camera’s and lights (in this case the spot light outside the building), not just geometry:
...
WorldBegin
AttributeBegin
Identity
Bxdf "PxrVolume" "volume"
"color diffuseColor" [0.8 0.8 0.8]
"float densityFloat" [0.01]
"int multiScatter" [1]
Volume "box"
[...] # bounding box for the whole scene
[0 0 0]
AttributeEnd
...
WorldEnd
Nothing else is needed for PRMan to make the light scatter in a homogeneous volume (using a single density value).
Credits
- Challenge #8: Haunted Hallway
- Modeled by Dan Wade, concept by Gary Tonge.
- from http://www.3drender.com/challenges