Uncategorized

Inside the Unreal Engine technology I expect

Unreal Engine 5 데모가 공개되고 업계에 상당한 충격을 주고 있습니다.

공개된 데모에는 여러가지 기술들이 소개되고 있는데, 가장 주요한 두가지 기술은 아래의 두가지 입니다.

  1. Nanite
  2. Lumen

이 두가지 기술에 대해서 epic games의 개발자가 언급한 내용과 제 개인 연구에 기반하여 내부 원리를 추측하여 봅니다. 저도 나름대로의 의견을 제시하는 것 뿐이니, 다른 의견이 있으시면 자유롭게 댓글이나 기타 방법으로 알려주세요. 현재 얻을 수 있는 개발자가 언급한 가장 자세한 정보는 아래 링크에 있습니다.

https://www.eurogamer.net/articles/digitalfoundry-2020-unreal-engine-5-playstation-5-tech-demo-analysis

Nanite

UE5에서 구현한 micro-polygon 표현 기술의 네이밍 입니다.

개발자는 Primitive shader를 사용했고, screen space 연산이 있으며, detail texture가 사용되고, SW (Software) rasterizer를 구현했다고 언급 합니다. 마침 제가 같은 목표로 연구를 1년 정도 해왔습니다. 그의 언급 중에서 primitive shader를 제외한 다른 내용은 저의 연구 결과와 동일한 방법입니다. 저는 이 과정을 depth pass 후에 수행합니다. 제 연구 결과의 영상은 아래 링크로 작년에 공유했습니다. UE5와 같은 멋진 데모는 못됩니다. 현재 개발중인 프로젝트에 사용되고 있지만 아직 게임 공개 이전이라 그 결과물을 사용할 수 없고, 개발의 편의성을 때문에 Landscape에만 사용되었고, Realtime GI는 없습니다. 딱 논문에 사용될만한 수준의 데모 영상입니다.

영상에는 tessellation뿐만 아니라 또 다른 연구 결과도 포함하고 있습니다. 영상은 작년에 만든 것이고, 노말처리와 TAA때문에 발생되는 flickering문제도 보이는데, 현재는 모두 해결된 상태입니다. (영상 자체 퀄리티는 용서해 주세요. ㅠㅠ 제가 사용한 편집툴이 뭔지 아시면 놀랄 겁니다.)

SS (Screen-Space) tessel에 대한 자세한 구현 내용은 이 문서에서 설명하지 않습니다. 문제는 SS는 여러가지 artifact를 가지고 있는데, 화면에 보이지 않는 pixel (화면 밖 or 다른 물체에 가려진 픽셀)이 displacement되어 화면 안으로 보여지게 될 때 대한 처리가 되지 않습니다. 또 다른 문제도 있는데, 이것도 이 문서에서 설명하지 않습니다. 앞서의 문제를 저는 화면보다 좀 더 크게 그리는 방식으로 문제를 줄였으며, 이는 depth pass에 국한된거라 성능 저하가 거의 없습니다. 다른 물체에 가려진 픽셀은 이걸로 해결이 안 되는데, HW (Hardware) tessel을 사용할 계획을 가지고 있습니다. 즉 큰 규모의 displacement에 HW tessel를 사용하고, 디테일한 규모에는 SS pixel tessel을 사용하는 방식입니다. HW tessel만으로 디테일한 displacement까지 다 표현하려면 성능과 품질 모두 심각하게 좋지 않은데, 이렇게 디테일한 표현은 SS방식으로 넘겨 버리고 큰 규모만 처리해 준다면 꽤 멋진 방법이라고 생각합니다.

이 외에 normal vector 계산과 uv 등의 정보 저장 문제가 있는데, 약간의 cost만 지불하면 다 해결 가능합니다.전 개인적으로 normal vector의 제대로 된 처리를 연구하는데 상당한 시간을 소비했습니다. 이게 생각보다 매우 어렵더군요. 물론 UE5가 실제로 어떤 방법을 사용하는지는 공개되어야 확실해 지겠지만, 디테일 규모의 displacemt인 SS는 저와 유사한 방식이 아닐까 예상해 봅니다.큰 규모의 displacement는 HW tessel보다는 primitive shader(또는 mesh shader)를 사용했을 듯 한데 자세한 방법은 예상을 못하겠습니다. (일단 제가 mesh shader를 잘 모릅니다.)

이렇게 displacement 규모에 따라서 다른 두가지 (또는 그 이상의) 기술을 섞어서 구현하면 UE5 데모와 같은 micro-polygon에 유사한 결과를 얻는다고 확신합니다. 저는 제 개인 연구를 통해서 확인한 바가 있습니다. 제 견해로는 tessel 뿐만 아니라 모든 screen space 접근 방식은 디테일한 표현에는 상상 이상의 힘을 발휘하는데 규모가 좀 커지는 현상에서는 여러 artifact를 발생합니다. 이에 대한 다른 기술의 도움을 받아야 한다고 생각합니다.

