텍스처 아틀라스와 배열 텍스처 : CPU와 GPU가 처리 방식을 어떻게 다르게 처리하고 성능에 어떤 영향을 미칩니 까?


10

Unity 5.4 (현재 베타 버전)는 OpenGL의 ArrayTexture 와 같은 헛된 배열 텍스처 인 훨씬 기다려진 기능 (2013 년 이후)을 가져올 것 입니다. 그러나 배열 텍스처와 텍스처 아틀라스에 대해 읽은 후에도 여전히 CPU와 GPU의 사용법에 대한 기술적 차이점을 이해할 수 없습니다.

더 구체적으로 말하면, CPU와 GPU가 텍스처 아틀라스와 텍스처 배열을 처리하는 방법의 주요 차이점과 이러한 차이가 성능 및 메모리 처리에 어떤 영향을 줄 수 있는지에 대한 설명을 요청하고자합니다 (예 : 텍스쳐 배열이 텍스쳐 아틀라스보다 성능이 더 좋은 방법 등).

불행히도 비공개 소스로 인해 Unity 구현에 대한 기술적 세부 정보가 부족한 경우 OpenGL.s ArrayTexture에 대한 답변에 만족할 것입니다.


둘 다 구현에 따라 다르기 때문에 기술적 비교를 찾지 못했다는 사실에 놀라지 않았습니다.
wondra

Unity 엔진의 내부가 폐쇄 소스 블랙 박스이므로 어떻게 작동하는지에 대한 정보를 얻는 데 어려움을 겪을 것입니다. 유일하게 할 수있는 일은 각 사례를 프로파일 링하고 CPU 및 GPU 사용량을 비교하는 것입니다. 작동 방식을 이해하려면 Unity 엔지니어가 참여하거나 소스 코드를 열거 나 유출해야합니다.
jgallant 10

@ Jon Fair는 충분하지만 실제로 엔진에 무관 한 답변에 더 관심이있었습니다. 그것이 매우 다양하다면, 예를 들어 OpenGL의 ArrayTexture에 대해 질문을 업데이트 할 수 있습니다 : opengl.org/wiki/Array_Texture
ASteer

답변:


11

위의 의견에서 언급했듯이 성능은 구현, 특정 하드웨어 및 텍스처로 수행하려는 작업에 따라 달라 지므로 각 대안을 프로파일 링하는 신뢰할만한 유일한 대답입니다.

각 옵션을 사용하는 방법에는 몇 가지 차이점이 있습니다.

한 가지 큰 차이점은 배열 텍스처의 경우 텍스처 좌표 래핑 또는 밉 매핑과 같은 목적으로 각 텍스처가 개별적으로 처리된다는 것입니다.

이렇게하면 텍스처 엣지의 일반적인 문제를 피할 수 있습니다. 여기에서 인접한 텍스쳐 견본 사이에 패딩을 추가해야합니다. 특히 가장자리의 샘플이 서로 블리드되지 않도록 밉니다.

즉, 텍스처를 타일링하려는 경우 텍스처 샘플링 하드웨어를 사용하여 바닐라 텍스처와 마찬가지로 할 수 있습니다. 아틀라스를 사용하면 샘플러가 내부의 개별 타일이 아니라 전체 아틀라스에 대해서만 텍스처 좌표를 랩 / 미러링 / 테두리하기 만하므로 프래그먼트 셰이더에서 타일링 계산을 수행해야합니다.

배열 텍스처의 주요 제한 사항은 모든 구성 텍스처가 동일한 해상도와 밉 레벨 수를 가져야한다는 것입니다. 해상도가 매우 다른 텍스처를 일괄 적으로 함께 시도하는 경우 (예 : 가상 텍스처에서 LoD가 떨어진 지형 타일을 저장하는 경우 ) 대신 아틀라스의 유연성을 원할 수 있습니다.


고마워, 그게 바로 내가했던 일이야 정확히 말해서 메모리 집약이 더 빠르다는 정확한 대답은 아닙니다. 물론 구현에 의존하기 때문입니다. 여전히 각 사례의 기능에 대한 몇 가지 지침이 일반적인 최적 시나리오와 최악의 시나리오를 이해하는 데 도움이 될 것이라고 확신했습니다. 당신의 대답은 실제로 저에게 도움이되었습니다.
ASteer

배열 텍스처의 또 다른 단점 :에 의해 제한됩니다 GL_MAX_ARRAY_TEXTURE_LAYERS. 내 반 현대 GPU에서는 2048이므로 아주 작은 텍스처를 원하면이 한계가 너무 낮을 수 있습니다.
jwd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.