TECHARTNOMAD | TECHARTFLOWIO.COM

TECH.ART.FLOW.IO

[번역]gdc2024 Large Scale GPU-Based Skinning for Vegetation in 'Alan Wake 2'

jplee 2024. 8. 8. 15:48

 
저자

콘텐츠 개요

노스 라이트 엔진(레메디 독점 엔진)의 스키닝 애니메이션이 모두 컴퓨트쉐이더에서 계산 된 후 스킨 버퍼에 저장된 다음 그려지도록 변경되었으며, 컨트롤의 일부 머티리얼은 버텍스쉐이더에서 스킨화됩니다. 또한 노스 라이트가 alan awake2에서 GPU 구동으로 변경된 큰 배경이 있으며 캐릭터 메쉬조차도 클러스터입니다. 알란 어웨이크2에서 노스라이트 엔진이 GPU 구동 렌더링으로 바뀐 것도 큰 배경이 있는데, 캐릭터 메시도 클러스터이기 때문에 스키닝 과정에서 클러스터의 경계를 파악해야 합니다 컴퓨트쉐이더 스키닝은 128 버텍스의 배치, 버텍스 당 1/4/8 본 옵션입니다.
트리 애니메이션: 퀄리티 때문이라고 했는데, 그렇지 않습니다. 품질상의 이유로 스피드트리 셰이더의 절차적 애니메이션을 사용하지 않았고 그것은 캐릭터 스켈레톤 애니메이션과 동일합니다.

 

vertex compression

  • 압축 한계, 포지션 정보는 int16, 접선 프레임은 팔면체(octahedron) 매핑을 사용합니다.
  • 위치 비트가 적기 때문에 위치의 값 범위가 충분히 작지 않고 T-포즈의 바운드가 사용됩니다.
  • 값 필드가 잘못되었을 때 발생하는 버그에 대한 재미있는 그래프를 보여줍니다.

많은 수의 나무 처리

게임의 숲 장면에서 나무의 밀도가 여전히 상당히 높습니다. 주변 환경과 상호작용하지 않는(자체 애니메이션만 브로드케스팅) 키 큰 나무의 경우, 나무를 인스턴스화할 때 스킨의 결과물을 다른 위치/회전에 놓고 여러 번 그리는 소위 변형 방식을 사용했는데, 나무가 상대적으로 크고 숲에 다양한 다른 것들이 있기 때문에 쉽게 감지할 수 있기 때문이죠. 나무가 크고 숲에 다른 것들이 많기 때문에 눈에 띄기가 쉽지 않습니다.

GPU 위 본 스키닝

GPU에서 스키닝은 괜찮지만, 본 스키닝(애니메이션 진행 상황에 따라 각 프레임에서 각 본의 트랜스폼을 계산하는 방식)은 본이 계층적이고 상위-하위 계층적 종속성이 있기 때문에 약간 까다롭고 컴퓨팅 셰이더로 효율적으로 구현하기가 쉽지 않습니다.

이 접근 방식의 두 가지 버전을 실험했습니다.

방법 1: 한 번에 한 레이어씩, 각 레이어는 다음 레이어가 이전 레이어의 종속성 결과를 올바르게 읽을 수 있도록 배리어로 끝나는데, 레이어 수가 많을 수 있으므로(최대 64레벨까지 가능) 많은 배리어와 디스패치가 발생하여 속도가 느려질 수 있습니다.

방법 2: 리프 노드 수로 GPU 스레드를 시작하면 각 스레드가 자신의 노드부터 모든 부모 노드를 로컬로 계산합니다. 결과는 방법 1보다 훨씬 빠른 기적이 일어나서 출시되었습니다...

스켈레톤 애니메이션의 LOD: 거리에 따라 다른 스켈레톤을 사용하려고 했지만(원거리의 경우 총 스켈레톤 수와 식물의 레이어 수를 많이 줄임), 가장 큰 문제는 LOD를 전환할 때 튀어나오는 현상입니다.

일부 성능 데이터

버텍스 수가 정말 과장되어 있습니다.

레이 트레이싱 관련

각 트리 인스턴스에는 고유한 BLAS가 있으므로 매 프레임마다 업데이트하기에는 너무 느린 많은 BLAS가 생성됩니다.

따라서 캐스케이드 방식으로 업데이트합니다.


NorthLight Engine by Remedy.

 


원문

https://zhuanlan.zhihu.com/p/710323228?utm_psn=1804511222206451712

zhuanlan.zhihu.com