홈으로 돌아가기

Unity에서의 조명 최적화: Lightmaps와 Shaders

이 기사는 Unity Built-in Render Pipeline에서의 조명 최적화 실전 방법을 다룹니다. 하이브리드 렌더링 기법, 수동 lightmap 관리, shader를 통한 terrain 조명 프로젝션, 안정적인 성능을 위한 cascade shadow 수정 등을 설명합니다.

HDRP 없이 Unity 조명에서 최대 효과 얻는 방법
Advertisement 728x90

# Unity에서 조명 최적화: 라이트맵, 라이트 프로브, 커스텀 셰이더

오픈 영역이 있는 인디 프로젝트를 개발하다 보면 필연적으로 렌더링 제한에 부딪히게 됩니다. 업계가 HDRP와 하드웨어 레이 트레이싱으로 적극 전환 중인 가운데, Unity의 Built-in Render Pipeline (Built-in RP)은 예측 가능한 성능과 파이프라인 완전 제어를 우선하는 팀에게 여전히 훌륭한 도구입니다. 시각적 타협 없이 안정적인 프레임 레이트를 유지하는 핵심은 정적 조명과 동적 조명을 적절히 분리하고 드로우 콜을 타겟팅해 최적화하는 것입니다.

하이브리드 접근법: 라이트맵 vs 라이트 프로브

효율적인 씬 조명은 지오메트리를 우선순위에 따라 명확히 분리하는 데 기반합니다. 대형 건축물, 지형, 정적 프로프는 베이크된 라이트맵으로 렌더링합니다. 이 과정에서 Bakery 같은 서드파티 라이트맵퍼가 최적이며, 빠른 Global Illumination 프리베이킹과 적절한 반사 처리를 제공하면서 에디터에 부하를 주지 않습니다.

복잡한 토폴로지를 가진 소형 객체를 베이킹하는 것은 비현실적입니다. 아틀라스 조각화와 비디오 메모리 사용 증가를 초래하죠. 대신 Light Probes 시스템을 사용합니다. 프로브는 환경 조명을 보간하여 동적 메시나 소형 정적 메시에 색상 반사와 기본 섀도잉을 전달합니다. 동일 존 내 동일 프로프의 배칭을 최적화하려면 같은 프로브 좌표를 강제 할당할 수 있습니다. 이는 고유 렌더 상태 수를 줄이고 프레임 준비 중 CPU 부하를 완화합니다.

Google AdInline article slot

하이브리드 렌더링의 중요한 측면은 원거리 지오메트리를 실시간 조명 계산에서 제외하는 것입니다. Directional Light와 캐스케이드드 섀도우는 지평선 객체에 대해 계산하려 하면 빠르게 병목이 됩니다. 원거리 배경의 실시간 영향을 비활성화하고 해당 영역을 라이트맵이나 프로브로 완전히 전환하면 드로우 콜이 급격히 줄어듭니다.

텍셀 밀도와 조명 소스 컬링 수동 제어

라이트맵용 2차 UV 언랩 자동 생성은 종종 최적이지 않은 결과를 낳습니다. 수동 UV2 레이아웃은 게임플레이 카메라와 중요도에 기반한 정밀한 Texel Density 분포를 허용합니다. 건물 외벽, 복도, 활성 상호작용 영역은 높은 텍셀 밀도를 부여하고, 지붕, 벽 뒷면, 접근 불가 영역은 최소로 압축합니다. 이는 라이트 아틀라스 공간을 절약하고 전경의 압축 아티팩트를 방지합니다.

Unity에서 품질과 성능을 균형 맞추기 위해 Distance Shadowmask 모드를 사용합니다. 카메라로부터 50~80미터 이내에서는 동적 섀도우를 렌더링하고 베이크된 GI를 오버레이합니다. 이 반경을 넘으면 라이트맵의 정적 섀도우만 렌더링합니다. 전환은 부드럽고 GPU 부하가 안정화됩니다.

Google AdInline article slot

