book/44-tech-oit-and-transparent-accessories.md

N/A

44. 기술: OIT와 투명 액세서리 렌더링

헤어카드/레이스/주얼리 계열의 정렬 문제를 줄이기 위한 OIT 중심 구성

44. 기술: OIT와 투명 액세서리 렌더링

[B] 투명 재질은 서브컬쳐 캐릭터에서 “헤어카드/레이스/주얼리”처럼 룩에 중요하지만, 정렬(sorting) 문제로 가장 쉽게 깨지는 영역입니다. OIT는 이 문제를 완전히 없애기보다, 순서 의존성을 완화해 “깨짐의 강도”를 줄이는 접근입니다.

목적

  • [A/B] 투명 재질 정렬 오류를 줄여 캐릭터 액세서리의 안정성을 확보한다.
  • [B] URP에서 구현 가능한 Weighted Blended OIT 경로를 문서화한다.

증거 등급 요약(A/B/C)

  • [A] 공식 인터뷰/공지에서 의상/장신구 품질과 하이엔드 반사 대응이 반복된다.
  • [B] 역분석 문서에서 투명 재질 누적 합성(OIT 계열)과 가짜 굴절 패턴이 반복된다.
  • [C] 정확한 가중치 함수와 다층 재질 분해 방식은 프로젝트별 튜닝 항목이다.

핵심 개념

이론 배경

  • [B] OIT의 목적은 정렬 문제 완전 제거가 아니라 다층 알파의 순서 의존성을 완화하는 데 있다.
  • [B] Weighted Blended 방식은 per-pixel 리스트 없이 누적/정규화로 근사해 URP에 적용 비용이 낮다.
  • [C] 굴절/프레넬과 결합할 때 에너지 과증폭이 발생하기 쉬워 알파-스페큘러 상한을 별도로 관리해야 한다.

정렬 기반 alpha-blend를 기본으로 두고, 문제 구간만 OIT 경로로 우회하는 하이브리드가 유지보수에 유리하다. [B]

HLSL
// Weighted Blended OIT 개념식
float weight = saturate(pow(src.a + _OitBias, _OitPower));
accumColor += src.rgb * src.a * weight;
accumAlpha += src.a * weight;

float3 oitColor = accumColor / max(accumAlpha, 1e-4);
float oitAlpha = saturate(accumAlpha);
HLSL
// 주얼리/액세서리용 가벼운 굴절 + 프레넬
float2 offset = normalVS.xy * _RefractionScale;
float3 refr = SAMPLE_TEXTURE2D(_CameraOpaqueTexture, sampler_CameraOpaqueTexture, uv + offset).rgb;
float fres = pow(1.0 - saturate(dot(normalWS, viewWS)), _FresnelPower);
float3 final = lerp(refr, _SpecTint.rgb, fres * _SpecBlend);
  • [B] 헤어카드/레이스는 OIT, 금속 장식은 forward alpha+clamp로 분리하면 비용 제어가 쉽다.
  • [C] 캐릭터별 장신구 수가 많으면 OIT 대상 리스트를 재질 태그로 제한해야 한다.

결론: OIT는 “전면 적용”보다 “문제 구간 선택 적용”이 정답에 가깝다

  • [B] 대부분의 씬에서 필요한 건 완전한 정렬 제거가 아니라, 특정 컷에서만 터지는 깨짐을 완화하는 것이다.
  • [B] 따라서 태그/레이어로 대상을 제한하고, RT 해상도/포맷/패스 수를 티어링(T014)으로 통제하는 운영이 중요하다.

URP 매핑 포인트

설계 해석

  • [B] OIT는 전면 적용보다 태그 기반 선택 적용이 비용 대비 효율이 높다.

  • [A/B] 후처리 이전에 OIT 합성을 마치면 bloom/grade 단계에서 투명물 색 재현이 안정된다.

  • [B] RenderGraph/RendererFeature 권장 순서:

    1. Opaque color/depth 완료
    2. OIT accum RT(clear)
    3. Transparent OIT 대상만 누적
    4. OIT 합성 후 일반 transparent 진행
  • [A/B] DepthOnly를 유지해 소팅 안정성을 보조한다.

  • [B] 캐릭터 마스크(T010)와 결합 시 OIT 합성 전에 stencil 충돌을 검사한다.

실패 패턴/오해

  • [B] 모든 투명 재질을 OIT로 몰아 GPU 대역폭이 급증한다.
  • [B] depth prepass 없이 굴절 샘플을 적용해 배경 누수가 발생한다.
  • [C] "OIT면 정렬 이슈가 0"으로 오해해 half-transparent self-occlusion 튜닝을 생략한다.

실무 체크리스트

  • OIT 대상 재질 태그(HairCard, Lace, Gem

Sources (섹션 단위 인용)

공식 맥락

구현 패턴