텍스처 아틀라스와 배열 텍스처 : CPU와 GPU가 처리 방식을 어떻게 다르게 처리하고 성능에 어떤 영향을 미칩니 까? 기술적 차이점을 이해할 수

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

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

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



답변

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

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

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

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

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

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