닌텐도 64에서 팔레트 조명 트릭 사용법
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
게임 개발
대상자
게임 엔지니어, 레트로 게임 개발자, 3D 그래픽 최적화 연구자
핵심 요약
- 팔레트 텍스처 기반 조명은 CPU에서 실시간으로 팔레트 색상만 업데이트하여 전체 텍스처에 조명 효과 적용
- K-means 군집 알고리듬으로 디퓨즈/노멀 텍스처의 팔레트 인덱스를 공유하여 4bpp 이미지 데이터 압축 가능
- 오브젝트 공간 노멀 맵은 표면 노멀 정보를 정확히 반영하지만, 반복 텍스처 활용 제한
섹션별 세부 요약
1. 팔레트 기반 조명 기술
- 텍스처 대신 팔레트 변경으로 실시간 조명 효과 구현
- 방향성 조명만 지원 가능, 쉐이딩 불연속성 발생
- N64 데모에서 반사광/직접광/환경광 복합 활용
2. 노멀 매핑 최적화
- 오브젝트 공간 노멀 맵은 계산이 단순하지만 반복 텍스처 사용 어려움
- 텐전트 공간 노멀 맵은 자연스러운 표면 보정 가능
- 32색 팔레트 압축으로 고해상도 노멀 맵 특성 유지 가능
3. 라이팅 공식 및 구현
- ambient = vertex_rgb * grey_irradiance_map(N)
- direct = vertex_alpha sun_color dot(N, sun_dir)
- color = diffuse_texture * (ambient + direct)
- 환경광은 등각원통 투영(equirectangular projection)으로 단순화
4. 구현 한계 및 해결 방안
- 대형 메시 분할을 통해 메시별 폴리곤 노멀 기반 world-to-model 행렬 생성
- 팔레트 공유로 전체 라이팅 품질 보장
- 스페큘러 반사광은 구형 개체 근사로 구현
결론
- K-means 군집 알고리듬을 활용한 팔레트 압축이 4bpp 이미지 데이터 최적화에 효과적
- 실행 시간 CPU 연산 기반 조명은 성능 저하 발생 가능
- PAL 호환 N64 ROM 파일 공개로 데모 재현 가능, 단 불안정한 다운로드 주의 필요