понедельник, 27 июня 2011 г.

Альбедо в реалистичной визуализации.


   Всем привет. В этой статье я расскажу о понятии "Альбедо" и его значении в создании реалистичной визуализации. Начнём с теории. Вот его определение из физической энциклопедии:

   АЛЬБЕДО (от позднелат. albedo - белизна) - величина, характеризующая рассеивающую или отражательную способность поверхностей или космических тел. Используется в атм. оптике и астрофизике. В широком смысле А.- отношение потока отражённого (рассеянного) излучения к потоку падающего излучения. В теории переноса (рассеяния) излучения используется также понятие единичного А., т. е. отношение числа рассеянных во все стороны фотонов к числу падающих фотонов.

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

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

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

   Я не раз замечал, что в настройках рендера скачанных сцен для врея значение мультиплая вторички ГИ ставят около 0,75. Возможно, это как раз попытка решить проблему излишнего переотражённого света ввиду того, что все материалы созданы из расчёта, что белый имеет 100% альбедо. Но, в таком случае, необходимо ещё уменьшить и первичный отскок ГИ на то же значение, на которое уменьшен отскок вторичного ГИ. Чтобы первый отскок ГИ затухал так же, как и все последующие. Такой подход весьма прост, но не очень корректен, т.к. альбедо материалов останется прежними для зеркальных и глосси отражений. Что будет влиять на реалистичность.

   В рендере Mental ray есть похожие инструменты для уменьшения интенсивности последующих отражений в алгоритме Final Gather. Это параметр – «Weight» (вес). Находится он в настройках Final Gather. Работает он именно уменьшая интенсивность каждого следующего отскока, умножая текущую интенсивность на значение веса, а не уменьшая интенсивность всей просчитанной карты ФГ. Врей работает схожим образом. Я проверил это следующим образом. Сначала считалась простенькая тестовая сцена, с диффузным цветом равным единице (100% белый) и уменьшенными, равнозначными, значениями мультиплая ГИ для первичного и вторичного отскока. В ментале соответственно - мультиплай ФГ и вес. Обзовём эти значения переменной «X». Далее считалась картинка со значением диффузии равным «Х» и единичными значениями мультиплаев ГИ. Результаты схожие, что и позволяет говорить о параметрах мультиплая ГИ в врее и мультиплая и весе в ментале как о параметрах, работающих для каждого отскока ГИ. Тест провёл с разными значениями «Х».

   К сожалению, в ментале нет подобного регулятора для фотонов. Мультиплай в настройках фотонов уменьшает интенсивность всей просчитанной карты фотонов. Т.е. остаётся использовать только ФГ с переотражениями. А это, зачастую, намного дольше при расчёте замкнутых сцен с кол-вом диффузных переотражений больше 2-х. К сведению, при просчёте сцены связкой фотоны + ФГ параметр «Weight» игнорируется так же, как и "Diffuse bounces", т.к. это параметры вторичных переотражений, реализацией которых займётся включённая опция фотонов.

   Исходя из всего вышеизложенного, самым правильным будет редактировать материалы, выставляя значение «Diffuse Level» равным значению нужного нам альбедо. Можно менять просто интенсивность цвета, но при использовании текстур, а тем более многокомпонентных карт, проще менять Diffuse Level. Это, конечно, не очень удобно, т.к. придётся лопатить все материалы, но взамен мы получаем настройку не зависимую от алгоритма ГИ и корректную визуализацию отражающих (зеркальных) поверхностей.

   Теперь испытаем нашу методику на тестовой сцене. Я буду использовать ментал рей, фотоны + ФГ.

   Итак, поехали.

   3d max 2011, mental ray, гамма 2,2. Материал Arch&Design. На всех материалах Diffuse = 1(Альбедо = 1).Я специально сделал пол красным, т.к. нас ждёт сюрприз. Дело в том, что альбедо оказывает влияние на цветовой перенос, т.е. на так нашумевший «колор блидинг». Лучше не использовать чистый цвет, т.е. имеющий 100% насыщенность, т.к. в природе таких материалов не бывает, и это повлияет на реальность визуализации. Даже минимальное уменьшение насыщенности позволит этому цвету смешиваться с другими, что отражает реальное положение дел. Я уменьшил насыщенность красного на минимально значение, с 1 до 0,992. Следующие примеры покажут, как альбедо влияет на цветовой перенос.

   Для начала рендер только с источниками, без ГИ, для понимания интенсивности начального света. В окнах - Sky Portal, за окном - Daylight (mr Sun, mr Sky).

  
   Включаем ГИ.
   3 млн. фотонов. Merge1 см. Радиус 15см. Fast Look Up – вкл. Очень рекомендую использовать мердж для фотонов и Fast Look Up для ускорения расчёта ФГ и экономии памяти. Т.к. мердж уменьшает кол-во фотонов, заменяя все фотоны в радиусе мерджа на 1 фотон с усреднённым значением. Как следствие, вся фотонная карта уменьшается в объёме информации, и поэтому ФГ производит поиск нужных значений в ней в разы быстрее. FG = Density 1, Ray 500. В материалах включён AO с галкой колор блидинга, дистанция 30 см. Цвет Shadow Color чёрный, это полный колор блидинг, без AO. Считаем.


   Мы наблюдаем типичную картину, с которой многие сталкивались. Картинке далеко до реальности именно из-за того, что выставлено слишком большое альбедо, которого вообще в природе не существует. Дело в том, что предметы, которые мы считаем белыми, на самом деле могут быть далеки от даже 90% белого. Понаблюдайте за поверхностью, про которую вы бы сказали, что она самая белая, а потом поднесите к ней лист белой офисной бумаги. Скорее всего, предмет окажется темнее бумаги. Я воспроизвёл этот тест и вот, что у меня получилось. Бумага уложена в 3 слоя, чтоб из-за просвечивающихся особенностей бумаги, стол на неё не влиял.


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

   Как видно, все предметы, которые по отдельности мне казались очень белыми, в сравнении с бумагой кажутся серыми. А ведь у такой бумаги альбедо около 0,6-0,7(в других источниках до 0,8). И стандартный потолок, которому мы обычно ставим альбедо около 0,9, в большинстве случаев тянет всего на 0,6. Возможно, появится справедливый вопрос, ведь это уже не белые поверхности, а серые. Но в природе нет понятия белый и серый, а есть способность поверхности отразить больше или меньше света. Поэтому даже серый предмет, находясь в очень тёмно серой комнате, не имеющей других поверхностей с альбедо, превышающим альбедо серого предмета и не имеющей знакомых цветовых ориентиров, типа кожи наших рук, будет казаться белым. Причиной этому будет являться наша способность адаптироваться к освещению. И поэтому, скормив физически корректному визуализатору поверхности с реальными альбедо, нужно также выполнить адаптацию яркости сцены для удобного зрительного восприятия. Другими словами – выставить экспозицию. Можно увеличивать интенсивность освещения, но в 3д максе есть удобная опция для регулирования экспозиции – Exposure Control.

   Казалось бы, простая вещь, но далее мы увидим, как меняется освещение по мере уменьшения альбедо. Ниже находится таблица со значениями альбедо некоторых материалов. В таблице указаны приблизительные значения, т.к. материалов с одноимённым названием может быть много. Например, гипс. Гипс бывает: строительный (гипсовый алебастр), формовочный (лепка, скульптура, моделирование), медицинский (более чистый) и прочие подвиды. Поэтому альбедо у них может отличаться. Таблица взята с сайта фототехнического сервера ОАО "Красногорский завод им. С.А. Зверева".



