2014-09-03 4 views
4

일부 HD 이미징 소프트웨어를 사용하고 있으며 현재이 버전에서는 매우 큰 텍스처가 계획되어 있지 않지만 앞으로 몇 가지 교정을하고 싶습니다.4GB 텍스처 처리 (BigTiff) OpenGL

매우 큰 텍스처 (예 : 1095630 x 939495)를 처리하는 경우 압축 된 텍스처와 밉 매핑의 표준 조합을 사용할 수 있습니까? 아니면 이러한 텍스처가 텍스처 메모리에 저장하기에 너무 깁니다.

내 가정은 그들이 너무 커서 CPU에서 psudeo 수동 밉맵을 수행해야한다는 것입니다. 아주 큰 데이터를 가져 와서 전체 축소를위한 합리적인 압축 버전을 만든 다음 사용자가 확대 할 때 큰 텍스처의 하위 섹션을 GPU로 보냅니 까?

CPU에서 상기 압축을 수행한다는 아이디어가 너무 느릴 수 있으므로 데이터 계획을 세우고 압축을 위해 GPU에 청크를 보내야합니다. 그렇다면 GPU가 처리 할 수있는 최대 텍스처 크기를 동적으로 찾아내는 방법은 무엇입니까?

나는 TIFF 형식을 처음 사용하지만 모양이 타일로 이미 저장되어 있는데 이것이 맞습니까? 나는 libtiff로 조금 놀기를 바란다. 그러나 나는 그것의 사용의 많은 예를 발견하지 못했다. (나의 구글 기술은 나에게 오늘 실패한다, 사과). https://stackoverflow.com/questions/ask

기존 예 좀이 두 가지에서 포인터를 얻을 수 있었으면하고 있습니다 :

을 :

  • 나는 GPU가 처리 할 수있는 최대 텍스처 크기 (바람직하게는 3D 텍스처 크기 ...)
  • 무슨 큰 텍스처 형식을 파괴하고, GPU가 처리 할 수있는로 압축하는 최선의 방법을 찾아 어떻게
  • 확대/축소를 용이하게하는 가장 좋은 방법은 무엇입니까?
  • libTiff를 사용하기위한 포인터는 무엇입니까?
+0

(((1095630 x 939495 x 4 (rgba))/1024 (메가 바이트))/1024 (기가 바이트)) ~ = 383.5 GB – CoffeeandCode

+0

그래, 텍스처 메모리에 ... 아마도. – CoffeeandCode

답변

3

대상 하드웨어에 따라 다릅니다.

목표가 넓은 범위의 GPU 세대에 걸쳐 광범위하게 지원된다면 사용자가 제안한대로 텍스처 (밉맵) 수준의 현장 업데이트가 필요합니다. 오래된 GPU 세대는 처리 할 수있는 최대 텍스처 해상도에 한계가 있습니다. 일반적으로 4096 ~ 8192 정도의 크기입니다. 일반적으로 전체 타일과 여백을 할당 할 수 있도록 충분한 타일이 할당 된 일련의 타일 텍스처 (각 타일은 1024 × 1024 정도)가 있습니다.

대상이 차세대 GPU 인 경우 John Carmack이 "Megatextures"라고하는 무언가를 사용할 수 있습니다. 바인드가없고 스파 스없는 텍스처를 사용합니다. 이것은 OpenGL의 핵심 기능이 아니지만 확장자가 GL_ARB_sparse_textureGL_ARB_bindless_texture 인 경우에만 표시됩니다. 텍스처 타일 세트가있는 대신 하나의 커다란 "가상"텍스처가 있으며 필요에 따라 필요한 타일을 스트리밍 할 수 있습니다.

이 기능을 지원하는 GPU에서는 전용 GPU RAM의 양에 의해 설정된 한계까지 실행되지 않습니다.OpenGL은 "사용 가능한 비디오 메모리"라는 개념을 결코 갖지 못했고, 텍스처는 필요할 때마다 언제나 바꿀 수있었습니다. 스파 스 텍스처 지원을 통해 오늘날 GPU는 시스템 메모리에서 기가 바이트의 텍스처 데이터를 오프로드하여 필요할 때 GPU RAM으로 가져옵니다 (기본적으로 시스템 메모리는 텍스처 데이터의 L4 캐시로 바뀝니다).

1

OpenGL에는 일반 텍스처의 최대 크기 제한이 있습니다. 이 제한은 구현 고유의 것으로 쉽게 glGetInteger()으로 조회 할 수 있습니다 :

GLint maxGPUTextureSize; 
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxGPUTextureSize); 

문서에 따라 경찰 :

값은 GL가 처리 할 수있는 가장 큰 텍스처의 대략적인 견적을 제공합니다. 값은 1024 이상이어야합니다.

텍스처의 최대 제곱 크기입니다. 예 : 1024x1024.

이제 @datenwolf에서 제안한 것처럼 "Virtual Texturing"일명 "Megatexture"기술에 문제가 적절하게 보입니다. 해당 용어를 검색하면 해당 주제에 대한 많은 작업과 논문을 찾을 수 있습니다. 나는 Sean Barret이 작성한 this GDC presentation이이 주제에 대한 첫 번째 공개 작업 중 하나라고 생각합니다. 또한 GPU Pro 1에는이 기술에 대한 두 개의 기사가 있습니다.

+1

두 답변 모두 훌륭합니다. 특히 max_texture_size에 대한 언급과 훌륭한 출처에 감사드립니다. 나는 그가 과거에 게시 한 첫 번째 답변에서 @datenwolf에게 최고의 답을 줄 것입니다. – chrispepper1989