본문으로 건너뛰기
CHOI HONGSU
1 min read

Shader Texture Set

Matcap Unit Shader Texture Set — unit shader texture authoring rules

The SH_Unit_Matcap shader uses Color Mask, Normal XY, and Emissive Mask — the data needed for unit rendering — packed into a single texture. In this work, to let the art resource author produce textures by the same rules, I organized the per-channel data usage, the export size, the in-game size, and the naming rule. The goal was to build an input structure that handles color masking, Matcap normal correction, and emissive area control without increasing texture count.

Problem

Managing the color mask, normal correction, and emissive area in the unit shader as separate textures increases texture sample count and resource management cost.

In addition, if channel usage or naming rules vary from author to author, material setup mistakes and export errors become more likely.

Therefore, the input data the shader requires had to be packed into a single texture, and the authoring rules had to be clearly defined.

Goal

The goal was to unify the auxiliary data used by the Matcap unit shader into a single texture set.

  • R channel: Color Mask
  • G channel: Tangent Space Normal X
  • B channel: Emissive Mask
  • A channel: Tangent Space Normal Y
  • Export standard: 1024px
  • In-game standard: 512px
  • Texture Type: TGA 8bit + dithering
  • Unified naming rule

Implementation

  1. 01

    Packed Texture structure

    The SH_Unit_Matcap shader uses the auxiliary data as a single packed texture.

    The color mask, normal correction, and emissive mask are not split into separate textures but stored across the RGBA channels.

    This simplifies the shader input structure and reduces the number of textures that must be managed in the unit material.

    02. Channel Layout

    The texture channels are used by the following rule.

    ChannelUsageDescription
    RColor MaskDistinguish Main / Sub color regions
    GNormal XTangent Space Normal X, OpenGL convention
    BEmissive MaskMask for emissive regions
    ANormal YTangent Space Normal Y, OpenGL convention

    The R channel is used as a mask that separates the unit's color-swap regions.
    The G / A channels store the Tangent Space Normal XY used in the Matcap computation, and Z is reconstructed in the shader to build the normal direction.
    The B channel is used as a mask that controls regions requiring emissive.

  2. 02

    B - Emissive Mask / A - Normal Y

  3. 03

    Texture size

    At the authoring stage textures are exported at 1024px, and in the actual game the import size is dropped to 512px.

    Going straight from 2048px down to 512px can introduce artifacts in small mask regions or normal information, so the authoring resolution and the in-game resolution were separated.

    • Export: 1024px
    • In-game: 512px
  4. 04

    Texture naming change

    $Textureset — this is the TEXTURE SET LIST naming.
    Once the name is changed in the TEXTURE SET LIST, the Texture Name follows that format on export.

Conclusion

Unified the auxiliary data used by the Matcap Unit Shader into a single packed texture.

- Pack Color Mask / Normal XY / Emissive Mask into the RGBA channels - Reduce the number of auxiliary textures managed in the unit material - Standardize Export 1024px / In-game 512px - Standardize TGA 8bit + dithering - Unify the naming rule based on the Texture Set List

This work is not just a texture spec, but a pipeline cleanup that aligns the unit shader input data with the art authoring rules.

Shader Texture Set · FlashGambit · Choi Hongsu · Hongsu