Лого vc.ru

Теоретические основы физически верного рендера в Unity

Теоретические основы физически верного рендера в Unity

3D-художник Антон Гузеев опубликовал на ресурсе ArtTalk перевод материала об использовании физически верного рендеринга (PBR) при отрисовке арта в Unity от основателя компании-разработчика Marmoset Джеффа Рассела.

Поделиться

Физически верный рендер (Physically-based rendering, сокращённо PBR) — это интересный тренд в рендеринге в реальном времени. Термин у всех на слуху, но не всем ясно, что конкретно он значит. Если коротко, то: «много чего» или «по ситуации», что не особенно просвещает. Поэтому я попытаюсь подробно объяснить, что из себя представляет PBR и чем он отличается от прочих методов визуализации.

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

Главное, что отличает систему физически верного освещения от своих предшественников — это более чёткое обоснование поведения света и поверхностей. Возможности шейдеров достаточно развились, чтобы стало возможным без опаски отбросить некоторые старые аппроксимации, а с ними и некоторые устаревшие методы производства арта. А значит, и технические специалисты, и художники должны понимать причины таких изменений.

Начать придется с самых основ, чтобы чётко определить их до того, как мы начнем освещать новое. Возможно, часть излагаемого материала вам уже известна, но думаю, вы убедитесь, что чтение статьи стоило потраченного времени. Полагаю, вы также найдете полезной статью Джо Уилсона «Creating PBR artwork».

Рассеивание и отражение света

Взаимодействия между светом и поверхностью можно разделить на два фундаментальных типа: Рассеянный и отражённый свет, также известные как диффузный (diffuse) и спекулярный (specular) свет. Многие знакомы с терминами на практическом уровне, но могут не знать, в чем их физическое различие.

При ударении света о границу поверхности часть его отразится, то есть отскочит от поверхности так, что нормаль к поверхности в точке падения разделит угол между падающим и отраженным углом на две равные части. Такое поведение очень схоже с поведением мяча, брошенного в стену — он отскочит под противоположным углом. Из-за этого гладкие поверхности выглядят «зеркальными». Само слово «specular», используемое для описания этого эффекта, произошло от латинского «зеркало» (как будто «спекулярность» звучит не так громоздко, как «зеркальность»).

Однако не весь свет отражается от поверхности. Обычно часть лучей проникает внутрь освещённого объекта. Там свет либо впитывается материалом (обычно переводясь в тепло), либо рассеивается внутри. Иногда часть рассеянного света возвращается наружу, так что его могут уловить глаз или камера. Есть много имен для этого явления: «diffuse light», «diffusion», «subsurface scattering» — все они описывают один и тот же эффект.

Поглощение и рассеивание диффузного света различается для разной длины световых волн, что даёт объекту его цвет (например, если объект поглощает почти весь свет, но рассеивает синий, то объект выглядит синим). Диффузия зачастую настолько равномерно хаотична, что, можно сказать, одинакова во всех направлениях — совсем не как у зеркала.

Шейдер, использующий такую аппроксимацию в вычислениях, требует только один входной параметр — «albedo», то есть цвет, описывающий, частицы какого цвета будут рассеиваться обратно от объекта наружу. Иногда как синоним используется понятие «diffuse color».

Просвечиваемость и прозрачность

Иногда диффузия происходит более сложным образом — в материалах с большим коэффициентом рассеяния, например, в коже или воске. В таком случае просто цвет не подходит. Шейдерная система должна принять во внимание форму и толщину освещённого предмета.

Если он достаточно тонкий, можно увидеть, как свет с обратной стороны рассеивается внутри и затем выходит наружу спереди. Такие объекты называют просвечиваемыми (translucent). Если диффузия и того ниже (как в стекле), то рассеивания света практически не происходит и изображение может пройти с одной стороны на другую нетронутым. Подобное поведение сильно отличается от обычной «поверхностной» диффузии и требует уникальных шейдеров для имитации.

Закон сохранения энергии

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

Это легко внедрить в шейдерную систему. Достаточно вычитать отраженный свет до того, как произойдет диффузия. То есть сильноотражающие объекты почти или совсем не создают диффузного света, потому что почти ничего не проникает под поверхность. Верно и обратное: если объект излучает яркий диффузный свет, он не будет сильно отражать.

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

Металлы

