C++
Программирование
Разработка игр
Комментарии 12
0

Как-то слишком долго и сложно, но не сказано главного. PBR — это промышленный стандарт подхода к материалам. Технически представляет собой от 3 до 5 текстур на материал: основной цвет, нормали, шероховатость, опционально displacement, опционально AO, опционально металличность. Не то чтобы это имело ахти какое отношение к физике — просто это действительно удобная модель описания материалов. Про физические свойства поверхностей любой желающий может почитать со всеми мат. выкладками и разными моделями освещения в любой более-менее глубокой статье про трассировку лучей. Это действительно важно если вы собираетесь сделать свой PBR-шейдер или трассировщик лучей, поддерживающий PBR-материалы.


Так вот, эти текстуры накладываются в соответствии с общей UV-раскройкой, но семантическое значение у них разное. Создавать их удобно, например, в Substance Designer (дорисовывая отдельные непаттернящиеся артефакты в Substance Painter). Всё вместе при известных положениях источников света довольно прямолинейно рисуется в шейдере.


Самое сложное тут — displacement, который для действительно вкусного результата должен иметь в распоряжении модель из сумасшедшего числа полигонов. В 3D-редакторах это исполняется одноимённым модификатором + комбинацией subdivide-ов (есть попытки перенести в рендер, например в Radeon Render, Cycles Render — пока что это экспериментальная фича). В играх же для отрисовки дисплейсмента применяется хитрый дым и зеркала под названием Parallax Occlusion.

+2
В данной статье разобрана теория PBR (что следует из названия), а не конкретные инструменты для рисования текстур. Перечень их приведен в последнем разделе, кстати, а до него как раз описывается почему они нужны и откуда взялись.
Что до практики — подождите, это только первая статья раздела, далее будут более подробно разобраны конкретные техники и реализации.
0

На вкус и цвет. Я допустим имел представление о трассировке лучей и BSDF до знакомства с PBR и лично мне (вероятно, не так как всем остальным) как раз не доставало статьи, которая раскинет суть на пальцах в нескольких абзацах. И клянусь богом — когда это начинаешь использовать — всё становится гораздо понятнее :)
Но опять же, автору самому решать как подавать материал. Я так — мимокрокодил.
Кстати да — выглядеть PBR, может, и будет корректно, но всё равно во всех движках по-разному. И уж тем более иначе нежели при полноценном рендере с глобальным освещением.

+2
displacement к PBR не имеет вообще никакого отношения. для PBR важны именно шероховатость, метал-диэлектрик, и в некоторых реализациях спекуляр, всё остальное опционально, даже альбедо.
В играх же для отрисовки дисплейсмента применяется хитрый дым и зеркала под названием Parallax Occlusion.

Уже давно нет POM применяется в довольно ограниченных условиях, в современных играх во всю применяется теселяционные шейдеры с дисплейсментом.
0

Ну как это не имеет? Карта нормалей имеет, а displacement — не имеет? :)


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

+1
Карта нормалей также не имеет отношения к PBR. PBR описывает лишь то как работает освещение, и не зависит от геометрии как таковой (микро шероховатость относится к параметрам поверхности а не к геометрии если что).
Для теселяции существуют 2 дополнительных шейдин стейжа hull shader и domain shader (читать тут), первый управляет настройками теселяции второй интерполяцией данных, там можно осуществит дисплейсмент, это появилось с DX11 до этого теселировать можно было ещё в геометрическом шейдере(но работало медленно), и там же делать дисплесмент, а до этого без теселяции можно было делать дисплейсмент в обычном вершинном шейдере (в основном применялось для лицевой анимации (блэндшейпы запекались в текстуры)), так что десплейсмент в геймдеве существует и применяется ой как давно, а POM это дорогая операция трасировки луча в uv space в пиксельном шейдере, теселяция сейчас дешевле обходится в большинстве случаев.
+2
Не сказал бы, что POM уж очень дорогой. В шейдере, который я делаю сейчас, разница составляет около 1 FPS (без/с POM) для 100 объектов.

Для того, чтобы высоты не «прыгали» на границе уровней тесселяции в зависимости от расстояния до камеры, вам потребуется довольно большая степень разбиения и большое количество треугольников, а это как раз довольно затратно. Я возлагаю определённые надежды на гибридную технику Displacement+POM, но пока не дошли руки написать соответствующий код.

А так POM даёт прекрасный визуальный результат. В плоскости на картинке ниже всего 4 точки по краям, а остальное «обман зрения» — POM:
image
+1
Это на плоскости, на плоскости POM с фиксированым шагом даёт замечательный результат, но вот на мешах со сложной геометрией это сущий ад.
0
По поводу лучшего варианта перевода некоторых английских выражений на русский язык.
Я тоже занимаюсь переводом на русский язык документации на смежную тему — three.js.
PBR — physically based rendering — в моем переводе это «визуализация на физических принципах» или «физически обоснованная визуализация», как-то не нравится слово «рендеринг».
BRDF — bidirectional reflectance distribution function — «функция распределения двунаправленного отражения», что мне кажется ближе к оригиналу и хорошо стыкуется с функцией нормального (обычного) распределения — normal distribution function.
metallic workflow не встречался, но есть metallic-roughness workflow — тоже пока нет четкого перевода, склоняюсь к варианту — «процесс обработки металличности и шероховатости», но как-то сразу вспоминается токарный станок, может — «процесс обработки освещения ...». Короче, тоже «затык».
0
В выборе терминов руководствовался разными ресурсами, думаю вполне авторитетными, по сравнению с моим собственным видением:
BRDF
PBR и еще
Хотя я, вероятно, перевел бы иначе.
Только полноправные пользователи могут оставлять комментарии. , пожалуйста.