역자의 말.
실시간 테셀레이션 셰이딩에 대한 파운데이션은 충분히 알고 있지만 다수의 모바일 게임 그리고 몇몇 PC 엠엠오 알피지 게임개발을 했을 때에도 환경적인 요인의 Fake Simulation 과 테셀레이션을 결합해서 사용해 본 경험도 없었기 때문에 더욱 관심이 가는 분야이다. 이에 갓오브워 라그라로크에서 보여준 스노우 시뮬레이션 시스템에 대한 내용을 발표자인 파올로 수리치오의 GDC 프리젠테이션을 통해 엿보도록 하자.
Paolo Surricchio
https://www.linkedin.com/in/paolosurricchio/
안녕하세요, 여러분, GDC에서 즐거운 하루를 보내고 계시길 바라며, 제 강연인 스노우 렌더링의 재창조에 오신 것을 환영합니다.
강연을 시작하기 전에 휴대폰을 무음으로 전환하고, 강연이 끝나면 설문조사에 참여해 주시기 바랍니다.
그럼 이제 시작하겠습니다!
저는 산타모니카 스튜디오의 선임 렌더링 프로그래머인 파올로 수리치오(Paolo Surricchio)입니다.
저는 업계에서 10년 동안 렌더링 엔지니어로 일해 왔습니다.
이 게임들이 제가 작업한 게임들입니다.
산타 모니카 스튜디오에서 저는 렌더러의 모든 부분을 담당하고 있으며, 특히 VFX 시스템에 중점을 두고 있습니다.
이 강연의 목표는 미래를 위해 재사용 가능한 도구 세트를 만들면서 고품질의 사용자 지정 설정을 지원하기 위해 SMS에서 기술을 작성하는 방법과 이 접근 방식을 적용하는 방법을 보여주는 것입니다.
이번 글에서는 GoW 라그나로크의 눈, 더 일반적으로는 높이 필드 시스템을 재작성하는 과정을 살펴보겠습니다.
이번 게임이나 전작에 대한 스포일러는 없습니다.
하이트 필드 시스템은 영상에서 볼 수 있듯이 캐릭터나 오브젝트가 교차할 때 눈과 같은 표면을 실시간으로 변위시키는 시스템입니다.
이 프레젠테이션은 시스템의 복잡한 세부 사항보다는 우리가 왜 그런 선택을 했는지에 대한 이유에 초점을 맞추고 있습니다.
또한, 강연을 진행하는 동안 핵심 사항을 강조하고 프레젠테이션 마지막에 요약할 것입니다.
SMS의 작업 방식에 대한 백그라운드에 대해 언급 합니다.
저희는 게임의 모든 디테일을 수작업으로 제어할 수 있는 세계적인 수준의 아티스트와 디자이너 팀을 보유하고 있습니다.
저희는 레벨 디자인 및 아트 팀이 수작업으로 레벨을 조각하는 레벨 에디터로 Maya를 사용합니다. 그런 다음 개발 키트에서 직접 게임을 실행합니다.
개발 키트에서 직접 게임을 실행하며, 이것이 게임 렌더링을 확인할 수 있는 유일한 방법입니다.
워크플로를 자동화하기 위해 Houdini와 같은 다양한 툴을 사용하지만, 파이프라인 마지막에는 항상 수작업으로 튜닝할 수 있는 옵션을 제공합니다.
너무 구체적이거나 너무 일반적인 솔루션의 균형을 맞춰야 하므로 엔지니어링에 어려움이 따르는데, 하이트 필드 시스템이 그 예시입니다.
구체적인 제한 사항은 엔진이나 게임마다 다를 수 있지만, 선택한 이유 뒤에 숨은 교훈은 모두에게 적용됩니다.
GoW: 라그나로크의 제작 초기부터 시작하겠습니다.
2018년 4월, GoW가 출시되었고 속편을 개발 중입니다.
처음부터 PS4와 PS5로 출시할 예정이었기 때문에 두 콘솔에서 모두 훌륭한 경험을 제공하는 것이 중요했습니다.
이 프레젠테이션에서 성능이나 메모리 수치를 언급하는 것은 구형 콘솔에서 잘 실행되어야 했습니다. 그리고 더 빠른 콘솔에서 확장해야 하기 때문에 PS4 수치를 구체적으로 언급했습니다.
지난 게임이 끝날 무렵부터 핌불윈터라는 이벤트가 미드가르드 대부분을 눈으로 덮어 미드가르드에 영향을 미치고 있다는 것을 알고 있습니다.
게임의 상당 부분을 차지하는 지역이기 때문에 엄청난 양의 눈을 처리해야 한다는 것을 알고 있습니다.
지난 프로젝트인 GoW 2018에서 변위가 있는 다이나믹 스노우를 출시했고, 반응이 좋았으니 걱정할 필요는 없습니다. 새 게임에서 '체크박스'를 선택하기만 하면 됩니다.
여기에서 움직이는 것을 볼 수 있습니다. 멋지게 보이니 이제 끝났습니다! 그렇지 않나요?
안타깝게도 그렇게 쉽지는 않았습니다. 이 기술이 왜 필요한지 이해하려면
이 기술이 어떻게 작동하는지 이해해야 합니다.
스노우 메시는 당시 우리 기술 디렉터였던 플로리안 스트라우스가 개발한 일반 시차 매핑의 변형인 스크린 스페이스 시차 매핑이라는 기법으로 렌더링됩니다.
시차 매핑에 익숙하다면 원리는 동일하지만 탄젠트/텍스처 공간에서 레이마칭하는 대신 화면에서 레이마칭하는 것입니다. 이를 통해 다양한 최적화가 가능하지만 결함이 없는 것은 아닙니다.
이것은 메시와 VFX를 사용하여 변위 정보를 렌더링합니다. 변위 정보를 렌더링합니다. 다음으로 살펴보겠습니다:
매 프레임마다 카메라 움직임에 따라 스크롤되는 영구적인 하향식 렌더 타깃이 있어 눈 속을 얼마나 깊이 파고들고 있는지 설명하는 메시와 VFX를 렌더링합니다.
시차 알고리즘의 작동 방식에 맞게 정보를 인코딩하는 커스텀 셰이더를 사용하여 캐릭터의 캡슐과 구체와 같은 임의의 메시를 렌더링할 수 있습니다.
앞서 말했듯이 패럴랙스 매핑은 화면 공간에서 작동하므로 화면에 하향식 정보를 투영하려면 메시가 필요합니다. 이를 위해 일반 불투명 메시와 같은 위치에 메시를 렌더링합니다.
이제 카메라 시점에서 메시가 렌더링되고 이전에 보여드린 하향식 투영 텍스처를 샘플링합니다.
이렇게 하면 모든 정보가 화면에 표시됩니다. 비디오에서 볼 수 있듯이 카메라 시점의 메시와 파티클을 통해 추가 디테일을 렌더링합니다.
이 텍스처는 화면 공간 시차가 통과하는 부분입니다.
레벨 설정이 어떻게 되어 있는지 살펴봅시다.
눈을 설정하는 데 필요한 주요 메시의 크로스 컷입니다.
아티스트가 메인 렌더링 표면(이미지에서 하늘색)을 만듭니다. 이것이 눈 머티리얼로 렌더링하고 시차 패럴랙스로 디스플레이스하는 메시입니다. 패럴랙스 매핑이 잘 작동하려면 메시가 평평해야 한다는 점에 유의하세요.
앞서 언급했듯이 화면에 하향식 정보를 투사하려면 일치하는 메시가 필요한데, 이미지에서 노란색 메시가 투사 표면입니다.
그런 다음 그 아래에 최대 메시와 최소 메시를 조각해야 하는데, 이는 방해받지 않은 눈 표면을 묘사하는 실제 메시입니다.
이 작업은 종종 하이트 텍스처로 이루어지므로 Maya에서는
지형과 유사한 물결 모양의 표면을 볼 수 없습니다.
세부 사항이 너무 많아서 죄송합니다.
이 시스템을 다시 작성하기로 결정한 이유가 핵심이기 때문입니다.
이 기술의 장단점을 살펴보겠습니다.
패럴랙스 매핑을 사용하면 픽셀 단위의 정확도로 변위를 렌더링할 수 있습니다.
또 다른 장점은 패럴랙스 매핑 비용이 표면 디테일과 사용량에 비례한다는 점입니다. 표면이 모두 "상승" 또는 "비변위"인 경우 조기 아웃이 발생하고 셰이더 비용이 많이 들지 않습니다.
하지만 모든 기법이 그렇듯이 단점도 있습니다.
이 기술을 확장하는 데 걸림돌이 되었습니다.
가변적인 비용은 양날의 검입니다. 지형이 완전히 변위되면 더 많은 픽셀을 레이마칭 해야 하므로 렌더링 비용이 더 많이 듭니다.
성능 예산에 가장 큰 압박을 받는 전투 시나리오에서 바로 이런 일이 발생합니다.
퍼포먼스는 잠시 잊고 제작에 집중했습니다. 실제로 마야 설정을 단순화했고 머티리얼과 텍스처 설정도 포함하지 않았습니다. 작은 디테일을 많이 생략했는데, 이렇게 움직이는 부분이 많으니 시스템에서 오류가 발생하기 쉬웠습니다.
마지막으로 패럴랙스 매핑에는 기술 작동 방식에 따라 피할 수 없는 아티팩트가 있는데, 저희 버전은 더 빠르긴 했지만 이러한 아티팩트가 더 심해졌습니다.
시차 매핑은 뷰 벡터가 시차 평면과 평행이 될 때 아티팩트를 표시합니다. 화면 공간에서는 화면 공간 텍스처가 모든 높이 정보를 단 몇 픽셀에 집어넣기 때문에 이 문제가 더욱 심해집니다.
스크린 스페이스 버전에서는 위 동영상에서 볼 수 있듯이 디테일을 윗면에 렌더링하기 때문에 디테일이 변위된 최종 결과물에 대해 반짝이는 문제가 추가되었습니다.
이 문제를 해결하는 유일한 방법은 투영된 데칼을 사용하는 것이지만, 이 효과를 얻으려면 수천 개는 아니더라도 수백 개의 파티클을 스폰해야 하는데, 데칼로는 그 정도에 근접할 수 없습니다.
이로 인해 사용 공간에 대한 디자인적 제약이 많았습니다.
아티팩트를 해결하기 위해 많은 예방 조치를 취해야 했기 때문에 환경 아트 작업에 많은 시간을 할애하지 않을 수 없었습니다.
환경 아트뿐만 아니라 디자이너, 카메라 충돌을 위한 게임플레이 프로그래머, 시네마틱 애니메이터 등 거의 모든 팀원이 이를 인지하고 있어야 했습니다.
이로 인해 부서 간 종속성이 많이 발생하여 기술 사용 속도가 느려졌습니다.
이것이 바로 GoW 2018이 전체 게임에서 이 기술을 적용한 일부 영역만 출시한 이유입니다. 이 기술을 적용하기 위해서는 특별한 주의가 필요했습니다.
여기서 이 기술을 악마화하는 것이 아니라는 점을 분명히 하고 싶습니다. SS-패럴랙스 매핑은 놀라운 기술이지만, 저희는 이 기술을 너무 무리하게 사용했고, 적절한 수준보다 더 많은 일을 하도록 강요했습니다.
실제로 GoW 2018과 라그나로크에서도 이 기술을 사용하여 훌륭한 결과를 얻은 곳이 있습니다.
우리의 물 변위 렌더링 기술은 두 게임 모두에 동일한 화면 공간 시차 기술을 사용합니다(라그나로크의 경우 렌더링이 많이 개선되었지만).
물은 그 특성상 이미 게임에서 특별한 경우이기 때문에 훌륭한 활용 사례입니다. 물은 평평한 평면이며 아트와 게임플레이 모두 이미 어떤 일이 있어도 그 주변에서 작업해야 합니다.
다른 메시와 유기적으로 교차하는 큰 지형에는 적합하지 않습니다.
유기적으로 교차하고 곡면을 묘사하는 대형 지형에는 좋지 않습니다.
당시에는 이것이 최선의 해결책이었으며, 과거로 돌아간다고 해도 아마 제약 조건이 있었다면 똑같이 했을 것입니다.
이제 우리 지형에서 이 작업을 수행하기 위해 너무 많은 제어가 필요했습니다.
이 모든 것은 패럴랙스 매핑의 특수한 요구 사항과 올바른 데이터를 공급하고 한계를 극복하는 데 모든 것이 집중되었기 때문입니다.
이제 라그나로크의 제작 초기로 돌아갑니다. 저희는 아트 시니어 및 리드와 회의를 가졌는데, 그들은 현재 시스템을 이 새로운 게임의 요구에 맞게 사용하거나 확장할 수 있는 방법이 없다고 말했습니다.
이 팀은 시니어 아티스트들로 구성된 전문 팀으로, 게임 개발 경력을 합치면 각각 수십 년, 총합은 100년을 넘을 수 있습니다. 일반적으로 그들은 이런 말을 하지 않았을 겁니다.
그리고 그 주된 이유는 개발 노력의 규모 때문이었습니다. 프리 프로덕션 단계부터 새 타이틀의 모든 것이 더 커질 것이 분명했습니다:
월드가 전작보다 두 배 이상 커졌고, 팀 규모도 전작보다 커졌으며, 전작보다 더 많은 파트너와 외주 스튜디오의 도움을 받았기 때문입니다.
그리고 앞서 말했듯이 눈은 어디에나 있습니다.
실제로 눈의 변위량이 이전보다 훨씬 더 많아졌습니다.
그리고 다음 슬라이드를 위해 스포일러를 하자면, 새로운 시스템은 눈보다 더 많은 곳에 사용되었습니다.
스케일링 문제를 일으키는 주요 원인은 작동을 위해 얼마나 많은 수동 제어가 필요한지, 그리고 시차로 인한 렌더링의 한계가 분명했습니다.
워크플로를 개선해야 했고, 기하학적 접근 방식이
접근 방식은 이전에 겪었던 문제를 해결하지 못한다는 것을 알고 있었습니다.
이러한 문제를 해결하고 나니 새로운 시스템에 필요한 것이 바로 이것이었죠:
우리 엔진에는 사실상의 지형 시스템이 없으며, 지형은 아트에서 생성한 맞춤형 메시로 조각되므로 기술은 임의의 메시에서 작동해야 합니다.
또한 시스템이 머티리얼 에디터의 모든 렌더링 기능과 자동으로 통합되어야 하며, 설정이 쉬워야 합니다.
성능과 관련해서는 최상의 시나리오와 최악의 시나리오 사이의 편차가 적어야 합니다.
게임에서 이 기술을 사용하지 않는 부분이 많기 때문에 메모리 비용을 지불하고 싶지 않습니다.
마지막으로, 구형 콘솔에서 잘 실행되고 보기 좋아야 하며, 최신 콘솔에서 추가 작업을 거의 또는 전혀 하지 않고도 품질을 확장할 수 있어야 합니다.
하지만 타협점이 있습니다,
그리고 픽셀당 품질 시차가 제공됩니다. 지오메트리로는 특히 PS4에서
지오메트리로는 달성하기 어렵다는 것을 알고 있었습니다. 아트 팀에서는 이 점을 우려하지 않았습니다.
이 모든 요구 사항을 충족하는 시스템을 출시했다고 말씀드리고 싶지만, 더 중요한 것은 이 강연의 핵심은 개발 과정과 그 이후에도 목표 달성에 지장을 주지 않고 훨씬 더 많은 것을 할 수 있도록 개방적인 태도를 유지하면서 이 목표를 달성했다는 점입니다.
어떻게 그렇게 할 수 있었는지 살펴보겠습니다.
첫 번째 단계는 아트팀으로부터 시각적 목표가 무엇인지, 그리고
어떤 기능을 원하는지 파악하는 것입니다.
시니어 환경 아티스트 중 한 명인 카일 브롬리가 저와 함께 스노우 테크 작업을 할 환경 아트 포인트 담당자로 지정되었습니다.
저는 카일에게 최종 결과물이 어떤 모습일지 아이디어를 얻으면 좋을 것 같다고 말했죠. 카일은 "하루나 이틀만 시간을 주면 몇 가지 메모를 적어보겠다"고 말했습니다.
이것이 그가 가져온 것입니다. 잠시 시간을 내어 우리 아트 팀의 숙련도를 강조하고 싶습니다.
실제로는 더 예뻐 보였기 때문에 이 프레젠테이션에 맞게 잘라내고 부분을 제거해야 했습니다.
이제 달성해야 할 목표에 대한 지침과 아이디어가 담긴 시각적 막대가 생겼습니다. 또한 문서에서 세 개의 뚜렷한 하위 시스템이 나타나는 것을 볼 수 있습니다:
왼쪽에서 오른쪽으로, 먼저 플레이어가 걸어온 위치에 따른 변위가 있고, 변위 안쪽 부분의 모양을 변경하고, 마지막으로 변위 영역 주변에 디테일을 적용하고자 합니다.
트라이카운트나 작은 트라이앵글 오버드로가 문제가 되기 전에 얼마나 많은 트라이앵글을 밀어 넣을 수 있는지가 엔지니어링의 주요 질문이었습니다.
저는 마야에서 메시를 가져와서 디테일을 합리적으로 잘 표현할 수 있을 때까지 몇 번 세분화했습니다.
이러한 목표를 염두에 두고 몇 가지 테스트를 더 진행했고, 결국 지오메트리 디스플레이스먼트에 자신 있게 의존할 수 있다는 것을 알았습니다.
이에 대한 자세한 내용은 몇 개의 슬라이드에 나와 있습니다.
중요한 것은 첫 번째 흥미로운 결과입니다.
항상 제품에서 시작하여 거꾸로 진행하세요.
비용 견적을 통해 솔루션이 자신이 아는 범위 내에서 가능한지 확인합니다.
지식이 부족하다면 모든 방법을 동원하여 개선하세요.
렌더링/하드웨어 테스트를 마친 후에는 실제로 게임 내에서 동적으로 작동하도록 만들어야 합니다.
새로운 작업을 하기 전에 다른 게임에서 이 문제를 어떻게 해결했는지 살펴봤습니다. 지오메트리 변위는 결코 새로운 주제가 아닙니다.
안타깝게도 우리의 요구 사항 중 일부는 매우 엄격했습니다.
대부분의 기술은 저희 요구사항에 맞지 않았습니다.
일부는 무시할 수 있는 T-정션과 같은 아티팩트가 있거나 기능이 제한된 사전 처리된 메시에서 시작해야 했습니다.
이 주제는 따로 발표할 만한 가치가 있는 주제이지만, 더 많은 연구를 진행한 결과
시중에 나와 있는 방법이 우리에게 적합하지 않다는 것을 깨달았습니다.
하지만 이러한 한계가 여러분의 게임이나 엔진에 문제가 되지 않을 수도 있으므로 관련 연구를 살펴보는 것이 좋습니다.
참고 자료는 프레젠테이션 마지막에 남겨두었습니다.
당시 렌더링 엔지니어의 수와 제작 일정을 고려할 때 이 작업에 많은 시간을 할애해야 했기 때문에 직접 조사를 했습니다.
몇 가지 접근 방식을 시도했는데, 필요한 곳에만 테셀레이션을 적용하되 가능한 한 테셀레이션 요소를 최대한 줄이는 것이 이상적이라는 목표만 말씀드리겠습니다.
이 영상 제작에 어떤 아티스트도 참여하지 않았다는 것은 말할 필요도 없습니다.
아티스트가 참여하지 않았습니다.
이 영상은 아티팩트를 제외하고 필요한 곳에만 테셀레이션을 적용하면 높은 수준의 테셀레이션을 지원할 수 있다는 것을 보여주는 개념 증명입니다.
와이어프레임에서 테셀레이션할 디테일이 있는 경우에만 테셀레이션하는 것을 볼 수 있습니다.
비슷한 시기에 다른 렌더링 프로그래머인 발레리오 구아글리우미(Valerio Guagliumi)는 일반 셰이더 파이프라인에 하드웨어 테셀레이션을 추가하는 작업을 하고 있었습니다.
PS5 전용 메시 디테일을 개선하기 위한 노력의 일환이었습니다.
하드웨어 테셀레이션은 추가 메모리가 필요 없고, 튜닝이 가능하며, 동적으로 스케일링할 수 있다는 점에서 모든 조건을 충족했습니다. 하드웨어 테셀레이션의 성능 문제는 알고 있었지만, 어떤 식으로든 해결할 수 있다는 자신감이 있었습니다. 실제 이야기는 이보다 조금 더 복잡합니다.
하지만 가장 중요한 두 번째 요점을 살펴보겠습니다:
이 프레젠테이션에서 말씀드리는 개발 철학은 다음과 같습니다. 모든 것이 무너지는 핵심 기둥이 되는 블록 없이 블록으로 사물을 구축하는 것입니다.
저희는 삼각형이 어떻게 테셀레이션될 것인지에 특별히 의존하지 않고, 단지 삼각형이 있다는 것 자체에 의존하도록 설계했습니다.
이전 기술의 문제점은 패럴랙스 알고리즘의 특정 요구 사항을 중심으로 설계해야 한다는 것이었습니다.
새로운 시스템이 반복을 통해 어떻게 발전했는지 살펴봅시다. 각 단계마다 시스템의 결과물이 어떤 모습인지 예를 들어 보여드리겠습니다.
이전과 달리 아티스트는 평소처럼 메시를 조각하기만 하면 됩니다. 유일한 한계는 메시 토폴로지가 몇 가지 밀도 규칙을 준수해야 한다는 점이었습니다. 이 문제는 나중에 해결되었습니다.
메시를 디스플레이스하려면 머티리얼에서 체크박스를 선택하면 됩니다.
나머지는 빌드 파이프라인에서 자동으로 처리됩니다.
런타임에는 이전과 동일한 조각 로직을 유지했지만, 패럴랙스의 모든 요구 사항이 사라졌기 때문에 훨씬 더 단순화되었습니다.
변위되지 않은 원본 메시의 하향식 뷰에서 카메라 주위에 이전과 동일한 크기의 영역을 렌더링합니다. 그런 다음 렌더 타깃에 조각 모양을 렌더링합니다. 눈과 교차하지 않는 셰이프가 아무것도 조각하지 않도록 변위되지 않은 메시 깊이와 비교하여 테스트합니다.
뎁스 텍스처는 매 프레임마다 다시 그려지지만 카빙 맵은 지속적이며, 이전과 마찬가지로 카메라 움직임에 따라 매 프레임마다 스크롤하여 카메라가 있는 투영의 중심을 유지합니다.
그런 다음 컴퓨트 셰이더에서 모든 정보를 몇 개의 텍스처로 합성하여 변위를 처리하고, 급격한 변위를 피하기 위해 높이를 평활화합니다.
모든 픽셀에 대해 이웃을 분석하고 모든 픽셀 주변 영역의 디테일 분산을 계산하여 테셀레이션 계수를 도출하고 이를 텍스처에 기록합니다.
메시를 렌더링할 때 하드웨어 테셀레이션을 사용하여 테셀레이션 텍스처가 제안하는 만큼 트라이앵글을 세분화한 다음 메시를 디스플레이스합니다. 다음은 테스트 씬에서 이 첫 번째 반복을 살펴본 것입니다.
다시 말하지만, 프로그래머 아트입니다.
이 기법의 멋진 점은 이전 기법으로는 불가능했을 표면을 이미 렌더링할 수 있다는 사실입니다.
이제 이 기법을 사용하면 별것 아닌 것처럼 보이는 변위된 표면을 얻을 수 있습니다. 어떻게 룩을 개선했는지 살펴보겠습니다.
우리는 시스템별 높이 정보를 머티리얼 에디터의 언어로 변환하는 툴 세트를 구축했습니다. 높이가 알파로 변환되어 변위에 따라 다른 레이어를 블렌딩할 수 있습니다.
즉, 별도의 작업 없이 머티리얼 시스템의 모든 블렌딩 기능을 즉시 사용할 수 있게 되었으며, 이는 아티스트 워크플로의 핵심 기능입니다.
이것이 이 반복의 모습입니다. 다시 한 번 말하지만, 여기에는 프로그래머의 기술이 많이 사용됩니다. 눈이 치워지면 진흙층이 드러나는 것을 볼 수 있습니다. 아티스트가 원하는 레이어 또는 여러 개의 레이어가 될 수 있습니다.
그 후 아트 팀은 변위를 제어하기 위해 버텍스 컬러 마스킹과 같은 기능을 요구하기 시작했습니다. 처음에는 이전 시스템과 같은 길을 가고 있다고 생각할 수 있지만 근본적으로 큰 차이가 있습니다:
이 기술을 출시하는 데 꼭 필요한 기능은 아니었습니다. 단지 더 많은 제어 기능을 제공하기 위한 것이었습니다.
저는 도구가 사용자에게 더 많은 동사를 제공한다면 그것은 부가적인 것이라고 생각합니다. 어떤 도구가
기능을 제어할 수 있는 유일한 방법이라면, 그것은 빼는 것입니다.
다음 단계는 시차에서 멀어질 때 손실된 고해상도 디테일을 복구하는 것이었습니다:
플레이어가 발걸음을 옮기는 위치에 또 다른 하향식 퍼시스턴트 스크롤 저해상도 마스크를 생성하여 스노우 메시의 디테일 노멀 맵을 블렌딩하여 변위된 영역 주변에 디테일을 추가했습니다.
또한, 하향식 하이트 마스크를 생성하여 매 프레임마다 다이내믹 노멀 맵을 도출하여 표면의 미세한 눈 디테일을 시뮬레이션합니다.
모든 머티리얼에 기본적으로 이 기능을 사용했으며, 현재 최종 게임에서 이 기능이 작동하고 출시되었지만 당시 VFX 팀에 일정상 여유가 없었기 때문에 이 두 번째 부분을 최대한 밀어붙이지 않았습니다.
하지만 필수 조건은 아니었기 때문에 팀원들은 기꺼이 원하는 것을 얻을 수 있었습니다.
마지막으로 메시 토폴로지의 한계를 해결했습니다. 이제 피처에 적절한 메시를 던져도 올바르게 작동합니다.
그리고 설계한 대로 변위를 중심으로만 테셀레이션을 하고 필요한 만큼만 테셀레이션을 합니다.
또한 이 비디오에서는 변위를 중심으로 블렌딩된 디테일 노멀 맵의 좋은 예를 볼 수 있습니다.
변위를 중심으로만 테셀레이션하는 방법을 보여주기 위해 확대한 스크린샷입니다. 다른 기능은 모두 꺼서 명확하게 볼 수 있도록 했습니다.
이것이 지금까지의 모습입니다.
테셀레이션이 느리다는 것은 알고 있었지만, 일부 영역에서는 여전히 느려서 놀랐습니다.
저희가 가진 것을 보여드리겠습니다:
하드웨어 테셀레이션을 사용한 대형 지형 메시를 기본 PS4에서 캡처한 것입니다. 제가 강조 표시한 파도가 모두 선체 및 도메인 셰이더 호출입니다.
하단에서 볼 수 있듯이 점유율이 거의 0에 가까워졌습니다.
테셀레이터가 작업을 완료하고 돌아오기를 기다리고 있기 때문입니다. 저는 헐 셰이더가 얼마나 간단한지 강조했습니다. 그건 중요하지 않습니다. 테셀레이터가 얼마나 빨리 돌아오느냐에 따라 달라집니다.
자세한 내용을 설명할 시간이 많지 않지만, 요약하자면 하드웨어 테셀레이션은 초기 고정 비용이 높다는 것입니다. 메시를 가져와서 패스스루 헐 셰이더로 테셀레이션을 다른 모든 것이 동일할 때 일반 드로 콜보다 약 30~40% 느려집니다. 다시 한 번 말씀드리지만, 이는 개략적인 아이디어를 제공하기 위한 대략적인 추정치입니다.
이 비용은 최신 하드웨어보다 구세대 하드웨어에서 더 높으므로 이 점을 염두에 두시기 바랍니다. 테셀레이션을 사용할 때는 트라이앵글을 세분화하여 사용하는 것이 좋습니다. 테셀레이션이 많이 적용된 큰 트라이앵글이 적게 적용된 작은 트라이앵글보다 낫습니다. 고려해야 할 장단점이 더 많으므로 이 프레젠테이션의 보너스 섹션에서 이 주제에 대한 자세한 내용을 다룬 훌륭한 프레젠테이션을 참조하시기 바랍니다.
또한 AMD 하드웨어를 구체적으로 언급하고 있다는 점을 명심하세요.
마지막으로 개발 이야기를 계속 이어가겠습니다:
이런 딸꾹질이 올 것을 알고 있는 경우와 그렇지 않은 경우에는 큰 차이가 있습니다. 총 비용이 다소 놀라웠지만, 테셀레이션을 사용하기 시작할 때부터 이 문제를 알고 있었기 때문에 첫날부터 이 문제를 해결할 몇 가지 솔루션을 생각해 왔습니다.
가능한 한 적은 수의 트라이앵글에서 하드웨어 테셀레이션을 실행해야 한다는 것을 알고 있습니다.
안타깝게도 지형에는 컬링하기 어려운 크고 이상한 모양의 메시가 많고, 테셀레이션이 실제로 필요한 영역이 한정되어 있어도 동시에 꽤 많은 수의 메시가 활성화되어 있기 쉽습니다.
아트 팀은 LOD 패스에서 이 문제를 해결하기 위해 메시를 수동으로 분할하자고 제안했지만, 저희는 이 작업을 자동화할 수 있다고 생각했습니다.
이야기를 마무리하기 위해 먼저 솔루션에 대한 간략한 요약을 해드리고 자세한 내용을 살펴보겠습니다.
GPU 기반 렌더링 기술에서 영감을 받아 메시를 자동으로 더 작은 조각으로 분할하고 테셀레이션을 최대한 적게 렌더링하는 방법을 생각해냈습니다.
이는 큰 변화를 가져왔고 이 전체 시스템을 PS4로 출시하는 데 중요한 역할을 했습니다.
이 모든 것은 프로젝트 초기에 수행한 RnD가 있었기에 가능했습니다.
이것은 특정 사례를 위해 구축한 기술의 또 다른 예이지만, 그 교훈은 앞으로도 계속 도움이 될 것입니다.
인덱스 버퍼를 기하학적으로 응집력이 있는 삼각형의 섹션으로 나눕니다. 이 특정 기법을 사용하려면 동일한 트라이앵글 수 또는 가능한 한 서로 가까운 패치를 사용하세요. 각 메쉬에 대한 메시렛의 최대 인덱스 수를 저장합니다.
이 과정에서 각 메쉬렛의 인덱스 오프셋과 인덱스 수, 그리고 필요한 컬링 정보의 버퍼를 생성합니다. 컬링 시나리오에서는 구체로 충분했습니다.
마지막으로, 하나의 드로 콜로 메시를 렌더링하는 대신 하드웨어 테셀레이션과 일반 버텍스 파이프라인을 사용하여 2개의 간접 드로로 메시를 렌더링합니다.
컬링을 수행하는 컴퓨팅 셰이더는 모든 메시에 대한 최악의 인덱스 수에 각 유형별 테스트를 통과한 패치 수를 곱한 값으로 두 개의 간접 그리기 인수의 vertexCountPerInstance를 채웁니다.
일반 셰이더로 메시를 렌더링하면 얻을 수 있는 인덱스가 메시 인덱스와 일치하지 않을 것입니다.
버텍스 셰이더는 이 모든 것을 하나로 묶는 곳입니다. 이것은 단순화된 의사 코드입니다.
버텍스 셰이더에서는 하드웨어에서 가져온 인덱스를 사용하여 메시렛 정보를 가져와 이 버텍스가 실제로 메시렛에 속한 인덱스가 몇 개 있는지 알 수 있습니다.
메시클릿에 속하지 않는 여분의 버텍스는 0으로 축소하여 클립합니다. 이것이 인덱스 수가 다른 메시클릿을 렌더링하는 방법입니다.
인덱스 수가 다른 메시를 렌더링하는 방법이며, 메시를 최대한 동일한 인덱스 수를 가진 메쉬를 가능한 한 동일한 인덱스 수로 분할하는 것이 중요한 이유입니다.
참고로 이 기법에서는 자동 버텍스 페칭을 사용하지 않습니다. 콘솔에서는 GCN 하드웨어에서 동일하기 때문에 이 작업을 수행하지 않습니다.
가능한 한 적은 수의 트라이앵글이 테셀레이션되는, 우리가 원했던 결과를 얻었습니다. 비디오에서 앞으로 진행하면서 빨간색 패치가 나타나는 것을 볼 수 있습니다. 빨간색은 테셀레이션이 적용된 패치이고 녹색은 테셀레이션이 적용되지 않은 패치입니다.
디버그 명령으로 프러스텀을 잠그고 뒤를 보면 컬링이 얼마나 효과적인지 알 수 있습니다.
메시가 얼마 많이 컬링되고 있는지 확인할 수 있어 좋습니다.
Art는 이에 매우 만족했습니다. 일부 시나리오에서는 0.5ms에서 2ms로 최적화할 수 있었습니다. 이는 팀에게 큰 도움이 되었습니다. 많은 최적화 작업을 절약할 수 있었고, 이제 더 나은 게임을 만드는 데 전념할 수 있게 되었습니다.
하지만 잠깐만요, 더 있습니다!
라그나로크 제작 과정에서 스티븐 맥컬리(Stephen McAuley)가 렌더링 팀의 리더로 산타모니카 스튜디오에 합류했고, 더 많은 인원이 합류하면서 더 많은 호흡을 맞출 수 있었습니다.
덕분에 시스템을 실험하고 개선할 수 있는 여지가 생겼습니다. 결과물에 만족했지만 더 발전할 수 있다는 것을 알았습니다.
계속하기 전에 중요한 점을 말씀드리자면, 여기서 멈출 수도 있었지만 더 많은 시간을 가질 계획은 없었습니다. 하지만 시간이 생겼을 때 시스템을 확장할 수 있는 도구가 있었기 때문에 그 귀중한 시간을 가장 좋은 방법으로 사용할 수 있었습니다.
카일이 만든 원본 프레젠테이션을 보고 저희는 시스템에 더 세밀한 디테일을 추가하기로 결정했습니다.
이미 실행 중인 컴포지트 패스 덕분에 더 많은 텍스처와 정보를 매우 저렴하게 생성할 수 있었습니다.
결국 시스템에 두 가지를 더 추가했습니다.
에픽의 파티클 시스템은 GPU에서 시뮬레이션 파티클을 완전히 실행합니다. 다른 기능 중에서도 뎁스 콜리전을 지원합니다.
안타깝게도 불투명 파티클과 스프라이트 대신 각 파티클에 대해 렌더링되는 불투명 모델인 미니 모델에는 뎁스 콜리전이 지원되지 않습니다.
그 이유는 불투명 파티클과 미니 모델 모두 뎁스에 쓰기 때문에 뎁스 콜리전을 켜면 자신과 서로 충돌하기 때문입니다.
이제 위에서 아래로 표면을 표현하고 정확한 콜리전을 수행하는 데 필요한 모든 정보를 확보했습니다. 파티클 시스템에 하이트 필드 콜리전을 추가했더니 게임에서 걸을 때 눈 조각이 이리저리 던져지면서 지형과 사실적으로 충돌하는 것을 볼 수 있습니다.
이 역시 비용이 매우 저렴하여 제작 막바지에 기능을 추가할 때 유용합니다.
이제 수백 개의 작은 모델을 생성하고 문제 없이 충돌하도록 할 수 있습니다. 뎁스 콜리전은 화면에 구애받지 않고 카메라 반경 25미터 내에 눈이 있는 곳이라면 어디에서나 충돌할 수 있기 때문에 뎁스 콜리전보다 훨씬 더 좋습니다.
추가한 또 다른 기능은 카메라 주위에 실시간으로 변위 주위에 스폰되는 영구 모델입니다. 이는 일반적인 식생 시스템이 마스크를 읽는 지형에 메시를 스폰하는 것과 크게 다르지 않지만, 페인트된 마스크 대신 하이트 필드 컴포지팅 패스에서 생성된 변위 정보를 읽습니다. 그런 다음 비디오에서 볼 수 있듯이 파라미터를 조정하고 그 효과를 실시간으로 확인할 수 있습니다.
화면 밖에서 시스템 파라미터를 변경하고 있으며 그 효과를
효과를 확인할 수 있습니다.
이 기능은 영역별로 조정할 수 있었으며, 아트 팀은 실시간으로 절차적 모델을 배치하는 기능과 파이프라인에 있는 정보에 따라 상황에 맞게 조정할 수 있는 기능을 체험할 수 있었습니다.
이는 멋지게 보였을 뿐만 아니라 이러한 유형의 기술에 투자하면 미래에 어떤 일이 가능한지 보여주었습니다.
아티스트들은 프로시저럴 모델 배치의 힘을 잘 알고 있으며, 레벨 에디터에서 이를 많이 사용합니다. 하지만 동적으로 변화하는 메시에서 제작 비용이 거의 들지 않고 런타임 비용이 거의 들지 않으면서 실시간으로 실행되는 것을 본다는 것은 또 다른 차원의 문제입니다.
앞으로 어떤 기술에 투자할지 결정할 수 있는
어떤 기술에 투자할지 알려주는 귀중한 교훈이었습니다.
이 두 기능은 모두 늦게 온라인에 출시되었지만, 시스템과 구성 요소의 유연성 덕분에 제작 일정과 성능 예산 측면에서 모두 맞출 수 있었습니다.
필요한 정보에 쉽게 액세스할 수 있었고 비용도 저렴했습니다.
컴포지트 패스를 너무 구체적이거나 유연하지 않게 하드코딩했다면 프로덕션 후반에 변경해야 하거나 예산이 부족할 때 추가해야 했을 것입니다.
이 과정을 통해 많은 교훈을 얻었다고 말씀드렸는데, 그 중 핵심적인 요소는 최종 게임에서 모든 것을 구현했다는 점입니다. 미래를 위해 일부 시스템을 연구개발하는 것과 최종 게임 제작 단계까지 적용하는 것에는 큰 차이가 있습니다.
그리고 이 기술을 눈 위에서만 사용한 것이 아니라 알프하임의 모래사장에서도
알프하임의 모래에도 이 기술을 사용했습니다.
주목할 만한 점은 이 모래는 우리의 파트너 스튜디오인 블루포인트 게임즈의 아티스트들이 만들었다는 점입니다. 블루포인트 게임즈의 아티스트들은 이 기술을 다른 방식으로 사용하면서 아주 적은 입력으로 다른 모습을 구현할 수 있었습니다.
마지막으로 시스템의 모든 부분을 분석해 보겠습니다:
크라토스의 집 뒤에서 찍은 장면입니다.
이것은 기능이 켜지지 않은 기본 메시일 뿐입니다.
크라토스가 걸어다니는 데 따른 변위를 추가합니다.
그런 다음 높이 변위에 따라 다양한 머티리얼 레이어를 블렌딩합니다.
플레이어가 걸어 다니면서 생성한 디테일 노멀 맵을 공개합니다.
그런 다음 불투명 파티클과 투명 파티클을 모두 렌더링합니다.
마지막으로 절차적으로 배치된 모델을 추가합니다.
이것이 바로 우리가 시작하고 출시한 제품입니다. 원래의 비전을 이 정도까지 구현할 수 있었다는 것이 정말 자랑스럽고, 심지어는 그 이상도 구현할 수 있었다고 생각합니다.
왼쪽의 메시가 맞춤형 조각인 반면, 오른쪽의 메시가 플레이어가 뛰어다니는 것만으로도 동적으로 생성된다는 점을 고려할 필요가 있습니다.
지금까지 보여드린 에셋은 모두 PS4에서 캡처한 것입니다. 마지막으로 PS5에서 시스템이 어떻게 확장되는지 보여드리겠습니다. 좋은 텍스처와 테셀레이션만으로 얼마나 많은 것을 달성했는지 보여드리기 위해 다이내믹 모델과 추가 디테일을 해제했습니다.
여기에는 테셀레이션과 디스플레이스먼트가 있는 베이스 메시만 보입니다.
프레젠테이션이 거의 끝나가고 있습니다. 어디까지 왔는지 요약해 보겠습니다.
우리는 얻었습니다.
우선, 우리는 모든 목표를 달성했습니다.
이 시스템은 사용하기 쉬우며 표준 워크플로우에 완전히 통합되었습니다.
워크플로에 완전히 통합되었습니다. 사용하고자 하는 모든 곳에서 사용했습니다.
아트팀이 콘텐츠를 수정하지 않고도 여러 플랫폼에서 품질을 확장할 수 있는 방식으로 기술을 출시했습니다. 두 콘솔 모두에서 성능 목표를 달성하는 동시에 산타모니카 스튜디오 아트 팀의 기준에 부합하는 제품을 출시할 수 있었습니다.
계획적인 접근 방식 덕분에 필요한 기능을 먼저 출시한 다음 시간이나 리소스가 확보되면 시스템을 확장할 수 있었습니다.
게임의 특정 요구 사항을 해결하는 새로운 기술을 개발했으며, 미래를 내다보며 쉽게 재사용할 수 있는 일련의 툴을 보유하고 있습니다.
더 중요한 것은 지식 기반을 구축하고 새로운 길을 모색했다는 점입니다.
새로운 길을 개척했다는 점입니다. 그리고 이러한 교훈은
귀중한
마지막으로 이러한 교훈을 한 번 더 살펴봅시다:
항상 최종 목표에서 시작하고, 작업하는 동안 항상 실행 가능한 범위 내에 있는지 확인합니다.
기술의 일부가 모든 것을 좌우하지 않도록 모듈식 접근 방식을 취하세요.
앞으로 일어날 일에 대해 계획하고 준비하면 어떤 일도 예상치 못한 상황에 직면하지 않고 항상 계획을 세울 수 있습니다.
이 테이크어웨이는 높은 수준의 것이므로 이를 깨뜨려야 합니다. 여러분과 여러분의 팀은 언제, 어떻게 그렇게 해야 할지에 대한 직관을 키워야 합니다.
하지만 이러한 원칙을 바탕으로 도구 세트와 지식을 계속 쌓아간다면 이전보다 더 많은 문제를 더 빠르고 쉽게 해결할 수 있을 것입니다.
이제 진짜 마지막입니다! 먼저 제 강연에 와주신 모든 분들께 감사의 말씀을 전하고 싶습니다.
산타모니카 스튜디오의 훌륭한 팀원들, 특히 이번 프레젠테이션을 준비할 수 있도록 도와준 제 리드, 테크 디렉터, 매니저, 케빈, 카일, 크리스, 발레리오, 그리고 제 고문 줄리앙에게 감사의 인사를 전하고 싶습니다.
올해 GDC에서는 갓 오브 워: 라그나로크에 대한 프레젠테이션이 꽤 많이 준비되어 있습니다. 모두 보러 가세요!
다음 슬라이드에 제 연락처를 남겨두겠습니다.
질문이 있거나 인사하고 싶으시면 언제든지 연락주세요!
질문 시간이 있으니 마이크 앞에 줄을 서서 질문해 주세요.
카메라가 움직일 때 픽셀 이동에 고정합니다. 그런 다음 텍스처를 반대 방향으로 '스크롤'하고 새 영역을 우리 기법에 적합한 기본 색상으로 지웁니다.
섀도 맵의 메시를 테셀레이션으로 다시 렌더링하는 데 비용이 너무 많이 들기 때문에 스크린 스페이스 섀도만 사용했습니다.
점진적으로 테셀레이션하지 않고 필요한 부분만 테셀레이션하기 때문에 양쪽의 세분화 차이가 큰 가장자리가 있을 수 있습니다.
T-정션이 있는 경우 큰 간격이 발생할 가능성이 높습니다.
다른 솔루션은 점진적이고 점진적인 테셀레이션을 사용하여 동일한 가장자리의 두 면 사이의 차이가 크지 않도록 함으로써 이 문제를 해결했습니다.
이 경우 간격이 발생할 가능성이 적고 간격이 발생하더라도
더 작습니다.
'TECH.ART.FLOW.IO' 카테고리의 다른 글
[주석번역] 렌더링 갓오브워:라그라로크 GDC2023 파트2 (0) | 2023.10.28 |
---|---|
[주석번역] 렌더링 갓오브워:라그라로크 GDC2023 파트1 (0) | 2023.10.24 |
[번역] Custom Bloom Post-Process in Unreal Engine by Froyok (1) | 2023.10.16 |
[Promote]새로소주 시즌2 , 새로 노래자랑 온에어! (0) | 2023.10.13 |
[조직구조]신동 네트워크 전사 개발조직 구조 (0) | 2023.10.13 |