Отражательная способность различных поверхностей
Поверхность
Вид отражения
Коэффициент отражения
Окись магния
диффузное
0,96
Алебастр
диффузное
0,92
Серебро полированное
направленное
0,88--0,93
Белая гипсовая поверхность
диффузное
0,85
Снег свежевыпавший
смешанное
0,75--0,78
Стеклянное зеркало
направленное
0,72--0,85
Серебрение матовое
направленно-рассеянное
0,7
Алюминий полированный
направленное
0,65--0,75
Хромированная полированная поверхность
направленное
0,60--0,70
Алюминий матированный
направленно-рассеянное
0,55--0,60
Бумага белая матовая
направленно-рассеянное
0,60--0,70
Снег тающий чистый
смешанное
0,60--0,62
Хромирование матовое
направленно-рассеянное
0,50
Оштукатуренная поверхность
диффузное
0,40--0,45
Шелк натуральный
смешанное
0,35--0,55
Тес (дерево свежее)
направленно-рассеянное
0,35--0,42
Кожа лица
смешанное
0,25--0,35
Песок белый сухой
диффузное
0,24--0,32
Глина желтая
диффузное
0,16
Тес старый, посеревший
направленно-рассеянное
0,12--0,16
Песок белый мокрый
диффузное
0,11-0,20
Асфальтовое покрытие сухое
смешанное
0,10--0,18
Чернозем сухой
диффузное
0,07--0,08
Асфальтовое покрытие мокрое
направленно-рассеянное
0,06--0,08
Лиственная растительность летом
направленно-рассеянное
0,09--0,12
Хвойная растительность
диффузное и направленно-рассеянное
0,08--0,12
Лиственная растительность осенью
направленно-рассеянное
0,15--0,30
Черное сукно
направленно-рассеянное
0,10--0,12
Чернозем мокрый
направленно-рассеянное
0,02--0,05
Черный бархат
диффузное
0,01--0,03

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

   Альбедо = 0,85 (по таблице белая гипсовая поверхность). Мне казалось, мой лев на фотографии из гипса, но сами видите, насколько он темнее бумаги. Поэтому в таблице приведён какой-то ну очень белый гипс. Ставим в материале Diffuse Level = 0,85. Тюль просвечивается, поэтому цвет транслюценции тоже нужно уменьшать пропорционально цвету диффузии, т.к. просвечивает она собственную диффузию. Настройки тюли: Прозрачность = 0,5. Цвет = falloff (настройки по умолчанию). Транслюценция = 0,5 (просвечивает 50%) и цвет = 0,85. Далее этот цвет тоже будем уменьшать.


