Создание буфера глубины только для чтения - PullRequest
6 голосов
/ 08 августа 2010

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

1 Ответ

7 голосов
/ 08 августа 2010

Это имеет смысл в некоторых сценариях.Вот два:

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

  2. проблема прозрачности: если вы визуализируете прозрачные (альфа-смешанные) треугольники, порядок рисования имеет существенное значение для конечного изображения.Чтобы получить красивый результат, проверенный и надежный способ - это сначала отобразить всю непрозрачную геометрию.Затем отключите запись в буфер глубины и визуализируйте все прозрачные материалы, отсортированные сзади вперед.Это гарантирует, что ваши прозрачные многоугольники всегда нарисованы по порядку, и они не мешают непрозрачному материалу.

Представьте себе этот случай:

  • Камера находится на уличной сцене, и вы смотрите на магазин с окном и несколькими приятнымивещи внутри магазина.

  • Сначала вы рисуете прозрачное окно - с включенной записью глубины.

  • Затем вы рисуете интерьер магазина. Из-за z-буфер все пиксели будут отброшены, потому что графическая карта думает, что пиксели не видны.

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

Как сказано: Чтобы обойти это, вы сначала визуализируете все ваши непрозрачные вещи (интерьер магазина) стест и глубина записи на.Затем вы визуализируете окно с проверкой глубины и списанием глубины.Это решит эту проблему.

Вот пример того, насколько ужасными могут быть такие вещи.Это показывает еще один способ неправильной обработки прозрачности (внимательнее посмотрите на ковер).

alt text

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...