심도 테스트를 사용하지 않더라도 픽셀을 버리는 성능을 잃거나 얻습니까?


22

폐기 명령을 처음 검색했을 때 폐기를 사용하면 성능이 저하 될 것이라고 전문가들이 알게되었습니다. 그들은 픽셀을 폐기하면 GPU가 zBuffer를 올바르게 사용할 수 없게된다고 말했다. 현재 작업중인 2D 게임의 경우 깊이 테스트와 깊이 쓰기를 모두 비활성화했습니다. 깊이에 따라 정렬 된 모든 객체를 그립니다 .GPU가 멋진 일을 할 필요가 없습니다. 이제 조각 쉐이더에서 픽셀을 버려도 여전히 나쁘지 않은지 궁금합니다.

답변:


20

그래픽 하드웨어는 색상 값을 계산하기 전에 (즉, 조각 셰이더를 실행하기 전에) 깊이에 따라 조각의 초기 컬링을 수행 할 수 있습니다 . 따라서 discard알파 테스트 또는 gl_FragDepth하드웨어 최적화 와 같은 기능에 영향을 줄 수있는 기능을 사용하면 조각의 실제 깊이를 가정 할 수없고 전체 셰이더를 실행해야하므로 성능이 저하됩니다.

이러한 기능을 사용하는 것이 성능에 순전히 영향을 미치는지 여부는 상황에 따라 다릅니다. Early-z 최적화는 예를 들어 매우 비싼 프래그먼트 셰이더가있는 경우 성능을 향상시킬 수 있지만 파이프 라인의 비용이 버텍스 셰이더 (또는 다른 곳)에있는 경우 큰 이점이 없으므로 결과가 거의 나타나지 않을 수 있습니다. 또는을 사용하여 성능이 저하되지 않습니다 discard.

API를 통해 깊이 테스트를 완전히 비활성화하면 장면이 잘못 렌더링 될 수 있으므로 최적화도 실행되지 않습니다. 귀하의 경우에는을 사용하는 것이 중요하지 않습니다 discard.

최근의 하드웨어는 다음을 사용하여 테스트 (초기 스텐실 테스트 포함)를 강제 할 수 있습니다 layout(early_fragment_tests).


3

항상 성능 질문에 대해 가장 정확한 대답은 대상 하드웨어에서 시도하여 발생하는 사항을 측정하는 것입니다.

귀하의 경우에는 아마도 나쁜 일이 아닙니다. 실제로 메모리 대역폭을 절약하여 성능을 향상시킬 가능성이 있습니다. 또한 셰이더 명령도 추가하므로 항상 성능상의 이점은 아닙니다.

깊이 버퍼를 사용할 때도 순서에주의를 기울이면 성능 히트가 항상 중요하지는 않습니다.

https://fgiesen.wordpress.com/2011/07/08/a-trip-through-the-graphics-pipeline-2011-part-7/에 블로그 게시물이 있으며 초기 깊이 테스트가 어떻게 작동하는지 자세히 설명합니다. 하드웨어에 어떤 제한이있을 수 있습니다.


1
실제로 테스트를 마친 후에도 성능을 잃거나 잃지 않는다고 가정하는 것이 안전하다고 생각하지만 어떤 일이 발생하는 이유와 그에 대한 깊이있는 설명을 찾고 있습니다.
Ali1S232
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.