Megatexture는 어떻게 작동합니까?


21

나는 작은 실험 게임을 개발할뿐만 아니라 다양한 렌더링 기술과 그와 같은 것들을 테스트하기위한 기반 역할을하는 작은 엔진을 개발하려고 생각했습니다. 지금은 텍스처를 처리하고 메가 텍스쳐를 우연히 발견하는 방법에 대해 많은 생각을 해왔지만 이것은 약간 당혹스러운 것입니다. 많은 텍스처를 필요에 따라로드하고로드하는 기존의 접근법보다 낫다는 이야기가 많이 있지만 메가 텍스쳐는 어떻게 이것을 피할 수 있습니까? 스트리밍을 사용한다는 것을 읽었습니다. 각 텍스처를 개별적으로로드하는 것과는 대조적으로, 어떻게하면 더 나은 성능을 제공 할 수 있습니까? 또 다른 형태의 경작이 아닌가?

셰이더에있을 때 이러한 텍스처를 어떻게 샘플링하고, 텍스처의 일부를 메모리로 스트리밍 한 다음 작업합니다. 나는 Rage의 최신 비디오를 보았고 그 질감은 훌륭해 보이지만 훌륭한 예술가의 결과이거나 기술이 등장한 것입니다.

요약하면, 어떻게 작동하고 왜 훌륭하며 비슷한 것을 어떻게 할 수 있습니까?

답변:


15

메가 텍스처의 기본 아이디어는 텍스처 아틀라스를 사용하여 다양한 텍스처를 모두 큰 텍스처로 묶고 UV를 사용하여이 이미지에 색인을 생성하는 것입니다. 화면에 표시되는 내용을 기반으로 디스크에서 스트리밍해야하는 텍스처 부분을 알기 위해서는 좋은 휴리스틱이 필요합니다. 단점은 게임 세계 전체에서 완전히 고유 한 텍스처를 가질 수 있고 보이는 데이터 만 RAM에 유지한다는 것입니다. 저렴한 가격으로 사용하려면 좋은 스트리밍 및 캐싱 시스템이 필요합니다.

한 가지 접근 방식에 대한 자세한 내용은이 페이지의 자료를 참조하십시오. http://silverspaceship.com/src/svt/


4

기존 SGI 하드웨어 구현에 대한 클립 매핑을 확인하십시오.

최근에는 Megatexture가 SVT (Sparse Virtual Texturing)의 홍보 이름으로 사용되고 있습니다.

SVT는 어떤 텍스처와 밉맵이 필요한지 작은 해상도의 카메라 뷰를 렌더링합니다. 그런 다음 CPU 루틴은 디스크 시스템에로드를 발행하여 텍스처 / 밉 덩어리를 메모리로 가져오고 (메모리에없는 경우)로드 된 텍스처 덩어리를 큰 텍스처 아틀라스의 섹션 (일반적으로 128x128의 덩어리)에 배치합니다.

텍스처 청크를 가져 오면 모델에 필요한 텍스처를 가져와 실제로 저장된 큰 텍스처의 특정 부분으로 리디렉션하는 리디렉션 텍스처 (가상 페이지 맵)가 업데이트됩니다.


그것은 꽤 많은 설명입니다. 스트리밍이 진행 중이라면 HDD 또는 디스크에서 사용하기에 충분한 속도로 거대한 텍스처 덩어리를 스트리밍하는 방법이 궁금했습니다. 또한 기존 방법보다 메모리 효율성이 더 높은 이유를 알 수 있습니다. SVT에 대한 자세한 내용은 다음과 같습니다 (Flawe의 링크는이를위한 좋은 출발점으로 보입니다)
Daemoniorum

1

Megatexture를 일종의 "스트리밍"텍스처로 생각할 수 있습니다. 단면으로 읽히는 방대한 완전 텍스처 이미지 (간단히 설명)를 표시해야합니다. LOD / mipmapping, 로딩 및 리소스 관리와 같은 것보다 훨씬 더 많은 것이 있다고 확신합니다.

Wikipedia에 기사 가 있습니다.


2
이전에 기사를 읽었지만 세부 사항에 대해서는 약간의 내용이 있습니다. 해당 기술에 대한 실제 세부 정보를 얻는 것이 약간 어렵습니다. 신분증으로 종이를 만들었 으면 좋겠다 ...
Daemoniorum
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.