суббота, 28 марта 2015 г.

PBR: Теория

Basic Theory of Physically-Based Rendering (Базовая теория, лежащая в основе физического рендера)

Автор Jeff Russell. А я лишь скромный переводчик. Давно не переводил, но постарался более менее вычитать, не пинайте. :)

Physically-based rendering (PBR) (рендер, основанный на физических свойствах материалов, физический рендер, и т.д) - это тренд в сфере рендеринга (визуализации, но рендеринг термин распространенный и мне больше нравится). Этот термин содержит в себе многое, что зачастую приводит к замешательству при попытке определить его точно. Кратко - "это многое" и "зависит от обстоятельств", что звучит довольно отстойно, так что я взял на себя смелость объяснить, что представляет собой PBR, и чем он отличается от более старых методов рендеринга. Данный документ предназначается не для инженеров (в большей степени, он для людей творческих, будем называть их художниками) и не содержит математики или исходного кода. 

Больше всего эту систему рендеринга отличает (от предыдущих) более глубокое использование знаний (имеется в виду, использование в работе) о природе и взаимодействии света и поверхностей. Технические возможности в сфере визуализации (по покраске, shading capabilities в оригинале) заметно подросли, что позволяет отказаться от некоторых старых аппроксимаций (Аппроксима́ция, или приближе́ние — научный метод, состоящий в замене одних объектов другими, в каком-то смысле близкими к исходным, но более простыми - Wikipedia), а вместе с ними и от некоторых представлений о создании компьютерной графики. Это означает, что и инженеры и художники должны понимать предпосылки к этим изменениям. 

Мы начнем с некоторых основ, которые будут использоваться при дальнейшем объяснении, а уже потом начнем разбираться с новым материалом. Я думаю, что вам в любом случае пригодится то, о чем я собираюсь написать, так что рекомендую прочитать материал полностью. Возможно, вас заинтересует статья Joe Wilson - creating PBR artwork.

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

Рассеивание и отражение - также известные как diffuse и specular -  являются основными принципами взаимодействия света и поверхностей. Большинство людей знакомы с этими понятиями на практике, но иногда не знают, как они различаются в физическом смысле. 

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

Однако не весь свет отражается от поверхности. Некоторая его часть зачастую проникает в поверхность освещаемого объекта. В дальнейшем она или поглотится материалом (что обычно приводит к нагреванию) или рассеивается внутри. Некоторая часть из этого рассеянного света может выйти из освещаемого объекта, становясь видимой для глаза и для объективов. Такое поведение носит несколько названий - "Рассеянный свет" (Diffuse Lightning, Diffusion, Subsurface Scattering). Нужно понимать, что все эти понятия описывают один и тот же эффект. 

Reflection - отражение
Diffusion - рассеивание

Поглощение и рассеивание света отличаются для различных длин волны света, из-за этого объекты имеют разный цвет. (например, если объект поглощает большинство света, но рассеивает синий, объект будет выглядеть синим). Рассеивание настолько равномерно хаотично, что можно сказать, выглядит одинаково со всех сторон, а это сильно отличается от поведения зеркала! Шейдеру, который использует эту аппроксимацию, достаточно одного параметра - "альбедо", основной цвет, который описывает частицы различных оттенков света, которые рассеиваются от поверхности. Иногда его называют цвет рассеивания (Diffuse Color). Эти термины являются синонимами. 

Прозрачность и полупрозрачность

В некоторых случаях рассеивание происходит более сложно, например, в материалах, в которых более широкие диапазоны рассеивания, таких как кожа или воск. В таких случаях простой цвет (альбедо) не сработает и система шейдинга (shading system) должна принимать во внимание форму и толщину (плотность) объекта. Если объект достаточно тонкий, то зачастую из таких объектов видно (с задней стороны) рассеиваемый свет. Такие объекты называются полупрозрачными (translucent). Если рассеиваемость еще ниже (например, в случае со стеклом), тогда никакого внутреннего рассеивания не происходит и всё изображение передается через объект из одной стороны к другой без изменений (криво как-то, оригинал -  entire images can pass through an object from one side to another intact). Это поведение отличается от типичного рассеивания, так что нужны иные шейдеры для моделирования такого поведения.

Сохранение энергии

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

Подобного легко достичь в системе шейдинга: нужно вычесть отраженный свет перед применением шейдера "рассеивания" (diffuse shader). Это означает, что объекты с высоким уровнем отражения отобразят мало (или нисколько) отраженного света, потому что большинство света было отражено. Противоположное тоже верно: если у объекта есть мощное рассеивание, то он не может быть хорошим отражателем. 

Увеличение отражения (константный основной цвет)

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

Металлы

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

Во-первых, они гораздо лучше отражают свет чем не-проводники. Проводники, как правило, обладают коэффициентом отражения 60-90%, тогда как не-проводники значительно ниже, в диапазоне 0-20%. Эти высокие коэффициенты отражения предотвращают попадание большинства света внутрь, и, в свою очередь предотвращают рассеивание, делая металлы очень "блестящими" на вид.

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

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

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

Френель

Кажется, Огюстен Жан Френель, является одним из тех старых мертвых белых ребят, которых мы вряд ли забудем, потому, что его имя навеки впечатано в историю, как первоописателя (авторский термин) многих явлений. Было бы трудно вести дискуссию о отражении света без этого человека. 

В компьютерной графике слово Френель относится к эффекту различной отражательной способности под разными углами. В частности, свет, который попадает на поверхность под острым углом будет более вероятно отражаться, чем тот, что попадает на поверхность под прямым. Это означает, что у объектов, отрендеренных с "эффектом" Френеля появятся более яркие отражения вблизи краев. Большинство из нас знакомы с этим и наличие этого эффекта в компьютерной графике не ново. Тем не менее, PBR шейдеры привели к нескольким важным исправлениям в реализациях формул Френеля.

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

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

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

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

Reflectivity - Отражательная способность в процентах
Chrome - хром (металлический материал)
Rubber - резина (не бликует)
Center - центр
Edge - грань.

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

Есть один косяк с эффектом Френеля - на менее гладких поверхностях он становится менее заметен, но мы рассмотрим это в дальнейшем.

Микроповерхности (microsurfaces) (буду называть это микродетали но это именно microsurface)

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

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

"Размытое" отражение

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

К несчастью, расчет детализированности микроповерхности будет дорогим удовольствием. Так что же нам делать? Выясняется, что если забить на описание микродеталей и вместо этого специфицировать понятие "грубости" поверхности, то можно создать достаточно точные шейдеры, которые приведут к тому же результату. Это понятие ("грубости") также известное как "Gloss" (глянцевость) "Smoothness" (гладкость), "Roughness" (грубость). Его можно определить как текстуру или константу для данного материала.

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

Сохранение Энергии 

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

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

Увеличение гладкости (при постоянно отражательной способности)

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

Славься, Микроповерхность. 

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

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

Mud - грязь, отражательная способность - 5 %,  гладкость - 16 %.
Вода - отражательная способность 5 %, гладкость 100 %.

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

Вывод

Конечно, нам есть что еще сказать по данной теме, эта статья - только введение. Если вы еще не читали туторчик от Джо Уилсона, то прочитайте (http://www.marmoset.co/toolbag/learn/pbr-practice). Для тех, кто хочет технических подробностей: 
  1. Everything Is Shiny
  2. Everything Has Fresnel
  3. Rendering Remember Me
  4. Sébastien Lagarde’s Blog
  5. SIGGRAPH 2010 course
  6. The Importance of Being Linear

Комментариев нет:

Отправить комментарий