Baked lighting

실시간 렌더링의 베이크된 라이팅 완벽 가이드

라이팅은 3D 씬에서 깊이, 분위기, 사실감을 형성하는 가장 중요한 요소 중 하나입니다. 실시간 렌더링, 특히 게임 엔진이나 인터랙티브 어플리케이션에서 작업할 때의 도전 과제는 시각적 품질과 성능의 균형을 맞추는 것입니다. 베이크된 라이팅은 라이팅 데이터를 사전 계산하여 텍스처나 맵으로 저장해 실시간으로 사용하는 기술로, 높은 품질의 라이팅 효과를 유지하면서 렌더링 효율성을 크게 향상시킵니다. 이 글에서는 유니티, 언리얼 엔진, Blender와 같은 인기 3D 엔진에서 베이크된 라이팅의 기본 개념부터 베스트 사례까지 모든 것을  탐구합니다.

베이크된 라이팅의 정의 및 기본 원리와 장점

베이크된 라이팅은 라이팅 효과를 사전에 계산하여 정적 데이터로 저장하는 기술을 의미합니다. 이 사전 계산된 라이팅 세부 사항에는 직접광, 간접광, 그림자, 글로벌 일루미네이션 등이 포함되며, 이러한 정보는 렌더링 과정에서 3D 모델에 적용되는 텍스처인 라이트맵에 저장됩니다. 베이크된 라이팅의 주요 장점은 실시간 동적 라이팅에 필요한 계산 성능 없이도 소프트 그림자나 글로벌 일루미네이션과 같은 복잡한 라이팅 조건을 시뮬레이션할 수 있다는 점입니다.

베이크된 라이팅의 장점:

  1. 성능 최적화: 라이팅은 미리 계산되어 텍스처로 저장되므로 실시간으로 라이팅 상호작용을 계산할 필요가 없습니다. 이는 렌더링 엔진의 부하를 크게 줄여줍니다. 이는 비디오 게임과 같은 상호작용형 어플리케이션에 필수적입니다.  
  2. 향상된 시각적 품질: 베이크된 라이팅은 성능에 영향을 주지 않으면서 더 복잡한 라이팅 설정(예: 간접 라이팅, 글로벌 일루미네이션, 부드러운 그림자)을 가능하게 합니다. 이는 시각적으로 풍부한 환경을 창출합니다.  
  3. 사실적인 그림자와 라이팅 상호작용: 베이크 라이팅은 그림자를 매우 상세하고 정확하게 표현할 수 있으며, 이는 복잡한 지오메트리를 가진 환경에서 특히 중요합니다.

일반적인 베이크된 라이팅 요소:

  • 라이트맵: 계산된 라이팅 정보를 저장하는 텍스처    
  • 글로벌 일루미네이션 (GI): 라이팅이 표면에서 반사되는 방식을 시뮬레이션하여 근처 오브젝티브의 색상과 밝기에 영향을 미치는 기술

정적 라이팅 vs 동적 라이팅 vs 혼합 라이팅: 올바른 접근 방식 선택

실시간 렌더링에서 라이팅은 정적, 동적, 또는 두 가지의 조합(혼합)으로 분류될 수 있습니다. 이러한 유형 간의 차이를 이해하면 씬과 성능 요구사항에 가장 적합한 접근 방식을 선택하는 데 도움이 됩니다.

정적 라이팅

정적 라이팅은 씬에 내장되어 고정된 상태로 유지되는 라이팅을 의미합니다. 이는 환경이 변경되지 않거나 상호작용이 필요하지 않은 경우에 적합하며, 건축 시각화 등이 대표적인 예시입니다. 정적 라이팅은 한 번 계산되면 게임 플레이나 시뮬레이션 중에도 변경되지 않습니다.

동적 라이팅

동적 라이팅은 실시간으로 계산되어  물체가 그림자를 드리우고, 라이팅이 움직이며, 환경 요인이 씬의 라이팅에 영향을 미칩니다. 이는 환경과 동적으로 상호작용해야 하는 요소, 예를 들어 움직이는 캐릭터나 변화하는 날씨 조건 등에 필수적입니다.

혼합 라이팅

혼합 라이팅은 정적 라이팅과 동적  라이팅의 조합입니다. 이 접근 방식에서 정적 라이팅(예: 환경 라이팅이나 먼 곳의 햇라이팅)은 미리 계산되어 적용되며, 동적 라이팅(예: 스포트라이트나 플레이어가 활성화하는 라이팅)은 실시간으로 렌더 됩니다. 이 접근 방식은 성능과 유연성 사이의 균형을 제공합니다.

