Conference Room: Results for Arnold showing Radiance Patterns

04 Jul 2014

The Conference Room is a very famous scene, originally
created for and rendered by Radiance. The room does (or at
least did) exist in reality and was painstakingly measured and
re-created in a text editor (vi). See README file and
credits in the repository, where I keep my test scenes in
various formats. Here are the (current) results for Arnold:

To render the Radiance patterns (basically 3D textures based on a
position in space and some parameters), I wrote Arnold shaders,
which are currently not publicly available, but checked in into a
shader repository.

The pinboard (visible in the third and forth picture) uses for example
two (pattern) shaders, called rad_dirt and rad_bwave and this
is how it looks like in an .ass file:

The parameters of rad_dirt are:

For rad_bwave they look like this:

Basically all patterns manipulate the color (parameter Kd_color)
of e.g. a standard shader and you can plug several patterns together
before delivering the final color to the material shader. All patterns
allow to scale and apply rotation angles (in degrees).

Each pattern works more or less the same way (except calling different
functions for the actual pattern generation). It retrieves from
Arnold's shader globals the shading point in object-space
(Po), calculates transformation matrices for the scale and
rotation, and either applies a user matrix (based on the boolean
parameter use_Pref_matrix and the existence of such a matrix
called Pref_matrix), or applies the local-to-world matrix
transform to calculate world coordinates, before using those
transformed coordinates (Pt) for further calculations.

The user matrix allows for example to texture all the chairs in
the same rest position (therefore the name Pref - see Pixar's
Primitive Variables), but instead of defining the geometry in
terms of a rest position (which can be used for deforming geometry), I
decided to use a simple user matrix, which should involve less user
data to store.

Notice in the example above how the matrices differ for both seats,
but the Pref_matrix defines the space the chair was textured in.

There exists a shader parameter called use_Pref_matrix in case
you want to use the matrix of the primitive (e.g. of a polymesh)
instead of the user matrix, which is in this case ignored.