Как я могу создать шейдер, который будет воспроизводить этот эффект освещения на местности?

8

Видите свет, падающий из колоннады на отражающие камни для мощения

Обратите внимание, что отражение наиболее сильно там, где угол между солнцем, землей и зрителем наиболее острый

Обратите внимание на то, как основной источник света в каждом изображении отражается от земли в зависимости от расстояния между источником света и зрителем (?).

Это (ударная) зеркальная карта? Эффект виден повсюду в World of Warcraft; Я особенно помню это на снегу в Дун Мороге и на берегах озера Дарроумер. Требуется смотреть прямо на солнце. Эффект также обычно на поверхности воды в RL и в CG. В частности, я хочу создать эффект, при котором отражение будет более интенсивным на поверхности земли ближе к источнику света и падает по мере приближения к зрителю.

инженер
источник
2
Фонг на ударной картографической поверхности
чокнутый урод

Ответы:

14

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

Во-первых, солнечный свет направлен, то есть у него нет положения и затухания.

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

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

  • Во-первых, это микропространства поверхности, которые могут быть смоделированы с использованием любого отклонения или нормального отображения, это может быть применено как к диффузному, так и к зеркальному компоненту.
  • Вторая часть - это неравномерное распределение зеркального освещения. Это можно сделать, используя какие-то зеркальные карты.
  • Теперь наиболее сложной частью является карта направленного зеркального отражения, которой можно достичь с помощью анизотропной модели освещения Уорда , которая дает вам два параметра для управления анизотропией зеркального отражения, а именно Ax, Ayв следующем уравнении Уорда .

Уравнение Уорда

Куда:

  • Зеркальный член равен нулю, если точка ( N , L ) <0 или точка ( N , R ) <0.
  • Вектор R является зеркальным отражением вектора света от поверхности.
  • L - направление от точки поверхности к свету.
  • H - направление под половиной.
  • N - поверхность нормальная.
  • X и Y - два ортогональных вектора в нормальной плоскости, которые задают анизотропные направления, касательные и битовые касательные векторы могут использоваться в качестве X,Yвекторов, особенно в том, что касательное пространство настолько распространено в компьютерной графике, что может быть вычислено в любом механизме (обычно рассчитывается на основе текстурных координат).

введите описание изображения здесь

Обратите внимание на изображение, как зеркальное освещение является направленным в отличие от обычного зеркального света Фонга. Вот статья о модели Уорда и о том, как добиться различных эффектов. РЕДАКТИРОВАТЬ Более подробную информацию о пригодности BRDF с точки зрения снижения интенсивности света ближе к зрителю, можно найти здесь .

Ward Anisotropic Specular

Наконец, еще одно (необязательно) два момента, которые, я думаю, могли бы добавить к окончательному изображению,

  • Во-первых, я уверен, что использование внешней окклюзии поможет получить более правдоподобные результаты.
  • Во-вторых, реализация некоторого отражения Френеля может добавить хороший эффект к изображению, особенно в водных и ледяных сценах.
concept3d
источник
1
+1 Хороший ответ concept3d, и мне немного жаль, что вы приложили все усилия, чтобы написать его - @JoshPetrie изменил заголовок моего вопроса с «ЧТО (это шейдер)» на «КАК (я его создаю) ». Таким образом, ваши усилия могут быть напрасными, тем не менее, это, кажется, принесло пользу вашему представителю, и это хороший ресурс.
Инженер
@NickWiggill нет проблем, он останется здесь как хороший ресурс :)
concept3d
@JoshPetrie, несмотря на то, что редактирование каким-то образом лишило законной силы мой ответ, вопрос в его нынешнем виде является несколько более разумным.
concept3d
1
Я собираюсь принять ваше вместо. Причина в том, что вы упоминаете BRDF, и это именно та концепция, которую я имел в виду, и, прочитав ее, я вижу, что это именно то, что мне нужно. Я отредактировал ваш ответ более подробно о BRDF.
Инженер
1
@NickWiggill Спасибо за добавление более подробной информации. Больше информации никогда не бывает плохо :)
concept3d
3

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

Существует много разных моделей освещения разного уровня сложности, которые будут создавать форму отражения, подобную этой, но подобный вид уже может быть достигнут с помощью простой модели освещения blinn-phong , которая (сейчас), вероятно, является наиболее Базовая модель освещения, используемая графическими движками, и, скорее всего, также используемая World of Warcraft.

Он не будет физически корректным и полностью равным вашим изображениям, но будет выглядеть очень похоже . Пример Concept3D модели Ward более физически корректен и работает для более сложных типов поверхностей (а именно, для материалов, где микроскопические выпуклости на их поверхностях распределены неравномерно, но имеют разные распределения вероятностей), но я не знаю каких-либо конкретных примеров рендеров в реальном времени, которые используют его, из-за плохой выгоды с точки зрения качества / производительности.

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

TravisG
источник
Хорошо, спасибо Тревис. Предвидите ли вы какие-либо проблемы с моим использованием blinn + phong вместе с некоторой текстурой маски, чтобы визуализировать пиксели только там, где это необходимо на местности, создавая зернистость, лежащую в основе зеркального отражения?
Инженер
Если эти пиксели вообще не светятся после сброса из-за текстуры маски, это, вероятно, будет выглядеть неправильно / странно. Обычный способ действительно является комбинацией карты выпуклости и зеркальной карты для поверхности, которая изменяет некоторые входные параметры уравнения освещения.
TravisG
0

Зеркальное отображение ударов (нормальное отображение) или отображение параллакса.

Celestis
источник
7
Обоснование этого доказательствами или ссылками сделало бы его намного лучшим ответом.
MichaelHouse