TECHARTNOMAD | TECHARTFLOWIO.COM

TECH.ART.FLOW.IO

[번역] HDRP에서 적응형 가상 텍스처 구현하기

jplee 2025. 1. 9. 02:30

저자

초록

프로젝트가 온라인 상태가 되고 마침내 다시 결합하고 이전 작업을 다시 한 번 검토하고 AVT 프로세스 구현에서 발생한 세부 사항을 기록하고 핵심 구현을 오픈 소스화 하고 기여자들을 끌어 들이기 위해 이렇게 공개하는 시간을 갖었다.나는 모든 사람이 함께 배우고 발전하기 위해 더 많은 오픈 소스 좋은 것을 제공하기를 바랍니다.

https://github.com/lifangjie/HDRPVirtualTexture

 

GitHub - lifangjie/HDRPVirtualTexture: Implementing Adaptive Virtual Texture in HDRP

Implementing Adaptive Virtual Texture in HDRP. Contribute to lifangjie/HDRPVirtualTexture development by creating an account on GitHub.

github.com

본문 

 

버추얼 텍스처의 개념과 맥락에 익숙하지 않은 독자는 이 글의 마지막에 첨부된 이전 공유를 먼저 참고하시기 바랍니다.
첸 카가 공유한 적응형 버추얼 텍스처(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 루프 분할을 강요하지 않도록 게으른!

바인딩에 문제가 없음을 알 수 있습니다.

엔진 소스 코드에 오류 발생

C# 코드

생성된 셰이더 코드

간단한 성능 테스트를 통해性能测试

  • CPU 오버헤드:
  •  
    0.1ms 이하의 CPU 경과 시간, GC는 로그에 의해서만 생성됩니다.
    • GBuffer Pass:
    VT OFF
    VT ON
    • 프레임당 최대 16개의 실제 페이지를 동시에 렌더링합니다:
  • 저장소 주소:
  • https://github.com/lifangjie/HDRPVirtualTexture
 

GitHub - lifangjie/HDRPVirtualTexture: Implementing Adaptive Virtual Texture in HDRP

Implementing Adaptive Virtual Texture in HDRP. Contribute to lifangjie/HDRPVirtualTexture development by creating an account on GitHub.

github.com

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