Search Unity

2019년 3월 유니티는 NVIDIA RTX 기술이 실시간 레이트레이싱(ray tracing)을 지원한다는 소식을 전했습니다. 실시간 레이트레이싱은 Unity의 고해상도 렌더 파이프라인(HDRP)에 극사실적 조명을 구현하여 Unity의 시각 효과 기능을 한 단계 끌어올립니다. NVIDIA RTX는 Unity 2019.3에서 프리뷰로 제공될 예정입니다.

새로운 조명 기술의 효과를 살펴보기 위해 BMW 8 시리즈 쿠페 차량을 모델로 하여 Unity로 렌더링한 결과물과 물류창고에서 촬영된 실물 차량을 구분하는 챌린지를 제작했습니다. 최종 프로젝트에는 라이브 인터랙티브 데모와 사전 렌더링을 거친 4K 동영상이 포함되어 있으며, 참가자들이 실물 차량의 모습과 Unity로 제작된 차량의 모습을 번갈아 보면서 실제 자동차와 그래픽으로 구현된 자동차를 구분하도록 했습니다. 최종 동영상에서 CG로 구현된 BMW는 11개 장면에 등장했습니다.

 

광고 업계와 자동차 업계는 제품 주기가 짧을수록 높은 성과를 달성합니다. 유니티는 BMW 차량이 등장하는 샘플 광고 영상을 제작하여 실시간 엔진이 광고 제작 시 의사결정에 얼마나 유용하게 사용될 수 있는지 보여 주었습니다.

또한 게임 개발자 컨퍼런스(GDC)와 NVIDIA의 GPU 기술 컨퍼런스(GTC)에서 공식 발표와 함께 샘플 광고를 선보였습니다.

이번 블로그 포스팅에서는 BMW 차량을 이용한 광고 제작 과정을 소개하고자 합니다.

프리 프로덕션

사전 시각화는 촬영을 준비하는 과정에서 완성도 높고 전문적인 느낌을 주는 광고를 제작하는 데 필수적입니다. CG 버전은 크리스토프 이바노프(Christoph Iwanow) 촬영 감독과 긴밀하게 협업하여 Unity로 제작했습니다. 초기 촬영에서는 단순한 조명과 셰이더를 사용하고 속도 조절, 카메라 배치, 프레임 지정, 뎁스오브필드(피사계심도)와 초점 영역에 집중했습니다.

또한 Unity의 물리적 카메라 기능을 활용하여 실제 세트에서 사용할 카메라와 렌즈의 센서 크기, ISO, 셔터 속도, 렌즈 왜곡 등의 세세한 특성까지 동일하게 구현했습니다. 이를 통해 실제 카메라의 효과와 느낌을 그대로 재현하여 모든 디테일을 사실적으로 표현할 수 있었습니다.

더불어 시네머신 기능을 활용하여 실제와 같은 카메라 움직임을 구현하는 동시에 신속한 반복 작업을 진행할 수 있었습니다.

사전 시각화 단계에서는 조명에 대한 실험도 다양하게 진행되었습니다. 실물 촬영에 사용할 조명의 모양, 크기, 온도와 강도 등 모든 세부 사항을 Unity에 반영하여 천장에 조명을 달면 어떤 효과가 있는지 즉각적으로 확인하고 배치, 강도, 색상 등을 조정하여 차량에 완벽한 반사를 구현할 수 있었습니다. 실제 세트에서는 이 과정에 수 시간이 소요될 수 있습니다.

크리스토프는 촬영을 시작하기 전에 실물 조명과 카메라 설정을 그대로 복제하여 더 다양한 조합을 실험하고 원하는 느낌을 찾을 수 있었습니다. 덕분에 촬영 시간을 더욱 효율적으로 활용할 수 있었습니다.

포스트 프로덕션

촬영이 끝난 다음날부터 즉시 장면을 세부적으로 다듬는 작업에 돌입했습니다. Unity에서 사전 시각화를 진행했으므로 에셋을 옮겨 올 필요가 없었습니다. 룩 디벨롭먼트 과정에서 에셋의 사실적인 반응을 구현하기 위해 세트에서 이용한 조명과 실물 차량을 레퍼런스로 사용했습니다. 이 기술은 면 광원에 이미지 텍스처를 사용할 수 있게 해주므로, 실물 광원을 받은 사진을 텍스처로 활용하여 더욱 사실적인 조명과 반사를 구현할 수 있었습니다.

Unity의 강력한 기능 덕분에 제작 초기부터 4K UHD 렌더링이 가능했습니다. 이 기능은 대부분 비용과 시간 절약을 위해 진행 중인 작업의 결과물을 저해상도로 렌더링하는 오프라인 렌더링에 비해 훨씬 유용합니다. 첫 작업부터 결과물을 4K로 확인하고, 룩 디벨롭먼트와 조명의 미세한 부분까지 세부적으로 조절할 수 있었습니다. 단기간에 여러 차례의 렌더 반복이 가능해지자 적은 인원의 아트 팀으로도 뛰어난 품질의 비주얼을 구현할 수 있었으며, 최종 렌더 결과물의 예측 또한 용이했습니다.

