Может ли значение глубины быть больше 1? - PullRequest
0 голосов
/ 08 июля 2011

В D3D HLSL мы могли напрямую выводить значение глубины в регистр глубины в Pixel Shader.Но он запрашивает значение должно быть от 0 до 1.

Если я хочу установить глубину больше 1, как я могу это сделать?

24 бита для хранения значения глубины слишком ограничены для моего очень большого графа сцены.

1 Ответ

2 голосов
/ 08 июля 2011

Вы можете вывести значение за пределы [0,1], но оно будет зафиксировано в диапазоне [0,1] перед использованием в тесте глубины (если включено) и перед записью в целевой объект глубины. Это верно как для форматов Z16 / Z24 (которые не могут даже представлять значения за пределами [0,1]), так и для формата Z32F.

Почему 24 бита слишком ограничены - вам нужен больший диапазон или вам нужна большая точность?

Ваш вопрос предполагает, что вам нужен больший диапазон, чем [0,1], но ваш граф сцены может использовать любой диапазон, который вы хотите, до тех пор, пока вершинный шейдер отображается в диапазоне [0,1] (это отображение диапазона обычно происходит в модели / вид / проекция трансформируется).

Если вам нужна большая точность, вы не можете получить ее изначально: 32-разрядные числа с плавающей запятой, используемые в API и аппаратном обеспечении, имеют только 23 бита мантиссы, а неявное ведение 1 эффективно дает вам 24 бита точности. Чтобы справиться с этим, типичное решение состоит в том, чтобы разделить мир на сегменты (например, сетку) и сохранить позиции объектов относительно сегмента, в котором они находятся. Когда объект перемещается из одного сегмента в другой, вы переводите его положение в быть по отношению к новому сегменту. При рендеринге используйте сегмент, содержащий камеру, как (0,0,0) и отобразите сегменты, которые попадают в усеченный вид, в диапазон глубины [0,1].

...