내 장면에는 여러 객체가 있습니다. (3 개의 큐브, 1 개의 실린더, 8 개의 구를 가정 해 봅시다.) 각 버텍스 쉐이더를 만들어야한다고 가정합니다. 몇 개의 프로그램이 있어야합니까?
대안 :
- 객체 당 하나의 프로그램
- 모든 큐브를위한 하나의 프로그램과 모든 구체를위한 다른 프로그램 (같은 쉐이더를 사용한다고 가정)
- 모든 것을위한 하나의 큰 프로그램
올바른 접근법은 무엇입니까?
내 장면에는 여러 객체가 있습니다. (3 개의 큐브, 1 개의 실린더, 8 개의 구를 가정 해 봅시다.) 각 버텍스 쉐이더를 만들어야한다고 가정합니다. 몇 개의 프로그램이 있어야합니까?
대안 :
올바른 접근법은 무엇입니까?
답변:
셰이더 프로그램은 상태와 질감의 비슷한 부분으로 고려해야합니다. 상태를 변경하는 것은 비용이 많이 들기 때문에 텍스처 변경을 피하기 위해 여러 텍스처를 하나로 결합하여 벗어날 수 있습니다. 셰이더에도 동일하게 적용됩니다. 상태 변경을 피하기 위해 여러 셰이더를 결합 할 수 있습니다.
텍스처 결합과 마찬가지로 셰이더 결합은 오버 헤드가 발생합니다. 4096x4096 텍스처에서 16x16 픽셀 영역 만 렌더링하는 경우 하드웨어를 효율적으로 사용하지 않는 것입니다. 마찬가지로 렌더링하는 객체가 셰이더에서 코드의 10 % 만 사용하는 경우 그래픽 카드가 불필요하게 많은 것을 계산할 수 있습니다.
간단히 말해서 "의존".
가능한 한 간단하게 유지하는 것이 가장 좋습니다. 모든 객체에 동일한 쉐이더를 복제하는 것은 불필요하며 빠르게 부풀어 오릅니다. 또한 불필요한 모든 오버 헤드가 발생하기 때문에 가능한 모든 사용 사례를 포괄하는 하나의 거대한 쉐이더를 원하지 않습니다.
셰이더 관리에 대한 몇 가지 의견이 있으며 이에 대한 "최적의"방법은 없습니다. 모든 셰이더가 매개 변수를 기반으로 즉석에서 생성되는 셰이더 구현도 보았습니다 (예 : 언리얼 엔진 ).
이 영역에서 막 시작한 사람에게는 기본 쉐이더를 먼저 연필로 쓰는 것이 좋습니다. 예를 들어 텍스처리스 오브젝트 용 쉐이더, 기본 텍스처 및 픽셀 별 조명 지원 쉐이더 등이 있습니다. 그런 다음 이전 쉐이더로는 수행 할 수없는 다른 효과를 원할 때마다 새로운 효과를 위해 새로운 것을 만듭니다.
그러한 시스템의 목적은 일을 단순하게 유지하는 것입니다. 다만. 유지. 그것. 단순한.