플레이트(plate)가 합성되는 장면의 경우 Unity 외부에서 카메라 트래킹 작업을 한 다음, 카메라 및 트래킹 정보를 FBX 파일을 통해 Unity로 임포트했습니다.

Unity에서 직접 생성한 다른 카메라의 경우 다음의 두 가지 시네머신 기능을 중점적으로 활용하여 자연스럽고 사실적인 카메라 움직임을 구현했습니다.

시네머신 스토리보드 확장 기능: 스토리보드 확장 기능은 카메라 구도를 조정하는 기능으로, 촬영 장면을 완벽하게 CG로 재현하는 데 필요한 구체적인 카메라 움직임을 간편하게 복제해주는 필수적인 툴입니다. 일부 장면의 첫 프레임, 중반부 프레임과 마지막 프레임에서 실제 카메라 영상의 프레임을 오버레이로 이용하여 이를 기반으로 CG 카메라를 조정했습니다.

시네머신 노이즈: 카메라에 절차적 노이즈를 적용하여 카메라의 모션에 사실적이고 미세한 움직임을 더함으로써 CG 카메라의 부자연스러운 느낌을 해소할 수 있었습니다. 따라서 움직임이 반복적이지 않고 자연스럽게 느껴지도록 구현했습니다.

초기 컨셉에서는 실물 BMW와 색상이 다른 CG BMW가 사용되었지만, 프로젝트가 진행될수록 자연스러운 장면 전환을 위해 두 차량의 색상을 통일하는 것이 더 효과적이라는 결론에 도달했습니다. 차량의 색상 변경은 후반부에 결정되었지만, 조명 및 룩 디벨롭먼트 아티스트들이 동시에 변경 작업을 수행할 수 있는 Unity에서는 문제될 것이 없었습니다. 반면 오프라인 렌더러를 사용하는 상황이었다면 “휠을 오른쪽으로 20도 돌리세요.”나 “주 조명을 한 스톱 아래로 내리세요.”와 같은 데일리 컨펌 요청 사항을 검토하느라 시간을 들여야 했을 겁니다. 하지만 Unity를 이용하면 사소한 변경에 하루를 꼬박 소모하는 대신 실시간 상호작용을 통해 변경 사항을 적용하고 창의적 의사결정에 더 집중할 수 있습니다.

플레이트가 합성되는 두 장면에서는 셰이더 그래프를 이용하여 스크린 공간이 투사된 머티리얼을 만들고, 원본 영상은 HD로 제작했습니다. 또한 차량에 사실적으로 반사되도록 차량 주변의 바닥과 벽면에 이 셰이더를 사용했습니다. 이어서 조명을 보완하고 Unity에서 장면을 렌더링한 다음, 별도의 합성 소프트웨어를 이용하여 바닥 면을 고해상도 플레이트로 최종 통합했습니다.

실시간 레이트레이싱

반사 시뮬레이션을 위해 일반적으로 게임 제작에서 사용되는 기법은 여러 위치에 반사 프로브를 설정하고 스크린 공간 레이트레이싱을 함께 활용합니다. 하지만 이 방법은 대개 광원이 새어 나가고 표면 프로퍼티의 근사치가 정밀하지 않다는 문제가 있습니다. 실시간 레이트레이싱을 사용하면 아티스트가 별도로 설정하지 않아도 화면 밖에 위치한 요소를 정확하게 반사할 수 있습니다. 단, 이러한 반사 효과를 구현하려면 렌더링 엔진을 어느 정도 조정해야 합니다. 기존의 게임 제작 과정에서는 카메라 절두체 외부에 존재하는 모든 요소가 비활성화되었지만, 이제 Unity에서는 화면 밖에 있는 소스를 반영하여 오브젝트에 반사와 그림자가 나타납니다. 메탈 오브젝트의 정확한 시뮬레이션을 비롯한 효과적인 레이트레이싱을 위해서는 여러 개의 바운스가 필요하나, 성능 제약으로 인해 바운스는 한 개만 처리하기로 결정했습니다. 다른 바운스의 결과는 메탈 컬러와 현재의 간접 산란광을 곱하여 추산되었습니다.

