Texture preparation¶
Every surface needs only Base Color and NNMR. The rest is optional: add it when a feature asks for it.
Required (every asset)¶
| Texture | R | G | B | A | Compression | sRGB |
|---|---|---|---|---|---|---|
| Base Color Map (T_Name_BC) | Color | Color | Color | Opacity (Foliage, decals) or none | No alpha = BC1; with opacity Default (BC7) | On |
| NNMR Map (T_Name_NNMR) | Normal X | Normal Y | Metallic | Roughness | BC7 | Off |
Optional (only when you use the feature)¶
| Texture | When | R | G | B | A | Compression | sRGB |
|---|---|---|---|---|---|---|---|
| Height Map (T_Name_H) | Use Height Map?: height blending, puddles, Cover, Parallax | Height | - | - | - | Alpha (no sRGB, BC4 on DX11) | Off |
| Mask Map | Use Mask Map?: masks for Emissive, Opacity, Mask Tint, AO | Mask | Mask | Mask | AO (optional) | Masks | Off |
| NNOR Map (T_Name_NNOR) | Foliage, instead of NNMR | Normal X | Normal Y | AO | Roughness | BC7 | Off |
| Blend Mask (UV1) | MaskBlend master | Layer R | Layer G | Layer B | - | Masks | Off |
Library textures (ship with KurinStudio, nothing to make)¶
Already set up in _Core/Textures. You need this only to re-import them or make your own; Tools/KurinFixTextureSettings.py restores the settings in one click.
| Texture | Used by | R | G | B | A | Compression | sRGB |
|---|---|---|---|---|---|---|---|
| T_KurinRain..., T_KurinNoise, T_KurinIceCracks, T_KurinPuddleWind_01a, T_KurinWaterGusts | Weather, Water | data | data | data | data | Masks | Off |
| T_KurinCaustics | Water, Weather | Caustics | - | - | - | Grayscale | Off |
| T_KurinFrost (Frost Map) | Weather Frost | Frost patches | Crystal normal X | Crystal normal Y | Crystal height | BC7 | Off |
| T_KurinCondensation (Condensation Map) | Weather Condensation | Fog density | Bead normal X | Bead normal Y | Bead mask | BC7 | Off |
| T_KurinGlassCracks_01a / 02a (Cracks Map) | Glass, Interior | Direction X | Direction Y | Shard ID | Crack line | BC7 (Masks / DXT is too coarse for the shard ID) | Off |
| T_KurinGlassCracks_01a_S / 02a_S (Cracks Shard Map) | Glass, Interior | Shard centre U | Shard centre V | Fall order | - | BC7 | Off |
| Interior Cubemap (T_KurinInteriorRoom_01a or your capture) | Interior | TextureCube of the room | HDR, or Default (LDR) to save memory | Off for HDR | |||
| T_KurinInteriorBlinds_01a, T_KurinInteriorCurtain_01a, T_KurinGlassDirt_01a | Interior, Glass | Color | Color | Color | Opacity / amount | Default | On |
Rules that prevent most problems¶
- Masks: every single-channel mask has a ... Channel selector (R / G / B / A) in the instance, so several masks can share one texture.
- Never use Normalmap compression for NNMR / NNOR: metallic and roughness get lost.
- Normals are DirectX (Y−). OpenGL normals (Blender, some Substance presets): tick Flip Normal Green? in 00 Settings.
- Height = its own Height Map (R, Alpha compression, never VT). Tick Use Height Map?; off = flat surface.
- No height in Base Color alpha. Leave alpha out (BC1, half the memory) or use it for opacity (foliage, decals).
- Metallic = NNMR blue. Non-metals: keep it black and leave Use Metallic? off.
- AO is optional: Mask Map alpha + Use AO?. With Lumen most assets can skip it.
Substance Painter export¶
Output template with these maps (PNG or TGA):
- $textureSet_BC: RGB = Base Color, A = opacity (foliage, decals only). 8-bit.
- $textureSet_NNMR: R / G = Normal DirectX R / G, B = Metallic, A = Roughness. 16-bit PNG gives smoother normals.
- $textureSet_H: R = Height. 8-bit is enough.
- AO (optional): into the Mask Map alpha, RGB = masks.