사용 가능한 모든 텍스처 단위를 사용하는 것이 좋습니다?


9

범프 매핑과 같이 메시에 여러 텍스처를 적용 할 때는 보통 처음 몇 개의 고정 텍스처 단위에 텍스처를 바인딩합니다. 예 : 확산 = 단위 0, 범프 = 단위 1, 반사 = 단위 2 다른 텍스처와 다른 메쉬. 그러나 나는 왜 항상 glActiveTexture많은 텍스처 유닛을 지원 하는지 궁금했습니다 (이전 링크에서는 80 이상이라고 말합니다).

따라서 텍스처를 관리하는 한 가지 가능한 방법은 개별 텍스처를 사용 가능한 각 단위에 바인딩하고 균일 한 샘플러 인덱스를 업데이트하는 것만 가능하게하는 것입니다. 텍스처 스위치 수를 줄여 렌더링 성능을 개선해야합니다. 최대 텍스처 단위보다 텍스처가 적 으면 텍스처를 바인딩 해제 할 필요가 없습니다.

이 표준은 실시간 OpenGL 응용 프로그램에 적용됩니까 (D3D에도 적용됨)? 그리고이 접근 방식을 취했을 때 명백한 성능 영향이 있습니까? 아마도 메모리 오버 헤드?

답변:


11

현대 하드웨어에는 OpenGL에 의해 노출 된 텍스처 바인딩 포인트의 개념이 실제로 없습니다. 오히려, 쉐이더 유닛은 비디오 메모리에 상주하는 한 어떤 텍스처라도 잠재적으로 처리 할 수있는 디스크립터 (일부 종류의 팻 포인터)를 사용합니다. 이것이 바인드리스 텍스처 와 같은 것을 가능 하게하는 것 입니다. 따라서 현재 구현에서 사용할 수있는 많은 "텍스처 단위"는 단순히 현재 관련이없는 API 부분을 전달하려고합니다.

즉, 텍스쳐 리 바인딩을 피하려고 시도하는 것을 구현하는 권장 방법은 texture arrays 를 사용하는 것입니다. 텍스처 배열 은 쉐이더의 텍스처 세트를 모두 가지고있는 한 동적으로 인덱스 할 수 있습니다 같은 형식과 크기. 이 프레젠테이션에는 최신 OpenGL을 사용하여 렌더링 할 때 드라이버 오버 헤드를 줄이기위한 이러한 기술 및 기타 기술에 대한 자세한 내용이 포함되어 있습니다. 제로 드라이버 오버 헤드 접근


나는 그 프레젠테이션을 전에 본 적이 있는데 매우 좋습니다. 나는 첫 번째 단락에서 언급 한 것에 대해 몰랐으므로 해당 정보에 감사드립니다!
glampert
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.