본문 바로가기

프로그래밍/Unreal

[UE4] Virtual Texturing과 Clipmap

 Virtual Texturing(VT)이란 오픈 월드 게임등의 대규모 텍스쳐 사용에 따른 메모리 문제를 해결하기 위해, OS의 Virtual memory 알고리즘을 텍스쳐 시스템에 적용한 것이다. 메모리란 언제나 한정된 자원이고 이를 최대한 활용하기 위한 기법은 언제나 수요가 있다.

 VT는 텍스쳐를 일정한 크기의 Page(Tile)로 구분하여, 해당 페이지가 필요한 수준의 Mip Level을 타일 별로 메모리에 올리도록 만들어준다. 이는 기존에 언리얼에서 사용하던 텍스쳐 스트리밍 기법에 비해 페이지 관리 및 탐색 비용을 더 필요로하지만 메모리 사용량을 줄일 수 있다는 이점이 있다.

 

Clipmap

 Clipmap은 VT 이전 시대의 텍스쳐 메모리 최적화 솔루션이다. 아래 레퍼런스 링크에서 설명을 굉장히 잘해주셔서 참고가 많이 되었다. 기존 Mipmap은 다양한 크기의 텍스쳐를 준비해두고, 매핑되고자 하는 폴리곤에 가장 알맞은 크기를 갖는 텍스쳐를 선택하는 기법이었다.

 문제는 Landscape 같은 방대한 크기의 텍스쳐를 관리하기 위해서는 메모리에 너무 큰 텍스쳐 스택이 올라가야한다는 점이다. 이를 해결하기 위해서 Clipmap은 텍스쳐 피라미드의 필요한 부분만을 살리고 필요없는 부분을 자르는 아이디어다.

 언리얼 엔진에서 Clipmap은 Global Distance Field를 구성하기 위한 자료구조로도 사용된다.

 

Clipmap 논문 요약 (slideshare.net)

 

Clipmap 논문 요약

발표자료가 작성된 년도가 2010년 입니다. 참고해주세요.

www.slideshare.net

 

어떻게 동작할까?

 앞에서도 말했지만, VT의 기본 아이디어는 텍스쳐를 동일한 크기의 Page(Tile)로 분할하여 실제 사용할 레벨을 결정한 뒤 이를 매핑해 메모리에 올려두는 것이다.

 위 그림과 같이 여러 Mip Level을 가진 텍스쳐 전체를 로드하지 않고 필요한 레벨의 필요한 타일만을 로드하고 매핑해줍니다. Virtual memory 기법과 같이 로딩한 타일들은 일종의 매핑 테이블에 기록되어 실제 physical texture에 올라가게 됩니다. 게임의 뷰 정보가 변경되어 새로운 Mip level의 텍스쳐 정보가 필요해지면 이를 자연스럽게 스트리밍하여 physical texture의 타일이 대체되도록 만들어 줍니다.

 

 

레퍼런스

Virtual Texturing | 언리얼 엔진 문서 (unrealengine.com)

 

Virtual Texturing

An overview of the available Virtual Texturing methods.

docs.unrealengine.com

Virtual Texture에 대해 이야기하다 (zhihu.com)