-
Notifications
You must be signed in to change notification settings - Fork 254
Alembic Preview Material Specification
Current version: 4
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.
- 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. |
- We propose to have one schema with optional properties. An alternative would be to have a basic and advanced schema.
- 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.
- 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?
- 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.
- 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).
- We include displacement, but is it really needed?
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:
- GeomBaseSchema instances (and descendants)
- FaceSet
A material attached to a FaceSet shall override an already existing material on the "parent" schema instance.
- Burley 2012, "Physically-Based Shading at Disney" (s2012_pbs_disney_brdf_notes_v2.pdf)
- Unreal 4 PBR Material: https://docs.unrealengine.com/latest/INT/Engine/Rendering/Materials/PhysicallyBased/index.html
- Unreal 4 Standard Material: https://docs.unrealengine.com/latest/INT/Engine/Rendering/Materials/MaterialInputs/index.html