SS tessel 방식은 render pipeline상 아주 큰 변화를 요구합니다. depth pass까지는 큰 변화가 없는데, base pass에서 기존과 완전히 다른 방식으로 mesh를 render 해야 합니다. tessel이 이미 화면공간에서 이루어 졌고, base pass에서 이를 사용하려면 원래의 mesh를 render해서는 불가능합니다. 저는 bouding box를 사용하는 방법을 사용하고 landscape에서만 이 기술을 사용하는 것으로 구현의 복잡함을 회피했는데, 이 기능을 일반화 하려면 material id를 기록하고, material의 shader compile 결과도 기존과 완전히 바뀌어 져야 합니다. 제가 UE를 그 정도 수준으로 뜯어 고치면 유지보수가 안 되어서 거기까지 가지는 않았습니다. UE5는 static mesh에 적용이 되는 것으로 보아 이러한 변화를 거친 것으로 판단 됩니다. 아직 skeletal mesh등 다른 데는 적용이 안 된 듯 한데, 이 기술의 한계는 아니고 다만 구현에 시간이 좀 더 걸릴 문제라 생각합니다.

별도의 기술로 소개된 pixel accurate shadow map은 jaggy 없는 shadow map자체는 별도의 연구가 필요했겠지만, shadow mesh의 디테일 표현은 nanite의 tessel 방식을 그대로 사용했을 겁니다. 제 개인 연구에서도 shadow 생성도 pixel tessel된 결과로 잘 처리되고 심지어는 pixel tessel로 튀어나온 면에 캐릭터의 다리 IK가 잘 처리되도록 구현하였습니다. 성능 저하 거의 없이 말이죠.

개인적으로 이 기술에 대한 논문을 준비중인데, UE5 데모를 보고 나서는 준비를 계속 해야 하나 고민 중입니다. (늦장을 부렸던 자신에 대한 통렬한 반성 중입니다.)

Lumen

UE5에서 Realtime GI를 구현한 기술의 네이밍 입니다.

전 이 분야에 대해서는 아직 잘 모르기 때문에 제 개인 의견을 피력할 것은 없습니다. 그래서 개발자가 공개한 내용을 정리해서 말씀드리겠습니다.

완벽에 가까운 실시간 GI를 구현하기 위하여 세가지 규모로 나누어 GI를 구현합니다.

큰 규모에는 Voxel 데이터에 기반한 GI를 수행하고, 중간 규모에는 SDF를 사용한 GI를 수행합니다. 그리고 세부 디테일 GI는 SS에서 수행합니다. 역시 여기에서도 SS의 디테일한 표현이 힘을 발휘합니다. SS는 앞서 Nanite에서 말한 것처럼 여러가지 artifact와 단점을 갖는데, UE5에서는 역시 이를 규모에 따라 다른 기술을 사용하여 해결했습니다.

또한 GI는 여러번 ray를 bouding하는 계산을 반복해야 하는데, 이게 많은 계산량을 요구하죠. 이 문제를 여러 frame으로 계산을 나누는 방식으로 해결했습니다. 각 frame마다 한 번의 bouding 계산만 처리하고 그 계산을 계속 누적해 나가는 식입니다. 따라서 UE5의 방식은 계산량을 줄인 대신에, 조명 변화에 대한 반응에 약간의 delay가 생긴다는 artifact가 있습니다.

결론

이 글은 UE5를 보고 스스로 예상해본 내부 원리에 대한 글입니다. UE5 데모는 업계에 강한 임팩트를 줄 정도의 엄청난 기술을 가지고 있습니다. 사실 개인적인 연구 결과의 발표를 못하게 될 것 같은 아쉬움이 이 글을 작성한 동기가 되었습니다. 암튼 그래픽 기술은 끊임없이 변하고, 오프라인의 멋진 기술들이 계속해서 실시간으로 오는 넘어 오는 것에 대해 큰 흥분을 저 역시 가지고 있습니다. 긴 시간을 들여 개발한 (개발자 얘기로는 10년 전부터 구상했다고 하네요.)에게 큰 존경을 표하고, 이 업계에 계신 모든 분들 파이팅 입니다.

“Inside the Unreal Engine technology I expect”의 4개의 생각

  1. 1. 문장에 나오는 “SW”, “HW”, “SS” 등 약자는 가각 software, hardware, screen space 의 약자 입니까?
    2. 그리고 micro-poly”g”on 이 맞는거 같습니다.

    Liked by 1명

  2. 1. 네 맞습니다. 해당 약자가 첫번째로 등장하는 글에 괄호를 넣어서 설명했습니다.
    2. 오타 수정했습니다. 알려주셔서 감사합니다.

    Liked by 1명

댓글 남기기