Comments 13
Как-то слишком долго и сложно, но не сказано главного. PBR — это промышленный стандарт подхода к материалам. Технически представляет собой от 3 до 5 текстур на материал: основной цвет, нормали, шероховатость, опционально displacement, опционально AO, опционально металличность. Не то чтобы это имело ахти какое отношение к физике — просто это действительно удобная модель описания материалов. Про физические свойства поверхностей любой желающий может почитать со всеми мат. выкладками и разными моделями освещения в любой более-менее глубокой статье про трассировку лучей. Это действительно важно если вы собираетесь сделать свой PBR-шейдер или трассировщик лучей, поддерживающий PBR-материалы.
Так вот, эти текстуры накладываются в соответствии с общей UV-раскройкой, но семантическое значение у них разное. Создавать их удобно, например, в Substance Designer (дорисовывая отдельные непаттернящиеся артефакты в Substance Painter). Всё вместе при известных положениях источников света довольно прямолинейно рисуется в шейдере.
Самое сложное тут — displacement, который для действительно вкусного результата должен иметь в распоряжении модель из сумасшедшего числа полигонов. В 3D-редакторах это исполняется одноимённым модификатором + комбинацией subdivide-ов (есть попытки перенести в рендер, например в Radeon Render, Cycles Render — пока что это экспериментальная фича). В играх же для отрисовки дисплейсмента применяется хитрый дым и зеркала под названием Parallax Occlusion.
Что до практики — подождите, это только первая статья раздела, далее будут более подробно разобраны конкретные техники и реализации.
На вкус и цвет. Я допустим имел представление о трассировке лучей и BSDF до знакомства с PBR и лично мне (вероятно, не так как всем остальным) как раз не доставало статьи, которая раскинет суть на пальцах в нескольких абзацах. И клянусь богом — когда это начинаешь использовать — всё становится гораздо понятнее :)
Но опять же, автору самому решать как подавать материал. Я так — мимокрокодил.
Кстати да — выглядеть PBR, может, и будет корректно, но всё равно во всех движках по-разному. И уж тем более иначе нежели при полноценном рендере с глобальным освещением.
В играх же для отрисовки дисплейсмента применяется хитрый дым и зеркала под названием Parallax Occlusion.
Уже давно нет POM применяется в довольно ограниченных условиях, в современных играх во всю применяется теселяционные шейдеры с дисплейсментом.
Ну как это не имеет? Карта нормалей имеет, а displacement — не имеет? :)
Я слышал про тесселяцию, но не занимаюсь геймдевом или 3D профессионально, поэтому нигде не мог нагуглить более-менее детальную статью про то, как это реализуется технически.
Для теселяции существуют 2 дополнительных шейдин стейжа hull shader и domain shader (читать тут), первый управляет настройками теселяции второй интерполяцией данных, там можно осуществит дисплейсмент, это появилось с DX11 до этого теселировать можно было ещё в геометрическом шейдере(но работало медленно), и там же делать дисплесмент, а до этого без теселяции можно было делать дисплейсмент в обычном вершинном шейдере (в основном применялось для лицевой анимации (блэндшейпы запекались в текстуры)), так что десплейсмент в геймдеве существует и применяется ой как давно, а POM это дорогая операция трасировки луча в uv space в пиксельном шейдере, теселяция сейчас дешевле обходится в большинстве случаев.
Для того, чтобы высоты не «прыгали» на границе уровней тесселяции в зависимости от расстояния до камеры, вам потребуется довольно большая степень разбиения и большое количество треугольников, а это как раз довольно затратно. Я возлагаю определённые надежды на гибридную технику Displacement+POM, но пока не дошли руки написать соответствующий код.
А так POM даёт прекрасный визуальный результат. В плоскости на картинке ниже всего 4 точки по краям, а остальное «обман зрения» — POM:

А еще www.unrealengine.com/blog/physically-based-shading-on-mobile
Спасибо крутая статья.
Learn OpenGL. Урок 6.1. PBR или Физически-корректный рендеринг. Теория