Unreal 5의 핵심 기능인 Lumen 궁금해서 한 번 돌려 보았습니다.
간단히 먼저 적자면, Lumen은 Nvidia의 RTX에 대응하는 Unreal의 RT 계열의 GL 및 반사 구현 기법으로 큰 특징은 소프트웨어 방식의 RT 구현이라는 겁니다.
(다만, Hardware RT 가속기가 있을 경우 이를 활용 합니다.)
예제는 기본으로 제공되는 Car Configurator라는 예제입니다.
(자동차 색상이나 휠, 시트 등의 색상 및 종류를 바꿔가면서 차 옵션을 확인한다는 컨셉의 예제입니다.)
프로젝트 셋팅입니다.
기본값은 GL과 반사 모두 Lumen입니다.
GL과 반사만 변동을 주어서 Screen Space와의 차이를 알아볼 생각입니다.
먼저, 모두 Lumen일 경우입니다.
그리고 모두 Screen Space인 위인 스크린샷과 GL만 Screen Space인 스크린샷입니다.
주변 반사할 물체가 없다보니, 반사에 있어서 Lumen의 장점이 나타나지는 않네요.
그러나, GL에서는 확실히 Game이라는 느낌이 강해졌습니다.
제가 이 예제를 선택한 가장 큰 이유는 아래의 사진에서 드러납니다.
이 예제는 특이하게도 더 정밀한 RT 옵션을 가지고 있습니다.
그러므로, 일반적인 RT(이하 RT)와 Lumen과의 비교를 진행할 수 있다고 생각했습니다.
그리고 실제, Screen Space와 Lumen과의 차이만큼은 아니라도 RT와 Lumen과 차이는 있었습니다.
EX1)
Lumen
RT
EX2)
Lumen
RT
RT 방식은 GPU와 RT 코어를 사용하더라도 노이즈가 발생하고 그렇기에 실시간으로 전부 사용하기는 어렵습니다.
그래서, 실제로 해상도를 낮춰서 렌더링하고 Deep learning 등을 통해서 보완하는 작업을 거치죠.
그러나, 본 예제는 해상도를 낮춰서 렌더링 하거나 노이즈를 제거하는 작업이 포함되어 있지 않아서 어느정도 노이즈가 제거되기를 기다려야 했습니다.
그 증거로, 본 스크린샷에 어느정도의 노이즈가 남아 있지요.
그러나, Lumen은 그러한 노이즈가 보이지 않습니다.
RT와 비교하였을 때, 약간의 디테일이 아쉽지만, 이건 일대일로 비교하니 눈에 보이지, 실제로 쉼 없이 움직이는 장면이라면 이러한 문제를 잡아내기 쉽지 않을 것 입니다.
사실, Lumen의 구현 방식을 생각하면 어쩔 수 없기도 합니다.
Lumen은 일반적인 RT보다 부담을 최소한으로 하기 위해서 여러 꼼수가 동원됩니다.
먼저, 반사의 횟수를 감소 시켰습니다.
한 번 물체를 통해서 반사된 상은 다시 반사되지 않습니다.
그러니까, 물체가 거울로 반사되어 형성된 상은 다른 거울에서 반사되지 않습니다.
실제 엔진에서 Lumen 차원을 보면, 거울을 통해 보는 거울은 흰색 물질로만 보일 뿐이었습니다.
둘째로 물체의 디테일을 날립니다.
Lumen을 통해서 반사되는 상은 흐릿합니다.
이는 Lumen의 특성상 어쩔 수 없습니다.
Lumen의 반사는 엔진이나 게임 환경에서 유저가 바라보는 일반적인 차원에서 일어나지 않고, 앞서 언급된 Lumen 차원에서 일어납니다.
Lumen 차원에서 물체는 모두 낮은 폴리곤으로 변환됩니다.
여기서 아주 적은 광선만을 추적하여 각 물체의 표면에 색색의 점을 찍습니다.
이 때, 앞에 설명하였던 것처럼 빛은 물체에서 점을 찍고 반사되면 다음 도달하는 물체에서는 점만을 남길 뿐 반사되지 않습니다.
최종적으로 이 점은 물체에 도달하는 빛의 양에 따라서 크기와 수, 종류가 달라집니다.
이 점들이 유저가 보는 차원에서는 발광체로서 동작하여 이 점들의 색은 혼합되어 플레이어가 보는 빛의 색에 영향을 줍니다.
결론으로, 폴리곤의 수를 의도적으로 낮은 차원에서 반사 및 GL을 진행하기에 빠른 성능을 얻을 수 있었고, 그렇기에 반사의 품질에 제약이 있었던 겁니다.
다만, 이로 인한 단점으로 실시간으로 움직이는 물체는 낮은 폴리곤이 존재하는 차원에서 진행하기에, 실시간으로 움직이는 주인공이나 NPC와 같은 동적 폴리곤에 대해서는 아직 적용하지 못하는 군요.
뭐, 그냥 엔진을 간단히 만지면서 나온 설명을 읽어 보았습니다.