HLSL, модифицирующий глубину пикселя без пропуска z-culling - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь написать шейдер на основе трассировки лучей, в котором для каждого пикселя квадрата я вычисляю начало и направление луча из камеры и проверяю пересечение с моей сценой (в настоящее время сферой).

Если происходит пересечение, я хочу установить значение буфера глубины на глубину пересечения, а не оставить его в качестве глубины четырехугольника, поэтому я пишу в DEPTH.Я знаю, что это означает, что раннее z-отсечение для моего пиксельного шейдера будет отключено, так как невозможно определить, будет ли мой пиксель передним или задним, пока он не завершится для этого пикселя.

Однако одинСвойство моего шейдера заключается в том, что глубина всегда будет глубже, чем та, которая использовалась бы для раннего z-выбраковки, и поэтому все еще допустимо выполнять раннее z-отбраковку, поскольку то, что находится перед квадратором, гарантированно будетперед тем, что пересекает луч.Я смутно помню, что был какой-то способ сообщить конвейеру рендеринга, что, хотя глубина изменялась, она всегда будет изменяться на более глубокую, и это оставляло бы подходящие оптимизации, которые в противном случае были бы отключены.Я не смог найти, что это было, хотя, несмотря на большое количество Google, кто-нибудь знает, что это такое?Если этого на самом деле не существует, и я неправильно помню, есть ли способ принудительно включить раннее z-отсечение, даже в таких случаях, как мой?

1 Ответ

0 голосов
/ 12 марта 2019

Я нашел решение, которое искал. Цель SV_DepthGreater в DX11 выполняет свою работу.

Существует объяснение этой и других функций, которые трудно найти по этой ссылке: https://mynameismjp.wordpress.com/2010/11/14/d3d11-features/

...