Электропроводящие материалы, в основном, металлы, заслуживают отдельного упоминания по ряду причин.

  1. Во-первых, они склонны к отражению гораздо сильнее, нежели диэлектрики (непроводники). Проводники отражают 60-90% всего света, в то время как диэлектрики, в массе своей, гораздо меньше — от 0% до 20%. Такая высокая отражаемость не позволяет свету проникать внутрь и рассеиваться, что придает металлам очень «блестящий» вид.
  2. Во-вторых, отражаемость у проводников иногда варьируется вдоль видимого спектра, то есть отражения на них имеют оттенок. Такое подкрашивание редко даже среди проводников, но бывает и у «повседневных» материалов (например, золото, медь, латунь). Диэлектрики в основном себя так не ведут и отражения не подкрашивают.
  3. И последнее — проводники чаще поглощают проникший под поверхность свет, чем рассеивают его. Значит, в теории, проводящие материалы могут вообще не излучать диффузный свет. На практике, однако, в металле часто содержатся оксиды и другие примеси, которые могут рассеивать немного света, если находятся близко к поверхности.

Из-за этих отличий металлов от почти всего остального некоторые системы визуализации установили «металличность» (metalness) в качестве входного параметра. В подобных системах художники устанавливают степень, в которой материал ведёт себя как металл, вместо того, чтобы напрямую устанавливать только albedo и reflectivity. Иногда это более предпочтительный способ создания материалов, но необязательно характеризует PBR.

Френель

Огюстен Жан Френель, похоже, — один из тех давно покойных европейцев, которых мы вряд ли забудем. В основном потому, что его именем назван ряд феноменов, впервые им чётко описанных. Будет сложно продолжать рассуждать об отражении света, не упомянув его имени.

В компьютерной графике слово «Френель» (Fresnel) обозначает изменение reflectivity в зависимости от угла. Если точнее, свет упавший по касательной к поверхности, гораздо вероятнее отразится, чем тот, что падает «в лоб». То есть объекты, отрисованные с корректными настройками Френеля будут иметь более яркие отражения ближе к краям. Многие уже давно знакомы с этим эффектом, так как его присутствие в компьютерной графике не ново. Однако PBR-шейдеры популяризировали несколько важных поправок к вычислениям уравнений Френеля.

Во-первых, для всех материалов reflectivity становится максимальной для касательных углов, то есть «края» любых гладких объектов должны вести себя как идеальное (неокрашенное) зеркало, вне зависимости от материала. Да, действительно — любая субстанция может вести себя как зеркало, если она достаточно гладка и наблюдается под определенным углом. Парадоксально, но факт.

Второе наблюдение касательно свойств Френеля гласит, что кривая перепада углов не слишком меняется от материала к материалу. Металлы отличаются сильнее всего, но и они поддаются анализу. Для нас это означает, что если требуется реалистичность, контроль художника над поведением Френеля стоит скорее ограничивать, чем расширять.

Это, в общем, хорошие новости, потому что упрощается создание контента. Шейдерная система в состоянии практически полностью самостоятельно разбираться с эффектом Френеля; достаточно взять в расчёт уже указанные свойства материала, вроде gloss и reflectivity.

При работе с PBR художник задает разными способами «базовую reflectivity». Этим определяется минимальное значение и цвет отражённого света. Эффект Френеля во время отрисовки будет добавлять отражаемость поверх этого установленного значения, вплоть до 100% под крутыми углами. По сути, контент описывает базис, а уравнения Френеля исходят из него, делая поверхности более отражающими под разными углами.

Важное предостережение насчет эффекта Френеля — он быстро теряет в заметности с ростом шероховатости поверхности. Но об этом чуть позже.

Микроповерхность

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

Однако всё ещё не хватает одной важной части. В реальном мире большая часть поверхностей имеет очень маленькие несовершенства: крошечные бороздочки, трещины и бугорки, невидимые глазом и слишком мелкие, чтобы отображаться на карте нормалей любого размера в пределах разумного. Несмотря на свою незаметность для невооруженного глаза, эти микроскопические особенности всё же влияют на диффузию и отражение света.

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

Если продолжить аналогию мяча и стены, то это как бросать мячик о каменный утёс или что-то настолько же неровное: мячик отскочит, но в непредсказуемом направлении. Иначе говоря, чем грубее поверхность, тем больше будет отклоняться луч и тем более размытым будет блик.

К сожалению, рассчитывать каждую деталь микроповерхности недопустимо в условиях производства арта. И что же делать? Оказывается, если отказаться от описания деталей микроповерхности напрямую и вместо этого обозначить общее значение шероховатости (roughness), можно написать достаточно аккуратные шейдеры, дающие похожий результат. Это значение также известно как «gloss», «smoothness» или «roughness». Его можно задать текстурой или константой для заданного материала.

Микроповерхностные детали — важная характеристика любого материала, ведь в реальном мире встречается огромное многообразие особенностей микроповерхности. Gloss-текстура — вещь не новая, но в физически верном шейдинге она играет ключевую роль из-за того, что микроповерхностные детали оказывают такое серьезное влияние на отражение света. Как мы скоро увидим, есть некоторые соображения относительно свойств микроповерхности, которые повышают качество PBR.

И снова про cохранение энергии

