This scene is designed to be a comprehensive test of a broad array of material properties in a single render. It is a scene built completely from scratch but intended to replicate much of the details found in the excellent “Simball” or “Material Preview”, originally authored by Thomas Anagnostou and created while testing NextLimit’s Maxwell Render. In 2019 the original scene definition was released under a Creative Commons Attribution-Share Alike (CC BY-SA) licence and can be found here:
http://rayflectar.com/p05-Misc/misc.html
This reimplementation is intended to use modern modelling and material standards — geometry is expressed using Universal Scene Description (USD), materials are defined using MaterialX, texture maps are provided in OpenEXR format and encoded using the Academy Color Encoding System ACEScg colour-space. In the opinion of the authors, this scene exercises the broadest range of material properties of any publicly available render test and the hope is that this can become an industry standard.
Once USD has been built, and is available in your PATH, the scene can be opened with the following command:
usdview –camera camera full_assets/StandardShaderBall/standard_shader_ball_scene.usda
Upon initially opening the scene it may appear over-exposed. After disabling View > Enable Scene Lights, usdview should look something like this:
In usdview, if you have a render delegate that supports UsdMaterialX, the following should result in an image similar to the screenshot below:
View > Complexity > Highest, to get nice subdivision surfaces
View > Enable Scene Lights, to get the lights back, if you’ve turned them off
Select your renderer under View > Hydra Renderer.
Note: The renders in this doc were produced from Houdini using Karma.
The scene consists of four main elements, each with well-defined dimensions:
The main object (shader_ball) with two parts:
The material surfaces comprise a modified sphere and a truncated rim at its base. These objects are designed to exercise the target material properties in specific ways.
The neutral objects, which are placed inside the sphere and rim. These are rendered with a diffuse 18% grey material. In some configurations the core sphere can be partially removed to reveal an internal light.
There are lights both external and internal to these objects that are designed to exercise various material properties.
The enclosing environment provides a standard setting for render comparisons. It is a box, with easily identifiable neutral textures on the walls, floor and ceiling.
The render camera has a specific location, orientation and field of view that when combined with the lights, enclosing environment and render test object, expose other important material properties.
Broadly speaking, this scene is designed to test two classes of materials, those that are purely reflective, and those that can also transmit light.
Reflective features:
Emitter reflection is useful for judging specular reflectivity and roughness.
Reflective caustic areas.
Triangular cutout provides flat reflective surfaces.
Light trap that causes recursive reflections.
Fresnel checkpoint (63° reflectance)
Shell thickness of 9.83mm.
Neutral core, 18% grey.
Rim thickness of 6.25mm.
Fresnel checkpoint 45° reflectance.
Transmissive features:
Reflections on both outside and inside surfaces with an air bubble in between.
Refracted internal core.
Subsurface objects.
Air bubbles.
Refractive caustic area.
Refracted environment.
Attenuation indication with varying transmission distance.
Core emission mode. ◯ ribbon emitter. ● Bulb emitter. ⦿ Both emitters active.
Neutral core, 18% grey.
Each grid is 4cm×4cm with unique numbers from 001 to 625.
As an additional aid to exercise transmissive behaviour, geometry has been placed under the surface to act as an opaque occluder. This is useful for observing the paths of refracted light, as well as the behaviour of volumetric interaction, e.g. subsurface scattering and absorption.
Subsurface features:
Subsurface bar object.
Variable material thickness above subsurface bar.
Shallow region.
The primary surfaces used for material evaluation are a modified sphere and a truncated rim around the base. Secondary diffuse surfaces are provided to receive various types of indirect illumination.
The surface_geometry VariantSet allows the above elements to be defined by either subdivision or triangulated polygon surfaces. Both variants are intended to provide equivalent geometry and dimensions.
subdiv
Quad-mesh, which is also marked as a catmullClark subdivision surface.
Care has been taken to create a UV layout that can be used both to exercise spatially varying materials (e.g. surface textures) and also provide a coordinate frame for anisotropic specular roughness.
Air bubbles are represented as inverted faces inside of the mesh.
triangulated
A tessellated version of subdiv, which has Loop-subdivision applied to produce the triangulated topology.
The UV layout should be equivalent to subdiv.
Includes authored per-vertex normals attribute to address polygonal facetting.
Comparison of the Catmull Clark surfaces and their triangular tessellations.
A UV layout has been crafted that both aligns with the sphere’s coordinate axes and attempts to minimise surface distortion.
Surface texture and anisotropic roughness applied to exercise the UV layout.
Two external emitters are present in the scene. One is to the camera-left side of the render test object with the intention to produce a specular highlight that can be examined for reflectivity and roughness, both isotropic and anisotropic. A second light is placed above the render test object with the intention of creating highlights on and casting caustics from the bevelled edges of the triangular cutout area.
In addition to the transmissive properties exercised by the external lights, the interior geometry of the primary material test objects can be illuminated. Parts of the grey inner core object can be optionally removed to reveal an interior spherical light. There are three configurations:
Ribbon emission removes a strip of the inner sphere which follows the shape of the triangular cutout,
Bulb emission removes the back facing surfaces of the inner sphere, and
Both the ribbon and bulb modes can be activated simultaneously.
A texture map on the visible front face of the inner core to indicate which illumination mode is active. By default this internal illumination is disabled.
This is particularly useful when exercising transmissive materials that contain visible interior volumetric scattering.
Internal emission features, from left to right:
No internal emission
Ribbon emission ◯
Bulb emission ●
Bulb and Ribbon emission ⦿
The render test object is enclosed by a box with a base of 100cm×100cm and height of 75cm. The ground plane, walls and ceiling have unique textures designed to allow easy identification of reflected or transmitted rays. On the ground plane is a texture with unique numbers from 001 to 625 with a grid of 4cm×4cm. The walls and top are each marked with unique letters as well as a label to indicate which wall is represented, allowing easy identification of ray paths.
USDShade is used to define the materials on the scene objects. Two render contexts are provided:
usdPreviewSurface: a basic implementation that should work in any standard USD implementation, and
MaterialX: a more sophisticated implementation that uses the MaterialX definition of Autodesk Standard Surface.
All materials except for those applied to the primary material test surfaces are intended to be Lambertian diffuse. In the Autodesk Standard Surface case, this means that roughness is set to 0, which should revert the included Oren-Nayar model to Lambertian.
The scene adopts the convention of one scene unit equals 1cm. There is layer metadata to indicate this (metersPerUnit = 0.01).
The dimensions for the geometry in this scene are derived from the original scene geometry.
Sphere: Ø7.53cm diameter, 9.83mm thickness.
Rim: Ø8.92cm diameter, 6.25mm thickness.
Floor: 100cm×100cm, tile size 4cm×4cm.
Walls: 100cm wide, 75cm high.
VariantSets provide simple switching mechanisms in the scene. All variants live on /standard_shader_ball_scene:
surface_geometry — different representations of shader_ball:
subdiv — subdivision surface with inverted faces for air bubbles.
triangulated — a triangulated version of the subdivision surface intended for rendering engines that do not support subdivision surfaces natively. Where possible the subdiv variant is preferred.
internal_emitter — illumination from inside the material surface:
off — no internal illumination, just the neutral grey.
ribbon ◯ — strip around the triangular opening for illumination.
bulb ● — the internal core is replaced with a bulb, except for the exposed face.
ribbon and bulb ⦿ — both ribbon and bulb areas are exposed.
example_material — some example materials for demonstrating different features of the scene:
none — no material is applied
mtlx_bubblegum — a material with subsurface scattering
mtlx_glass — a transmissive dielectric with a slight colour tint
mtlx_gold — a conductor with the appearance of gold
mtlx_plastic — diffuse material with a layered specular
uvgrid - simple material with the uvgrid texture
usdpreview_glass — a transmissive dielectric with a slight colour tint
usdpreview_gold — a conductor with the appearance of gold
usdpreview_plastic — diffuse plastic using the material with a layered specular
These examples not intended to represent “correct” materials. They are
included for scene configuration testing convenience. Some USD Preview
examples are also provided for render delegates without UsdMtlX support.
See media/example_materials
for renders of each material using Karma.
In usdview, variants can be set in the Meta Data tab, while /standard_material_scene is selected in the outliner.
The initial USD scene authoring was performed in Houdini. While the USD scene is sufficient to define the test environment, the original Houdini scene file is also included in the repository in order to facilitate reproducibility and future modification. The choice of Houdini is not intended to represent any software preferences on the part of the authors.
In the original material preview scene, lights were defined with radiometric units. Since there aren’t yet mechanisms in USD to define lights in this way, intensity values have been chosen to capture the intent of the original scene. Adopting physical units might be reconsidered in the future as more sophisticated lighting configuration becomes available in USD.
All of the curved surfaces in the scene geometry are now defined with crease-free subdivision surfaces when the subdiv variant is active. The original scene was constructed of densely tessellated triangles that were the result of procedural geometry operators and suffered from various inconsistencies. The authors are aware that subdivision surfaces cannot represent circular curves or spheres exactly, but the approximations here are considered adequate for material evaluation. A triangulated polygon version of the object is still provided but it is generated from the subdivision surface. The subdiv geometry should be considered the reference geometry and its use if preferred where possible.
All texture maps have been remade from scratch at higher resolutions and are encoded in ACEScg AP1 OpenEXR half textures. The original textures were published as uint8 PNGs with a gamma of 2.22.
The grey material of the render test object’s interior was originally defined to be 50% grey. We have replaced this with the VFX industry standard of 18% grey.
This implementation provides a surface UV layout that should allow the useful display of textured materials. The axes of this texture space can also serve as the principal directions of a local coordinate space when anisotropic roughnesses are being exercised.
1.0 2023-05-21 First release of USD scene packages with textures and this specification document.
Geometry and textures: Chris Rydalch
Specification and validation: André Mazzone
Original scene, inspiration and consultation: Thomas Anagnostou
For support and questions please use the issues page.
https://github.com/usd-wg/assets/issues
This work is licensed under a Creative Commons Attribution 4.0 International Licence.
#usda 1.0
(
defaultPrim = "shader_ball"
framesPerSecond = 24
metersPerUnit = 0.01
upAxis = "Y"
)
over "shader_ball"
{
def Mesh "material_surface"
{
int[] faceVertexCounts = [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, ... (truncated)]
int[] faceVertexIndices = [1, 5914, 5916, 5914, 282, 5915, 5916, 5915, 141, 5915, 5916, 5914... (truncated)]
uniform token orientation = "leftHanded"
point3f[] points = [(-2.1901538, 2.2621536, -2.1160855), (2.128851, 2.3214226, -2.23563), (2... (truncated)]
interpolation = "vertex"
)
texCoord2f[] primvars:st = [(0.43172497, 0.7641057), (0.4279997, 0.76904094), (0.43774033, 0... (truncated)]
interpolation = "faceVarying"
)
int[] primvars:st:indices = None
uniform token subdivisionScheme = "catmullClark"
}
}