저자
초록
프로젝트가 온라인 상태가 되고 마침내 다시 결합하고 이전 작업을 다시 한 번 검토하고 AVT 프로세스 구현에서 발생한 세부 사항을 기록하고 핵심 구현을 오픈 소스화 하고 기여자들을 끌어 들이기 위해 이렇게 공개하는 시간을 갖었다.나는 모든 사람이 함께 배우고 발전하기 위해 더 많은 오픈 소스 좋은 것을 제공하기를 바랍니다.
https://github.com/lifangjie/HDRPVirtualTexture
본문
버추얼 텍스처의 개념과 맥락에 익숙하지 않은 독자는 이 글의 마지막에 첨부된 이전 공유를 먼저 참고하시기 바랍니다.
첸 카가 공유한 적응형 버추얼 텍스처(AVT)는 대규모 월드에 적용되는 버추얼 텍스처를 개선한 것입니다.예를 들어, 기존의 2km 지형 VT는 물리 페이지를 인덱싱하기 위해 2K*2K 방향 텍스처가 필요하며, 이 경우 각 방향 픽셀은 지형에서 1미터 그리드를 나타냅니다.이 그리드는 256*256 픽셀의 피지컬 페이지에 해당하므로 방향 텍스처의 mip1의 픽셀은 피지컬 페이지에 해당하는 2미터의 지형이며, 마침 방향 텍스처의 mip1이 1K*1K이므로 방향 텍스처에 기록되는 픽셀은 2K*2K가 됩니다.방향 텍스처는 피지컬 페이지 아틀라스 또는 엔트리의 인덱스이지만, 지형을 무한대로 확장하고 정밀도를 미터당 1024로 높이면 방향 텍스처의 크기가 미터당 16km*16km로 매우 과장된다는 것을 알 수 있습니다(예: 미터당 16km*16km).예를 들어 256개의 지형에 대해 미터당 16km*16km를 사용하려면 16K*16K 방향 픽셀이 필요하며, 지형의 정밀도가 미터당 1024로 증가하면 지형의 0.25미터가 물리 페이지에 해당합니다.
기존 가상 텍스처 인덱스 도식
AVT의 아이디어는 가상 이미지 자체도 동적 아틀라스로 간주되며 런타임은 최대 2K * 2K 방향 텍스처, 256 * 256 픽셀 할당에서 카메라의 가상 이미지에 가까운 항목에 물리적 페이지 크기 256을 곱한 값은 Chen Ka의 텍스트 65536 가상 이미지, 64 미터 섹터에 게시 된 64K 가상 이미지가 미터당 1024 정밀도로 64 미터 섹터에 부착됩니다.가상 이미지는 첸 카의 글에 있는 65536 가상 이미지이고, 64K 가상 이미지는 64미터 섹터에 미터당 1024의 정밀도로 부착되어 있습니다.섹터의 일부에서 멀어질수록 128 * 128 픽셀만 할당되며, 더 간단하게 설명하면 섹터의 일부에서 멀어질수록 최고 정밀도인 밉0을 사용할 수 없으므로 밉0 항목을 버리고 밉2 즉, 64 * 64를 유지하기 위해 밉2 항목만 유지하며 섹터의 동적 전환에 해당하는 거리는2K 아틀라스로서의 방향 텍스처를 사용하기에 충분하므로 본 백서의 구현에서는 1K * 1K 방향 텍스처만 사용합니다.
가상 이미지 아틀라스에서 섹터 분할
여기에 묵시적 인 문제는 256 * 256 mip8 또는 128 * 128 mip7이 1 픽셀 (항목) 일 뿐이므로 미터당 1024 정밀도, 즉 미터당 4 픽셀 만 표현할 수 있다는 것입니다.밉이 충분히 크지 않을 것이라고 생각하기 전에, 비전 범위가 충분하지 않다고 생각하기 전에 오랫동안 생각하지 않았고, 밉8에서 aniso8X의 발견을 구현 한 후 4K 해상도가 최대 300, 400 미터까지 될 수 있다면 매우 멀리 떨어져있었습니다.둘째, 원거리 4에 대한 0-8 레벨 밉은 1m 1024 텍셀에서 1m 4 텍셀까지 미터당 2 텍셀의 원거리 기본 색상의 정밀도를 표현할 수 있도록 1m 4 텍셀까지 딱 맞습니다.
Far Cry 5에서 원거리 지형의 구운 알베도 맵 공유 페이지 가장자리 표시 모드를 켜면 요청된 밉이 2k 해상도에서 훨씬 더 미세한 것을 볼 수 있습니다.
1080p에서 페이지 밉
2K에서 페이지 밉
이 백서에서 구현한 AVT의 순서도.
구현 세부 정보
- 효율적인 POT 아틀라스 할당 알고리즘을 구현하기 위해 다음 그림은 두 개의 서로 다른 카메라 위치에서 할당된 가상 이미지를 보여줍니다.
- 피드백 정보
UINT를 직접 중복 제거하기
피드백 강화
추가 피드백을 통해 문제가 더 이상 보이지 않습니다.
AVT 공유 중 출력 페이지 ID 버퍼 비트 분배
페이지 ID xy를 계산하는 코드
페이지 ID 정렬을 구현하는 코드
AVT 공유에서 페이지 정렬을 위한 의사 코드
베이어 디더
문서가 매우 명확합니다.:sm5-attributes-earlydepthstencil
- HDRP 주입 지점 없음 GBuffer 패스 이전
- 인디렉션 텍스처 리맵에 대한 몇 가지 생각: 컴퓨팅 셰이더를 사용하여 인디렉션 텍스처를 작성할 때 최대 UAV 수가 8개라는 문제가 발생했는데, 사실 DX11.1+ 또는 DX12에서는 UAV 수가 지원되지만 Unity 엔진은 이 문제를 지원하지 못합니다.이 오류를 처리하지 않았고, 렌더독을 사용하여 프레임을 잡고 성공을 바인딩하여 for 루프 분할을 강요하지 않도록 게으른!
바인딩에 문제가 없음을 알 수 있습니다.
엔진 소스 코드에 오류 발생
- SRP 코어는 C#에서 hlsl 셰이더 코드를 생성하는 방법을 제공하여 상수를 더 쉽고 효율적으로 대응할 수 있도록 합니다.
- https://docs.unity3d.com/Packages/com.unity.render-pipelines.core@16.0/manual/generating-shader-includes.html
C# 코드
생성된 셰이더 코드
간단한 성능 테스트를 통해性能测试:
- CPU 오버헤드:
-
- GBuffer Pass:
- 프레임당 최대 16개의 실제 페이지를 동시에 렌더링합니다:
- 저장소 주소:
- https://github.com/lifangjie/HDRPVirtualTexture
Reference:
https://zhuanlan.zhihu.com/p/138484024
Chen, K. "Adaptive virtual texture rendering in far cry 4." Game Developers Conference. 2015.
Chen, Ka. "Adaptive Virtual Textures." GPU Pro 7: Advanced Rendering Techniques 131 (2016).
원문
https://zhuanlan.zhihu.com/p/685872448?utm_psn=1855920042421657600
'TECH.ART.FLOW.IO' 카테고리의 다른 글
열] 신동 네트워크 신작 Etheria: Restart 사전 예약 시작. (0) | 2024.12.27 |
---|---|
탄] 하이퍼그리프 신작 아크나이츠 엔드필드 베타 트레일러 공개 (0) | 2024.12.26 |
핵] [번역] UE5 포스트 프로세스 머티리얼에서 섀도맵을 처리할 수 있도록 해봤습니다. (0) | 2024.12.21 |
[번역] 유니티 버추얼 텍스처를 구현합니다. (0) | 2024.12.16 |
【번역】 언리얼 엔진 비디오 메모리 누수 찾기 솔루션 공유 - 툴 및 사용법 (1) | 2024.12.15 |