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 typeyou can author
intint only
floatfloat or double
boolbool, or an int where non-zero means true
tokentoken or string
float3 / color3fcolor3f, 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

attributeson which primpage
crust:samplesPerPixel, crust:maxDepth, crust:pixelFilter, …the RenderSettings primRender settings
crust:rayMask, crust:motion:translategeometry: Mesh, Sphere, BasisCurvesGeometry
crust:light:cameraVisibleUsdLux lightsLights
info:id = "crust:openpbr" and its inputs:*a Shader primMaterials and textures
crust:volume:*any prim, typically a CubeVolumes

Which prim holds the render settings

Crust Render looks for the render settings on:

  1. the prim named by the stage's renderSettingsPrimPath metadata, or else
  2. /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:

  1. the command-line flag (for example --samples),
  2. the crust:* attribute on the stage,
  3. the built-in default.

A few Crust attributes have a standard or third-party equivalent. When both are authored, the crust: attribute wins:

Crust attributealso read
crust:domeLightCameraVisibilitydomeLightCameraVisibility (Hydra)
crust:light:cameraVisibleprimvars:ri:attributes:visibility:camera (RenderMan)

All attributes

attributetypeprimdefault
crust:samplesPerPixelintRenderSettings128
crust:minSamplesPerPixelintRenderSettings32
crust:varianceThresholdfloatRenderSettings0.05
crust:adaptiveNeighbourTolerancefloatRenderSettings1.0
crust:maxDepthintRenderSettings32
crust:indirectClampfloatRenderSettings10
crust:samplingStrategytokenRenderSettingspower
crust:lightSelectiontokenRenderSettingspower
crust:pixelFiltertokenRenderSettingstriangle
crust:pixelFilterRadiusfloatRenderSettingsper filter
crust:frameintRenderSettings0
crust:pathGuidingboolRenderSettingsfalse
crust:guidingTrainIterationsintRenderSettings4
crust:guidingProbfloatRenderSettings0.5
crust:subdivisionLevelintRenderSettings0
crust:domeLightCameraVisibilityboolRenderSettingstrue
crust:rayMaskintgeometry, lights7 (geometry)
crust:motion:translatefloat3Mesh, Spherenone
crust:light:cameraVisibleboollightsfalse (true for domes)
info:id = "crust:openpbr"tokenShader—
crust:volume:type and the other crust:volume:*variousany—

Edit this page on GitHub