Итак, у нас есть сцена, которую мы хотим осветить. Я сделал небольшое помещение:
![]()
основной поток солнечного света будет падать из отверстия в потолке (сейчас там темная дырка), освещаться все будет системой дневного света, солнце практически в зените. В результате у основания колонны должно быть яркое пятно от прямой иллюминации (прямых солнечных лучей), а все остальное будет освещаться непрямой иллюминацией созданной этим светлым пятном и частично светом небосвода, что смог попасть через верхнее отверстие.
Включаю солнце, настраиваю экспозицию и сразу вижу первую проблему GI.
![]()
Все помещение в бежевых тонах! Почему?
Солнечный свет (прямой) осветил пятно на полу, который у меня покрыт материалом A&D (под полированное дерево) коричневых тонов, фотоны непрямой иллюминации приняли оттенок материала и полетели освещать внутренности помещения, окрашивая все в бежевое. В принципе на этой картинке еще все более менее терпимо, но покроем пол синей плиткой (тоже A&D):
![]()
скажите жуть? Нет, это тоже еще терпимо, а вот, возьмем материал из набора ProMaterials – Пластик, тоже синий:
![]()
вот это уже ближе к жути!
Моделил я в метрической системе, теоретически расчет GI и FG должен проходить корректно. Может я не прав, но в реальном мире нет такого сильного переноса цвета от ярких поверхностей, если Солнце освещает красный ковер в моей комнате (и такое бывает в нашем хмуром городе Питере), то комната не погружается в багровые тона.
Что-то тут разработчики упустили, либо считают, что мы сами должны позаботиться об этом эффекте.
Давайте позаботимся и исправим данное недоразумение. Я опишу три способа – два частных случая и один кардинальный.
Вернемся к помещению с деревянным полом (рис № 2)
Первый способ состоит в подборе фильтра на GI ну и соответственно поставим его же на FG.
Чтобы компенсировать желто-бежевый цвет нужен светло-голубой фильтр, его и поставим (правда на GI и FG пришлось поставить немного разные фильтры, но кто сказал что будет легко):

делаем рендеринг:

явно с бежевым цветом справились. В чем два минуса этого способа?
Первое это подбор цвета фильтра (тем более что их два) и второе это то, что так мы можем компенсировать всего один цвет. Что делать если у меня половина пола красная, а вторая зеленая? В этом случае фильтр не поможет.
Второй способ. Давайте подумаем, почему происходит такая сильная окраска фотонов. Может я ошибаюсь, но по-моему, диффузный цвет из шейдера поверхности без изменений переноситься в шейдер фотонов, либо недостаточно ослабляется (это конечно касается предустановленных материалов, при работе с материалом mental ray, мы сами настраиваем этот шейдер). Давайте сменим шейдер. Открываем закладку «mental ray Connection» в свойствах материала и снимаем блокировку (замочек) с шейдера фотонов:
![]()
далее нажимаем кнопку шейдера и выбираем Photon Basic (base):

и диффузную составляющую цвета настаиваем по своему желанию:
![]()
это именно тот цвет, который будут приобретать фотоны GI при столкновении с материалом, он должен быть более блеклым, чем диффузный цвет самого материала, ну и соответственно чем он темнее, тем меньше эффект от освещения GI с этого материала.
Изменяем и рендерим:

У этого свойства тоже есть пара недостатков. Первое это то, что алгоритм FG все равно сделает свое черное дело (или бежевое в нашем случае), а втрое это то, что у предустановленных материалов группы ProMaterials невозможно сменить шейдер фотонов.
Итак, третий способ.
Он основан на работе с картами фотонов, а заодно и с картой FG.
Сохраняем наш проект (на всякий случай, хотя можно потом обойтись и функцией отмены действия ctr+Z)
Делаем еще один материал бледно серенького цвета, с минимальным отражением и полностью непрозрачным (я воспользовался материалом для покраски стен, что в принципе и советую):
![]()
Обратите внимание, я активировал опцию Ambient Occlusion, пока просто там ставим галку, подробности будут ниже.
Выделяем все объекты сцены и назначаем им этот материал (не бойтесь, мы же сохранили нормальную сцену)
Сцена приобрела следующий вид:

серо, хмуро, но нам так нужно.
Теперь заходим в настройки непрямой иллюминации
Для начало сохраним карту FG. Раздел Final Gather Map, включаем галку – «Read/Write File», потом жмем по кнопке с точками и указываем имя и место, куда сохраниться карта:
![]()
после чего жмем кнопку «Generate FG Map File Now» и ждем процесс генерации.
Внимание – если это финальный рендер, установите нормальные параметры качества, тем более что ждать генерацию FG вы будете только сейчас, в дальнейшем на это больше тратиться время не будет!!! Все будет браться из сохраненной карты.
Аналогично делаем для GI:
ставим галку, указываем имя файла и жмем на генерацию.
Обе карты сохранены, теперь грузим сохраненную сцену с нормальными материалами, или делаем отмену действий.
Опять ставим галки в Read/Write File на обоих алгоритмах (или проверяем, что они стоят если отменяли действие)
Проверяем, что указан наш сохраненный файл и в алгоритме для FG «замораживаем» карту нажав на «замочек»:

теперь смело жмем кнопку РЕНДЕР, замечаем что нет процесса генерирования фотонов и FG:

и наблюдаем приемлемый результат переноса цвета фотонами.
Многие сейчас могут возмутиться:
«А как же сама концепция переноса цвета материала фотонами !!! мы ее убили на корню !!! а люди писали алгоритмы, работали!!!»
Во-первых — ничего и не убили, кто мешает назначать всем материалам один серый/белый цвет, а пол можно сделать немного желтоватым 
А во-вторых, давайте обратимся к физике, как происходит процесс передачи цвета, точнее отражения спектра.
В mental ray подразумевается, что он сразу смешивается (либо полностью либо в ослабленном виде – точно не знаю это нужно изучать программу шейдера)
А в реальном мире окрашивание происходит из-за попадания света в толщу материалов и возвращения из нее уже с отфильтрованным спектром, даже самые «непрозрачные материалы» имеют прозрачность на срезе очень маленькой толщины, но основная масса света отражается от полированной поверхности сразу, не проникая во внутрь и чем плотнее материал, тем больше.

поэтому камни будут отражать в основном белый цвет (цвет источника точнее) металлы немного его подкрашивать, пластики еще больше смешивать со своим цветом, ну а стекло… и так понятно.. там больше каустика, кроме того на цвет отражение еще влияет качество полировки, шероховатые поверхности больше окрасят отраженный свет, полированные меньше.
Пока плотность материала мы в Максе задавать не можем, а в предустановленных материалах она видно работает не так хорошо, как нам хочется. Поэтому придется имитировать GI описанными выше способами, либо для большей реальности можно включить эффект каустики (это и есть черная стрелка на рисунке, мы привыкли считать что каустика это только у стеклянных объектов, а это еще и зеркальные блики) либо пользоваться материалами mental ray на основе подслойного рассеивания – группа SSS.
Теперь присмотримся ко второй проблеме.
На рисунке номер 7 стена и колонны как бы сливаются, точнее на них теряется объем – картинка замылена. Корень проблемы в некачественном освещении фотонами GI. Прямой свет от ИС дает ярко выраженные тени, подчеркивая объем элементов сцены. С фотонами немного сложнее – они не дают теней, тени получаются на тех местах, где меньше всего попало фотонов, соответственно, чем меньше фотонов (и больше площадки приема фотонов – семплы) тем меньше контрастность.
Возьмем, например помещение, которое освещается только непрямой иллюминацией и в нем установлена конструкция с неровными поверхностями, я сделал что-то вроде лестниц:

и сделаем рендер, включив GI, но не меняя количества фотонов:

желтым я пометил места, где явно выражена обсуждаемая проблема. Согласитесь неприятная ситуация. Напрашивается вывод – увеличить количество фотонов и уменьшить радиус семпла, но это сильно увеличивает время обсчета, после чего мы заметим еще пару тройку мест, где опять слабые тени и процесс увеличения количества фотонов будет бесконечным, пока компьютер не откажется работать. Сразу вспоминается куча анекдотичных ситуаций, про качество и количество, на основании которых можно интерпретировать анекдот про графику:
Сидят вечером три работника в сфере CG, и обсуждают свои проекты.
Первый говорит:
— Сегодня закончил сцену, осталось обсчитать с 10 млн. фотонов, дня через три закончу.
Второй отвечает:
— Тоже все закончил, но не хватает мощности компа, доставлю память и закончу проект.
Сидят жалуются на быстродействие техники, а потом спрашивают третьего:
— А ты чего молчишь? как ты борешься со сложными обсчетами?
— А я использую Ambient Occlusion! Все сдал и завтра в отпуск.
Давайте и мы не будем решать проблему экстенсивно, а воспользуемся имитацией глобального освещения на материале.
Если используются материалы группы ProMaterials, то в них есть опция Special Effects, в которой и можно включить Ambient Occlusion

