Overview
Crust Render reads standard USD schemas, plus its own settings as custom attributes in the crust: namespace.
The crust: namespace
A crust:* attribute is an ordinary USD custom attribute. Other applications ignore it,
so you can add these attributes to a stage that is also rendered elsewhere. Declare each
one with the type given in this documentation, with or without the custom keyword:
def RenderSettings "settings"
{
int crust:samplesPerPixel = 256
custom float crust:indirectClamp = 0
}
Types matter. Crust Render reads each attribute with its documented type:
| documented type | you can author |
|---|---|
int | int only |
float | float or double |
bool | bool, or an int where non-zero means true |
token | token or string |
float3 / color3f | color3f, float3, vector3f, double3, … (any 3-vector) |
float[] | float[] or double[] |
int[] | int[] only |
An attribute of the wrong type is ignored, and the default is used. The crust:openpbr
shader inputs are stricter; see Materials.
Time samples work. Like any USD attribute, a crust:* attribute can be animated with
timeSamples. It is read at the frame given by
--frame.
Where each attribute goes
| attributes | on which prim | page |
|---|---|---|
crust:samplesPerPixel, crust:maxDepth, crust:pixelFilter, … | the RenderSettings prim | Render settings |
crust:rayMask, crust:motion:translate | geometry: Mesh, Sphere, BasisCurves | Geometry |
crust:light:cameraVisible | UsdLux lights | Lights |
info:id = "crust:openpbr" and its inputs:* | a Shader prim | Materials and textures |
crust:volume:* | any prim, typically a Cube | Volumes |
Which prim holds the render settings
Crust Render looks for the render settings on:
- the prim named by the stage's
renderSettingsPrimPathmetadata, or else /Render/settings.
That prim should be a RenderSettings prim. Its standard resolution and camera
attributes are read as well:
#usda 1.0
(
renderSettingsPrimPath = "/Render/settings"
)
def Scope "Render"
{
def RenderSettings "settings"
{
rel camera = </World/cam>
int2 resolution = (1920, 1080)
int crust:samplesPerPixel = 512
}
}
Without a RenderSettings prim, every setting takes its default: 640×360,
128 samples per pixel, and so on.
Precedence
When a value is set in more than one place, the first one in this list wins:
- the command-line flag (for example
--samples), - the
crust:*attribute on the stage, - the built-in default.
A few Crust attributes have a standard or third-party equivalent. When both are authored,
the crust: attribute wins:
| Crust attribute | also read |
|---|---|
crust:domeLightCameraVisibility | domeLightCameraVisibility (Hydra) |
crust:light:cameraVisible | primvars:ri:attributes:visibility:camera (RenderMan) |
All attributes
| attribute | type | prim | default |
|---|---|---|---|
crust:samplesPerPixel | int | RenderSettings | 128 |
crust:minSamplesPerPixel | int | RenderSettings | 32 |
crust:varianceThreshold | float | RenderSettings | 0.05 |
crust:adaptiveNeighbourTolerance | float | RenderSettings | 1.0 |
crust:maxDepth | int | RenderSettings | 32 |
crust:indirectClamp | float | RenderSettings | 10 |
crust:samplingStrategy | token | RenderSettings | power |
crust:lightSelection | token | RenderSettings | power |
crust:pixelFilter | token | RenderSettings | triangle |
crust:pixelFilterRadius | float | RenderSettings | per filter |
crust:frame | int | RenderSettings | 0 |
crust:pathGuiding | bool | RenderSettings | false |
crust:guidingTrainIterations | int | RenderSettings | 4 |
crust:guidingProb | float | RenderSettings | 0.5 |
crust:subdivisionLevel | int | RenderSettings | 0 |
crust:domeLightCameraVisibility | bool | RenderSettings | true |
crust:rayMask | int | geometry, lights | 7 (geometry) |
crust:motion:translate | float3 | Mesh, Sphere | none |
crust:light:cameraVisible | bool | lights | false (true for domes) |
info:id = "crust:openpbr" | token | Shader | — |
crust:volume:type and the other crust:volume:* | various | any | — |