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

Shader Texture Set

Matcap Unit Shader Texture Set 유닛 셰이더 텍스처 제작 규칙

SH_Unit_Matcap 셰이더는 유닛 표현에 필요한 Color Mask, Normal XY, Emissive Mask를 하나의 텍스처에 패킹해서 사용합니다. 이 작업에서는 아트 리소스 제작자가 동일한 규칙으로 텍스처를 제작할 수 있도록, 채널별 데이터 용도와 export size, in-game size, naming rule을 정리했습니다. 목표는 텍스처 수를 늘리지 않고도 색상 마스킹, Matcap용 노멀 보정, 발광 영역 제어를 처리할 수 있는 입력 구조를 만드는 것이었습니다.

Problem

유닛 셰이더에서 색상 마스크, 노멀 보정, 발광 영역을 각각 별도 텍스처로 관리하면 텍스처 샘플 수와 리소스 관리 비용이 증가합니다.

또한 작업자마다 채널 사용 방식이나 네이밍 규칙이 달라지면, 머티리얼 세팅 오류와 export 실수가 발생하기 쉽습니다.

따라서 셰이더에서 요구하는 입력 데이터를 하나의 텍스처에 패킹하고, 제작 규칙을 명확하게 정리할 필요가 있었습니다.

Goal

Matcap 유닛 셰이더에서 사용하는 보조 데이터를 하나의 텍스처 세트로 통일하는 것을 목표로 했습니다.

  • R 채널: Color Mask
  • G 채널: Tangent Space Normal X
  • B 채널: Emissive Mask
  • A 채널: Tangent Space Normal Y
  • Export 기준: 1024px
  • In-game 기준: 512px
  • Texture Type: TGA 8bit + dithering
  • Naming Rule 통일

Implementation

  1. 01

    Packed Texture 구조

    SH_Unit_Matcap 셰이더는 보조 데이터를 하나의 packed texture로 사용합니다.

    색상 마스크, 노멀 보정, 발광 마스크를 각각 다른 텍스처로 분리하지 않고, RGBA 채널에 나누어 저장했습니다.

    이를 통해 셰이더 입력 구조를 단순화하고, 유닛 머티리얼에서 관리해야 하는 텍스처 수를 줄였습니다.

    02. Channel Layout

    텍스처 채널은 아래 규칙으로 사용했습니다.

    ChannelUsageDescription
    RColor MaskMain / Sub color 영역 구분
    GNormal XTangent Space Normal X, OpenGL 기준
    BEmissive Mask발광 영역 마스크
    ANormal YTangent Space Normal Y, OpenGL 기준

    R 채널은 유닛의 색상 변경 영역을 구분하는 마스크로 사용했습니다.
    G / A 채널은 Matcap 계산에 사용할 Tangent Space Normal XY를 저장하고, 셰이더에서 Z를 복원해 노멀 방향을 구성했습니다.
    B 채널은 emissive가 필요한 영역을 제어하는 마스크로 사용했습니다.

  2. 02

    B - Emissive Mask / A - Normal Y

  3. 03

    텍스쳐 사이즈

    제작 단계에서는 1024px 기준으로 export하고, 실제 게임에서는 512px로 import size를 낮춰 사용했습니다.

    처음부터 2048px에서 512px로 크게 줄이면 작은 마스크 영역이나 노멀 정보에서 아티팩트가 생길 수 있기 때문에, 제작 기준 해상도와 인게임 기준 해상도를 분리했습니다.

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

    Texture Naming 변경

    $Textureset - TEXTURE SET LIST 네이밍 입니다.
    TEXTURE SET LIST 에서 네이밍 변경 후, Export 시 Texture Name 양식에 맞춰서 출력 됩니다.

Conclusion

Matcap Unit Shader에서 사용하는 보조 데이터를 하나의 packed texture로 통일했습니다.

- Color Mask / Normal XY / Emissive Mask를 RGBA 채널에 패킹 - 유닛 머티리얼에서 관리해야 하는 보조 텍스처 수 감소 - Export 1024px / In-game 512px 기준 정리 - TGA 8bit + dithering 기준 정리 - Texture Set List 기반 네이밍 규칙 통일

이 작업은 단순한 텍스처 설명이 아니라, 유닛 셰이더 입력 데이터와 아트 제작 규칙을 맞추기 위한 파이프라인 정리입니다.