Lacquer, Velvet, and Brushed Steel
Imported glTF files now bring their whole material with them: clearcoat lacquer, velvet sheen, glass transmission, brushed-metal anisotropy, HDR emissives, and real refraction indices, textures included. If the artist authored it, Lux renders it.


A material is a promise. When someone exports a chair with velvet cushions or a lamp with a brushed aluminium shade, the file records exactly what that surface should do to light. Until this release, Lux read the polite core of that promise, base colour, roughness, metalness, and quietly binned the rest. The file said velvet; we rendered upholstery-adjacent plastic.
Now the whole promise arrives. Seven glTF material extensions import straight into the live material system: clearcoat (lacquer over anything, with its own weight, roughness, and normal maps), sheen (the velvet rim glow cloth lives and dies by), transmission (actual see-through glass, sorted back to front), anisotropy (brushed metal streaks, direction maps included), volume (tinted glass depth), emissive strength (emitters brighter than 1.0, as real signage insists on being), and ior. Texture channels ride along with the correct colour spaces, so a clearcoat weight map or an anisotropy direction map does what its author intended. Files without extensions are untouched, byte for byte.
The test assets audited us right back
We anchor these features against the Khronos conformance assets, and ClearCoatTest promptly returned the favour. A factory-fresh lacquer coat has a roughness around 0.05, which makes its highlight smaller than a pixel at render resolution. Our renderer applies specular anti-aliasing to base materials so exactly this cannot happen, but the coat lobe never got the same treatment, so tight coats rendered as no coat at all, everywhere, for everyone, while the test that should have noticed was accidentally admiring the base layer’s highlight instead. The coat now gets the same anti-aliasing on its own shading normal, which is also what Filament does, and the highlight in the image above exists because of it.
The new gates are less forgiving than the old one. Every extension has an A/B test where the only difference between two renders is the extension itself: the coat must add a highlight the dull base cannot, orthogonal anisotropy direction maps must rotate the streak by ninety degrees, a transmission mask must make half a pane opaque. And ClearCoatTest ships its own control group, coated and uncoated sphere pairs, which must disagree on camera.
Fine print for the diligent: KHR_texture_transform and second UV sets are not applied yet, so assets that tile their textures through the transform (SheenChair scales its fabric weave 7x) render the sheen correctly but the weave at default scale. That one has its own line in the ledger.