Так как наша гипотетическая шейдерная система принимает во внимание микроповерхность и, соответственно, распределяет отражённый свет, нужно, чтобы само количество отражённого света было правильным. К сожалению, многие старые системы рендера делали это неправильно, отражая чересчур или недостаточно, исходя из шероховатости микроповерхности.

Если уравнения составлены правильно, рендер должен отображать на грубых поверхностях более широкие и тусклые блики, чем на гладких поверхностях, где они будут меньше и резче. Ключевой является именно эта разница в яркости: Оба материала отражают одинаковое количество света, но более шершавая поверхность распыляет его в разных направлениях, в то время, как более гладкая отражает более сконцентрированный «пучок»:

Вот вам вторая форма сохранения энергии, которую нужно соблюдать, вдобавок к описанному выше балансу diffusion/reflection. Правильная их работа — один из важных факторов для любого рендера, стремящегося называться «физически верным».

Слава микроповерхности

И вот, благодаря полученным знаниям, мы приходим к пониманию одной вещи, довольно важной, на самом деле: микроповерхностный gloss напрямую влияет на видимую яркость отражений. Это значит, что художник может вносить вариации непосредственно в gloss карту — царапины, вмятины, потертые и отполированные участки, да что угодно — и система PBR отобразит изменение не только формы рефлексов, но и их относительную интенсивность. Не требуется никаких изменений «spec mask»/reflectivity.

Это важно, потому что две физически связанных величины — детали микроповерхности и reflectivity — впервые связаны воедино в контенте и при рендере. Так же, как с описанным выше балансом диффузия/отражение: можно выставлять каждое значение отдельно, но из-за их взаимозависимости задача только усложнится.

Дальнейшее изучение материалов в реальном мире показывает, что значения reflectivity не особенно широко варьируются. Хорошим примером может послужить грязь и вода: у обоих похожее значение reflectivity, но из-за того, что поверхность у грязи грубая, а у лужи очень гладкая, они кардинально отличаются по тому, как отражают свет.

Художник, работающий с подобной сценой в PBR, должен обозначать эту разницу напрямую через значения gloss, (он же roughness), не трогая reflectivity.

Свойства микроповерхности влияют на отражение и другими менее очевидными способами. Например, эффект Френеля, что «края ярче» на шороховатых поверхностях слабеет (Хаотическая природа грубой поверхности «разбрасывает» эффект Френеля, не давая наблюдателю четко его выделить). Многочисленные или вогнутые элементы микроповерхности способны «поймать» свет, заставляя отражаться от поверхности раз за разом, теряя яркость и всё более поглощаясь поверхностью.

Разные системы рендера в разной степени и разными путями просчитывают такие нюансы, но, в общем, суть одна: более грубые поверхности отображаются более тусклыми.

Заключение

Разумеется, о физически верном рендере можно сказать ещё очень много; данный документ служит лишь базовой вводной. Если вы ещё этого не сделали, прочтите урок Джо Уилсона по созданию арта под PBR. Кому нужна техническая информация, рекомендую к прочтению следующее:


Если вы работаете на технологии Unity, хотите рассказать о своём опыте разработки или задать вопрос экспертам — оставьте заявку нашим менторам с помощью специальной формы.

Статьи по теме
Создание игры на Unity небольшой командой: особенности технологии24 октября 2014, 17:02
Инструкция по созданию демо-ландшафта в Unity за 24 часа04 июня 2015, 17:06
Как сделать красивую графику для игры на Unity15 января 2015, 15:55
Популярные статьи
Показать еще

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

Сейчас обсуждают
Valentin Dombrovsky
Travelabs

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

«Вжух»: реакция российских компаний на мем с котом и волшебной палочкой
0
Valentin Dombrovsky
Travelabs

Северсталь -> ТУИ -> Утконос - казалось бы, странная передача "эстафеты"... Если не вспомнить, что это всё компании Мордашова.

«Вжух»: реакция российских компаний на мем с котом и волшебной палочкой
0
Дмитрий Красильников

разработчик mYgento это, конечно сильно.

Наиболее высокооплачиваемые ИТ-вакансии в городах России и Казахстана на сайте HeadHunter за ноябрь
0
Юлия Панецкая

Вы сделали мой день)

«Товарооборот на 44% превысил ожидания маркетологов»: история акции с «Прилипалами» в «Дикси»
0
Юлия Панецкая

Мне интересно только как измерили эффективность акции (и делали ли это вообще). Т.е. я, конечно, корреляцию и сама допускаю, но конкретного подтверждения ведь нет.
А вообще, у нас любая подобная РК может привести с срачам на кассе в формате "забирайте всё назад, я пришла ради раздатки".

«Товарооборот на 44% превысил ожидания маркетологов»: история акции с «Прилипалами» в «Дикси»
0
Показать еще