올바른 접근 방식 선택:

  • 정적:  상호작용이 없고 변경되지 않는 씬(예: 배경, 건축 시각화)예시 가장 적합합니다.    
  • 동적: 상호작용 요소, 실시간 환경, 또는 플레이어의 입력이나 시간대에  따라 라이팅이 변경되어야 하는 게임 등에 필수적입니다.    
  • 혼합: 일부 요소는 정적이지만 다른 요소는 동적 상호작용이 필요한 시나리오에 최적화되어 있습니다. 예를 들어, 고정된 스카이박스를 가진 야외 씬이지만 이동하는 라이팅 소스(예: 캐릭터의 횃불)가 있는 경우입니다.

인기 엔진(유니티, 언리얼, Blender)에서의 라이트 베이킹 워크플로우

베이크된 라이팅 설정 과정은 3D 소프트웨어와 게임 엔진마다 약간의 차이가 있지만, 기본 원리는 동일합니다. 아래에서는 유니티, 언리얼 엔진, Blender에서 베이크된 라이팅을 설정하는 기본 단계를 단계별로 설명하겠습니다.

Unity

  1. 라이팅을 베이크된 모드로  설정: 유니티에서 라이팅(라이팅 소스 아래에 있는)으로 이동하여 모드를 “Baked”로 설정합니다. 이 설정은 엔진이 해당 라이팅 소스의 라이팅을 미리 계산하도록 지시합니다.    
  2. 베이크된 설정: 라이팅 설정 패널을 열고 라이트맵 해상도, 베이크된  품질, 글로벌 일루미네이션 설정 등 파라미터를 조정합니다.  
  3. 라이팅 베이크된: 설정을 완료한 후 “Generate  Lighting” 버튼을 클릭합니다. 유니티는 씬 내 모든 정적 오브젝트에 대한 라이트맵을 생성합니다.

Unreal Engine

  1. 정적 라이팅 활성화: 라이팅 소스 속성에서 라이팅을 정적(Static)으로 설정합니다.    
  2. Lightmass 설정: 언리얼은 Lightmass를 사용하여 글로벌 일루미네이션을 계산하고 라이팅을 베이크된합니다. 더 나은 품질과  더 빠른 성능을 위해 Lightmass 설정을 조정합니다.    
  3. 라이팅  베이크된: 씬 내 정적 개체의 라이팅을 베이크 하려면 “Build Lighting” 버튼을 클릭합니다.

Blender

  1. 라이팅을  베이크된 모드로 설정: Blender에서 렌더 속성 패널의 라이팅 소스에서 “베이크된”을 활성화합니다.    
  2. 베이크된  유형 선택: 디퓨즈, 섀도우, 또는 결합된 유형 중에서 선택하여 베이크 할 정보의 유형을 지정합니다.  
  3. 라이팅을  베이크된: 해상도와 기타 파라미터를 설정한 후 “베이크된”을 클릭하여 라이트맵을 생성합니다.

어셋 준비: UV 언래핑, 라이트맵 해상도 및 텍셀 밀도

라이팅을 씬에 적용하기 전에 어셋을 적절히 준비하는 것이 중요합니다. 이는 적절한 UV 언래핑을 확인하고, 적절한 라이트맵 해상도를 설정하며, 텍셀 밀도를 일관되게 유지하는 것을 포함합니다.

라이트맵을 위한 UV 언래핑

UV 언래핑은 3D 모델의 표면을 2D 레이아웃으로 평면화하는 과정으로, 텍스처를 적용하기 위해 필요합니다. 라이트맵의 경우, UV가 겹치지 않고 균일하게 간격이 유지되어야 라이팅 아티팩트(예: 경계선이나 불균일한 그림자)를 방지할 수 있습니다.

라이트맵 해상도

라이트맵의 해상도는 베이크된 라이팅 품질과 세부 수준에 직접적인 영향을 미칩니다. 해상도가 높을수록 품질이 향상되지만, 메모리 사용량이 증가하는 단점이 있습니다. 핵심은 품질과 성능 사이의 균형을 찾는 것입니다. 일반적으로 라이트맵은 대상의 크기 및 카메라와의 거리 등에 따라 512x512, 1024x1024, 또는 2048x2048 해상도로 생성됩니다.

텍셀 밀도

텍셀 밀도는 3D 표면 단위 면적당 텍스처 픽셀(텍셀)의 수를 의미합니다. 씬 내 모든 개체에서 텍셀 밀도를 일관되게 유지하면 텍스처 품질의 균일성을 유지하고 텍스처 변형이나 흐림 현상을 방지할 수 있습니다. Blender 도구는 텍셀 밀도 조정을 자동화하여 효율성을 높일 수 있습니다.

글로벌 일루미네이션 및 섀도우 베이킹: 사실감과 속도를 위한 기술

