쿼터뷰 전용 라이팅 노하우: 베이크 라이트와 동적 림라이트의 최적 균형

쿼터뷰 전용 라이팅 노하우: 베이크 라이트와 동적 림라이트의 최적 균형

고정 카메라 시점을 사용하는 쿼터뷰 게임에서 정적 베이크 라이팅으로 성능과 그래픽 품질을 확보하고 동적 림라이트를 결합해 캐릭터의 시인성을 극대화하는 렌더링 노하우를 소개합니다.

쿼터뷰 시점 라이팅의 특수성과 도전 과제

쿼터뷰(Quarter-view, 약 30°~45° 사선 내려다보기) 시점은 맵의 고저차와 오브젝트의 배치 상태를 직관적으로 파악할 수 있어 ARPG, RTS, 쿼터뷰 슈팅 등 다양한 장르에서 널리 활용됩니다. 하지만 카메라 각도가 고정되어 전경과 배경의 오브젝트가 빈번하게 겹치므로 라이팅 구성이 미흡하면 캐릭터나 중요 요소가 배경에 묻혀 시인성이 급격히 저하되는 문제가 발생합니다.

실시간 다이내믹 라이트만으로 전체 씬을 처리하면 캐릭터와 배경 수십 개가 동시에 동적 그림자를 형성하여 GPU의 렌더링 타깃 및 섀도 맵 연산 비용이 폭증합니다. 반대로 모든 요소를 정적으로 베이킹하면 캐릭터가 씬 내부에서 붕 떠 보이거나 입체감이 약해집니다.

쿼터뷰 시점에서 복잡한 배경과 캐릭터가 구별되지 않는 렌더링 한계 사례

베이크 라이트(Baked Lighting) 중심의 기반 구축

쿼터뷰 카메라 시점은 이동 범위와 카메라 시야각이 구속되어 있다는 이점이 있습니다. 배경 건물, 지형, 구조물 등 고정된 개체는 라이트맵(Lightmap) 베이킹을 활발히 적용하기에 최적의 조건입니다.

정적 오브젝트에 전역 조명(GI, Global Illumination) 및 앰비언트 오클루전(AO, Ambient Occlusion)을 미세 해상도로 미리 계산해 두면 그림자 연산에 드는 GPU 바운드 드로우 콜과 셰이더 명령을 획기적으로 줄일 수 있습니다. 정적 조명을 바탕으로 씬 전체의 톤과 정교한 간접광 반사를 구축한 뒤 동적 오브젝트를 위한 보완 광원 체계를 올바르게 배치해야 합니다.

graph TD
    A[정적 오브젝트 씬 구성] --> B[베이킹: 전역 조명 & Ambient Occlusion]
    B --> C[정적 라이트맵 텍스처 적용]
    D[동적 캐릭터 오브젝트] --> E[커스텀 림라이트 셰이더 연산]
    C --> F[최종 쿼터뷰 씬 프레임 합성]
    E --> F

동적 림라이트(Rim Light)로 캐릭터 시인성 확보하기

배경이 라이트맵으로 정돈된 상태에서 이동하는 캐릭터나 몬스터의 윤곽을 선명하게 부각하는 데 가장 효과적인 기법은 림라이트(Rim Light) 기술입니다. 림라이트는 시선 방향(View Vector)과 표면의 노멀(Normal Vector) 사이의 각도를 계산하여 오브젝트의 외곽 영역에 빛을 가산하는 기법입니다.

기본적인 림라이트 강도 연산식은 다음과 같습니다.

Irim=max(0,1NV)pI_{\text{rim}} = \max(0, 1 - \mathbf{N} \cdot \mathbf{V})^p

여기서 N\mathbf{N}은 표면의 정규화된 노멀 벡터이고 V\mathbf{V}는 카메라 시선 방향 벡터이며 pp는 림라이트 억제 및 집중도를 결정하는 거듭제곱 지수(Rim Power)입니다.

쿼터뷰 시점에서는 카메라인 위쪽에서 아래를 내려다보는 각도가 고정되어 있으므로 오프셋 벡터를 추가해 림라이트가 상단 윤곽선과 사선 측면에 더 강조되도록 보정하면 캐릭터가 공간으로부터 자연스럽게 분리됩니다.

동적 림라이트 적용 전후의 캐릭터 외곽선 시인성 비교

URP 커스텀 HLSL 셰이더 구현

유니티 URP(Universal Render Pipeline) 기반 환경에서 간단하게 작성할 수 있는 림라이트 셰이더 연산 핵심 예제입니다.

// 림라이트 연산 함수
half3 CalculateQuarterViewRim(half3 normalWS, half3 viewDirWS, half3 rimColor, half rimPower, half rimIntensity)
{
    // 노멀과 시선 방향의 내적 계산
    half NdotV = saturate(dot(normalWS, viewDirWS));
    
    // 외곽선 영역 강조 연산
    half rimFactor = pow(1.0 - NdotV, rimPower);
    
    // 최종 림라이트 색상 반환
    return rimColor * (rimFactor * rimIntensity);
}

이 연산 결과를 기본 디퓨즈 텍스처 및 주광(Main Light) 조명 값과 합산하면 추가 동적 조명(Point Light / Spot Light)을 설치하지 않고도 캐릭터 윤곽이 뚜렷하게 부각됩니다.

성능과 연산 비용 측면의 최적 균형점

베이크 라이팅과 동적 림라이트를 결합하면 모바일이나 인디 게임 타깃 사양에서도 우수한 프레임 속도를 유지할 수 있습니다.

기술 요소동적 라이트 전체 적용베이크 라이트 + 동적 림라이트
GPU 드로우콜 및 패스캐릭터마다 추가 섀도 패스 필요정적 라이트맵 1패스 + 윤곽 셰이더
메모리 연산 부담동적 섀도 맵 텍스처 갱신 부담 수반라이트맵 메모리 패킹만 점유
시인성 제어각도에 따라 그림자가 뭉개질 위험노멀 연산 기반으로 시인성 일정 유지

쿼터뷰 환경에서는 동적 조명의 개수를 엄격히 제한하고 라이트맵 베이킹과 커스텀 림라이트 셰이더를 조화롭게 융합하는 것이 시각적 연출과 성능 최적화를 동시에 달성하는 핵심 노하우입니다.

#게임개발#라이팅#쿼터뷰#셰이더#최적화

계속 읽어보기

이런 글은 어떠세요?

< Back to Logs