- Geometry
- Voro
Material
Purpose
Section titled “Purpose”Material sets how an object’s surface responds to light. Every Material has native parameters: base colour and metalness, specular roughness, transmission, subsurface, coat, fuzz, thin film and emission. A Material can also carry an authored look, a short GLSL program whose look() function answers light. Realtime Trace and Path Trace draw authored looks in a normal install.
Place Material in the Geometry view of the Voro menu. Link it on a Geometry node’s Look page with the Material parameter. Any number of objects can share one Material. The Look page holds up to 16 material rows, and a point attribute you name there picks the row for each point.
Material Preset is the fastest start:
- Native draws with the native parameters alone and no look.
- Toon draws light in flat bands with a coloured rim.
- Glossy is a diffuse base with a sharp highlight, set by its roughness, colour and gain controls.
- Below Glossy come looks such as Leather, Brushed Steel, Comic Print and Pocket Galaxy. These ship with Voro as examples and may change between versions. Choosing one also sets the base colour, roughness, specular weight and metalness it was drawn with.
- Custom is your own source.
A preset is a starting point, not a separate kind of material. Change any parameter or edit the look after you choose it.
Your own looks can join the menu. Save one as voro_custom/materials/<name>.glsl in the Voro home folder, Documents/Voro, or beside your project. It appears above Custom the next time the menu refreshes, for example when you place a Material or press Reload. A project’s file beats the home folder’s file of the same name, and either beats a shipped example of that name.
The Material’s own viewer shows a preview on a sphere, rendered by Realtime Trace unless you choose otherwise on the Preview page. It renders only while the viewer is on screen.
Inputs and outputs
Section titled “Inputs and outputs”Five optional image inputs carry maps for albedo, emission, roughness, normal and metalness. Each map multiplies its parameter and never replaces it. An albedo map multiplies Base Color, so a white map with Base Color at 1 changes nothing. Maps read the object’s uv. Connect linear images and convert an sRGB texture before it goes in. A disconnected map does nothing, while a connected black map is real black.
The uniforms input carries values for the look’s controls. The scene output carries the Material to the Geometry nodes that link it. You link it through Geometry’s Material parameter, not a wire.
Controls
Section titled “Controls”- Material Model is Principled or Emissive. Emissive is a pure emitter: Emission Color times Emission Intensity, plus the emission map. Color Source does not change its brightness, and zero emission stays black.
- Color Source takes the base colour from the parameter or from the mesh’s
Cd, which replaces it. Roughness Source and Metallic Source multiply those parameters by the mesh’sroughnessandmetallicattributes. - Source holds the look and Reload compiles it. Each
//@paramline in the source becomes a live control on the Material page, up to 24 floats in total, where a colour uses three. Turning a control, exporting a CHOP to it or driving it with an expression changes the value without recompiling.
An object with no Material draws with the native defaults: grey 0.65, Specular Roughness 0.5, metalness 0 and IOR 1.5. A new Material starts from the same values.
look() answers light that arrives straight from a light. Light the surface bounces onto the rest of the scene, and indirect light it reflects, follow the native parameters instead. Set Base Color and roughness close to what the look draws so the bounce light matches. The shipped examples do this for you.
A look’s brightness matches the native material. The default look at Gain 1 reads the same as a native Material with the same Base Color, under any light.
An optional emit() adds its value to the lit look, so the surface keeps its lit side and its shadow side. A source with emit() and no look() is a pure emitter and ends the ray there.
Surface Renderer does not run authored looks. It draws those objects with its neutral grey material and names the Material in a warning.
The look language, the fields a look can read and its helper functions are in the Lab’s renderer guide, lab/AUTHORING_GUIDE/MATERIALS_AND_RENDERERS.md in the Voro package. Material authoring walks through a first look.
Inputs
-
uniformsrow -
albedo_imageimage -
emission_imageimage -
roughness_imageimage -
normal_imageimage -
metallic_imageimage
Outputs
-
scenescene required
Parameters
Section titled “Parameters”Material
op('material').par.Source - Default:
"" (Empty String)
op('material').par.Reload - Default:
None
op('material').par.Basecolorr - Default:
0.65- Range:
- 0 to 1
op('material').par.Basecolorg - Default:
0.65- Range:
- 0 to 1
op('material').par.Basecolorb - Default:
0.65- Range:
- 0 to 1
op('material').par.Metallic - Default:
0- Range:
- 0 to 1
op('material').par.Diffuseroughness - Default:
0- Range:
- 0 to 1
op('material').par.Roughness - Default:
0.5- Range:
- 0 to 1
op('material').par.Specular - Default:
1- Range:
- 0 to 2
op('material').par.Ior - Default:
1.5- Range:
- 1 to 3
op('material').par.Specularanisotropy - Default:
0- Range:
- 0 to 1
op('material').par.Specularrotation - Default:
0- Range:
- -3.14159 to 3.14159
op('material').par.Transmission - Default:
0- Range:
- 0 to 1
op('material').par.Transmissioncolorr - Default:
1- Range:
- 0 to 1
op('material').par.Transmissioncolorg - Default:
1- Range:
- 0 to 1
op('material').par.Transmissioncolorb - Default:
1- Range:
- 0 to 1
op('material').par.Transmissiondepth - Default:
0- Range:
- 0 to 100
op('material').par.Dispersionscale - Default:
0- Range:
- 0 to 1
op('material').par.Abbenumber - Default:
20- Range:
- 1 to 100
op('material').par.Thinwalled - Default:
Off- Options:
- Off, On
op('material').par.Opacity - Default:
1- Range:
- 0 to 1
op('material').par.Subsurfaceweight - Default:
0- Range:
- 0 to 1
op('material').par.Subsurfacecolorr - Default:
0.8- Range:
- 0 to 1
op('material').par.Subsurfacecolorg - Default:
0.8- Range:
- 0 to 1
op('material').par.Subsurfacecolorb - Default:
0.8- Range:
- 0 to 1
op('material').par.Subsurfaceradius - Default:
1- Range:
- 0 to 10
op('material').par.Subsurfaceradiusscaler - Default:
1- Range:
- 0 to 1
op('material').par.Subsurfaceradiusscaleg - Default:
0.5- Range:
- 0 to 1
op('material').par.Subsurfaceradiusscaleb - Default:
0.25- Range:
- 0 to 1
op('material').par.Subsurfaceanisotropy - Default:
0- Range:
- -1 to 1
op('material').par.Coatweight - Default:
0- Range:
- 0 to 1
op('material').par.Coatcolorr - Default:
1- Range:
- 0 to 1
op('material').par.Coatcolorg - Default:
1- Range:
- 0 to 1
op('material').par.Coatcolorb - Default:
1- Range:
- 0 to 1
op('material').par.Coatroughness - Default:
0- Range:
- 0 to 1
op('material').par.Coatanisotropy - Default:
0- Range:
- 0 to 1
op('material').par.Coatrotation - Default:
0- Range:
- -3.14159 to 3.14159
op('material').par.Coatior - Default:
1.6- Range:
- 1 to 3
op('material').par.Coatdarkening - Default:
1- Range:
- 0 to 1
op('material').par.Fuzzweight - Default:
0- Range:
- 0 to 1
op('material').par.Fuzzcolorr - Default:
1- Range:
- 0 to 1
op('material').par.Fuzzcolorg - Default:
1- Range:
- 0 to 1
op('material').par.Fuzzcolorb - Default:
1- Range:
- 0 to 1
op('material').par.Fuzzroughness - Default:
0.5- Range:
- 0 to 1
op('material').par.Thinfilmweight - Default:
0- Range:
- 0 to 1
op('material').par.Thinfilmthickness - Default:
0.5- Range:
- 0 to 2
op('material').par.Thinfilmior - Default:
1.4- Range:
- 1 to 3
op('material').par.Emissioncolorr - Default:
0- Range:
- 0 to 1
op('material').par.Emissioncolorg - Default:
0- Range:
- 0 to 1
op('material').par.Emissioncolorb - Default:
0- Range:
- 0 to 1
op('material').par.Emissionintensity - Default:
1- Range:
- 0 to 64