Skip to content

Terrain deferred decals

AnvilTerrainApplies toRR

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

Static deferred decal instance100 bytes76% known
ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x08u64stored identityUnknown0 in the measured records
0x84u32 = 0x295F035Crecord classObserved
0xC12float3first half-axisObserved
0x184bytesstored bytesUnknownnot interpreted
0x1C12float3second half-axisObserved
0x284f32fadeObserved
0x2C12bytesstored fieldsUnknownnot interpreted
0x384f32atlas U offsetObserved
0x3C12float3world centreObserved
0x484f32atlas U widthObserved
0x4C12float3box minimumObserved
0x5812float3box maximumObserved

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

How are all terrain decal permutations scheduled?

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