Skip to content
Voro
  1. Geometry
  2. Voro

Material

Authoring guide Material

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.

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.

  • 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’s roughness and metallic attributes.
  • Source holds the look and Reload compiles it. Each //@param line 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

  • uniforms row
  • albedo_image image
    RGBA
  • emission_image image
    RGBA
  • roughness_image image
    RGBA
  • normal_image image
    RGBA
  • metallic_image image
    RGBA

Outputs

  • scene scene required

Material

Source (Source) Str op('material').par.Source
Default:
"" (Empty String)
Reload (Reload) Pulse op('material').par.Reload
Default:
None
Material Preset (Materialpreset) Menu op('material').par.Materialpreset
Default:
0
Options:
Native, Toon, Glossy, comic_print, terminal, pencil_study, tv_static, broken_tv, pocket_galaxy, plasma_globe, eyeball, op_art_moire, leather, brushed_steel, terrazzo, linen, terracotta, velvet, hammered_brass, carbon_fibre, cork, crackle_celadon, oil_slick, veined_marble, beveled_tiles, molten_basalt, topo_map, crosshatch, patinated_copper, cellular_relief, snake_skin, walnut, cellular_enamel, Custom
Material Model (Model) Menu op('material').par.Model
Default:
0
Options:
Principled, Emissive
Base Color (Basecolorr) Float op('material').par.Basecolorr
Default:
0.65
Range:
0 to 1
Base Color (Basecolorg) Float op('material').par.Basecolorg
Default:
0.65
Range:
0 to 1
Base Color (Basecolorb) Float op('material').par.Basecolorb
Default:
0.65
Range:
0 to 1
Base Metalness (Metallic) Float op('material').par.Metallic
Default:
0
Range:
0 to 1
Base Diffuse Roughness (Diffuseroughness) Float op('material').par.Diffuseroughness
Default:
0
Range:
0 to 1
Specular Roughness (Roughness) Float op('material').par.Roughness
Default:
0.5
Range:
0 to 1
Specular Weight (Specular) Float op('material').par.Specular
Default:
1
Range:
0 to 2
Specular IOR (Ior) Float op('material').par.Ior
Default:
1.5
Range:
1 to 3
Specular Roughness Anisotropy (Specularanisotropy) Float op('material').par.Specularanisotropy
Default:
0
Range:
0 to 1
Specular Rotation (Specularrotation) Float op('material').par.Specularrotation
Default:
0
Range:
-3.14159 to 3.14159
Transmission Weight (Transmission) Float op('material').par.Transmission
Default:
0
Range:
0 to 1
Transmission Color (Transmissioncolorr) Float op('material').par.Transmissioncolorr
Default:
1
Range:
0 to 1
Transmission Color (Transmissioncolorg) Float op('material').par.Transmissioncolorg
Default:
1
Range:
0 to 1
Transmission Color (Transmissioncolorb) Float op('material').par.Transmissioncolorb
Default:
1
Range:
0 to 1
Transmission Depth (Transmissiondepth) Float op('material').par.Transmissiondepth
Default:
0
Range:
0 to 100
Transmission Dispersion Scale (Dispersionscale) Float op('material').par.Dispersionscale
Default:
0
Range:
0 to 1
Transmission Dispersion Abbe Number (Abbenumber) Float op('material').par.Abbenumber
Default:
20
Range:
1 to 100
Thin Walled (Thinwalled) Toggle op('material').par.Thinwalled
Default:
Off
Options:
Off, On
Opacity (Opacity) Float op('material').par.Opacity
Default:
1
Range:
0 to 1
Subsurface Weight (Subsurfaceweight) Float op('material').par.Subsurfaceweight
Default:
0
Range:
0 to 1
Subsurface Color (Subsurfacecolorr) Float op('material').par.Subsurfacecolorr
Default:
0.8
Range:
0 to 1
Subsurface Color (Subsurfacecolorg) Float op('material').par.Subsurfacecolorg
Default:
0.8
Range:
0 to 1
Subsurface Color (Subsurfacecolorb) Float op('material').par.Subsurfacecolorb
Default:
0.8
Range:
0 to 1
Subsurface Radius (Subsurfaceradius) Float op('material').par.Subsurfaceradius
Default:
1
Range:
0 to 10
Subsurface Radius Scale (Subsurfaceradiusscaler) Float op('material').par.Subsurfaceradiusscaler
Default:
1
Range:
0 to 1
Subsurface Radius Scale (Subsurfaceradiusscaleg) Float op('material').par.Subsurfaceradiusscaleg
Default:
0.5
Range:
0 to 1
Subsurface Radius Scale (Subsurfaceradiusscaleb) Float op('material').par.Subsurfaceradiusscaleb
Default:
0.25
Range:
0 to 1
Subsurface Anisotropy (Subsurfaceanisotropy) Float op('material').par.Subsurfaceanisotropy
Default:
0
Range:
-1 to 1
Coat Weight (Coatweight) Float op('material').par.Coatweight
Default:
0
Range:
0 to 1
Coat Color (Coatcolorr) Float op('material').par.Coatcolorr
Default:
1
Range:
0 to 1
Coat Color (Coatcolorg) Float op('material').par.Coatcolorg
Default:
1
Range:
0 to 1
Coat Color (Coatcolorb) Float op('material').par.Coatcolorb
Default:
1
Range:
0 to 1
Coat Roughness (Coatroughness) Float op('material').par.Coatroughness
Default:
0
Range:
0 to 1
Coat Roughness Anisotropy (Coatanisotropy) Float op('material').par.Coatanisotropy
Default:
0
Range:
0 to 1
Coat Rotation (Coatrotation) Float op('material').par.Coatrotation
Default:
0
Range:
-3.14159 to 3.14159
Coat IOR (Coatior) Float op('material').par.Coatior
Default:
1.6
Range:
1 to 3
Coat Darkening (Coatdarkening) Float op('material').par.Coatdarkening
Default:
1
Range:
0 to 1
Fuzz Weight (Fuzzweight) Float op('material').par.Fuzzweight
Default:
0
Range:
0 to 1
Fuzz Color (Fuzzcolorr) Float op('material').par.Fuzzcolorr
Default:
1
Range:
0 to 1
Fuzz Color (Fuzzcolorg) Float op('material').par.Fuzzcolorg
Default:
1
Range:
0 to 1
Fuzz Color (Fuzzcolorb) Float op('material').par.Fuzzcolorb
Default:
1
Range:
0 to 1
Fuzz Roughness (Fuzzroughness) Float op('material').par.Fuzzroughness
Default:
0.5
Range:
0 to 1
Thin Film Weight (Thinfilmweight) Float op('material').par.Thinfilmweight
Default:
0
Range:
0 to 1
Thin Film Thickness (Thinfilmthickness) Float op('material').par.Thinfilmthickness
Default:
0.5
Range:
0 to 2
Thin Film IOR (Thinfilmior) Float op('material').par.Thinfilmior
Default:
1.4
Range:
1 to 3
Emission Color (Emissioncolorr) Float op('material').par.Emissioncolorr
Default:
0
Range:
0 to 1
Emission Color (Emissioncolorg) Float op('material').par.Emissioncolorg
Default:
0
Range:
0 to 1
Emission Color (Emissioncolorb) Float op('material').par.Emissioncolorb
Default:
0
Range:
0 to 1
Emission Intensity (Emissionintensity) Float op('material').par.Emissionintensity
Default:
1
Range:
0 to 64
Color Source (Colorsource) Menu op('material').par.Colorsource
Default:
0
Options:
Uniform, Cd
Roughness Source (Roughnesssource) Menu op('material').par.Roughnesssource
Default:
0
Options:
Uniform, roughness x Uniform
Metallic Source (Metallicsource) Menu op('material').par.Metallicsource
Default:
0
Options:
Uniform, metallic x Uniform