그러나 Built-in Render Pipeline에는 포인트 및 스포트라이트 소스의 거리 컬링 네이티브 메커니즘이 없습니다. 원거리 방의 램프가 계속 계산되어 자원을 낭비합니다. 해결책은 커스텀 매니저입니다. 스크립트가 활성 소스 풀을 유지하며, 주기적으로 (2~3초마다) 카메라 거리를 확인하고 활성화 상태를 토글합니다. 비동기 확인으로 마이크로 스터터를 방지하고 프레임에서 시각적으로 관련된 소스만 활성화합니다.

커스텀 셰이더를 통한 지형 조명 프로젝션

지형 데코(눈더미, 바위, 식물)는 표준 라이트맵핑에서 심각한 문제를 일으킵니다. 모든 소형 객체를 베이킹하는 데 시간이 너무 오래 걸리고, 수천 인스턴스에 Light Probes를 사용하면 추가 드로우 콜이 발생하며 정적 배칭이 깨집니다.

효과적인 대안은 지형 라이트맵을 상부 지오메트리에 상단에서 하단으로 프로젝션하는 셰이더를 작성하는 것입니다. 라이트맵은 지형 데이터만 포함해야 합니다. 셰이더는 데코 버텍스의 월드 좌표를 읽어 지형 UV 공간으로 변환하고 베이크된 라이트의 해당 텍셀을 샘플링합니다. 결과는 프로브 의존 없이 주변 폐색과 기본 조명을 시뮬레이션합니다.

Google AdInline article slot

추가로 셰이더에 버텍스 블렌딩을 통합합니다. 메시 하단이 지형 표면에 접촉할 때 알베도, 노멀, 러프니스 마스크가 부드럽게 블렌딩됩니다. 이는 하드 심을 제거하고 객체 베이스에 눈 쌓임 효과를 만들며, 흩어진 프로프를 지형과 통합된 지오메트리로 시각적으로 융합합니다. 이 방법은 교차 심을 완전히 제거하고 포스트프로세싱이나 복잡한 복셀 블렌딩 시스템보다 훨씬 빠릅니다.

캐스케이드드 섀도우 수정과 프로그래머틱 블러링

Unity의 표준 Directional Light 섀도우는 두 극단을 보입니다. 지나치게 선명하고 계단식인 경우나 Shadow Map 해상도를 낮추면 흐릿하면서 눈에 띄는 플리커링이 발생하죠. 실제 조건에서 섀도우 부드러움은 오클루더와 조명 소스 각 크기에 따른 거리에 의존합니다. 객체 베이스의 섀도우는 항상 선명하지만, 펜움브라는 거리에 따라 확장됩니다.

무거운 파이프라인 없이 물리적으로 정확한 동작을 시뮬레이션하기 위해 점접촉 섀도잉 알고리즘과 프로그레시브 캐스케이드 블러링을 적용합니다. 서드파티 솔루션은 표준 섀도우 파이프라인을 수정하여 깊이 및 카메라 거리 기반 필터링을 추가합니다. 이는 근거리 존에 높은 Shadow Map 해상도를 유지하고 원거리 캐스케이드를 부드럽게 블러링하여 앨리어싱을 제거하고 필레이트 요구를 줄입니다. HDRP 내장 기능과 달리 레이 트레이싱 계산이나 무거운 포스트 이펙트를 피하며 중급 하드웨어 호환성을 보장합니다.

핵심 포인트

• 하이브리드 렌더링은 명확한 지오메트리 분리를 요구합니다: 대형 정적 객체는 라이트맵, 소형 데코와 동적 객체는 Light Probes.

• 수동 UV2와 Texel Density 튜닝은 비디오 메모리를 절약하고 게임플레이 핵심 영역의 조명 디테일을 높입니다.

• 커스텀 지형 라이트맵 프로젝션 셰이더는 수천 소형 객체의 프로브 필요성을 제거하여 드로우 콜을 줄이고 배칭을 개선합니다.

• 풀 매니저를 통한 포인트 라이트 거리 컬링은 Built-in RP의 누락된 네이티브 기능을 보완합니다.

• 거리 기반 프로그레시브 캐스케이드 섀도우 블러링은 앨리어싱과 플리커링을 성능 손실 없이 해결합니다.

— Editorial Team

Advertisement 728x90

다음 읽기