Material models
A material connects geometry to shader programs and their inputs. A definition, an instance value and a shader register need not identify the same thing. Each row links to the page that states it, with its confidence.
| Engine / game | Definition and instance | Binding | Detail |
|---|---|---|---|
| FromSoftware / Sekiro | MTD declares shader, typed parameters and textures; FLVER supplies definition references and texture overrides | Static switches select compiled programs; texture kind names and shader-data indices are separate from program registers | MTD, FLVER bindings |
| FromSoftware / Elden Ring | MATBIN stores shader/source paths, parameters and samplers behind a FLVER .matxml reference |
METAPARAM supplies constant offsets, colour flags and UV groups; system textures can fill otherwise unbound slots | MATBIN, METAPARAM, FLVER bindings |
| Anvil / Riders Republic | Material references a MaterialTemplate and a 19-entry TextureSet and overrides typed properties | Template operators supply selectors and defaults; shader texture register and TextureSet slot differ. Complete runtime fallback order is not established | Material and TextureSet |
| RAGE / GTA V Enhanced | Drawable shader groups own effect-hash shader records, typed parameters, buckets and optional embedded textures | Parameter-info words distinguish textures, other references, samplers and buffer data; compiled programs and states live in SGD2 | Enhanced parameters, SGD2 |
| Frostbite / skate. | MeshSet section material keys resolve in loaded ShaderBlockDepots; depots contain parameters rather than executable shaders | Texture values reference TextureAsset instance and EBX file GUIDs. Loaded cell-bundle membership registers a depot without an explicit EBX reference | ShaderBlockDepots |
| ForzaTech / FH6 | Model MatI instances inherit through .materialbin parents to .shaderbin defaults |
Nearest parameter definition wins. Per-family maps connect parameter hashes to buffer offsets, texture slots and samplers | Material inheritance, shader maps |
| Unity / documented players | Material objects reference Shader objects and store named textures, scales, offsets, floats and colours | Keywords and the supported subshader/pass determine programs; pass state and material properties control blending and culling | Materials, draw keywords |
| Insomniac / Sunset Overdrive | Model material entries store .material path and name offsets |
The submesh material-index interpretation follows ALERT and remains inferred in the model layout | Model materials |
| SEGA Ninja / SA2B | Ginja mesh parameters express GX state, persisting between meshes and from opaque into translucent lists | VertexDiffuse selects vertex colour versus the DiffuseColor register; texture tile words select per-axis wrapping | Ginja material state |
| MonoGame / STUNTBOOST | Level glTFs contain bake, physics and prop materials; every stored material has OPAQUE alpha mode |
Bake materials bind their base-colour atlas and use the specular-colour texture for a direct-light mask. MGFX tables map parameters to samplers and constant-buffer offsets | Level materials, baked lighting, MGFX bindings |
| Unreal / MECCHA CHAMELEON custom-map imports | Interchange imports glTF materials as material instances of a chosen parent | This describes the documented import route; the game’s cooked material layouts and bindings are not established | Custom-map import, asset-format scope |
Texture identity and register identity
Section titled “Texture identity and register identity”Sekiro’s DetailBlend base albedo is logically Texture2D_7 but uses register 1; its detail albedo Texture2D_2 uses
register 7. Anvil likewise distinguishes the template’s shader register from the selector’s TextureSet slot. In
ForzaTech, some different parameter hashes even have the same displayed name, and shader maps select the active hash.
See FLVER logical slots, Anvil selectors
and ForzaTech parameter identities.
STUNTBOOST’s stored OPAQUE material mode does not determine every node’s draw batch. Its Transparent(a) call
multiplies the shader colour by a; only a < 1 enters the back-to-front batch, while a >= 1 draws immediately as
opaque. See transparent nodes.
Layering is shader-specific
Section titled “Layering is shader-specific”| Engine / family | How surfaces combine | Detail |
|---|---|---|
| FromSoftware / inspected layered families | Vertex attributes, masks and constants drive surface blending; Elden Ring’s inspected overlay has a different weight per colour channel | Layered surfaces |
| FromSoftware / character DetailBlend | Tinted detail textures multiply the base surface; detail normals and gloss combine alongside colour. Slot assignments differ between Sekiro and Elden Ring | Detail blending |
| RAGE / terrain | Four colour/normal layers use weights from vertex colour or lookup masks; the weights sum to 1-r rather than one |
Terrain blending |
| Frostbite / measured stock world objects | u51.x = 1 selects a secondary texture set; sampled other values select primary. Selection is flat per triangle, with no Color0 interpolation between sets |
Depot material families |
| ForzaTech / inspected world families | Roads blend layers A–D using height and blend textures; environment materials combine modulate and deposit terms | World families, environment |
Surface values and output encoding
Section titled “Surface values and output encoding”Sekiro stores reflectance separately while Elden Ring’s inspected metallic form leaves F0 reconstruction to lighting. GTA V Enhanced’s inspected deferred path stores square-root specular quantities. Anvil’s shading class changes the interpretation of otherwise shared output lanes. These differences belong to the G-buffer comparison and its linked engine pages.
Anvil’s null overrides and final unfilled-slot substitute are not established by stored defaults. A null RAGE texture pointer is a stored absence rather than a named white texture. See Anvil fallback and Enhanced texture references.