답변:
그래픽 하드웨어는 색상 값을 계산하기 전에 (즉, 조각 셰이더를 실행하기 전에) 깊이에 따라 조각의 초기 컬링을 수행 할 수 있습니다 . 따라서 discard
알파 테스트 또는 gl_FragDepth
하드웨어 최적화 와 같은 기능에 영향을 줄 수있는 기능을 사용하면 조각의 실제 깊이를 가정 할 수없고 전체 셰이더를 실행해야하므로 성능이 저하됩니다.
이러한 기능을 사용하는 것이 성능에 순전히 영향을 미치는지 여부는 상황에 따라 다릅니다. Early-z 최적화는 예를 들어 매우 비싼 프래그먼트 셰이더가있는 경우 성능을 향상시킬 수 있지만 파이프 라인의 비용이 버텍스 셰이더 (또는 다른 곳)에있는 경우 큰 이점이 없으므로 결과가 거의 나타나지 않을 수 있습니다. 또는을 사용하여 성능이 저하되지 않습니다 discard
.
API를 통해 깊이 테스트를 완전히 비활성화하면 장면이 잘못 렌더링 될 수 있으므로 최적화도 실행되지 않습니다. 귀하의 경우에는을 사용하는 것이 중요하지 않습니다 discard
.
최근의 하드웨어는 다음을 사용하여 테스트 (초기 스텐실 테스트 포함)를 강제 할 수 있습니다 layout(early_fragment_tests)
.
항상 성능 질문에 대해 가장 정확한 대답은 대상 하드웨어에서 시도하여 발생하는 사항을 측정하는 것입니다.
귀하의 경우에는 아마도 나쁜 일이 아닙니다. 실제로 메모리 대역폭을 절약하여 성능을 향상시킬 가능성이 있습니다. 또한 셰이더 명령도 추가하므로 항상 성능상의 이점은 아닙니다.
깊이 버퍼를 사용할 때도 순서에주의를 기울이면 성능 히트가 항상 중요하지는 않습니다.
https://fgiesen.wordpress.com/2011/07/08/a-trip-through-the-graphics-pipeline-2011-part-7/에 블로그 게시물이 있으며 초기 깊이 테스트가 어떻게 작동하는지 자세히 설명합니다. 하드웨어에 어떤 제한이있을 수 있습니다.