Отложенные наклейки нормальная проблема

11

Я работал над системой отложенных наклеек. Пока что я закончил проекционную часть, то есть я могу щелкнуть что-нибудь в сцене, и он будет правильно проецировать декаль на поверхность объекта.

Есть еще несколько вещей, которые я хотел бы добавить в эту систему: нормальное вырезание и нормальные сопоставленные надписи. Обычное отсечение - это когда я отбрасываю фрагменты, которые растянуты под острым углом. Видел здесь . Чтобы решить эту проблему, нужно отбросить фрагменты, которые имеют большую разницу между нормалью в G-буфере и нормалью декаля. Это потребует чтения нормальной текстуры G-буфера.

Чтобы сделать отображение нормалей на декале, мне нужно смешать нормаль декаля (из карты нормалей) с нормалью G-буфера. Требует записи в обычную текстуру G-буфера.

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

Ян
источник

Ответы:

1

Какую систему рендеринга вы используете? Следующая информация должна быть действительной для всех систем рендеринга, но в DX11 или более поздних версиях OpenGL может быть лучшее решение с использованием БПЛА.

-

Вам придется копировать обычный буфер перед каждым проходом. До тех пор, пока вы знаете, что наклейки не изменяют одни и те же фрагменты экранного пространства, вам не нужно обновлять копию.

Вы также можете рендерить все свои переводные картинки в отдельные буферы и делать только один переход в обычный буфер, используя одну обычную копию буфера. Это будет лучше масштабироваться с количеством наклеек, которые у вас есть.

Пока вы не пишете нормальный буфер, например, выполняете только нормальное отсечение, как вы его называете, вы можете просто сэмплировать исходный нормальный буфер, но вы не можете связать его как цель рендеринга.

В DX9 я обнаружил, что чтение и запись в одну и ту же текстуру приводит к ожидаемому результату, если вы используете только фильтрацию ближайших точек и никогда не читаете пиксель, отличный от того, в который вы сейчас записываете, НО! так как это неопределенное поведение, могут быть драйверы и графические карты, которые не ведут себя таким образом. DX10 помешает вам сделать это, отсоединив текстуры, в настоящее время связанные как цели рендеринга.

Archy
источник