Skip to content

Alembic Preview Material Specification

Simon Haegler edited this page Sep 9, 2016 · 2 revisions

Current version: 4

Introduction

This document is dedicated to the specification of an Alembic "Preview Material", i.e. a set of reserved AbcMaterial properties, their semantics and the expected importer/exporter behavior (i.e. where to expect/attach the AbcMaterial instances in the alembic node tree).

The main goal is to cover the common workflow where Alembic is used as a (static) geometry asset transfer format (in contrast to its main purpose of transferring baked animations). A commonly agreed-upon material for this case allows DCC tools (Autodesk Maya, SideFX Houdini, The Foundry Katana, Esri CityEngine, ...) and preview apps (Apple OSX Finder, ...) to exchange/display nicely shaded geometry without having to rely on "glue code" or fragile heuristics to interprete/reassign the material properties.

In v2, we reduce the 4 proposed schemas down to 1 schema with mandatory and optional properties. As this is a preview material and to walk the fine line between usability and feasability in implementation, we refrain from requiring any shading models, color spaces or BRDFs. I.e. we do not want to guarantee exact same looks in different renderers.

Alembic Basic Preview Material

  • AbcMaterial Target: "abcPreview"
  • AbcMaterial Type: "surface"
  • Properties in italic shall be mandatory to write/read for exporters/importers.
  • The default values below shall approximate a white lambertian surface.
  • If a texture map property is present, its values shall override or modulate the constant value. By default, texture map paths shall be relative to their parent Alembic file. It is also legal to use URIs.
  • Per default, all maps shall connect to the main UV data. The properties ending with "UVSource" shall be used to redirect a map to a custom UV source stored in ArbGeomParams. If a mesh does not contain a required UV source, the client shall fall back to the main UV data. If the main UV data is empty as well, the texture shall be ignored.
  • Strings shall be UTF-8 encoded.
Name Type Default Description Source
version uint16 4 The version of this preview material schema.
baseColor float32[3] [1.0,1.0,1.0] The inherent color of a surface to be used as a modulator during shading. 1, 2
baseColorMap string
baseColorMapUVSource string "uv" The uv source for baseColorMap.
opacity float32 1.0 The opacity of the surface. 3
opacityMap string
opacityMapUVSource string "uv" The uv source for opacityMap.
specular float32 0.0 Specular response to incident light. 1, 2
specularMap string
specularMapUVSource string "uv" The uv source for specularMap.
metallic float32 0.0 A blend between a material behaving as a dielectric material at zero, and a metal at one. 1, 2
metallicMap string
metallicMapUVSource string "uv" The uv source for metallicMap.
roughness float32 1.0 Controls diffuse and specular response. A value of zero is smooth and shiny. At one, a diffuse material will retroreflect, and the specular highlight will be very spread out. 1, 2
roughnessMap string
roughnessMapUVSource string "uv" The uv source for roughnessMap.
emissiveColor float32[3] [0.0,0.0,0.0] A value that is to be emitted as radiance by a surface. 3
emissiveColorMap string
emissiveColorMapUVSource string "uv" The uv source for emissiveColorMap.
refraction float32 1.0
refractionMap string
refractionMapUVSource string "uv" The uv source for refractionMap.
clearcoat float32 0.0 A second, special-purpose specular lobe. 1
clearcoatMap string
clearcoatMapUVSource string "uv" The uv source for clearcoatMap.
occlusionMap string For pre-baked ambient occlusion.
occlusionMapUVSource string "uv" The uv source for occlusionMap.
normalMap string For tangent-space normal mapping.
normalMapUVSource string "uv" The uv source for normalMap.
displacementScale float32 1.0
displacementMap string Displacement along face normals.
displacementMapUVSource string "uv" The uv source for displacementMap.

Remarks

  1. We propose to have one schema with optional properties. An alternative would be to have a basic and advanced schema.
  2. We propose to exclude subsurface because it could hardly be done via a meaningful preview ubershader i.e. typically a specific shading model is applied that also takes e.g. the color beneath the surface as additional input. The same challenge applies for anisotropic specular highlights or the cloth shaders using the sheen property. For such special cases, a shader has to be defined to be useful.
  3. Clearcoat with clearcoatGloss/clearcoatRoughness: same problem as above … unclear if this property is worth to be part of the preview. If so, could the gloss/roughness parameter be discarded for typical preview use cases?
  4. Bump vs normal: both are useful and widespread but for simplicity we have to choose one. We selected normal maps because of real-time engines preferences. Due to the benefits of tangent space normal maps we would select only these. However we are not sure how wide-spread object space normal maps are.
  5. Refraction: for preview, we think only one refraction index is feasible and serves most preview use cases (and real-time engines typically do not deal with two).
  6. We include displacement, but is it really needed?

Storage Location of Alembic Preview Materials

Preview materials shall be attached directly or via MaterialAssignments. MaterialAssignments shall be used if a material instance is referenced more than once. In case of MaterialAssignments, the actual Material shall be stored at the first occasion, i.e. there shall be no explicit "materials list" in the tree.

A Preview Material shall only be attached to:

A material attached to a FaceSet shall override an already existing material on the "parent" schema instance.

Related Work

  1. Burley 2012, "Physically-Based Shading at Disney" (s2012_pbs_disney_brdf_notes_v2.pdf)
  2. Unreal 4 PBR Material: https://docs.unrealengine.com/latest/INT/Engine/Rendering/Materials/PhysicallyBased/index.html
  3. Unreal 4 Standard Material: https://docs.unrealengine.com/latest/INT/Engine/Rendering/Materials/MaterialInputs/index.html