Terrain deferred decals
Terrain deferred decals project material information into terrain virtual-texture targets. Their output layout differs from the final scene G-buffer, even though both carry colour and normals. Observed · decal and terrain producer shaders
HoudiniDecalInstancerComponent embeds a StaticDDecalLibrary, a counted DDecalModel reference list and counted static-instancer items. Each item’s first model byte indexes that list on all 34,477 examined items. Instances are 100-byte projection-box records with world-space centres; applying the owning Entity transform again changes their positions incorrectly. Proven · model-index census Observed · world-space box comparison
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 8 | u64 | stored identity | Unknown | 0 in the measured records |
| 0x8 | 4 | u32 = 0x295F035C | record class | Observed | |
| 0xC | 12 | float3 | first half-axis | Observed | |
| 0x18 | 4 | bytes | stored bytes | Unknown | not interpreted |
| 0x1C | 12 | float3 | second half-axis | Observed | |
| 0x28 | 4 | f32 | fade | Observed | |
| 0x2C | 12 | bytes | stored fields | Unknown | not interpreted |
| 0x38 | 4 | f32 | atlas U offset | Observed | |
| 0x3C | 12 | float3 | world centre | Observed | |
| 0x48 | 4 | f32 | atlas U width | Observed | |
| 0x4C | 12 | float3 | box minimum | Observed | |
| 0x58 | 12 | float3 | box maximum | Observed |
The atlas interval is [offset,offset+width]. The GPU pack uses centre trunc((offset+width/2)*65535) and half-width trunc(width/2*65535), with opacity scaled by (1-fade)*modelOpacity. Observed · instance packer disassembly
DDecalModel bodies are 115 bytes in all 70 stored entries. Four references supply Diffuse, Normal, Height and Mask1 maps, followed by flags and parameters. Model opacity is the f32 at body 72. Proven · body size census Observed · field mapping
| Terrain target | Meaning | Confidence |
|---|---|---|
| o0 | Albedo | Observed · executed terrain decal path |
| o1 | Normal | Observed · executed terrain decal path |
| o2.x | Terrain displacement from TerrainDisplacement parameters | Observed · program and parameter mapping |
| o2.y | Mask1 G | Observed |
| o2.z | Normal A, roughness | Observed |
| o3.x | Mask1 R | Observed |
Alpha is Mask1.B*(1-fade)*AlphaScale, with discard below .4 in the examined terrain-family program. Fifty-three of 69 classified models use this family, drawn by three pixel programs; a model belongs to it when its body bytes 48 and 49, the fields 6FBE0FE4 and WriteGBufferRoughness, are both zero. All 5,490 USNAT instancers have ForTerrain enabled, CellMinSize 50 and CellMarge 5. Observed · model classification, instancer census and interpreted real-record execution
Their distribution is uneven: the CITYSCHOOL campus area holds no terrain-family decal instances, while Area 52 holds 2,861. Observed · two area censuses
Two Entities carry a StaticDDecalComponent instead, for example MAD_PRP_GraffitiSEAMONSTERS_Back_FrontRockRight_A_002. The class derives from DDecalComponent and Visual; its instance (0x4A483387) has a null mesh reference and embeds a StaticDDecalLibrary and StaticDDecalSettings. Observed · both bodies
The examined outputs and stored projection data are established; the full runtime ordering and compositing of every decal permutation with VT updates is not. Unknown