Skip to content

Texture format codes

AnvilTexturesApplies toRRSWS

The numeric format in TextureMap selects a pixel codec; its separate transfer flag controls colour-space treatment. Storage size alone cannot distinguish codecs with the same block or pixel size. Observed

Code Codec Storage Evidence and confidence
0 BGRA8 UNORM 4 bytes/pixel The built-in normal’s ff 80 80 ff is a flat normal only in BGRA order; skin palettes corroborate it. Observed
1 RGBA8 SNORM 4 bytes/pixel A noise map is exactly the 256-entry Perlin gradient table when read as signed bytes: two components ±127 and one zero. Observed
2, 3 BC1 8 bytes/4×4 block Storage census and independently decoded real samples agree. Observed
4 BC2 16 bytes/block Storage and independent real-sample decoders agree. Observed
5 BC3 16 bytes/block Storage and independent real-sample decoders agree. Observed
6 BC4 UNORM 8 bytes/block Storage and independent real-sample decoders agree. Observed
7 BC5 UNORM 16 bytes/block Storage and independent real-sample decoders agree. Observed
8 BC6H unsigned float 16 bytes/block Together with code 9, all 2,066,602 examined blocks are valid BC6H and decode to coherent maps. Observed
9 BC6H signed float 16 bytes/block Signed SH-transfer maps agree with this interpretation. Observed
10 BC7 16 bytes/block Real-sample output agrees byte-for-byte with two independent decoders. Observed
11 A8 UNORM 1 byte/pixel The engine’s resource-creation record uses DXGI 65, A8_UNORM, for the matching map. Observed
12 R8 UNORM 1 byte/pixel Independent real-sample decodes agree. Observed
15 Codec unresolved 4 bytes/pixel in three of four maps Size fits do not establish channel meaning. Unknown
20 RGBA16 float 8 bytes/pixel Storage and independent half-float sample decoding agree. Observed

Code 0 has conflicting third-party names, BGRA8 versus RGBA8; the normal and palette content discriminates them. Code 11 also has conflicting A8 versus R8 labels; the engine’s DXGI creation record discriminates that case. These disagreements concern channel interpretation, not byte length. Observed · tool tables and discriminating content/runtime records

The storage census fills each supported image’s held mip sizes. Earlier storage-only failures include layered images, zero mip counts, image-less debug maps and additional codecs; a failure of a flat-only interpretation does not establish corrupt image data. Observed

For formats with sRGB views, flag 1 requests sRGB and flag 0 linear. Runtime resource formats corroborate the flag rather than a label-based role heuristic. A format lacking an sRGB variant does not become sRGB merely because the flag is set. Observed · resource-format comparisons

Normal and surface channels are commonly packed together in BC7. A census of texture properties includes 9,111 direct normal-labelled BC7 bindings, 23 BC5 bindings and exceptions with flag 1 on normal-labelled maps. Texture roles must therefore come from the template and shader, separately from the codec. Proven · texture-property join counts

What is format 15?

Three of its four stored maps fit four bytes per pixel, but the codec is not established. The remaining map’s framing also needs a separate explanation. Unknown

only in SWS

Shaun White Skateboarding’s TextureMap format codes are a smaller set than the later engine’s. The table gives, for each code, how its levels are stored (every TextureMap of the 33 data forges fills its pixels exactly so), how many TextureMaps of the install use it, and the Direct3D 9 format the game’s own renderer creates its textures with. The created formats are those of every texture of the code the game loaded from a new game to the start of the level-02 load, each level of which it uploaded byte for byte from the stored level.

Code Storage TextureMaps Created as Confidence
0 4 bytes per texel 10 not loaded on the traced route storage Proven, codec Unknown
2 8-byte blocks 21,402 D3DFMT_DXT1 (436 textures, 4,219 levels; 154 linear and 282 sRGB) storage Proven, format Observed
3 8-byte blocks 401 D3DFMT_DXT1 (4 textures, 20 levels) storage Proven, format Observed
4 16-byte blocks 2,126 D3DFMT_DXT3 (32 textures, 325 levels) storage Proven, format Observed
5 16-byte blocks 14,931 D3DFMT_DXT5 (555 textures, 1,372 levels) storage Proven, format Observed
12 16-byte blocks 1,981 D3DFMT_DXT5 (10 textures, 88 levels): a BC3 normal map storage Proven, format Observed

The gamma field does not change the created format: sRGB and linear textures of the same code are created alike, so the conversion is not part of the texture’s format. Observed The stored sizes and an independent block decoder agree on codes 2 to 5 and 12 over level 01 and the extra forge. Observed · level 01 and the extra forge

Code 12 is not the one-byte format that the same code means in Riders Republic. Reading it as a four-float format would not fit the stored sizes. Observed

The stored normal maps carry the X component in alpha and the Y component in green, with Z rebuilt by the shader, according to the game’s shader source. Which direction green points is not stored; the tangent frames of 30,784 triangles fit green as up with the tangent along the U axis. Normal maps occur in level 01 only on characters (17 materials) and water effects (3); levels 03, 05 and 06 use them for water only. Observed · level 01 and the shader source

What is the orientation of the stored normal maps?

The convention for the green channel’s direction is a fit to tangent-frame data and is not read from the engine; the orientation of code 12 content is left as stored. Inferred