Почему мы реализуем освещение в Pixel Shader?

Я читаю «Введение в программирование 3D-игр с помощью DirectX 11» Фрэнка Д. Луны и не могу понять, почему мы реализуем освещение в пиксельных шейдерах? Я был бы признателен, если бы вы могли прислать мне несколько справочных страниц по этому вопросу.

Спасибо.


person mkorunoski    schedule 01.08.2015    source источник


Ответы (1)


Освещение можно сделать разными способами. На эту тему есть сотни статей SIGGRAPH.

Для игр есть несколько распространенных подходов (или чаще в играх используется смесь этих подходов).

  • Статическое освещение или карты освещения. Освещение рассчитывается в автономном режиме, обычно с помощью решателя глобального освещения, а результаты запекаются в текстурах. Эти карты освещения смешиваются с базовыми диффузными текстурами во время выполнения, чтобы создать ощущение сложных теней и тонких освещение, но ничего из этого на самом деле не меняется. Самое замечательное в картах освещения то, что вы можете захватить очень интересные и сложные методы освещения, которые очень дороги для вычислений, а затем «воспроизвести» их очень недорого. Ограничение состоит в том, что вы не можете перемещать источники света, хотя есть методы наложения ограниченного количества динамических источников света сверху.

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

  • Перспективное освещение для каждого лица: это обычно известно как плоское затенение. Здесь освещение выполняется один раз для каждого треугольника/многоугольника с использованием нормали к лицу. В современных графических процессорах это обычно делается в программируемом вершинном шейдере, но также может использоваться геометрический шейдер для вычисления нормали для каждой грани, а не для ее репликации в вершинах. Результат не очень реалистичен, но очень дешев для рисования, так как цвет постоянен для каждой грани. На самом деле это используется только в том случае, если вы собираетесь использовать «Tron look» или какой-либо другой нефотореалистичный рендеринг. техника.

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

  • Попиксельное прямое освещение. В этом суть вашего вопроса: здесь освещение вычисляется один раз на пиксель. Это может быть что-то вроде классического Phong или Blinn/Phong затенение, где нормаль интерполируется между вершинами или карты нормалей, где вторая текстура предоставляет информацию о нормалях для поверхности. В современном графическом процессоре это делается в пиксельном шейдере и может предоставить гораздо больше информации о поверхности, лучшие зеркальные блики, шероховатость и т. Д. За счет большего количества вычислений пиксельного шейдера. На современных графических процессорах они, как правило, имеют большую вычислительную мощность по сравнению с пропускной способностью памяти, поэтому попиксельное освещение очень доступно по сравнению со старыми днями. На самом деле методы физически обоснованного рендеринга довольно популярны в современных играх, и они, как правило, имеют очень долгий срок службы. и сложные пиксельные шейдеры, объединяющие данные от 6 до 8 текстур для каждого пикселя на каждой поверхности в сцене.

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

Короткий ответ на ваш вопрос: потому что мы можем!

person Chuck Walbourn    schedule 01.08.2015