제공
프로젝트에 대한 전반적인 정보
LOD 전환 페이드뿐만 아니라 햇빛 방향에 따라 그림자가 바뀌는 큰 월드도 페이드하는 크로스 페이드에 매우 중점을 둡니다.
바인드리스에 많은 노력을 기울여 바인드리스를 지원하지 않는 모든 하드웨어는 완전히 퇴출되었습니다.
4.27 카오스를 사용하는 UE4
9제곱킬로미터의 거대한 세계
CPU 병목 현상은 UE의 렌더 스레드에 있습니다.
날씨/빛/계절 등 렌더링 기능이 많지만 매우 간단하므로 생략하겠습니다.
거대한 세상의 크기
bindless resouce
이 게임의 CPU 병목 현상은 렌더링 스레드에 있기 때문에 가능한 한 인스턴스화를 하고 싶습니다.
그리고 바인드리스 리소스는 더 많은 인스턴싱 가능성을 열어주는 열쇠입니다.
바인드리스란 버퍼/텍스처 바인딩을 특수 셰이더 파라미터(텍스처/버퍼)에서 셰이더의 간단한 정수 인덱스로 변경하여 디스크립터 테이블을 인덱싱하고 해당 리소스를 가져올 수 있음을 의미합니다.이렇게 하면 텍스처/버퍼는 다르지만 PSO가 동일한 드로잉을 인스턴스화할 수 있습니다.
그리고 바인드리스의 사용은 gbuffer에만 국한되지 않습니다.
원칙은 간단하지만 프로젝트의 구현은 주로 UE 버전이 지원하지 않고 폴백이 좋지 않기 때문에 많은 작업을 수행해야 합니다.
볼류메트릭을 위한 거리 분할 전략
probe volume
UE 볼류메트릭 라이트맵처럼 보입니다.
바인드리스를 사용하면 바인딩을 더 쉽게 처리할 수 있으며 셰이더는 모든 글로벌 프로브 볼륨에 한 번에 액세스할 수 있습니다.
흥미로운 점은 성의 원통형 씬 케이스에 실린더 볼륨이 추가되었다는 점입니다.
바인드리스를 사용하면 셰이더가 로드된 모든 볼륨에 액세스할 수 있지만 메모리 제어를 위해서는 스트리밍이 필요합니다.이를 수행하는 방법은 프러스텀 컬을 사용하는 것입니다.
probe shadow
흥미로운 기능은 프로브 볼륨에 저장된 우세한 방향에 따라 스크린 스페이스 레이트레이스를 수행하여 접촉 그림자를 얻는 것으로, 기본적으로 방향이 있는 SSAO 효과를 볼 수 있습니다. ( SSDO 와 결과가 유사? )
point-blank shadow
동적 그림자와 정적 그림자뿐만 아니라 접촉 그림자(Contact Shadow)와 캡슐 그림자도 있습니다. 많은 빛에는 정적 그림자가 있지만 소량의 빛만 동적 그림자를 드리우며, 동적 그림자가 없는 빛을 선택하여 캐릭터에 캡슐 그림자를 줄 수 있습니다. 그림자 맵 캐시에도 크기 버킷이 있습니다.
다이내믹 섀도에는 빈/비어 있는 검은색 부분의 샘플링을 건너뛰는 데 사용되는 저해상도 UAV가 2019년에 도입됩니다.
UE의 자체 캡슐 섀도를 최적화한 것 중 하나는 캡슐 섀도 계산 범위를 제한하는 것이었습니다.
Lumos shadow (지팡이 끝 포인트 라이트)는 사실 포인트 라이트 그림자가 캐시할 수 없는(움직이는 사람을 따라가기 때문에) 문제가 있습니다. 최적화는 큐브맵을 사용하여 한 번에 6 개의 그림자를 그리는 것 외에도 캐릭터의 그림자에만 로우 프로파일 (스위치)이 있습니다.
태양 그림자 집중 최적화
전략.
접촉 그림자(Contact Shadow)는 매우 효과적이므로 가까운 거리에 있는 작은 물체나 풀과 같은 번거로운 사물을 그리는 것을 건너뛰고 먼 거리에 그림자를 만들 수 있습니다.
tile based directional shadow cache
이 아이디어는 카메라가 움직일 때 시야에 들어오는 부분의 그림자만 업데이트하면 되는 스크롤된 그림자 캐시와 비슷합니다.
조명 공간을 타일로 분할하여 각 타일을 개별적으로 업데이트할 수 있으며, 카메라가 작은 영역에서 앞뒤로 움직일 때 캐시를 전혀 업데이트하지 않을 수 있습니다.
타일 분할의 또 다른 장점은 각 타일이 필요한지 여부와 시야각과 같은 오클루전 정보를 확인할 수 있다는 점입니다.
또한 타일 디퍼드의 분류 패스에서 각 화면 타일에 대해 샘플링할 그림자 유형도 고려해야 한다고 언급했습니다.이 두 가지를 사용하면 모든 픽셀이 동적 참조 또는 캐시된 섀도 케이스만 선택하도록 하여 분기를 사용하지 않는 gpu program variant 를 완전히 삭제하여 VGPR 사용을 줄일 수 있습니다.
캐시 관리
하나의 타일은 128x128m로 결코 작지 않습니다. 타일을 업데이트하려면 컬링 등의 작업이 필요하기 때문에 프레임당 하나의 타일을 사용하는 것이 전략입니다.하지만 시점이 빠르게 움직일 때는 타일 하나로는 충분하지 않기 때문에 전환할 때 카메라가 넓어집니다.
캐시를 새로 고칠 수 있는 다른 많은 요인이 있습니다.
나무와 같은 동적 물체는 무시하세요.
시간, 크로스 페이드가 필요하므로 실제로 각 프레임은 기본적으로 사용되는 메모리 양의 2 배, 마지막 햇빛 각도와 현재 각도는 크로스 페이드가 필요합니다.
레벨 스트리밍으로 인한 업데이트, 가장 낮은 우선순위로 설정 로드 전환으로 인한 섀도 깊이 불일치, 장거리에서만 처리합니다. 특수 섀도 프록시 메시를 사용하면 실제로는 문제가 되지 않는 것으로 보입니다.
햇빛이 땅과 거의 평행할 때 일출과 일몰과 같은 경우 드로우콜은 매우 높아집니다. 평행한 조명을 직접 끄십시오...
의류용 멀티 레이어 소재
처음 나이브 한 구현에서 16 개의 레이어 머티리얼 블렌드. 실제로 한 사람에게 총 16 개의 머티리얼 만 있으면 대부분의 지점은 1 개의 머티리얼이고 과도한 지점의 가장자리는 실제로 2 개의 머티리얼 전환을 사용합니다.
접근 방식의 최적화
우선 마이크로와 매크로 디테일을 구별하기 위해 옷 주름은 매크로 디테일이며, 이것과 다층 재료는 아무 관련이 없으며, 마이크로 디테일 재료는 실제로 각 재료가 초기 핸드 헬드 지형 블렌드와 유사하게 (다른베이스 / 일반 / 메탈릭 러프니스 맵) 2 개의 재료 색인과 메탈릭 러프니스 맵, 저장 2 개의 재료 색인과 초기 휴대용 지형 혼합을 절약 할 수 있습니다.
마이크로 디테리얼 머티리얼은 초기 지형 블렌드와 유사하게 각 머티리얼마다 다른(베이스/일반/메탈릭 러프니스 맵이 다른) 머티리얼 인덱스 2개와 블렌드 웨이트 1개로 구성되어 있습니다. 16개의 레이어에 달하는 거친 머티리얼 블렌드에 비해 많은 시간을 절약할 수 있습니다.
문제는 필터 후에도 인덱스가 올바른 값을 얻을 수 있도록 머티리얼 인덱스 맵이 경계에 있어야 한다는 것인데, 이 방법은 경계에서 인덱스 맵을 두 개로 몇 번 펼쳐서 이중 선형 필터가 정상인지 확인하는 것입니다.
자동화된 테스트 사용
성능 모니터링 시나리오
특수 효과가 갑자기 문제의 프레임을 고착시키는 데 일조했습니다.
적응형 밝기 제어
특수 효과, 게임 내 일부 조명의 밝기를 적응형으로 제어해야 합니다.여러 가지 방법이 있습니다.
자동 노출을 사용하면 특수 효과와 조명 마법을 사용할 수 있습니다.
마지막으로 렌더링된 프레임의 평균 밝기를 기준으로 사용하면 많은 문제가 발생할 수 있습니다. 예를 들어 카메라가 시야각 조명을 차단할 때, 전후 두 프레임의 밝기가 너무 많이 변하는 경우 등이 있습니다.
카메라 주변의 프로브를 읽고 연평균 밝기, 고스트 반투명 사용, 애니메이션의 아트도 부드러움 때문에 사용하기를 좋아합니다.
마지막으로 수동 조정 옵션이 있습니다.
live painting
학교에 그려져 있는 살아있는 그림이에요.제가 생각할 수 있는 유일한 방법은 동영상에 올리거나비디오에 넣거나 별도의 카메라를 사용하여 각 프레임을 RT로 그리는 것입니다.
하지만 그들이 생각해낸 방법은 VS에서 변경을 수행하고, 메인 카메라 뷰에서 직접 3D 모델을 그린 다음을 메인 카메라 뷰에서 직접 그리고 VS 변경 사항을 캔버스에 평평하게 배치하는 것이었습니다.
성능과 결과물 측면에서 더 좋습니다. RT 크기가 실제로 메인 카메라 뷰에 붙여넣을 픽셀 수와 일치하는지 확인하기가 어렵기 때문에 별도의 RT에 그리는 것보다 낫습니다. 새로운 패스를 사용하지 않고 일반 드로우콜만 사용하기 때문에 성능이 더 좋습니다.
원문
https://zhuanlan.zhihu.com/p/703657480?utm_psn=1804512244769366017