볼류메트릭 라이팅은 3D 컴퓨터 그래픽스에서 가장 감성적인 기술 중 하나입니다. 아티스트와 개발자들은 이 기술을 종종 '갓 레이(god rays)', '광선(light beams)', 또는 '광선 빔(light shafts)'이라고 부르며, 볼류메트릭 라이팅은 3차원 공간 내에서 안개, 연기, 먼지 같은 참여 매체를 통과하며 산란되는 빛의 움직임을 시뮬레이션합니다. 이 기술은 정적 3D 렌더링과 비디오 게임이나 VR 같은 실시간 응용 프로그램에서 깊이 인식과 몰입감이 미묘한 조명 효과에 의존하기 때문에 필수적입니다. 적절한 구현을 위해서는 셰이더, 성능, 렌더링 엔진의 파이프라인에 대한 세심한 주의가 필요합니다.
볼류메트릭 라이팅 렌더링은 조명 소스, 카메라, 안개 볼류메트릭 간의 관계를 이해하는 것부터 시작됩니다. 소프트웨어에 따라 차이가 있지만, 기본 원리는 일관됩니다: 볼류메트릭 라이팅은 안개나 입자의 볼록 기반 표현과 빛의 상호작용을 계산하여 구현됩니다. 오프라인 및 실시간 렌더 엔진을 위한 일반적인 워크플로우는 다음과 같습니다:
먼저 스포트라이트나 포인트 라이트를 사용합니다. 이 라이트가 안개나 먼지 입자로 가득 찬 볼류메트릭을 향하도록 방향을 조정합니다. 이 안개 볼류메트릭은 밀도, 산란 계수, 이방성 등 빛이 어떻게 확산되는지를 결정하는 요인들로 정의됩니다. 예를 들어 Blender에서는 볼류메트릭 산란 셰이더를 큐브 안에 적용하고, 높은 파워 값을 가진 스포트라이트와 같은 라이트 소스를 이를 통해 향하도록 배치하는 방식이 사용됩니다.
이방성은 산란의 방향성을 제어합니다. 값이 0일 때는 빛이 균일하게 산란되며, 양의 값(1에 가까울수록)은 빛을 앞쪽으로 집중시키고, 음의 값은 빛을 뒤쪽으로 산란시킵니다. 적절한 설정은 빛의 빔이 어떻게 보이는지(예: 선명하고 집중된 또는 부드럽고 확산된)에 극적인 영향을 미칠 수 있습니다. 밀도 값이 높을수록 안개가 더 두꺼워지는데, 이는 카메라가 볼류메트릭에서 얼마나 떨어져 있는지에 따라 빛을 가리거나 빛의 존재를 과장할 수 있습니다.
비디오 게임에서 정확한 볼류메트릭 라이팅은 볼륨내부의 명확히 정의된 그림자에 의존합니다. 이는 그림자 매핑을 통해 구현됩니다. 적절한 그림자 데이터가 없으면 광선은 평평하게 보이거나 아티팩트가 발생하기 쉽습니다. 오프라인 렌더링에서는 레이 트레이싱이 이러한 상호작용을 자연스럽게 처리합니다. 유니티나 언리얼과 같은 실시간 엔진에서는 그림자 매핑과 froxel 기반 조명(분할된 볼록 데이터)을 결합하여 성능과 정확성을 보장합니다.
대부분의 엔진은 포스트 프로세싱을 통해 신의 광선이나 블룸(bloom)과 같은 추가 효과를 시뮬레이션합니다. 유니티의 HDRP 및 URP 파이프라인은 모두 포스트 프로세싱 스택에 볼류메트릭형 안개 및 조명 설정을 제공합니다. 이러한 설정은 나머지 조명 설정과 자연스럽게 결합되어 최소한의 수동 조정만으로 현실감을 높여줍니다.
레이 트레이싱 기반 볼류메트릭 라이팅은 비교할 수 없는 현실감을 제공하지만, 그 대가로 높은 리소스 소비를 요구합니다. 성능 최적화는 특히 애니메이션 파이프라인이나 실시간 시나리오에서 필수적입니다. 고해상도 렌더링에서 효율적인 볼류메트릭 라이팅을 위한 최선의 실천 방법은 다음과 같습니다:
Gobo 라이팅(패턴이 있는 텍스처를 가진 광원)은 광선을 분산시켜 시각적 흥미를 유발하는 데 사용할 수 있습니다. 특히 복잡한 산란을 시뮬레이션하지 않고도 현실감 있는 볼류메트릭 효과를 생성하는 데 특히 유용합니다.
애니메이션에서 볼류메트릭 라이팅 효과를 별도의 렌더 패스로 캐싱하면 재사용이 가능해지고 반복 작업 속도가 향상됩니다. 일부 렌더 엔진은 여러 프레임에서 재사용할 수 있는 사전 계산된 복셀 또는 섀도우 볼륨을 지원하며, 이는 플리커링과 고스팅 아티팩트를 줄여줍니다.
분석적 조명은 수학적으로 단순화된 모델을 사용하여 조명 상호작용을 계산하며, 이는 일반적으로 더 빠른 렌더링을 가능하게 합니다. 실시간 솔루션은 반면에 성능과 근사치를 균형 있게 조정합니다.
이 방법은 방정식을 사용하여 부피 내의 산란을 추정합니다. 모든 광자를 시뮬레이션하는 것이 아니라, 방향, 밀도, 및 감쇠를 기반으로 광추(attenuation)를 근사화합니다.
유니티나 언리얼 엔진과 같은 엔진에서 실시간 볼류메트릭 라이팅은 최적화된 복셀 표현(froxel grids)과 깊이 기반 광산란 기술에 의존합니다. Unity의 HDRP는 froxel 기반 볼류메트릭 라이팅 시스템을 사용합니다. 이 시스템은 조명을 3D 타일로 처리하고 프레임별로 결합하여 다중 동적 조명을 프레임 드롭 없이 구현합니다. 반면 URP는 모바일이나 성능 요구가 낮은 어플리케이션에 적합한 경량화된 구현을 제공하며, 기능이 적고 안개 상호작용의 정확도가 낮습니다. 유니티를 사용하는 경우 볼류메트릭 라이팅을 활성화하려면 여러 곳에서 설정을 조정해야 합니다:
다른 엔진(예: Roblox)에서는 볼류메트릭 조명이 조명 품질과 리소스 제약에 연결되어 있습니다. 프레임 속도나 지연 없이 깊이감을 구현하려면 다양한 기술과 카메라에 효과를 연결하는 방법을 사용할 수 있습니다. 가장 일반적인 방법 중 하나는 메쉬 또는 “안개 메쉬”를 사용하여 동일한 효과를 쉽게 구현하는 것입니다. 그러나 메쉬 방법은 지연을 유발할 수 있으므로 쇼케이스 용도로만 사용하는 것이 권장됩니다.
볼류메트릭 라이팅은 게임 엔진, 맞춤형 렌더러, 실시간 시각화 도구 등 다양한 파이프라인에서 구현 가능합니다. 기능 세트는 다를 수 있지만, 핵심 설정은 대부분 일관됩니다. URP 및 기타 파이프라인에서 볼류메트릭 라이팅을 구현하는 방법은 다음과 같습니다:
알파 텍스처를 갖춘 추가 입자 시스템은 볼류메트릭 효과를 저렴하게 시뮬레이션할 수 있습니다. 대부분의 엔진이나 렌더링 프레임워크는 이 과정을 간소화하기 위한 도구 또는 플러그인을 제공합니다. 깊이 텍스처, 안개 볼류메트릭, 화면 공간 효과에 대한 지원은 과도한 성능 비용 없이 품질 높은 결과를 달성하는 데 핵심적입니다.
영화에서 볼류메트릭 라이트는 관객에게 시점을 안내합니다. 게임에서는 플레이어를 안내하거나 위협을 알리거나 감정적 분위기를 설정할 수 있습니다. 제품 시각화나 건축에서는 단순히 공간을 현실감 있게 느껴지게 합니다. 따라서 다음에 렌더링을 실행하고 장면에 뭔가 부족하다고 느낄 때, 빛의 선을 추가해 보는 것을 고려해 보십시오.