기존의 오프라인 렌더러는 대규모 텍스처 면 광원의 렌더링 관리에 유용합니다. 그러나 오프라인 렌더러는 비용이 많이 들며 노이즈도 많이 발생합니다(레이를 많이 사용할수록 노이즈가 감소하나, 프레임당 렌더링 비용이 증가함). 따라서 실시간 프레임 속도를 달성하고 품질을 높이기 위해, Unity Labs의 연구진은 Lucasfilm 및 NVIDIA와 함께 자체 알고리즘을 개발했습니다(논문 해석적 직접 조명과 확률적 섀도우의 결합(Combining Analytic Direct Illumination and Stochastic Shadows) 참조). 이 알고리즘에서는 시각적 결과를 그대로 유지하면서 가시성(영역 섀도우)을 직접 조명 계산에서 제외할 수 있습니다. 이 두 컴포넌트에 개별적으로 노이즈 감소 기법을 적용한 결과, 대규모 텍스처 면 광원에 소수의 레이(실시간 데모에 4개 사용)만을 사용하여 30fps를 달성했습니다.

간접 산란광 또는 산란광 반사는 오브젝트를 지면에 고정하고 변화하는 조명 조건에 반응하여 씬의 조명을 개선합니다. 게임 제작에서 사용하는 기존 워크플로는 매우 비효율적이며, 씬에 라이트 프로브를 설정하거나 라이트맵을 사용하는 데 의존합니다. 이 영상의 제작 과정에서는 레이트레이싱에 많은 수의 레이를 무작위로 사용하여 단일 산란을 통해 간접 난반사를 표현합니다. 이를 통해 원하는 빛 번짐 효과(light bleeding)를 구현할 수 있습니다.

이러한 접근 방식에서는 아티스트가 번거롭게 조건을 설정할 필요가 없으나, 많은 비용이 소요된다는 단점이 있습니다.

따라서 실시간 버전에서는 비용 절감을 위해 라이트 프로브가 베이크된 라이트맵을 사용하는 대신 레이트레이싱을 활용하여 프레임마다 동적으로 라이트 프로브를 다시 베이크했습니다.

레이트레이싱 기반 반사가 스크린 공간 기법을 대체한 것처럼, 실시간 레이트레이싱은 주로 사용되는 스크린 공간 기법과 유사한 앰비언트 오클루전을 구현할 수 있습니다. 위에서 언급한 리소스 친화적인 간접 산란 방식에 레이트레이싱한 앰비언트 오클루전을 이용하면 빛 번짐 효과를 더욱 원활하게 처리할 수 있습니다. 단, 성능 문제로 인해 투명한 오브젝트는 지원하지 않으며, 투명한 오브젝트의 경우 투과하는 빛을 직접 처리해야 합니다.

실시간 레이트레이싱은 극사실적인 전조등을 실시간으로 렌더링할 수 있는 유일한 툴입니다. 전조등의 형태, 전조등을 구성하는 여러 개의 렌즈와 반사체의 광학적 특성으로 인해 발생하는 복잡한 광원 상호작용을 구현하려면 고난이도의 시뮬레이션이 필요합니다. Unity에 추가된 여러 개의 부드러운 연속적인 반사 광선과 투과 광선의 상호작용은 현실과 같은 광선의 움직임을 가능하게 합니다. 세부적인 사항은 광선 방향에 영향을 주는 텍스처 디테일로 조절 가능합니다.

새로운 현실

스스로를 창조하고 재창조하라
같은 진창에서 뒹굴지 말라
스스로를 창조하고 재창조하라
그리고
평범함의 손아귀에서 벗어나라

– 찰스 부코스키(Charles Bukowski)

Unity의 실시간 레이트레이싱은 새로운 현실을 창조합니다. 유니티는 기존의 제작 파이프라인을 완전히 뒤엎는 것이 아니라, 광고 프로젝트를 제작하는 과정에서 자주 발생하는 불편을 해결하고자 합니다. 끊임없는 상호작용을 통해 장면을 변경하고 크리에이티브 디렉터와 촬영 감독의 즉각적인 피드백을 받을 수 있는 환경은 큰 이점으로 작용합니다. Unity를 활용하여 이 영상을 제작한 덕분에, 결과물을 손쉽게 다른 프로젝트로 마이그레이션하고 여러 매체에 걸쳐 다채롭고도 일관성 있는 캠페인을 제작할 수 있었습니다. 실시간 레이트레이싱을 사용하면 기존의 자동차 광고 제작 파이프라인을 향상시켜 보다 창의적이고 협동적으로 작업하고 합리적인 비용으로 영상을 제작할 수 있습니다.

지금 바로 실험 버전을 다운로드하여 NVIDIA RTX와 Unity를 체험해보세요. 이 릴리스는 프로토타입이며, DXR의 최종 구현은 이 버전과 차이가 있습니다.

8 replies on “현실과 가상의 만남”

Illusion: HDRP “out of preview” for real game development.

Reality: Another “Heretic” like video in late 2019 for “in preview” HDRP features in Unity 2020.1

I would love to be proofed wrong, really!

At least for games, I couldn’t care less about raytracing. It looks good though, but racing games (which could be the easiest place to use this tech) are one of the least popular genres in all desktop platforms.

Why the reference shot is so washed out? I wouldn’t say that’s the best quality you can achieve with a camera…

Comments are closed.