Параметр samples это качество просчета – чем больше, тем лучше.
Параметр Max Distance один из основных – это дистанция, с которой происходит учет рядом стоящей геометрии для формирования эффекта глобального освещения (со всех сторон). Если мы хотим показать эффект явно, то тут нужно установить расстояние до соседнего объекта, а если просто хотим подчеркнуть геометрию объектов (как в нашем случае) достаточно от 10см до полуметра. Ниже параметры смешивания и размытия, нам сейчас они не очень нужны, так как функция АО второстепенна.
Если используется материал не из группы ProMaterials, то придется диффузный цвет смешивать с шейдером АО, желательно по карте Falloff. А в некоторых материалах и материальных шейдерах есть слот Ambient, в который и нужно установить шейдер Ambient/Reflective Occlusion и настроить дистанцию:

ни в коем случае не оставляете дистанцию по умолчанию (равна 0) для закрытых помещений, если параметр нулевой, то просчет материала происходит с максимального расстояния (с фона сцены) и с учетом стен помещения вы получите полностью затемненный материал. Параметр Samples, аналогично – качество. Остальные параметры в настройке для нашего случая не нуждаются.
Итак, добавляем Ambient Occlusion, который работает очень быстро и не трогаем количество фотонов:

согласитесь есть разница! Учитывая, что рендериг по времени почти не увеличился.
Перейдем к третей и четвертой проблеме, они взаимосвязаны.
Присмотритесь к рисунку (№
у верхнего отверстия на потолке, если присмотреться есть круглое светлое пятно.
Для выявления этого эффекта я прорублю два окна и немного испорчу потолок у помещения:

Первое обозначено красной стрелкой – это засветленное пятно, сейчас мы воочию видим семпл сбора фотонов, который светлее обычного фона. Кардинальное решение проблемы будет чуть ниже, а сейчас частный случай:
На одну из колонн у окна я поставил материал Raytrace. Вообще-то mental ray поддерживает визуализацию стандартных материалов 3D Max, настраивая поверхность этого материала я не трогал шейдер фотонов, а он оказывается настроен не корректно! Поэтому от колонны отразился несбалансированный поток фотонов, который и принялся семплом, создав площадку, ярче фона.
Вывод — желательно пользоваться материалами mental ray, а если у вас есть любимый и настроенный старый материал, позаботьтесь о настройке шейдера фотонов как мы делали выше в обсуждении первой проблемы. Но это частный случай. Общее конечно в настройке семплов и количества фотонов.
Посмотрите на желтую стрелку, такое ощущение что у меня потолок над окнами не подогнан к стенам (или наоборот), на самом деле все там в порядке, иначе бы светило было по всему периметру стыка. Дело в том что я продлил потолок на улицу и получил эффект с которым мы часто сталкиваемся при визуализации интерьеров освещенных ярким светом.
Разберем эффект на самом частом и явном примере. Такие пятна как правило появляются под подоконниками, где должно быть по умолчанию темно, а mental почему то там ставит такие пятна. Вот схемка их образования:

черный круг это семпл сбора фотонов. Программа визуализатор, в видимую часть стены ставит семпл сбора фотонов, центр которого находиться под подоконником и соответственно почти весь он в тени. Но маленькая его часть вылезает в освещенную часть, а там очень ярко и эта «маленькая часть», собирает очень много фотонов, в результате среднее арифметическое фотонов для темного места велико, а для светлого места мало. Семпл неделимая единица, поэтому визуализатор считает освещение в этом месте не корректно.
Выход только в уменьшении радиуса семпла и увеличении количество фотонов. По умолчанию размер семпла одна десятая размера сцены, а в нашем случае его нужно сделать по высоте подоконника.
Оптимальный расчет можно сделать так:
X = размер сцены разделенное на 10 (например 1,2 метра)
Y = размер объекта который вызывает проблему, разделенное на 2 (например 0,03 м)
Размер семпла (Maximum Sampling Radius) = Y
Количество фотонов (Average GI Photons per Lihgt) = начальное значение умноженное на X деленное на Y (у меня это 20000*40 = 800000)
Выше параметры ставить бесполезно – это ничего не даст – только время потратим.
(любители геометрии сейчас могут возмутиться — почему мы делим на 40, а не на 2 в 40-ой степени? Ведь площадь уменьшается согласно квадрату!!! Все правильно мы делаем, ведь семплы ставятся пересекаясь и накладываясь! А не рядышком и воздействие каждого фотона уменьшается на корень из 2)
в моей сцене получилось 400000 фотонов, плюс еще некоторая настройка окружения:
В итоге время рендера вместе с генерацией карт освещения на процессоре 2х2Ггц — 4 минуты 31 секунда (148 тыс полигонов – деревце за окном прибавило)
Согласитесь это лучше чем генерировать часами миллионы фотонов и получать минимальные результаты.
В конце урока оговорюсь опять – все это результаты собственного опыта и расчетов и я не претендую на сто процентную правильность.
На этом уроки по освещению заканчиваю, но это не значит, что не будет уроков по другим темам.
С уважением, КАА
kaa936@rambler.ru
