2020년 4월 22일
우주 게임 Grimmstar에서 레이 트레이싱 구현 방법을 선보인 AstroNaughty Games
라이팅 스페이스 문제
그림스타 에는 전체 태양계가 등장하며 플레이어는 그 안에서 자유롭게 오갈 수 있습니다. 저희는 플레이어의 우주선 크기에 사실적으로 비례하는 거대한 행성, 위성, 항성, 기타 천체를 포괄하는 대형 레벨을 구성해야 했습니다. 그로 인해 몇 가지 문제가 발생했죠.첫째, 라이트매스 임포턴스 볼륨을 사용했음에도 각 레벨에 대한 라이팅 정보를 빌드하는 것조차 굉장히 힘들었습니다. 하위 레벨 하나만으로도 7GB에 달하는 라이트맵 정보가 나왔죠. 이래서는 게임을 만들 수가 없으므로 저희는 결국 사전연산된 라이팅이 없도록 설정했습니다. 둘째로, 대다수의 오브젝트가 우주에 있기 때문에 동적으로 움직입니다. 우주엔 저항이 없기 때문에 우주 정거장 고리, 소행성, 우주선, 행성, 위성은 모두 움직이죠. 마지막으로 오브젝트 사이의 아주 먼 거리와 엄청나게 다양한 레벨 내 애셋 크기로 인해 캐스케이드 섀도 맵을 사용했을 때 기대에 못 미치는 결과가 나왔습니다. 나쁘지는 않았지만 저희가 원하는 퀄리티는 아니었습니다.
리얼타임 레이 트레이싱으로 이런 문제를 해결한 방법
사전연산된 라이팅을 사용하지 않아서 라이트 빌드 정보가 없기 때문에 플레이어가 어디에 있든, 메시가 스태틱이든 다이내믹이든 RTX로 놀라운 섀도 결과를 실시간으로 얻을 수 있었습니다. 이를 통해 정말 우주에 있는 듯한 느낌을 더할 수 있었습니다.왼쪽: 캐스케이드 섀도 맵에선 섀도 소프트니스가 전체에 적용됩니다. 리플렉션에 아무 것도 나타나지 않습니다.
오른쪽: 그림자가 멀어질수록 섀도가 샤프에서 소프트로 전환됩니다. 채광 구축함의 창문에서 리플렉션을 볼 수 있으며 레이 트레이싱된 리플렉션이 메탈릭 표면을 구현합니다.
오른쪽: 그림자가 멀어질수록 섀도가 샤프에서 소프트로 전환됩니다. 채광 구축함의 창문에서 리플렉션을 볼 수 있으며 레이 트레이싱된 리플렉션이 메탈릭 표면을 구현합니다.
그림자 정보를 해결하고 한 걸음 더 나아가 레이 트레이싱된 리플렉션을 추가했습니다. 이를 통해 특정 애셋의 충실도를 완전히 새로운 차원으로 높였습니다. 파일럿의 바이저에 우주선 조종석에 있는 다기능 디스플레이가 반사되는 등의 작은 디테일이 충실도를 강화하고 시네마틱 역량을 더했습니다. 이전에는 섀도 정보 때문에 밋밋하고 깊이가 없었던 일부 애셋이 이제 멋지게 페인트가 칠해진 메탈릭 구조체로 나타났습니다. RTX 리플렉션이 반사 가능한 표면에서 계산되거나 계산되지 않을 때 최대 러프니스 값을 글로벌 포스트 프로세싱 볼륨에서 미세 조정하여 훌륭하면서도 성능이 뛰어난 결과물을 얻을 수 있었죠.
왼쪽: 표준 라이팅 모델을 사용한 그림스타의 우주 정거장 애셋. 오른쪽: RTX 섀도와 리플렉션을 사용하여 새롭게 탄생한 우주 정거장.
성능 향상
리얼타임 레이 트레이싱은 아주 많은 리소스를 요하는 라이팅 방식입니다. 언리얼 엔진은 여러 라이팅 기술을 결합하여 RTX 기술을 그보다 고전적인 라이팅 방식과 접목해 양쪽 방식의 장점만 취하는 데 성공했습니다. 예를 들어 저희는 'RayTracingQualitySwitch'라는 머티리얼 노드를 사용해서 레이 트레이싱된 리플렉션 대부분에서 노멀 정보를 비활성화했습니다. 노멀을 많이 사용하면 라이팅 정보가 여러 방향으로 반사되기 때문에 제대로 된 결과를 얻으려면 더 많은 정보를 수집해야 합니다. 저희는 리플렉션 바운스를 일으키는 노멀 정보를 비활성화함으로써 추가적인 계산을 하지 않게 만들었습니다. 그뿐만 아니라 일부 콘솔 변수를 현재 데모에 사용 중인 퍼시스턴트 레벨의 시작 도중에 설정하여 맨 처음부터 일부 세팅이 플레이어에 맞춰 최적화되게 만들었습니다. 이런 변수의 상당수는 언리얼 엔진의 콘솔에 'r.RayTracing'을 입력하여 찾을 수 있습니다. 그렇게 하면 사용 가능한 변수를 전부 볼 수 있죠. 저희가 사용한 변수 일부를 예로 들자면 'r.RayTracing.Reflections.HeightFog'를 0으로, 'r.RayTracing.Reflections.ScreenPercentage'를 50으로 설정했습니다. 리플렉션 스크린 퍼센티지를 낮춰서 레이 트레이싱된 리플렉션에 요구되는 연산을 크게 줄일 수 있었는데 결과물은 여전히 훌륭했으며 대부분의 시나리오에서는 차이를 알아채기도 어려웠습니다. 리플렉션을 향상할 필요가 있을 때는 언제든 별도의 볼륨을 설정해서 오버라이드할 수 있었죠.리얼타임 레이 트레이싱된 라이팅은 그림스타의 영역과 스케일에 아주 완벽하게 적용된 사용 사례입니다. 일부 기술적인 문제를 해결하는 데 도움이 됐을 뿐만 아니라 결과물도 기존 라이팅 기술보다 더 뛰어났습니다. 이 기술은 아직 성장 단계지만 성능이 지속적으로 향상하고 있으며 매우 유연하고 놀랍도록 현실적인 라이팅 결과물을 얻을 수 있는 방법입니다.