올해 안으로 Unity 6에 추가될 새로운 조명 기능에 대한 자세한 내용을 공유하게 되어 매우 기쁩니다.
새롭고 강력한 광원 베이크(light baking) 아키텍처와 APV(적응적 프로브 볼륨)를 사용하여 라이트 프로브 조명 환경을 저작(authoring)하는 혁신적인 접근 방식을 통해 더욱 간소화된 조명 제작 프로세스를 경험할 수 있습니다. 이렇게 하면 런타임 시 고성능을 확보하면서 시각 요소를 크게 향상할 수 있습니다.
ㅣ월드에 전역 조명 적용
사전 계산된 조명 데이터로 작업해 본 적이 있다면 그 과정이 얼마나 지루한지 알 것입니다. 라이트맵의 사전 계산 프로세스는 시간이 오래 걸릴 수 있습니다. 라이트맵 UV를 저작하고, 동적 오브젝트에 올바르게 조명을 비추기 위해 프로브를 배치해야 하며, 애플리케이션의 런타임 메모리에 많은 부담을 줄 수 있는 큰 텍스처를 처리해야 하기 때문입니다.
Unity 6는 APV(적응적 프로브 볼륨)를 통해 고품질의 라이트 프로브 조명 환경을 저작할 수 있는 새로운 방법이 추가됐으며, 광원 베이크 백엔드의 근본적인 개선을 통해 안정성이 높아졌습니다.
ㅣ적응적 프로브 볼륨
적응적 프로브 볼륨(Adaptive Probe Volume)은 씬의 지오메트리 밀도에 따라 Unity가 자동으로 배치하여 베이크된 간접 조명을 제작하는 라이트 프로브 그룹입니다.
적응적 프로브 볼륨은 3D 구조의 ‘브릭(brick)’으로 자동으로 채워집니다. 각 브릭에는 64개의 라이트 프로브가 4×4×4 그리드에 배열되어 있습니다.
적응적 특성으로 인해 APV는 지오메트리가 많은 영역에는 프로브를 더 조밀하게 생성하고 씬의 배경처럼 오브젝트 밀도가 낮은 영역에는 더 적은 수의 프로브를 생성합니다.
적응적 프로브 볼륨은 아름다운 조명 환경을 저작하는 데 필요한 모든 종류의 기능을 제공합니다.
● 프로브 배치 워크플로를 간소화하고 라이트 프로브 기반 간접 분산 조명을 위한 반복 작업을 더 빠르게 수행할 수 있습니다.
● APV 픽셀당 광원은 라이트 프로브 그룹보다 훨씬 더 높은 품질을 제공하며 라이트맵보다 방향성이 뛰어나 전반적인 조명 품질이 우수합니다.
● 원활하게 대기 효과와 통합되어 HDRP의 볼류메트릭 포그, URP 및 HDRP의 VFX 그래프 파티클 같은 효과를 간접 조명으로 아름답게 표현합니다.
● 스카이 오클루전 및 조명 시나리오를 통해 시각적으로 멋진 조명 전환 효과를 구현하여 시간대 및 조명 켜기/끄기 상황을 표현하는 데 적합합니다.
● 렌더 파이프라인 및 타겟 하드웨어 사용에 따라 런타임 성능 최적화에 대한 더 많은 제어 기능을 제공합니다.
● 일련의 스트리밍 기능을 통해 라이트 프로브 데이터를 디스크에서 CPU로, CPU에서 GPU로 스트리밍할 수 있습니다.
● 빛 번짐 효과를 줄이기 위한 강력한 툴셋을 제공합니다.
APV는 대기 효과와 원활하게 통합되므로, 이제 에셋 스토어에서 [HDRP] Gate Backyard 프로젝트를 사용하여 HDRP의 볼류메트릭 포그와 URP 및 HDRP의 VFX 그래프 파티클 같은 효과를 간접 조명으로 아름답게 표현할 수 있습니다.
APV의 일반 설정 탭에서 Min Probe Spacing 및 Max Probe Spacing 같은 파라미터를 제어하여 주변 지오메트리를 기반으로 여러 세분화 수준을 생성할 수 있습니다. 보통 조밀한 영역은 가장 높은 해상도를 사용하고 지오메트리가 적은 영역은 낮은 밀도 수준을 사용합니다. 이렇게 자동으로 작동하는 적응적 기능을 통해 가장 필요한 영역에 집중하여 리소스를 효율적으로 할당할 수 있습니다.
Lighting 창의 Adaptive Probe Volumes 탭에서 APV가 사용할 세분화 수준을 지정할 수 있습니다.
프로브를 자동으로 생성하려면 적응적 프로브 볼륨을 생성하면 됩니다. 작업하는 동안 실시간 업데이트를 확인할 수 있으므로 베이크하지 않아도 프로브 배치를 미리 볼 수 있습니다. 이러한 업데이트는 사전에 정의한 브릭과 세분화 수준을 기반으로 하며 주변 지오메트리의 근접도에 따라 조정됩니다.
라이브 업데이트 디버그 모드를 사용하면 베이크하기 전에 다양한 프로브 브릭을 실시간으로 사전 시각화할 수 있습니다.
ㅣ조명 생성
조명 생성은 씬에서 시각화할 수 있는 라이트 프로브를 포함한 모든 조명 데이터를 미리 계산합니다. 브릭을 사용하여 미리 본 것처럼 프로브를 배치할 때 적용된 다양한 세분화 수준을 확인할 수 있습니다
렌더링 디버거를 사용하여 프로브와 여러 세분화 수준을 표시할 수 있습니다.
ㅣ빛 번짐 효과 문제 해결
라이트 프로브 데이터로 작업해 본 적이 있다면 빛 번짐 효과와 관련된 여러 가지 문제를 잘 알고 있을 것입니다. 유니티는 APV를 개발할 때 가상 오프셋(Virtual Offset), 확장(Dilation), 프로브 조정 볼륨(Probe Adjustment Volumes), 렌더링 레이어(Rendering Layers), 빛 번짐 효과 방지 모드(Light Leaking Prevention Modes) ‘성능’(Performance) 및 ‘품질’(Quality) 등 빛 번짐 효과 문제를 해결하는 데 도움이 되는 툴박스를 추가했습니다.
다음 예시를 확인해 보겠습니다. 조명 디버그 뷰를 사용하면 빛 번짐 효과가 발생하는 활용 사례를 관찰할 수 있습니다. 이 상황에서는 외부에서 들어오는 밝은 빛을 건물의 벽과 바닥을 통해 볼 수 있습니다. 정반대로 밖에서는 내부에서 어두운 빛이 번지는 문제가 발생합니다. 이는 낮은 해상도(프로브 간격이 1미터)와 얇은 벽 때문일 수 있습니다. 이 문제를 해결할 수 있는 방법을 살펴보겠습니다.
전역 조명 디버그 뷰를 검사해 보면 빛 번짐 효과는 조명이 급격하게 바뀌고 벽이 얇은 영역에서 특히 두드러집니다.
이 문제를 조사하는 데 Debug Probe Sampling 옵션을 사용하면 샘플링된 각 프로브를 관련 가중치와 함께 표시할 수 있습니다. 이 경우에는 외부의 밝은 프로브와 내부의 어두운 프로브 사이에 결과가 보간된 것을 볼 수 있습니다. 텐트 내부는 내부 프로브만 샘플링하는 것이 이상적입니다.
Debug Probe Sampling 옵션은 런타임에 프로브가 샘플링되는 방식을 이해하고 잠재적인 문제를 식별하는 데 유용합니다.
APV용 렌더링 레이어(6000.1f.1에 탑재)를 사용하면 최대 4개의 서로 다른 마스크를 만들고 특정 오브젝트의 특정 마스크로 샘플링을 제한할 수 있습니다. 이는 내부 오브젝트가 외부 프로브를 샘플링하는 것을 방지하거나 그 반대의 경우를 방지하는 데 매우 유용합니다.
시스템은 조명을 생성할 때 베이크 프로세스 중에 주변 오브젝트를 기반으로 프로브에 레이어를 자동으로 할당하므로 프로브별 레이어를 수동으로 할당할 필요가 없습니다. 이 작업이 완료되면 조명을 생성하고 별도의 내부 및 외부 마스크를 수동으로 생성하여 텐트의 빛 번짐 효과가 줄어든 것을 관찰할 수 있습니다.
런타임에 오브젝트가 할당 레이어를 기반으로 프로브를 샘플링하여 프로브 해상도와 상관없이 빛 번짐 효과를 개선합니다.
빛 번짐 효과를 더욱 철저하게 방지하려면 Unity의 빛 번짐 효과 방지 모드의 ‘성능’ 및 ‘품질’ 모드를 활용하면 됩니다.
성능 모드는 유효하지 않은 프로브로부터 샘플링 위치가 멀어지도록 이동하여 빛 번짐 효과를 해결합니다. 이는 모든 유효 프로브의 적절한 샘플링 위치를 식별하고 유효하지 않은 프로브를 회피할 수 있는 간단한 시나리오에서 효과적입니다. 그러나 프로브 설정에 따라 최적의 샘플링 위치를 사용하지 못할 수도 있습니다. 그러면 유효하지 않은 프로브를 샘플링하여 빛 번짐 효과가 발생할 수 있습니다.
현재 기본적으로 활성화된 품질 모드(6000.0.3f1에 탑재)는 유효 프로브만 활용되도록 최대 세 번의 샘플링을 시도합니다. 이 모드는 런타임 성능에 약간의 오버헤드가 발생할 수 있으며 이는 저사양 플랫폼에서 특히 두드러집니다.
빛 번짐 효과 감소와 렌더링 레이어를 결합하여 빛 번짐 효과를 더욱 효과적으로 방지할 수 있습니다. 이 모드는 유효성 문제가 있거나 다른 레이어에 있기 때문에 유효하지 않은 프로브가 샘플링되지 않도록 하는 데 도움이 됩니다.
성능 모드와 달리 품질 모드는 빛 번짐 효과를 줄이는 데 도움이 됩니다.
ㅣ경계 부분 문제 해결 서로 다른 수준 간에 잠재적으로 보이는 경계 부분을 줄여서 여러 세분화 수준을 향상했습니다(6000.0.4f1에 탑재). 이는 두 수준 사이에 위치한 프론티어 프로브의 값을 미리 보간된 값으로 대체하여 자동으로 이루어집니다. 이 프로세스는 베이크 도중 발생하므로 런타임에도 관련된 성능 비용이 발생하지 않습니다.
이 경계 부분 자동 제거 기능이 세분화 수준 간에 부드러운 전환을 생성하여 세분화 수준을 숨기는 데 어떻게 도움이 되는지 전역 조명 디버그 뷰에서 확인할 수 있습니다.
ㅣAPV 조명 전환으로 더욱 역동적인 시각적 경험 제공
APV를 사용하면 스카이 오클루전 및 조명 시나리오를 통해 시각적으로 멋진 조명 전환 효과를 구현할 수 있습니다. 이는 시간대와 조명 켜기/끄기 상황을 표현하는 데 적합합니다. 조명 전환 효과의 두 가지 예시를 살펴보겠습니다.
첫째는 APV의 조명 시나리오를 사용한 URP 3D 샘플 프로젝트의 오아시스 씬, 둘째는 APV의 스카이 오클루전을 사용한 정원 씬입니다.
ㅣ오아시스 씬에서 APV로 조명 시나리오 추가하기
APV를 사용하면 베이크된 조명 데이터 간 전환 또는 블렌딩으로 다양한 조명 시나리오를 구현할 수 있습니다. 이 기능은 다양한 시간대를 시뮬레이션하거나 같은 씬이나 베이킹 세트에서 조명을 켜고 끄는 것을 전환하는 데 특히 유용합니다.
조명 시나리오는 베이크된 APV 라이트 프로브 데이터만 관리하므로 다른 요소는 수동으로 처리해야 합니다. 오아시스 씬에서 예를 들기 위해 하늘, 조명, 안개 파라미터, 반사 프로브를 업데이트하는 스크립트를 만들었습니다. APV 베이크된 시나리오는 ProbeReferenceVolume API를 사용하여 런타임에 관리할 수 있으며 예제는 기술 자료에서 확인할 수 있습니다.
이 씬은 낮과 밤 시나리오를 활용하여 APV로 생성된 여러 버전의 간접 분산 조명을 베이크합니다.
여러 시나리오의 간접 분산 조명을 블렌딩하여 낮과 밤을 부드럽게 전환할 수 있습니다. 예를 들어 타임라인으로 애니메이션화할 수 있는 블렌딩 변수를 ProbeReferenceVolume API를 통해 노출하면 이 효과를 구현할 수 있습니다.
ㅣ정원 씬에서 APV로 스카이 오클루전 활용하기
스카이 오클루전은 조명 시나리오의 대안으로서 씬의 조명 전환을 관리합니다. 여러 시나리오가 필요하지 않고 단 한 번의 베이크로 더 간단하게 설정할 수 있습니다. 대신 스카이 오클루전은 하늘 조명만 처리하므로 방향 광원이나 펑추얼(punctual) 광원의 간접 조명은 관리할 수 없습니다.
스카이 오클루전 기능을 사용한 정원 씬입니다. 이 이미지 시퀀스에서는 앰비언트 프로브만 적용된 모습, 앰비언트 프로브와 스카이 오클루전의 조명을 결합한 모습, 스카이 오클루전이 적용된 모습을 차례대로 관찰할 수 있습니다. APV 오클루전의 디버그 뷰도 제공되었습니다.
스카이 오클루전은 베이크된 추가 데이터를 사용하여 하늘 조명을 다른 식으로 관리하며, 이는 표준 APV 하늘 베이킹과는 별개입니다. 씬의 각 영역이 받아야 하는 하늘 조명의 양이 이 데이터에 저장되므로 런타임에 하늘 조명의 색상과 강도를 조정할 수 있습니다. 베이크된 정적 오클루전 데이터와 함께 동적 앰비언트 프로브를 런타임에 활용하면 하늘 조명의 근사치를 제공하는 동시에 씬 조명을 동적으로 조정할 수 있습니다.
스카이 오클루전은 URP 및 HDRP에서 모두 지원됩니다. HDRP 앰비언트 프로브는 HDRP Physical Sky에서 자동으로 업데이트됩니다. 그러나 URP에서 스카이박스 모드를 사용할 때는 앰비언트 프로브가 하늘의 변화에 따라 실시간으로 자동 업데이트되지 않습니다. Unity에서 변화하는 하늘 색상에 맞게 자동으로 조정되지 않으므로 애니메이션이 적용된 하늘 모습과 일치하도록 그레디언트 또는 색상 모드를 사용하여 수동으로 색상을 애니메이션화해야 합니다.
예를 들어 정원 씬에서 환경 설정의 그레디언트 모드를 사용하면 앰비언트 프로브 색상을 수동으로 애니메이션화할 수 있습니다. 이 설정을 오클루전 데이터와 함께 사용하면 하늘 분산 조명을 애니메이션화하는 데 필요한 최적의 근사치를 구현하여 변화하는 시간대를 적절하게 묘사할 수 있습니다. 이 기능은 여러 조명 시나리오 없이 단일 베이크를 활용하며 다양한 색상 배리에이션을 제공할 수 있습니다.
오클루전 데이터를 환경 설정의 그레디언트 모드와 결합하면 앰비언트 프로브 색상을 수동으로 애니메이션화할 수 있습니다. 에셋 스토어의 Azure[Sky] Dynamic Skybox를 하늘 셰이더에 사용합니다.
Unity의 새로운 광원 베이크 아키텍처가 Unity 6에 제공됨에 따라 이제 GPU 광원 베이커의 프리뷰 버전이 종료되었습니다.
라이트매핑된 건축 내부 환경. 만든 사람들: ArchvizPRO Interior Vol.10
새로운 광원 베이커는 에디터 반응성과 베이크 속도를 염두에 두고 제작되었습니다. 이제 온디맨드 베이킹을 사용할 때 생성 버튼을 클릭하면 Unity가 씬 상태의 ‘스냅샷’을 생성합니다. 더 이상 Unity에서 매 프레임마다 씬 상태를 확인하지 않으므로 이전처럼 에디터 성능이 저하되지 않습니다.
새롭게 디자인한 베이킹 백엔드로 코드 기반이 대폭 단순화되어 버그를 더 쉽고 빠르게 수정할 수 있게 되었고 새로운 버그가 발생할 위험이 낮아졌습니다.
ㅣ새로운 베이킹 프로파일
적합한 워크플로 목적을 선택할 수 있는 새로운 베이킹 프로파일도 제공합니다.
새로운 광원 베이커를 사용하면 최저 메모리 사용량부터 고성능까지 워크플로 목적에 맞는 옵션을 선택할 수 있습니다.
에디터에서 계속 작업하면서 전반적인 에디터 반응성을 최고로 유지하려는 경우 유용한 ‘Lowest Memory Usage’부터, 가능한 한 빨리 작업을 완료하고 베이킹 시간 동안 에디터에서 다른 작업을 할 필요가 없는 경우 유용한 ‘Highest Performance’까지 다양한 범위를 선택할 수 있습니다.
ㅣ인터랙티브 GI 디버그 미리 보기 모드로 대체되는 자동 생성
베이크된 조명 데이터를 반복적으로 저작하고 문제를 해결하는 것은 베이크된 GI(전역 조명)를 사용하는 크리에이터에게 중요한 활용 사례입니다.
따라서 다양한 GI 관련 씬 뷰 드로우 모드에 새로운 인터랙티브 미리 보기 기능을 추가하여 조명 데이터를 미리 볼 수 있는 전용 인터랙티브 GI 디버그 미리 보기 모드로 Unity의 자동 생성 기능을 대체했습니다.
새로운 광원 베이커를 사용하면 최저 메모리 사용량부터 고성능까지 워크플로 목적에 맞는 옵션을 선택할 수 있습니다.
이를 통해 씬이 수정될 때마다 디버그 뷰가 업데이트됩니다. 미리 보기는 베이크된 조명 데이터를 대체하지 않으므로 씬에 손상을 일으키지 않습니다.
Unity의 기존 자동 생성 아키텍처를 벗어나면 베이킹 파이프라인을 최적화하여 안정성을 높일 수 있습니다.
ㅣEnlighten 실시간 GI 지원 종료 경로 알림
Unity 6는 Enlighten 실시간 GI를 지원하는 마지막 릴리스입니다. 이전에 공지한 지원 종료 경로에 대한 자세한 내용은 2021년 전역 조명 관련 업데이트 포럼 게시물에서 확인할 수 있습니다.
ㅣUnity 6에서 제공되는 조명 기능에 대해 자세히 알아보기
다음은 각각 2023.1, 2023.2, Unity 6(2023.3) 베타 릴리스에 대한 이전 피드백 요청으로 연결되는 링크입니다.