Skip to content

MTL: the remaining material fields — map_Pr / map_Pm, Ka, illum #1599

Description

@obiot

Split out of #1575, which shipped in 20.0.0. That ticket covered specular (Ks / Ns), the Pr / Pm approximation and map_d per-texel alpha; these are the fields it deliberately left, recorded here so they are not lost.

Neither is scheduled. Both are low value on their own, and the first is gated on a design decision that 20.0 explicitly declined.

1. map_Pr / map_Pm — roughness and metalness texture maps

The scalars are consumed today: Pr and Pm are approximated onto the existing shading terms, alongside glTF's pbrMetallicRoughness factors, through one shared mapping. The texture maps are not sampled.

The reason is not effort, it is that sampling them only pays off against a genuine PBR shading model. 20.0 chose the approximation deliberately over growing one: the lit mesh path is a stylized half-Lambert model, and per-texel roughness feeding a non-PBR term would be doing precise work with an imprecise instrument.

So this should not be picked up on its own. It belongs to a decision about whether the mesh path grows a real PBR model, which wants its own design ticket and is a much larger piece of work.

2. Ka (ambient) and illum

The lowest-value fields in the format, and #1575 said as much when it listed them.

  • Ka is largely redundant against the engine's ambient light. Parsing it into the material for completeness is harmless; wiring it into shading would give two ambient contributions that fight each other.
  • illum is vestigial in modern pipelines. Most exporters emit a constant, and the values that are not 2 describe a fixed-function pipeline the engine does not have.

Worth parsing onto the material so the data is not silently dropped, and not wiring into shading unless a concrete need appears.

Acceptance

  • the parsed value reaches the material and is observable from user code
  • a model supplying none of these renders byte-identically to today
  • any shading change is verified on both GPU backends and produces identical output

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions