실사에 가까운 그래픽 기술을 언급할 때 '빛', '광원'이라는 단어는 반드시 들어가곤 한다. 모델링이 정교한 건 기본에, 시시각각 조명이 변하는 게임 내 환경에서 이를 사실적으로 반영해서 표현하는 것까지 뒷받침되어야 비로소 '실사'에 가깝다고 말할 수 있기 때문이다.
유니티는 지난 2023년부터 실시간으로 바뀌는 빛의 변화를 포착하기 위해 '어댑티브 프로브 볼륨'이라는 개념을 제시했다. 씬에 배치된 수천 개의 프로브들이 해당 구역의 빛의 변화에 맞춰 베이크하는 식으로 빛의 변화를 더욱 더 효율적으로 빠르게 캐치할 수 있도록 한 것이다.
유니티6로 확정 이전, 유니티 2023.2 테크스트림부터 적용된 이 기술은 유니티6에서는 어떻게 발전할까? 또 더욱 실사에 가까운 그래픽을 보여주기 위해서 유니티6는 어떤 광원 기술을 보여줄지, 맥심 그랑지 선임 TA와 데이빗 르웰린 선임 TA, 레미 샤플랭 선임 TA 세 명이 유나이트 2024에서 설명을 이어갔다.
라이트 프로브라는 개념은 이미 유니티가 2011년 3.5버전에 적용하던 개념이었다. 그간 유니티에서 쓰던 라이트의 한계를 보완하기 위해서 나온 라이트 프로브는 빛이 변화하는 지점에 배치, 해당 지점의 변화를 함수로 계산해 적절하게 빛을 표현해주는 방식이다.
기존의 라이트맵은 복잡한 지형에 적용하기 어렵고 지루한 작업이 계속 이어지는 데다가 정적 처리도 어렵고, 텍스처 크기 때문에 최적화가 어려웠다. 이에 비해 함수 계수가 저장된 라이트 프로브는 작은 사이즈로 동적으로 변하는 빛을 표현할 수 있다는 강점이 있었다. 그러나 이전의 라이트 프로브는 수동으로 배치해야만 했기에 최적화된 위치에 배치하는 것이 까다로웠다. 또한 라이트 프로브 데이터의 스트리밍도 지원하지 않아서 프로브의 수가 많아질수록 처리도 자연스럽지 못했다.
그래서 유니티는 2022년에 '어댑티브 프로브 볼륨'을 공개했다. 기존의 라이트 프로브와 라이트 맵을 혼용하던 방식이 아닌, 어댑티브 프로브 볼륨으로 라이트 처리를 할 수 있게 했으며, 그래서 이터레이션 시간이 빨라졌다. 이전에는 라이트맵과 라이트 프로브 그룹이 따로 베이크됐지만 어댑티브 프로브 볼륨에서는 정적인 오브젝트와 동적인 오브젝트 모두 다 프로브 볼륨을 활용하는 만큼 하나의 시스템을 거쳐서 베이크된다. 또한 일일이 수동으로 배치해야 했던 이전의 라이트 프로브와 달리 자동으로 배치가 되며, 그 밀도 조절도 드래그해서 지정한 뒤 자신이 원하는 대로 패러그래프를 조절하는 식으로 쉽게 처리할 수 있었다.
또한 빛의 변화를 한층 더 쉽게 구현할 수 있도록 시나리오를 설정해두고 블렌딩하는 라이트 시나리오, 낮과 밤 시간대의 변화를 손쉽게 구현하는 스카이 오클루전 등의 기능도 마련됐다. 여기에 갑작스럽게 메모리 점유율이 튀거나 하는 불안정함을 막기 위해 런타임 동안 프로브 라이트 데이터를 스트리밍하게끔 했다. 그래서 URP 템플릿 '오아시스'와 비교했을 때 기존 라이트맵 대비 약 3분의 1 적은 용량으로 씬을 구현할 수 있었다.
그렇다면 유니티는 왜 라이트 프로브를 발전시켰을까? 답은 간단했다. 용량을 적게 먹고, 텍스처 샘플링 같은 복잡한 수고 없이 초보들도 쉽게 라이팅을 만족스럽게 구현할 수 있었기 때문이었다. 용량을 적게 먹고 부하가 적은 만큼 모바일 플랫폼에 맞춰 최적화도 쉽고, 아울러 기존의 라이트 프로브를 어댑티브 프로브 볼륨으로 바꿔서 활용하는 것도 가능했다.
물론 어댑티브 프로브 볼륨은 여전히 문제가 있었다. 라이트 프로브라는 구조 자체가 각 라이트 프로브가 있는 위치에서 함수 계산을 해서 빛을 적용하는데, 프로브 사이에 오브젝트가 있어서 실내와 실외가 구분되는 상황에는 기묘해질 수밖에 없었다. 뷰 바이어스가 거리에 따라 적용되는 구조라서 벽이나 장막에 가려진 효과가 안 났기 때문이다.
이를 해결하기 위해 어댑티브 프로브 볼륨에는 렌더링 레이어 마스크를 적용했다. 각 구역의 어댑티브 프로브 볼륨의 레이어 마스크를 다르게 설정하면 서로 영향을 안 받아서 실내와 실외의 구분을 더 원활하게 할 수 있게 된다.
각 프로브에 걸리는 반구형으로 잡혀있는 대기의 영향을 미리 계산, 시간대별로 표현해주는 스카이 오클루전이나 여러 시나리오를 블렌딩해서 빛의 변화를 한층 더 실감나게 적용해주는 라이트 시나리오도 어댑티브 프로브 볼륨의 주요 특징이다. 스카이 오클루전 기능은 통상 일반적인 하늘의 구조만 조명해주는 것으로 인식하기 쉽지만, 스카이 박스 안에 소스 컬러를 바탕으로 하기 때문에 베이크 데이터를 지워도 소스 컬러가 남아있다. 이를 응용해서 소스 컬러를 다른 색상 배합으로 편집, 흑백 영화톤으로 조율하는 등 응용이 가능하다.
또한 라이트 시나리오는 스크립트뿐만 아니라 타임라인 등 툴을 통해서 조절할 수 있으며, 이 데이터를 한 번 잘 작업해두면 추가로 작업할 필요 없이 프로브의 배치나 설정, 텍스처 관련 사항도 추가로 조정할 필요가 없다.
물론 이러한 기능이 완벽에 가깝게 빛의 변화를 포착해서 보여주지만, 맹점은 있기 마련이다. 예를 들어 오아시스 템플릿에 낮과 밤의 시간대 변화를 보여주고자 한다고 치자. 그러면 라이트 시나리오를 어느 정도 만들어둬야 한다. 메인 광원인 태양의 물리적인 빛의 값과, 그 빛을 기반으로 한 하늘 그리고 그 위치의 변화에 따라 바뀌는 배경의 조도나 노출도, 그리고 태양광의 조명도를 사전에 고려해야 한다. 또한 빛이 바뀔 때마다 색상과 강도의 변화도 어느 정도 설정해야 한다.
이를 고려해서 각 주요 시간대에 맞춰 8개의 시나리오를 짰지만, 노을이 지는 순간부터 초저녁까지의 순간에 문제가 발생했다. 햇빛을 통한 다이렉트 라이트가 간접적인 라이트보다 낮아지면서 일순 의도한 것보다 밝아지는 현상이 생겼기 때문이다. 이는 시나리오에 맞춰 연산하는 라이트뿐만 아니라, 실시간으로 빛을 발하는 라이트와도 관련된 문제였고, 어댑티브 프로브 볼륨으로도 조정이 어려웠다.
가장 간단한 개선 방법은 시나리오를 많이 만들어서 그 갭을 줄이는 것는 것이지만, 사이즈가 커지는 만큼 베이크에 시간이 많이 걸리고 유연함도 적어진다. 또한 중간점을 촘촘하게 찍는 정도라 그래프 자체가 바뀌는 것이 아닌 만큼, 문제 자체가 아예 발생하지 않는 것은 아니었다. 이 때문에 문제가 생기는 구간 사이에 빛의 조도를 체크하고, 그 중간 구간에 블렌딩을 가미하는 식으로 노출을 조율했다.
또다른 방안으로는 물리적인 빛 기반에 라이트에 의존하는 비율을 줄이는 것이었다. 해당 문제는 다이렉트 라이트의 강도가 급격히 떨어지는 구간에서 발생하는 문제인 만큼, 그 영향력을 줄여서 노출의 변화를 줄이고 동적 범위 폭도 줄여서 안정감을 더한 것이다.
물론 물리적 기반의 라이트 밸류를 설계하면 설정하기도 편하고, 레퍼런스를 쓰기도 쉽다. 아울러 더 정확하고 사실적인 결과물을 얻을 수 있으며, 어느 한 씬이 아니라 여러 씬에 걸쳐서 비주얼적으로 지속성을 유지하기도 편하다. 그렇지만 이처럼 게임플레이적인 이유나 아트, 혹은 그리고 렌더링적인 측면에서 볼 때 비물리적 기반의 라이트도 고려할 여지가 있다는 점이 언급됐다.
마지막으로 세 명의 TA는 유니티6 출시와 함께 공식적으로 업데이트할 e북을 소개했다. 유니티6에서 더 발전한 URP 및 어댑티브 프로브 볼륨을 활용한 라이트 활용 방안은 물론, HDRP에서 어댑티브 프로브 볼륨을 활용하는 방안까지 소개될 예정이다.