
## **Indiana Jones and the Great Circle: 스트랜드 기반 헤어 시스템**
### **1. 디자인 목표 및 요구사항**
* **핵심 목표**: 1인칭 시네마틱 어드벤처 게임에서 사실적이고 뛰어난 캐릭터 비주얼 구현.
* 캐릭터 중심 스토리텔링, 긴 컷신 (약 4시간).
* 1인칭 시점에서 클로즈업되는 캐릭터 얼굴 디테일 중요.
* **주요 요구사항**:
* **성능**: 모든 타겟 플랫폼에서 **60fps** 달성.
* GPU 예산: 최소 사양 기준, 약 12명의 캐릭터 동시 화면 노출 시 **2ms**.
* **워크플로우 간소화**: 아티스트의 헤어 제작 워크플로우 간소화.
* 별도의 헤어 카드 제작 및 복잡한 기술적 절차 최소화.
* **스트랜드 직접 스타일링**으로 제작 시간 단축.
* **품질**: GPU 예산 내에서 **최고 수준의 시각적 품질** 확보.
* 물리적 정확성 추구, 성능 향상을 위한 과감한 편차 허용.
### **2. 시스템 개요 및 구성 요소**
* **전체 시스템**: 협업을 통해 개발된 대규모 프로젝트.
* 소프트웨어 엔진 팀, 캐릭터 아트 팀의 기여.
* Michael Wynn (초기 구현), George Luna (헤어 시뮬레이션) 감사.
* **엔진 구조 (It Tech 7 기반)**:
* 클러스터드 포워드 렌더링 (직접 광원 계산).
* 일부 불투명 패스 지연 (Diffuse GI).
* GPU 메모리 사전 할당, 게임 플레이 중 변경 불가.
* 그래픽스 엔지니어 작성 셰이더 (최대한의 제어 및 성능).
* 동기화 컴퓨트(Async Compute) 적극 활용.
* **프레임 렌더링 구성**:
* **공통 패스**: GPU 씬 수집, 섀도우, 레이 트레이싱, BVH 구축 등.
* **광원 패스**: 불투명 픽셀, 혼합 지오메트리 렌더링.
* **헤어 렌더링 파이프라인**:
* **CPU 설정**: 뷰 내 헤어 모델 수집, LOD 계산, 디스패치 생성.
* **GPU 렌더링 (3단계)**:
* **시뮬레이션**: 그래픽스 큐 메인에서 헤드 스키닝 이전 수행.
* **렌더링 (레이어드 가시성 버퍼 & 버텍스 셰이딩)**: 동기화 컴퓨트 활용, 포워드 광원 패스 및 Diffuse GI와 오버랩.
* **컴포지션**: 투명 지오메트리로 취급, 후면-전면 순서로 렌더링.
### **3. 주요 시스템 구성 요소 상세**
#### **3.1. LOD (Level of Detail)**
* **기법**: 별도의 LOD 모델 대신 **스트랜드 순서 무작위화 및 추출**.
* 스트랜드 버퍼 일부 추출, 두께 스케일링으로 형태 유지.
* **계산**: 모델 로딩 시 최대 스트랜드 수 제한, 프레임마다 화면 면적 기반 스트랜드 수 조정.
* **한계**: 최대 2000개 세그먼트/64x64 픽셀 타일 (전 플랫폼), 총 2백만 세그먼트.
* **동적 최적화**: 거리에 따라 **짝수 헤어 버텍스 동적 건너뛰기** (렌더링 버텍스 수 절반 감소).
#### **3.2. 시뮬레이션**
* **기반**: Müller의 "Fast Simulation of Inextensible Hair and Fur".
* **방식**: 모든 스트랜드와 각 스트랜드 내 모든 파티클 시뮬레이션.
* 헤드 스키닝 이전 수행 (주요 헤드 관절 움직임만 고려).
* **충돌**: SDF(Signed Distance Field) 기반 헤드 충돌. (헤드-바디 충돌 미처리).
* **출력**: 지역 위치, 속도, 복셀 밀도 그리드 (헤어 충돌 및 섀도우 계산용).
#### **3.3. 래스터화 (Rasterization)**
* **이유**:
* 하드웨어 래스터화 성능 한계 (매우 얇은 헤어 세그먼트).
* 동기화 컴퓨트 작업 오프로드 용이성.
* 완벽한 안티 앨리어싱 구현.
* **방식**: **자체 소프트웨어 보수적 래스터라이저** 구현.
* 각 라인 세그먼트를 사다리꼴로 간주, 가시성 버퍼에 래스터화.
* 픽셀 커버리지 계산, 깊이 테스트, 원자적 연산(Atomic Operation) 사용.
* **가시성 버퍼 최적화**:
* **32비트 페이로드**: 22비트 세그먼트 수, 10비트 깊이 (재정규화 및 선형화).
* **아틀라스 방식**: 헤어 모델별 타일 할당, 겹침 방지.
* **다운스케일링**: 아틀라스 용량 초과 시 타일 다운스케일링 (Poisson Disk Sampling).
* **커버리지 재구성**:
* **가정**: 유사한 화면 공간 두께, 동일한 BSDF 속성.
* **기법**: 누적 커버리지 + 5차 다항식 또는 2차 근사식 활용.
* **효율화**:
* **조기 컬링**: 마지막 레이어 가시성 버퍼 활용 (캐시 활용).
* **레인 다이버전스 감소**:
* 루프 평탄화 (Loop Flattening).
* 픽셀 요청 스택 (Pixel Request Stack) 활용.
* **캐시 활용도 향상**:
* **전역 정렬 (Global Sorting)**: 모델별 세그먼트 공간적 근접성 확보.
* **작업 그룹 내 정렬 (Intra-Workgroup Sorting)**: Morton Curve 사용.
* **셰이딩용 재정렬**: L2 캐시 히트율 향상.
#### **3.4. 셰이딩 (Shading)**
* **모델**: Marshmorm 모델 기반 (반사, 투과, 틴트 반사).
* 아티스트 편의를 위한 비-PBR 스칼라 추가.
* **주요 과제**: **셀프 섀도잉**.
* **도입**: 복셀 레이마칭 (Ray Marching) -> **오프라인 소프트웨어 레이 트레이싱** (Baked Visibility).
* 깊이 있는 고주파수 섀도우 구현.
* 헤드 메쉬에 대한 섀도우 고려 (머리카락 뼈대).
* **가시성 함수**: 클램프된 저차수 구면 조화 함수 (Spherical Harmonic).
* **기법**: 히트하지 않은 레이 편향 (Biasing)으로 글랜싱 각도에서의 그림자 및 날카로운 전환 구현.
* **LOD 시스템과의 상호작용**:
* 기존 LOD 시스템 유지, 미미한 시각적 아티팩트 발생.
* **피부 섀도우**: 복셀 레이마칭 기반 섀도우 (피부 픽셀 대상).
* 주변광 및 난반사 오클루전 동시 획득.
* **제한**: 동물 털 등 유연한 지오메트리에는 적용 불가.
* **플레이어 캐릭터 섀도우**: **조각된 섀도우 프록시** (Inverted Faces) 사용.
#### **3.5. 컴포지션 (Composition)**
* **방식**: 각 헤어 모델별 **카메라 정면 사각형(Camera-Facing Quad)** 렌더링.
* 투명 지오메트리와 함께 후면-전면 순서로 처리.
* **정렬 휴리스틱**: 안면 헤어 우선, 헤어 0.5m 바이어스, 연기 파티클 후 처리.
* **가시성 아틀라스 합성**:
* 3개의 전면 샘플 + 총 커버리지 활용.
* **모델링**: 일반 알파 블렌딩 + 보정된 방사량 (가중치 합).
* **모션 벡터**:
* **압축된 포스트-트랜스폼 버텍스 캐시** 활용.
* 저사양: 2바이트당 2개 컴포넌트, 고사양: 전체 정밀도.
### **4. 결론 및 향후 과제**
* **핵심 교훈**:
* 스트랜드 기반 헤어는 **현세대 하드웨어에서 주 솔루션으로 충분히 빠름**.
* 타겟 명확화 및 **각 부분별 최악 시나리오 정의** 필수.
* **소프트웨어 래스터라이저**는 헤어 렌더링에 적합한 선택.
* **동적 헤어 최적화** 필요 (성능 vs. 움직임).
* **향후 과제**:
* 시뮬레이션 요구사항 완화.
* 애셋 스트리밍 구현.
* 동적 헤어 움직임 개선.
* 다양한 구면 함수 및 동적 가시성 재계산 실험.