Альбедо= 0,6.


Альбедо= 0,42 (оштукатуренная поверхность).


   Обратите внимание, как уменьшился цветовой перенос, да и свет стал похож на реальный.

Альбедо= 0,2.



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

   В связи с уменьшением интенсивности диффузии, нужно пересмотреть настройки силы отражений – «Reflection» в материалах. Их, скорее всего, нужно сделать меньше, если вы настраивали их на глазок, основываясь на интенсивности диффузии. Это повлияет на скорость затухания зеркальных и глосси переотражений, что добавит реализма.

   Итак, как же теперь настраивать сцену, исходя из вышеперечисленной информации. Я предлагаю свой способ, возможно, кто-то найдёт лучше. Найдите в своей сцене самый белый объект, прикиньте какое у него альбедо, а лучше найдите подобный материал в реальном мире, и сравните его с листом белой офисной бумаги, альбедо которого примерно 0,7. Далее, выставите это значение альбедо в материале, в Diffuse Level, для своего белого объекта, например, 0,5. Затем, чтобы упростить настройку и видеть все материалы в редакторе в привычной экспозиции, мы изменим интенсивность света в настройках материал эдитора до 2-х. Чтобы материал с нашим максимальным альбедо стал 100% белый. Для других значений альбедо работает простая формула: 1 / «альбедо» = «интенсивность света». Обратите внимание, что материал эдитор не сохраняет изменённое значение интенсивности света для конкретной сцены, а использует его для всех сцен. Далее выставляйте значение максимального альбедо (0,5) в Diffuse Level во всех материалах, которые вы будете редактировать. Затем, по мере визуализации изображения отрегулируйте её экспозицию.

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

   На этом у меня всё. Спасибо за внимание.