베이크된 라이팅은 단순히 직접광만을 의미하는 것이 아닙니다. 글로벌 일루미네이션(GI)을 시뮬레이션하고 그림자를 베이크하여 사실감을 높이는 과정도 포함됩니다. 글로벌 일루미네이션은 라이팅이 표면에서 반사되어 씬 내 다른 물체에 미치는 영향을 시뮬레이션합니다. GI와 그림자를 베이크 하면 실시간 계산의 필요성을 제거함으로써 씬의 시각적 품질과 성능을 크게 향상시킬 수 있습니다.

글로벌 일루미네이션 베이킹 기술

  • 광자 매핑:  이 기술은 라이팅의 반사와 간접 라이팅을 시뮬레이션하여 물체에 더 자연스럽고 부드러운 외관을 부여합니다.  
  • 조도 캐싱:  이 방법은 씬 내 다양한 위치에서 계산된 라이팅 데이터를 저장하고 이를 보간하여 복잡한 라이팅 계산에 필요한 계산 시간을 줄입니다.

섀도우 베이킹

섀도우 베이킹은 사전 계산된 그림자 데이터를 라이트맵에 저장하여 정적 오브젝트에 동적 그림자 계산의 계산 부담 없이 사실적인 그림자를 제공합니다. 그림자 부드러움과 해상도 등 요소를 고려하여 그림자가 환경과 자연스럽게 어우러지도록 주의하십시오.

라이트맵 최적화: 압축, 아틀라싱 및 메모리 사용량

라이팅이 베이크된 후에는 메모리 사용량을 줄이고 빠른 로딩 시간을 보장하기 위해 라이트맵을 최적화하는 것이 필수적입니다. 여러 가지 기술이 적용될 수 있습니다:

압축(Compression)

라이트맵은 시각적 품질을 크게 손상시키지 않고 크기를 줄이기 위해 압축될 수 있습니다. 대부분의 3D 소프트웨어 및 엔진은 라이트맵 압축을 지원하며, 이는 특히 메모리 제약이 엄격한 모바일 게임이나 어플리케이션에서 유용합니다.

아틀라싱(Atlasing)

아틀라스링은 여러 개의 라이트맵을 단일 텍스처로 압축하여 엔진이 처리해야 하는 텍스처의 수를 줄이는 과정입니다. 이는 메모리를 절약하고 성능을 향상시킬 수 있으며, 특히 대규모 씬에서 효과적입니다.

메모리 사용량

라이트맵의 메모리 사용량을 최적화하는 것은 성능을 유지하는 데 매우 중요합니다. 라이트맵 해상도 조정, 압축 기술 활용, UV 매핑을 적절히 최적화하는 것은 특히 대규모 씬에서 라이트맵의 메모리 사용량을 크게 줄일 수 있습니다.

일반적인 아티팩트(이음새, 블리딩, 얼룩) 문제 해결

라이팅을 렌더링할 때 최종 렌더링의 품질에 영향을 미치는 일반적인 아티팩트가 발생할 수 있습니다. 이러한 아티팩트에는 경계선, 라이팅 번짐, 그리고  반점 등이 포함되며, 이는 라이팅이 자연스럽지 않거나 사실적이지 않게 보일 수 있습니다.

이음새(Seams)

UV 아일랜드가 제대로 정렬되지 않았거나 텍스처가 매끄럽게 연결되지 않을 때 틈이 발생할 수 있습니다. 이를 해결하려면 적절한 UV 언래핑을 확인하고 Texel Density Checker와 같은 도구를 사용하여 일관성을 확보해야 합니다.

라이트 블리딩(Light Bleeding)

라이트 블리딩은 라이팅이 허용되지 않은 영역으로 새어 들어가는 현상으로, 주로 밀봉이 불완전한 연결부나 라이팅맵 해상도가 부족할 때 발생합니다. 라이트 블리딩을 방지하려면 라이팅맵의 해상도를 높이고 UV 아일랜드 사이의 패딩을 적절히 확보하십시오.

얼룩(Splotches)

얼룩 현상은 베이크된 과정에서 라이팅 데이터를 정확히 보간하지 못할 때 발생할 수 있습니다. 이 문제를 완화하려면 베이크된 설정을 조정하고, 라이트맵 해상도를 높이며, 라이팅 설정이 올바르게 구성되었는지 확인하십시오.

결론

베이크된 라이팅은 실시간 렌더링에서 강력한 도구로, 시각적 품질과 성능을 효과적으로 균형 잡는 방법을 제공합니다. 베이크된 라이팅의 기본 원리를  이해하고, 씬에 맞는 적절한 라이팅 방법을 선택하며, 어셋을 최적화하면 성능을 희생하지 않고도 놀라운 결과를 얻을 수 있습니다. 유니티, 언리얼 엔진 또는 Blender에서 작업하든, 베이크된 워크플로우를 마스터하면 3D 렌더링 기술을 한 단계 업그레이드하고 더 몰입감 있고 사실적인 환경을 창조할 수 있습니다!

관련 포스트

No items found.
live chat