Введение
Примечание:
Излагаемый материал опирается на статьи Как компьютер рассчитывает изображения. Технологии программного рендеринга. Часть 1 и Часть 2, где описаны основные теоретические принципы алгоритмов компьютерного рендеринга. Вооружившись теорией программного рендеринга, рассмотрим примеры ее практического приложения на примерах таких программ, как mental ray, finalRender и vRay, функционирующих в рабочей среде 3ds max 6. Такой обзор поможет лучше понять как суть теории, так и получить информацию практического характера, полезную в повседневной работе. "Завязка" этого обзора на 3ds max вызвана не столько тем, что эта программа моделирования и анимации является одной из наиболее распространенных, сколько тем, что ни для одной другой системы не разработано такого количества совершенно замечательных "внешних" рендер-программ. Есть что сравнивать и из чего выбирать.
При анализе рабочих функций программ-рендеров необходимо придерживаться некоторой схемы. Поэтому, приведу краткое описание общего алгоритма работы рендера. Рассматриваться будет только алгоритм метода фотонных карт, как наиболее совершенный из современных методов расчета.
Метод фотонных карт использует двухпроходный алгоритм трассировки лучей. На первом проходе от источников света вглубь трехмерной сцены излучаются так называемые фотоны. Под "фотонами" в нашем случае понимается порция энергии освещения некоторой величины, которая может иметь пространственные координаты и направление (траекторию) и не может иметь размер. Да, "фотон" в компьютерной графике размера (и в частности, радиуса) не имеет. Траектория каждого излученного фотона отслеживается от поверхности к поверхности, пока фотон не будет поглощен или не уйдет за пределы "мира". Фотон взаимодействует с поверхностями и объемами трехмерных объектов и может быть поглощен, отражен/преломлен под идеальным углом (зеркальное или specular-отражение/преломление), отражен/преломлен в створе близких к идеальному углов (glossy-отражение/преломление), диффузно рассеян отражающей поверхностью или внутри прозрачного объекта. Вид взаимодействия каждый раз определяется по случайному закону в зависимости от свойств поверхности, с которой сталкивается фотон. Данные о столкновении фотона с поверхностью сохраняются в базе данных поверхности, если она имеет ненулевые значения диффузных характеристик. Такая база данных создается для каждой из диффузных поверхностей и носит название фотонной карты поверхности. Первый этап – прямая трассировка лучей заканчивается, когда указанное количество фотонов излучено, и все фотоны поглощены.
Второй этап представляет собой обратную трассировку лучей от наблюдателя через точки на плоскости, формирующие изображение, вглубь сцены. Для каждого испущенного луча находится первое пересечение с поверхностью, и для точки пересечения вычисляется ее значение освещенности, которое и будет определять цвет пиксела изображения. Для вычисления освещенности точки требуется найти интеграл по поверхности полусферы единичного радиуса, окружающей точку, с учетом BRDF поверхности и формул, описывающих распределение всех видов источников света в сцене. Поскольку такой интеграл в общем случае вычислить аналитически невозможно, для его нахождения используются различные численные методы.
В компьютерной графике общеупотребимым методом является метод Монте-Карло, заменяющий вычисление интеграла на вычисление суммы N значений подынтегральной функции, выбранных по некоторому закону вероятности. Эти N значений получили название сэмплов. Такой подход имеет два важных свойства: точность решения и скорость сходимости. Точность решения зависит от количества N сэмплов – чем больше N, тем точнее решение и дольше расчет, чем меньше N – тем менее точным будет результат и быстрее расчет. Погрешность решения визуально проявляется в рендерах как шум – случайные световые пятна, зернистость изображения и другие дефекты и является неизбежным следствием статистической (вероятностной) природы используемых численных методов компьютерной графики.
Второе важное свойство – скорость сходимости решения, или то, как зависит от количества сэмплов точность решения. Сходимость метода Монте-Карло довольно низка и может быть оценена как квадратный корень из количества сэмплов N. Другими словами, чтобы вдвое повысить точность решения, необходимо вчетверо увеличить количество сэмплов, или, что то же самое, вчетверо увеличить объем расчетов (соответственно – и времени). Это один из серьезных недостатков метода Монте-Карло, и в настоящее время активно ведутся поиски методов расчета с более высокой сходимостью. Одна из главных на сегодняшний день альтернатив – так называемый Metropolis Light Transport. Кроме этого, во всех современных рендерах используется технологический трюк, известный как final gathering (FG). Его преимущество – способность обеспечить то же качество рендера, но с вдесятеро меньшим количеством первичных лучей. К сожалению, время расчета FG относительно велико, что сводит на нет все преимущество уменьшения количества сэмплов. Тем не менее, FG широко используется на практике благодаря другому присущему ему свойству – создавать "красивые" или "гладкие" рендеры, высоко востребованные, например, в презентационной графике. С точки зрения физической корректности, FG представляет собой типичную подделку, неспособную воспроизвести реальное распределение освещения в трехмерной сцене от заданных источников света.
Для удобства вычислений интеграла освещенности его принято разделять на три части, соответственно, и освещенность точки состоит из вкладов трех типов. Первый вклад – освещенность от прямых источников света. Второй вклад, обусловленный зеркальными и glossy отражениями/преломлениями вычисляется методом distribution ray tracing. Этот метод был предложен как еще одно приложение метода Монте-Карло для вычисления отражений и преломлений и впервые реализован для Photorealistic Renderman (PRMan), который известен высоким качеством расчетов. До этого применялся более простой метод трассировки одним лучом в направлении зеркального отражения. Третья составляющая освещенности точки – вклад от непрямого освещения, то есть вклад многократных (начиная с двукратного) отражений всех видов – диффузного, зеркального, glossy отражений/преломлений от окружения точки. Эта освещенность, ранее известная как радиосити, вычисляется с использованием фотонных карт. Наконец, поскольку трассировка лучей подразумевает построение изображений по вычисленным дискретным значениям освещенностей точек, все рендеры обязательно используют технику суперсэмплинга для устранения алиасинга. Такова коротко схема алгоритма расчета освещенности методом фотонных карт.
Было бы естественным оценивать ту или иную программу рендеринга по соотношению скорости и качества расчета рендеров. Однако, поскольку невозможно охватить все сферы практического применения рендеринга – для презентации интерьеров нужно одно, для физически корректных архитектурных визуализаций – нечто совершенно другое, для рендера объектов и материалов – третье, не говоря уж о таких обширнейших сферах применения как анимация, кино и телевидение, такую оценку я здесь приводить не буду. Ну разве только "чуть-чуть" и очень субъективно. Вместо этого я предлагаю проанализировать полноту и качество реализации современных технологий в той или иной программе рендеринга – то есть оценить его "технологичность" :).
Поэтому, мы будем рассматривать для каждой программы рендеринга:
способ реализации механизма суперсэмплинга;
использование алгоритма distribution ray tracing в расчетах освещенности методом обратной трассировки второго этапа, а значит – наличие depth of field, motion blur, мягких теней от протяженных источников света, размытости отражений и преломлений как существенных свойств, присущих этому алгоритму;
способ реализации и настроечные параметры метода фотонных карт;
возможности расчета объемных эффектов;
субъективную оценку качества и времени расчета рендеров простых тестовых сцен.
Надеюсь, эта информация будет полезна как профессионалам, поскольку предлагает определенную схему анализа, основанную на знании механизма технологий расчета освещенности, так и тем, кто впервые столкнулся с необходимостью использования рендер-программ.
Часть 1. mental ray
Тенденция любой современной программы рендеринга – разделяться на две основные и относительно самостоятельные части: собственно программный движок расчета освещенности, являющийся основным ядром программы, и средства для создания материалов (источников света, камер и т. д.) с конкретными свойствами, позволяющими наиболее полно реализовать заложенный в ядро потенциал. Mental ray является одним из ярких примеров проявления этой тенденции. Что касается его реализации для 3ds max, ядро представлено в виде отдельного исполняемого модуля, взаимодействие с которым осуществляется посредством специального интерфейса – коннектора. Вторая часть реализована как библиотека готовых материалов – shader (шейдеров) и phenomena. Кроме того, внутренние механизмы 3ds max позволяют трансформировать его собственные материалы в вид, понятный mental ray, и не требуют явного вмешательства. Последнее обстоятельство означает, что можно работать с "родными" материалами 3ds max, почти не беспокоясь об их совместимости с mental ray – все будет преобразовано правильно в автоматическом режиме. К слову, специалисты высоко оценивают возможности коннектора 3ds max 6, считая их почти равноценными по качеству и полноте реализации в Softimage. То есть, если и не самыми лучшими, то одними из лучших.
Начнем с ядра, о шейдерах подробнее поговорим немного позже. Ядро состоит из трех основных относительно самостоятельных алгоритмов расчета освещенности – scanline, ray tracing, Indirect Illumination.
Если не требуется расчета глобальной освещенности (далее - GI), mental ray использует для расчета освещенности связку scanline+ray trace, включая механизм трассировки только тогда, когда это необходимо. Обусловлено это обстоятельство стремлением получить максимальное соотношение качество/время расчета. Попутно хочу заметить, что "чистый" scanline-рендеринг mental ray намного (в разы) превосходит по скорости расчета стандартный scanline-рендер 3ds max и умеет использовать аппаратные возможности видеокарт для ускорения расчета в OpenGl. Таким образом, даже использование простого scanline модуля mental ray дает существенное преимущество в скорости, хотя и могут возникать проблемы совместимости с некоторыми специфическими особенностями "родных" материалов 3ds max. Scanline в mental ray можно включать/отключать "руками" в настройках коннектора. Долго останавливаться на scanline мы не будем и перейдем к рассмотрению возможностей модуля ray trace.
Ray trace является основным алгоритмом расчета освещенности mray и используется как в сценах с обычным освещением, так и на втором проходе в расчетах GI, совершенно заслуженно пользуется славой одного из самых быстрых алгоритмов расчета ray trace-типа из всех существующих.
Большая часть настроек ray trace находится на закладке Renderer:
Панель настроек модуля трассировки лучей для mental ray В первую очередь нас будут интересовать настройки суперсэмплинга – группа параметров Sampling Quality.
Как известно, суперсэмплинг (supersampling) предназначен для борьбы со всеми формами проявления aliasing, в частности, с пространственными формами алиасинга – "зубчатостью" линий и "зернистостью" цветовых градиентов. Суть его заключается в испускании через каждый пиксел видовой плоскости (двумерной плоскости, на которую проектируется рассчитываемое изображение трехмерной сцены) как минимум, двух лучей (в соответствии с теоремой Найквиста-Котельникова). Вообще, чем больше лучей, тем лучше, но это приводит к увеличению времени расчетов. Адаптивный суперсэмплинг, который и использует mray, определяет необходимое количество лучей индивидуально для каждого пиксела, в зависимости от того, в какую область освещенности он попадает. Если цвет в пределах пиксела сильно варьируется, например, пиксел лежит на краю "мягкой" тени, то испускается больше лучей, если цвет в пределах пиксела не изменяется, используется минимум лучей. Соответствующий минимум и максимум лучей определяется в группе Samples per Pixel и может принимать значения от 1/64, или один луч на 64 пиксела, до 1024 лучей на пиксел. Время расчетов изменяется прямо пропорционально величине изменения количества лучей на пиксел. Если Вы увеличите количество лучей в среднем в четыре раза, время расчетов изображения также увеличится в четыре раза (а то и больше). Самый верный способ не дождаться результатов в пределах одной человеческой жизни – использовать 1024 луча на пиксел :).
Механизм, который управляет количеством лучей в зависимости от вариаций цвета в пределах пиксела – группа параметров Contrast. Spatial используется при расчете статических изображений (пространственный контроль), Temporal – для Depth of Field и Motion Blur, а также в анимациях. Значения параметров R, G, B, A откалиброваны в пределах от 0 до 1. Учитывая, что каждый цвет может иметь 256 оттенков, минимальное значение (шаг изменения), соответствующее одному оттенку, составляет 1/256 = 0.004. Именно с таким шагом и имеет смысл менять эти значения. По умолчанию значения R=G=B=A=0.05, что соответствует приблизительно 13 оттенкам цвета – достаточно для предварительного просмотра и совершенно недостаточно для качественного рендера.
Группа параметров Filter определяет способ расчета окончательного цвета пиксела по взносам сэмплирующих лучей. Самый простой фильтр Box просто делит сумму взносов на количество лучей, наиболее качественные Mitchell и Lanczos используют гауссоподобную кривую для учета вкладов лучей. Все типы фильтров могут учитывать цвет примыкающих пикселов числом от 4 до 8 максимум, при значениях более 5 пикселов наблюдается явное размывание контуров объектов. Box используется на этапе предварительного просмотра, Mitchell и Lanczos – при финальном качественном рендеринге.
Наконец, параметр Jitter в группе Options позволяет реализовать стохастический адаптивный суперсэмплинг, при котором направления лучей в пределах пиксела немного варьируются по случайному закону. Это повышает качество суперсэмплинга и особенно полезно для подавления таких проявлений алиасинга, как муар.
Таким образом, в плане суперсэмплинга mental ray предоставляет в наше распоряжение самые современные и совершенные способы "борьбы за качество". Необходимо только помнить, что правильные установки контраста являются тем "спусковым крючком", который приводит весь механизм в действие. Например, при относительно завышенном пороговом значении контраста максимальное количество сэпмлов на пиксел может никогда не включиться – сэмплирование будет выполняться на значениях Minimum, а значение Maximum будет просто игнорироваться. С другой стороны, включение минимального значения контраста со значением 0.004 может обеспечить расчет всех оттенков модели RGB. При этом можно использовать высокие значения суперсэмплинга, вплоть до 256 или 1024 лучей на пиксел, вот только большая часть рассчитанных оттенков окажется вне рамок цветовой модели RGB и будет бесполезна, разве что воспользоваться возможностью вывода изображения в формате HDR для последующего tone mapping.
Типичные проявления пространственного алиасинга – зернистость цветового градиента на границе мягкой тени и "зазубренность" линий контуров объекта. Установки суперсэмплинга: min 1/16, max 1/4, contrast R=G=B=0.05, пространственный источник света mr Area Omni. Время рендеринга изображения 640х480 на P3-600 составило 17 секунд.Этот рендер сделан с почти максимальными настройками: min 4, max 256, contrast R=G=B=0.004, jitter on. Время расчета составило 1 час 47 минут 14 секунд, или 6434 секунды, то есть – в 378 раз больше. "Почувствуйте разницу". Далее в некоторых случаях в скобках я буду указывать второе время – время расчета на компьютере с процессором AMD Athlon XP 1700 – для сравнения. В данном случае это время составило 29 минут. Более разумный подход к настройкам суперсэмплинга позволяет рассчитать изображение хорошего качества за 4 минуты 17 секунд (48 сек.) (min 1, max 4, contrast R=G=B=0.004, jitter on). Тени. С этим тоже все обстоит хорошо – mental ray может рассчитывать мягкие тени (penumbra) от протяженных источников типа mr Area Spot и mr Area Omni, а также – от протяженных фотометрических источников 3ds max. В настоящий момент единственный способ получения мягких теней – в свойствах источника света выставить Shadows on и тип теней – Raytraced Shadow. Раз уж мы заговорили об источниках света, стоит упомянуть и о том, что mr Area Spot и mr Area Omni имеют одну важную особенность – их можно рендерить в изображениях, в отличие от всех других типов источников света. Библиотека шейдеров, идущая в комплекте 3ds max, пока не содержит шейдеров источников света, в частности – physical_light, разработанных mental images для использования с mental ray. Остается только надеяться, что со временем ситуация изменится.
Теперь давайте посмотрим, как обстоит дело в mental ray с распределенным (distribution) рейтресингом. Никаких настроек, непосредственно касающихся этого вида трассировки лучей, в интерфейсе коннектора нет. Поэтому, для окончательного выяснения вопроса проделаем небольшой эксперимент. Поскольку обязательным следствием расчетов с помощью distribution ray tracing является размывание отражений (и преломлений через прозрачные поверхности) объектов в зависимости от расстояния до отражателя, для проверки достаточно отрендерить простую сцену с одинаковыми объектами, расположенными на разных расстояниях от прозрачного стекла (или зеркала), через которое на них направлена камера. Если размывание объектов будет, и оно зависит от удаленности объектов по отношению к прозрачному стеклу, тогда мы имеем дело с distribution ray tracing. В противном случае – нет. Я проверял подобную сцену с различными типами материалов, как стандартными для 3ds max (типа ray trace и стекло из архитектурных материалов), так и с различными шейдерами материалов mental ray. Результат таков – distribution ray tracing в mental ray есть, но "включается" он только для шейдера материала mray типа DGS Material (3ds max).
В сцене имеется камера, прямо перед объективом которой расположена пластина некоторой толщины, которой назначен прозрачный материал типа DGS Material (3ds max). Три шара одинакового размера находятся на разном расстоянии от пластины. Хорошо видно, что для самого близко расположенного к стеклу шара размывания почти нет, для более удаленного среднего оно уже заметно проявляется, и для самого удаленного оно сильнее всего. Таким образом, можно сделать вывод, что трассировка лучей для DGS Material (3ds max) использует алгоритм distribution ray tracing.Вариант предыдущей сцены, но теперь ближайшей к камере сфере также назначен прозрачный DGS Material. Хорошо видно, что размывание объекта зависит не только от его расстояния до прозрачного объекта, но и от количества прозрачных объектов между камерой и сферами, что еще раз подтверждает использование именно distribution ray tracing.Та же сцена, но теперь сфере назначен другой шейдер – Dielectric Material (3ds max), специально предназначенный для моделирования свойств стекла. Размывание от сферы отсутствует, имеющееся размывание обусловлено прозрачной пластиной с материалом DGS. Размывание отсутствует и при использовании материалов 3ds max типа ray trace или Architectural. Такое положение вещей подтверждают и сами разработчики mental ray – согласно имеющейся информации, определение количества лучей и их направления при трассировке целиком и полностью возлагается на "плечи" шейдера. Ядро mental ray по умолчанию не использует distribution ray tracing. Таким образом, если Вы хотите использовать возможности distribution ray tracing, имеется два выхода. Первый – написать собственный шейдер, второе – использовать готовый шейдер DGS Material, поставляемый в стандартной библиотеке шейдеров mental ray.
В принципе, DGS Material настолько важен и интересен, что мы поговорим о нем чуть подробнее. Итак, DGS Material является шейдером материала и назначается для поверхности трехмерного объекта. DGS Material относится к классу так называемых физически корректных шейдеров, другими словами – правильно описывает характеристики материала при его взаимодействии со светом.
Параметры DGS Material:
Настроечные параметры DGS Material DGS Material может описывать прозрачные и непрозрачные материалы; Diffuse, Glossy Highlights, Specular описывают диффузное, "размазанное" зеркальное и идеальное отражение (или преломление) соответственно. Важно то, чтобы сумма значений этих параметров (их значения могут изменяться в пределах от 0 до 1) для конкретного материала не превышала 1 – в этом случае будет соблюден закон сохранения энергии, и шейдер будет "работать" корректно. Параметр Shiny работает только при ненулевом значении Glossy Highlights и определяет величину "размазанности" glossy-отражений/преломлений. Большие значения Shiny уменьшают "размазанность" и сужают створ углов отражения к углу идеального отражения, малые значения увеличивают "размазывание" отражений. Transparency определяет степень прозрачности объекта и может иметь значение от 0 до 1. Если объект имеет некоторую степень прозрачности (Transparency не равно нулю), то значения Diffuse, Glossy Highlights, Specular "разделяются" между отражающими и прозрачными свойствами материала. При этом, значения этих параметров для прозрачности определяются умножением заданных значений Diffuse-Glossy Highlights-Specular на значение Transparency, а значения для свойств отражения – умножением Diffuse-Glossy Highlights-Specular на величину (1 – Transparency), так что сумма всех параметров не превышает 1. Для каждого из параметров может быть использован дополнительный шейдер или текстурная карта.
К сожалению, реализация DGS Material в 3ds max 6 не является полной – отсутствуют такие параметры шейдера, как "Shiny u" и "Shiny v", позволяющие создавать анизотропные материалы и имеющиеся в оригинальной версии шейдера, разработанной mental images. Причем, в руководстве пользователя 3ds max присутствует некоторая неразбериха: при описании DGS Material там упоминаются параметры, которых нет, и отсутствует описание некоторых имеющихся параметров. Будем надеяться, что эти небольшие "шероховатости" будут со временем исправлены.
Таким образом, DGS Material важен из-за физически корректного описания свойств материалов (это особенно важно для GI – фотонные карты также используют вариант этого материала, об этом ниже), а также потому, что это единственный материал, использующий distribution ray tracing.
Останавливаться подробно на Depth of Field и Motion Blur я не буду. Высокое качество реализации этих эффектов в mental ray хорошо известно и само по себе требует только наличия нескольких первичных лучей на пиксел, как и суперсэмплинг.
Другая интересная возможность – дисперсия, так же явно не реализована в mental ray. Опять же, принципиальных ограничений здесь нет никаких – дисперсия это всего лишь зависимость коэффициента преломления от длины волны (или R, G, B) и может быть легко реализована как еще один шейдер. Тем не менее, в библиотеке mray, поставляемой с 3ds max 6 такого шейдера нет, поэтому если он Вам нужен – придется написать самому или поискать "на стороне" :).
Подведем промежуточный итог. Алгоритм обратной трассировки лучей mental ray использует все современные технологии расчета, в частности – distribution ray tracing, и позволяет рассчитывать DoF, motion blur, мягкие тени от протяженных источников, размытые отражения и преломления (иногда также называемые translucency), использует стохастический адаптивный суперсэмплинг, в целом работает очень быстро и стабильно.
Теперь перейдем к рассмотрению самого "вкусного" – Global Illumination.
Основные интересующие нас параметры расположены на вкладке Indirect Illumination:
Параметры для настройки расчетов Global Illumination Но перед тем, как мы рассмотрим назначение каждого параметра, поговорим немного об особенностях расчета GI.
Прежде всего, необходимо учитывать статистический характер таких расчетов. Фотонные карты поверхности создаются на основе трассировки траекторий фотонов, излучаемых от источника света вглубь трехмерной сцены. Какие именно фотоны достигнут в конце концов данной поверхности – предсказать нельзя. То есть мы только можем инициировать процесс излучения и затем фиксировать фотоны, достигшие поверхности. Обязательным условием сохранения данных о фотоне в базе данных поверхности (фотонной карте) является наличие у поверхности ненулевых значений диффузных характеристик. Чисто отражающие или прозрачные поверхности не могут иметь фотонных карт. Далее, на этапе обратной трассировки, когда вычисляется общая освещенность точки, вычисляется и GI точки, наряду с прямой освещенностью и отражениями/преломлениями относительно камеры. Для расчета GI используется статистический численный метод Монте-Карло, рассчитывающий GI данной точки по заданному количеству фотонов, расположенных вблизи точки и заменяющего вычисление интеграла освещенности по полусфере, окружающей точку. Таким образом, фотоны играют роль сэмплов, поэтому, чем больше количество фотонов, используемых для расчета освещенности точки, тем точнее значение GI. Вполне естественным следствием природы таких расчетов является наличие в изображениях различных шумов и артефактов – это визуальные проявления отклонения точности вероятностных расчетов (ошибки). Они совершенно неизбежны, и относиться к этому нужно вполне спокойно, а единственный способ борьбы с такими артефактами – повышение точности решения, то есть увеличение общего количества фотонов в фотонных картах поверхностей. Точность решения находится целиком в нашей власти – мы указываем это значение в соответствующих настройках расчета GI. Необходимо только помнить, что при данном общем количестве фотонов фотонной карты поверхности и заданном N количестве фотонов для расчета GI точки, эти N фотонов будут лежать в пределах круга (диска, поскольку интеграл вычисляется по полусфере) некоторого радиуса вблизи точки. Чем выше N и меньше плотность фотонов (или общее количество фотонов в фотонной карте), тем больше радиус круга, который занимают эти N фотонов, и наоборот. И когда говорят о "радиусе фотонов", подразумевают именно радиус площадки сбора заданного количества N фотонов вблизи точки, а не радиус самих фотонов.
Ну что же, пора вернуться к настройкам Indirect Illumination mental ray.
Здесь имеется пять групп:
- Caustics для расчета каустик-эффектов;
- Global Illumination для расчета непрямого освещения, кроме каустик-эффектов;
- Photons (Caustics & GI) для расчета глобального освещения в объемах;
- Final Gather;
- Global Light Properties для управления параметрами излучаемых фотонов.
Хотя Caustics и Global Illumination имеют одну и ту же природу, в mental ray они могут рассчитываться независимо друг от друга. Такая возможность обусловлена тем, что для каустик-эффектов и GI используются две отдельные фотонные карты. Фотонные карты Caustics визуализируются напрямую, с минимальным количеством дополнительных расчетов, поэтому требуют большой плотности фотонов. Фотонные карты GI имеют относительно меньшую плотность. Первые две группы параметров обеспечивают расчет непрямого освещения только для поверхностей. Чтобы включить расчет GI для объемов, необходимо совместно с ними использовать третью группу параметров – Photons (Caustics & GI), в частности группу Volumes (Samples и Radius). Кроме того, для расчетов GI необходимо назначать соответствующие материалы, в частности – фотонные карты. Если Вы работаете со стандартными материалами max, об этом не нужно беспокоиться – это забота транслятора. Но если Вы работаете с материалами через mental ray Connection или используете материал типа mental ray, фотонные карты должны быть явным образом назначены для соответствующих слотов материалов. Всего фотонных карт в mray четыре типа: caustic для поверхностей, caustic для объемов, GI для поверхностей, GI для объемов. Причем, один и тот же шейдер используется и для caustic, и для GI – разделение их по типам внутреннее дело mental ray.
Параметры, доступные в интерфейсе стандартных материалов 3ds max. Чтобы появился и был доступен этот свиток параметров, необходимо назначить рендером mental ray и через Customize>Preferences>mental ray установить "птицу" напротив "Enable mental ray Extensions". Обратите внимание, что "замки" напротив некоторых материальных слотов по умолчанию "заперты". Это обеспечивает автоматическую трансляцию стандартных материалов max в вид, понятный mental ray. Стоит только разблокировать замок, и Вам самим нужно (можно) будет указывать, какие материалы использовать. Параметры материала типа mental ray. Обязательно должны быть определены свойства поверхности Surface (указан шейдер в слоте), Photon – если рассчитывается любой из видов непрямого освещения (GI или caustic) для поверхности. Если Вы работаете с объемами материалов, то соответствующий шейдер должен быть назначен для слота Volume, а если при этом еще и GI рассчитывается, то обязательно должен быть указан шейдер объемной фотонной карты в слоте Photon Volume. При работаете с шейдерами mental ray наиболее универсальными шейдерами для поверхности (слот Surface) являются DGS Material (3ds max), соответствующий фотонный шейдер (слот Photon) – DGS Material Photon (3ds max), для объемов (слот Volume) – Party Volume (physics), соответствующий объемный фотонный шейдер (слот Photon Volume) – Party Volume Photon (physics). Вообще же, если для свойств поверхности используется какой-то шейдер, и нужен расчет GI, в библиотеке mental ray нужно брать строго соответствующий материальному шейдеру фотонный шейдер. Как правило, он имеет то же название с добавкой Photon.
Для корректного расчета GI при помощи mental ray в самом общем случае необходимо выполнить следующие шаги:
1. Назначить рендером mental ray и разрешить использование расширений – включить Enable mental ray Extensions.
2. В свойствах всех объектов (выделить, нажать правую кнопку и выбрать Properties) на закладке mental ray выставить галочки напротив нужных позиций.
Пример настроек свойств объектов для
расчета GI 3. Назначить и настроить параметры всех материалов (в частности – фотонных карт).
4. Настроить свойства источников света и, в частности – свойства излучения фотонов, если такие свойства определяются для каждого источника индивидуально.
5. Настроить параметры рендера на вкладке Indirect Illumination.
Как видите, параметров и настроек приходится делать довольно много. Если объектов и источников в сцене большое количество, требуется быть очень внимательным, поскольку даже одна единственная ошибка приведет к неверному результату. Методичность, последовательность, внимательность – Ваши единственные помощники в этом деле.
Расчет GI для поверхностей без Final Gathering Расчет глобальной освещенности без использования FG является физически корректным методом расчета, но требует излучения большого количества фотонов и определенных усилий для подбора оптимальных настроек во избежание шума и визуальных артефактов в изображении. Так что потрудиться придется и Вам, и компьютеру :). Под "большим" количеством подразумевается величина в миллионы и десятки миллионов фотонов, mental ray довольно быстро рассчитывает прямую трассировку большого количества фотонов, но критичен к объему оперативной памяти. На моей машине с 640 Мб оперативной памяти 9 миллионов фотонов являются пределом, при излучении большего количества mental ray приводит к критическому сбою из-за недостатка именно оперативной памяти – размер виртуальной памяти значения не имеет. Кроме того, по мере увеличения количества излучаемых фотонов, все больше времени требуется на постобработку фотонных карт – упорядочивание базы данных фотонов в сбалансированную структуру. Так что, если после просчета трассировки показатель прогресса расчета рендера "застывает" на 100%, не волнуйтесь – идет нормальный процесс упорядочивания фотонов в базе данных.
Итак, для начала выставляем в свойствах объектов:
Настройки свойств объектов для расчета Gi Поскольку каустик не рассчитываем, отключаем соответствующие пункты.
Теперь настроим источники света. Настройки можно делать для всех источников сразу через Global Light Properties закладки Indirect Illumination
либо индивидуально в свойствах каждого источника света.
Индивидуальное указание свойств источников предпочтительно, поскольку позволяет тонко управлять их вкладом в освещенность сцены. Указать обязательно нужно количество фотонов GI, Energy и Decay. В свойствах источника света имеется две настройки Decay (затухание с расстоянием) – одна (в общих свойствах) определяет затухание прямого освещения, вторая – в настройках непрямого освещения источника mental ray Indirect Illumination, определяет затухание непрямого освещения. Обе настройки независимы, что позволяет по отдельности настраивать затухание прямого и непрямого (GI) освещений. В mental ray под количеством фотонов GI понимается не количество излученных фотонов, а общее количество сохраненных во всех фотонных картах сцены фотонов. Это практически удобнее. Параметр Energy – энергия фотонов физического смысла не имеет и является дополнительным средством регулировки яркостей в изображении, чем выше Energy, тем ярче освещенность. Для параметра Decay физически корректным считается значение 2 (интенсивность уменьшается пропорционально квадрату расстояния). Возможно устанавливать значения 1 и 0, а также между 1 и 2 и любое выше 2. Использовать значения между 0 и 1 (например, 0.4) не рекомендуется, в этом случае свет будет не затухать с расстоянием, а наоборот – усиливаться.
При расчете GI необходимо установить галочку в блоке Global Illumination и учитывать три параметра – общее количество фотонов фотонной карты, количество сэмплов для расчета освещенности точки Photons и радиус площадки сбора фотонов Radius.
О статистическом характере вычислений методом фотонных карт мы уже говорили и пришли к заключению, что для качественного результата необходимо излучать большое количество фотонов.
Количество сэмплов (фотонов) для расчета освещенности точки Photons (кстати, mental ray имеет собственное название этого параметра, которое звучит как accuracy – точность) напрямую влияет на точность вычислений и на проявление шума в изображении. Поскольку речь идет об аппроксимации интеграла освещенности точки суммой подынтегральных выражений (сэмплов), то чем больше слагаемых такой суммы используется (в нашем случае – фотонов), тем точнее аппроксимация соответствует истинному значению интеграла, и тем меньше ошибка, проявляющаяся как шум.
Фотоны, используемые для расчета освещенности точки, берутся из непосредственного окружения точки. Очевидно, что чем больше фотонов используется, тем большую площадь они занимают вокруг точки. Параметр Radius (радиус) ограничивает площадку сбора, и, если плотность фотонной карты невелика, набрать заданное количество фотонов в пределах заданного радиуса не удается, то сбор фотонов прекращается, и используется то их количество, которое лежит в пределах площадки с заданным радиусом. Если плотность фотонной карты низка, изображение будет содержать ясно различимые круговые области некоторого радиуса с различной освещенностью. По умолчанию Radius отключен, на самом деле даже в этом случае используется значение радиуса, равное одной десятой размерности сцены. Следует очень четко понимать и помнить, что чем меньше радиус площадки сбора, тем более детальным, точным будет рассчитанное изображение, чем больше радиус – тем больше усреднение освещенности, что на практике может приводить к совершенно неправильному результату расчета.
Для дальнейших демонстраций я буду использовать сцену, содержащую так называемый Cornell box. Cornell box – это довольно простая конструкция в виде прямоугольного ящика, в верхней крышке которого прорезано отверстие, через которое освещается внутреннее пространство ящика. Одна из стен окрашена в красный цвет, другая – обычно в синий, иногда – в зеленый, остальные стены, пол и потолок окрашены в серый цвет. Cornell box используется для сравнения реально измеренных величин освещенности с рассчитанными на компьютере, достаточно прост, но обладает необходимыми свойствами для демонстрации расчета непрямого освещения. Файл сцены можно взять
здесь.
Общее количество фотонов=10 тысяч, количество сэмплов Photons=4000, Radius=0.05 м. Благодаря низкой плотности фотонной карты, набрать 4000 сэмплирующих фотонов вблизи точек не удается и в игру вступает ограничение радиуса, которое в этом случае равно 5 см. В результате все изображение "запятнано" кругами пятисантиметрового радиуса. Простое увеличение радиуса площадки сбора фотонов может сгладить вид изображения.
Настройки те же за исключением того, что Radius = 1метр. Увеличив радиус, мы тем самым добились того, что освещенность точки рассчитывается при помощи всех заданных 4000 сэмплов (а это обеспечивает относительно высокую точность). Но досталось это не даром – платить приходится размыванием деталей, особенно сильным на слабоосвещенных участках сцены. Обратите внимание, рендер получился почти "плоским", хотя и чистым, без шума. Это свидетельствует о недостатке общего количества фотонов для освещения сцены и о том, что радиус сбора слишком велик.
Уменьшение количества сэмплов естественным образом уменьшает радиус площадки сбора, но зато увеличивается шум, поскольку случайный разброс значений освещенности увеличивается.
Количество сэмплирующих фотонов Photons=200, Radius=0.05 м. Световые круги почти не наблюдаются, освещение нещадно "шумит".Количество сэмплирующих фотонов Photons=1, Radius=0.05 м. Фактически это просто грубая визуализация фотонной карты. Радиус теперь не имеет никакого отношения к световым пятнам – это проявление недостаточности общего количества фотонов для равномерного освещения всех точек поверхностей и случайности направлений излучения. Время расчета – 1 минута. Рендеринг с такими настройками может быть использован для анализа постановки света в сцене, поскольку действительно является визуализацией распределения фотонов по поверхностям. Теперь зафиксируем количество сэмплов и радиус и начнем увеличивать общее количество фотонов.
Количество сэмплирующих фотонов Photons=4000, Radius=0.05 м, общее число фотонов увеличено с 10 до 100 тысяч. Хорошо видно, что радиус площадки сбора значительно уменьшился, световые круги теперь почти незаметны. Сильный шум. Время расчета – 1 минута 14 секунд.Общее количество фотонов увеличено до 1 миллиона, время расчета – 3 минуты 8 секунд. Шум уменьшился. Общее количество фотонов увеличено до 9 миллионов, время расчета – 36 минут 46 секунд. Шум уменьшился. Сравнивая три последних рендера, можно заметить уменьшение в размере шумов (размеров светлых и темных пятен, но не их количества), – это результат естественного уменьшения радиуса сбора фотонов в результате повышения их плотности. В идеале, когда количество фотонов очень велико, радиус площадки сбора фотонов стянется в точку, а детализация расчета освещенности достигнет максимума – радиус площадки сбора станет фактически нулевым. Ситуация, на практике недостижимая. Увеличение количества сэмплов до 16 000 привело к увеличению радиуса площадки сбора и сглаживанию шума (для параметра Radius установлено значение 1 метр). Общее количество фотонов 9 млн., время расчета – 55 минут 44 секунды. Увеличивая общее количество фотонов, мы уменьшаем геометрический размер шума (световых пятен), а увеличивая количество сэмплов, мы уменьшаем количество шума (количество световых пятен).
Общее количество фотонов, количество сэмплирующих фотонов и радиус являются основными средствами достижения качества рендера. Увеличение радиуса сглаживает шум, но размывает детали изображения. Увеличение общего количества фотонов позволяет достичь более точной освещенности всех точек поверхностей, увеличивает плотность фотонов на поверхности и уменьшает радиус площадки сбора. Количество сэмплов влияет на точность расчета освещенности точки и таким образом – на количество шума в изображении. Оптимальный алгоритм достижения качественного, без шума, рендера может быть, например, таким. Устанавливаем заведомо большое значение сэмплирующих фотонов (параметр Photons), можно ставить его равным общему количеству фотонов, истинно учитываемое количество сэмплов в этой схеме все равно будет определяться радиусом сбора фотонов. Исходя из требуемого качества изображения и размерности сцены, устанавливаем желаемое значение радиуса, оно должно быть достаточно малым, чтобы качественно передавать детали освещения. Задаем общее количество фотонов (параметр GI Photons), смело можно начинать с миллиона. Выполняем рендеринг и далее увеличиваем общее количество фотонов (плотность фотонных карт) до тех пор, пока рендер не избавится от шума полностью.
Radius=1 метр, Photons=5000, общее количество фотонов – 150 000, суперсэмплинг 1-4, контраст 0.025. Для материалов поверхностей использованы шейдеры mental ray типа DGS Material (3ds max), для фотонных карт – DGS Material Photon (3ds max). Время расчета 22 мин. 27 сек. (7 мин. 5 сек.). В данном случае сцена имеет очень простую геометрию, поэтому радиус выставлен таким большим.Настройки те же, но использован стандартный материал 3ds max типа Blinn. Отчетливо виден эффект Color Bleeding, который получается "сам собой". При использовании стандартных материалов о подготовке информации для mental ray заботится транслятор, работающий в автоматическом режиме. Вследствие этого возможности тонкой настройки GI довольно ограничены. Если Вы сами хотите определять величину color bleeding (цветового блика), нужно разблокировать слот шейдера фотонных карт mental ray Connection и явно назначить ему подходящий фотонный шейдер, чтобы затем регулировать его параметры. При использовании фотонных шейдеров mental ray можно совершенно произвольно управлять эффектом Color Bleeding – отключать его вовсе (как на рисунке выше), влиять на цвет и интенсивность Color Bleeding, изменяя цвет и величину диффузной компоненты фотонного шейдера DGS Material Photon (3ds max). Вполне возможно даже создать, например, синий отблеск от зеленой стены. Управляя diffuse, glossy и specular свойствами фотонного шейдера можно определять не только диффузную компоненту GI, но и зеркальные и размытые зеркальные типы отражений для GI. Важно помнить только, чтобы сумма трех компонент не превышала 1 (иначе результат рендера будет непредсказуем). Таким образом, шейдер материала поверхности определяет взаимодействие объекта с прямым освещением, а фотонный шейдер – взаимодействие объекта с непрямым освещением, причем эти шейдеры могут работать независимо друг от друга. Последнее свойство позволяет создавать широкий спектр самых разных спецэффектов.
Фотонный шейдер позволяет гибко управлять поведением GI. Настройки диффузных компонент шейдеров соответствующих материалов позволили получить Color Bleeding. Красная стена, как и положено, отбрасывает красноватый отсвет на окружение, а вот зеленая – синий, что конечно же, неправильно и является просто демонстрацией возможностей фотонного шейдера mental ray. Время расчета – 23 мин. 14 сек. (7 мин. 43 сек.). Вернемся к обсуждению радиуса сбора фотонов. В вышеприведенных рендерах он достаточно велик, но это простые сцены. В более-менее реальных сценах радиус должен быть в десятки, сотни раз меньше. Ниже для сравнения приведены два рассчитанных с разным значением радиуса сбора фотонов изображения немного модифицированной сцены. Я добавил ящику переднюю стенку, прозрачную для камеры (слоту поверхности и слоту теней назначены шейдеры типа transmat) и непрозрачную для фотонов (слоту фотонов назначен шейдер типа DGS Material) – то есть стенка есть для фотонов и ее нет для камеры. Добавлено также два новых объекта – сфера и куб, файл сцены можно взять
здесь.
Radius=1 метр, Photons=1700, общее количество фотонов – 40 000, суперсэмплинг 1-4, контраст 0.025. Рендер получился гладким, без шума, время расчета – 12 минут. Но, к сожалению, эта освещенность совершенно неверна. Свидетельством тому – странное освещение сферы, углов синего параллелепипеда и углов Cornell box.Вот правильно рассчитанная освещенность (за исключением того, что сцена могла быть светлее :)). Настройки Radius=0.08 метра (8 см), Photons=100 000, общее количество фотонов – 4 000 000, суперсэмплинг 1-4, контраст 0.025. Время расчета составило 52 минуты 6 секунд (16 мин. 48 сек.). Значение параметра Photons на самом деле не имеет значения (оно просто должно быть большим), поскольку истинное значение количества сэмплирующих фотонов определяется соотношением радиуса и плотности фотонной карты (общего количества фотонов). Больше всего мне здесь нравится тень от сферы – она содержит четыре отчетливых оттенка: зеленый, красный, желтый и черный. Сравнивая величины радиусов сбора фотонов для двух последних изображений, их значение трудно переоценить. Но количество фотонов и время!
Изображение 01-31 далеко не идеал, поскольку радиус 8 сантиметров для сцены размером 1х1х1 метр все же великоват. Подходящее значение радиуса лежит где-то в пределах одного сантиметра. К сожалению, по техническим причинам, проверить это я не смог – недостаток оперативной памяти в 640 мегабайт на моем компьютере не позволяет обсчитывать фотонные карты более чем из 9 миллионов фотонов, а при таком количестве для радиуса в 1 сантиметр все еще наблюдается сильный шум. У кого есть возможность протестировать с большим количеством фотонов (от 15 миллионов и выше) и малым радиусом (от 1 сантиметра и меньше) – милости прошу, файл сцены доступен!
Теперь понятно, что методы расчета GI даже для такой простой сцены вполне в состоянии всерьез и надолго "озадачить" любой из персональных компьютеров самой "топовой" производительности. Для того, чтобы расчет GI стал вполне тривиальной задачей, уровень производительности компьютеров должен возрасти раз в десять. Поэтому, одной из наиболее важных задач теории расчета освещенности на сегодня является поиск численных методов, скорость схождения решений которых выше (а значит, и общее число излучаемых фотонов – меньше), существенно выше, чем в методе Монте-Карло.
Интересно также и то, что существуют разработки вариантов алгоритмов GI для расчета только аппаратными средствами современных видеокарт – GI режима реального времени. И определенные успехи уже достигнуты. Не так давно Хенрик Ван Йенсен опубликовал результаты практического использования современных видеокарт для этой цели. Учитывая быстрый прогресс в области роста производительности видеокарт (стоит упомянуть GF 6800 и ATI X800), это направление выглядит очень многообещающе. Возможно, в последующих обзорах, мы более детально познакомимся с состоянием дел в этой области компьютерной графики, тем более, что уже есть игровые проекты, планирующие полноценное использование
GI.
Еще одна группа настроек, о которой важно помнить – Max Trace Depth, управляет глубиной трассировки фотонов, т.е. максимальным числом отражений/преломлений фотона поверхностями. Увеличение глубины трассировки фотонов в общем случае приводит к увеличению освещенности сцены и делает более плавными градиентные переходы цвета.
Таким образом, имеется две независимые настройки глубины – одна для трассировки фотонов, другая – для обратного рейтресинга, работающие независимо друг от друга.
Расчет GI поверхности с помощью FG Итак, для получения точного решения или, что то же самое, качественного изображения, необходимо излучать довольно большое количество фотонов. Но существует и альтернатива. Эта альтернатива – Final Gathering (FG, дословно – окончательный сбор). Над точкой строится полусфера единичного радиуса (поэтому в настройках FG отсутствует радиус площадки сбора – она всегда имеет единичный радиус), через поверхность полусферы в случайных направлениях испускаются лучи (еще один вид сэмплов). Чем больше таких лучей, тем точнее расчет и меньше шум. Для каждого луча находится пересечение с ближайшей поверхностью, и луч обрывается – то есть дальнейшая трассировка такого луча не ведется, или другими словами – глубина трассировки лучей FG всегда равна единице. Далее могут использоваться две схемы.
Первая совершенно не нуждается в наличии фотонных карт: сначала рассчитывается освещенность новой вторичной точки прямым источником, и это значение используется для расчета вклада в освещенность исходной точки диффузно отраженным светом от вторичной, так для каждого сэмплирующего луча сферы. Результирующая освещенность точки будет определяться суммой освещенностей диффузным отраженным светом от вторичных точек, найденных в результате трассировки сэмплирующих лучей. При такой схеме FG может работать совершенно самостоятельно, без предварительного излучения фотонов. Но это грубый метод расчета GI, поскольку он учитывает только однократное диффузное отражение прямого освещения. Кроме того, этот метод неприменим в тех случаях, когда присутствуют поверхности, недоступные для прямого освещения, а только для отраженного. Такие поверхности при использовании только FG будут всегда очень темными в изображениях.
Расчет освещенности с использованием только FG. Потолок остается очень темным, поскольку недоступен для прямых лучей от источника света (источник находится снаружи над крышкой коробки и светит через отверстие). Хотя color bleeding присутствует, общая освещенность также гораздо меньше, чем при использовании фотонных карт – это результат того, что FG учитывает только один вид вторичного диффузного отражения типа LDDE и не учитывает все другие возможные пути фотонов. Вторая схема расчетов основывается на использовании фотонных карт, здесь FG выступает в роли последнего этапа (за что, возможно и получил свое название). В этом случае освещенность во всех новых вторичных точках пересечения сэмплирующих лучей с окружающими поверхностями вычисляется при помощи сбора заданного в настройках группы GI количества фотонов вблизи вторичных точек, как при обычном методе расчета GI. Затем рассчитывается отраженная освещенность исходной точки от всех найденных освещенностей вторичных точек. Эта схема тоже неидеальна – она не может включить в расчет чисто отражающие/преломляющие поверхности, поскольку они не имеют фотонных карт. Только честный GI на основе фотонных карт может учесть все типы отраженного освещения. В результате, рендеры с использованием FG + GI могут быть немного темнее, чем рендеры, рассчитанные при помощи только фотонных карт.
Немаловажной особенностью FG является то, что освещенность рассчитывается далеко не для всех видимых наблюдателю точек поверхностей (точек пересечения первичных лучей обратного рейтресинга с поверхностями), а только для некоторых, с последующей интерполяцией и экстраполяцией освещенности для остальных точек цветовыми градиентами. Кого интересуют подробности, вот Вам статья
Gregory J. Ward, предложившего этот метод. Таким образом, при использовании FG для каждой поверхности создается сетка, узлами которой являются точки, для которых используется расчет методом FG. Освещенность точек, лежащих между узлами, находится интерполяцией и экстраполяцией цветовыми градиентами с опорой на узлы сетки.
Когда говорят о радиусах FG, имеют в виду, во-первых, расстояние (максимальное) между точками, для которых действительно вычисляется GI (расстояние между узлами сетки) – это Max.Radius FG. Чем больше это расстояние, тем меньше узлов в сетке, то есть меньшее количество точек поверхности обсчитывается FG, тем ровнее градиентные интер- и экстраполяции, тем меньше точность расчета методом FG и тем меньше время расчетов. Чем меньше расстояние, тем больше узлов в сетке, тем выше точность расчетов и тем больше время вычислений.
Во-вторых, еще один радиус FG – это расстояние, используемое в интерполяциях и экстраполяциях освещенностей промежуточных (межузловых) точек – это Min. Radius FG. Поскольку освещенность межузловой точки не рассчитывается FG, а находится по уже известной освещенности окружающих точек (в том числе и узловых), то чем больше расстояние, тем больше точек используется для экстраполяции и интерполяции освещенности, и тем более гладким будет цветовой градиент.
Разъяснять здесь суть методов экстраполяции и интерполяции я не буду, надеюсь, Вы понимаете, о чем идет речь.
Таким образом, FG позволяет рассчитывать сглаженные благодаря интерполяции цветовыми градиентами изображения, но не является корректным методом расчета GI, в отличии от метода фотонных карт, и к тому же – работает, как правило, очень медленно.
Настроечные параметры FG. Samples определяет количество сэмплирующих лучей, Max Radius – расстояние между узлами сетки, Min Radius – расстояние для интер- и экстраполяции. Что касается остальных параметров FG, то совсем непонятно, зачем нужен Max Trace Depth – глубина трассировки сэмплирующих лучей. Из смысла расчетов FG следует, что глубина трассировки всегда равна единице и выше быть не может. Практические опыты также показали абсолютную ненужность этих настроек – вид изображения при разных значениях глубины трассировки оставался совершенно одинаковым.
Рецепт нахождения оптимальных настроек при использовании расчета освещенности совместно методами GI + FG:
- FG отключить, найти гладкое решение только при помощи GI, как это было описано выше;
- включить FG, задать небольшое количество сэмплов и очень большую относительно размеров сцены величину Max. Radius, можно также задать маленькое значение Min. Radius;
- найти гладкое, без шума, решение FG+GI, увеличивая постепенно количество сэмплов;
- имея гладкое решение, уменьшаем Max. Radius с одновременным увеличением количества сэмплов;
- аналогичным образом увеличиваем Min. Radius.
Настройки GI: общее число фотонов – 40 000, Photon – 1400, Radius – 1 метр, глубина трассировки – 7; FG: Samples – 250, Max. Radius – 0.1 м, Min. Radius – 0.05 м. Время расчета – 23 минуты (6 мин.18 сек.). Одним из недостатков FG в mental ray можно считать ограниченность управления степенью проявления цветовых бликов (color bleeding) – его нельзя совсем отключить, как это было возможно при использовании только GI, хотя интенсивность можно регулировать в некоторых пределах.
Рассчитаем изображение сцены с Cornell box, содержащей геометрию (та же сцена, что и на последнем рисунке в разделе GI). Поскольку GI-решение мы уже находили, нам нужно только определить настройки для FG. Следуя предложенной методике, я определил значение Max/ Radius = 0.1 м, Min. Radius = 0.05 м, количество сэмплов FG = 700. Вот что получилось:
Настройки GI: общее число фотонов – 4 000 000, Photon – 100 00, Radius – 0,08 м, глубина трассировки – 7; FG: Samples – 700, Max. Radius – 0.1 м, Min. Radius – 0.05 м, суперсэмплинг 1-4, контраст 0.025. Время расчета – 1час 30 минут 3 секунды (30 минут). Теория утверждает, что используя FG, можно в десять раз уменьшить общее количество фотонов без потери качества изображения. Проверим это, уменьшив число фотонов с 4 миллионов до 400 000, остальные настройки оставим неизменными. Результат:
Общее число фотонов сокращено в десять раз. Результат полностью идентичен предыдущему изображению, время расчета – 11 минут 33 секунды (3 минуты 18 секунд). Как видите, результаты совершенно одинаковы, а время различается почти в 9 раз. Знание – сила :)! Таким образом, при использовании GI+FG, общее количество фотонов, найденное для качественного расчета GI, можно уменьшать в десять раз без потери качества конечного изображения. Следует, конечно же, соблюдать меру и не увлекаться чрезмерным обрезанием количества фотонов – десятью или даже тысячей фотонов вряд ли можно вообще осветить сцену, какие бы методы расчетов не использовались. Поэтому, если при освещении сцены уже используется только 20-100 тысяч фотонов, вряд ли стоит уменьшать их количество в десять раз, требуется соблюдать осторожность.
Изображение 01-31, рассчитанное только методом GI, и изображение той же сцены 01-33, рассчитанное GI+FG, сильно отличаются друг от друга. Причина, как я уже говорил, заключается в различных алгоритмах расчета GI и FG, и эти два изображения наглядно демонстрируют эту разницу. В частности, если помните, в сцену добавлена передняя стенка, прозрачная для камеры и непрозрачная для фотонов. При расчете методом GI с использованием только фотонных карт они содержат фотоны, отраженные передней крышкой назад внутрь ящика (стенка не дает им уйти наружу), поэтому они принимают участие в расчетах освещенностей точек, как если бы у ящика была передняя стенка. Другое дело – FG. Поскольку FG не использует фотонные карты точки поверхности, освещенность которой рассчитывает, а строит лучи до пересечения с окружающими поверхностями и использует фотонные карты в точках пересечения, FG не может учесть отраженные передней стенкой фотоны – стенка прозрачна для камеры, то есть не имеет диффузных характеристик и поэтому не имеет фотонной карты в принципе. В результате получается изображение с отсутствующей передней стенкой.
Какой из способов использовать, "чистый" GI или GI+FG – дело вкуса, если физическая корректность не обязательна. Лично мне больше нравится все же "честный" GI, хотя бы потому, что тени строит более реалистично, да и цветовые блики (color bleeding) позволяет регулировать.
Caustic эффекты Создание caustic в mental ray – относительно простой процесс. Необходимо только позаботиться о правильном определении материалов и свойств объектов.
Группа параметров Caustic Расчет caustic также основывается на создании фотонной карты. Поскольку такие карты визуализируются напрямую, почти без расчета (выполняется только интерполирование и экстраполирование промежуточных точек по энергии окружающих фотонов), для качественного caustic-эффекта требуется излучать большое количество фотонов в направлении генерирующего эффект объекта. С другой стороны, caustic обычно пытаются получить в локализованных областях трехмерной сцены, поэтому число фотонов относительно невелико и лежит, как правило, в интервале от 10 тысяч до 1 миллиона фотонов. Что касается настроек, то Enable включает/отключает расчет caustic, Samples определяет количество фотонов для определения caustic-освещенности точки, Radius – радиус площадки сбора, Filter – фильтр, определяющий весовой коэффициент вклада различных фотонов в caustic точки; имеется всего два фильтра – Box и Cone, последний позволяет получать более четкие caustic-эффекты, настройка Kernel относится именно к этому фильтру и позволяет управлять степенью резкости caustic-эффекта.
Для создания caustic в сцене следует придерживаться следующих правил:
- включить расчет caustic в Indirect Illumination (параметр Enable);
- источник освещения должен генерировать caustic, а выбранный объект – получать caustic, что определяется выставлением соответствующей галочки в свойствах объектов; для объектов, не участвующих в создании caustic в свойствах отключить генерацию/получение caustic;
- для источника света нужно указать количество caustic-фотонов;
- правильно определить материалы объектов: должны использоваться явно или неявно фотонные шейдеры; объект, генерирующий caustic-эффект, как правило – отражающий или прозрачный, причем эти свойства должны быть превалирующими, преимущественно диффузный объект caustic не создаст. Для прозрачных объектов индекс рефракции (ior) должен быть обязательно больше 1; объект, получающий caustic, должен быть преимущественно диффузным, хотя некоторая небольшая степень отражения или преломления не запрещается; любые материалы, участвующие в генерации/получении caustic, не должны содержать шейдера теней (только ray trace тени допустимы).
Геометрия объекта-генератора caustic может быть произвольной, но удобнее всего использовать объекты с кривизной сферического типа.
Caustic, создаваемый плоскими отражающими гранями
прямоугольного куба Caustic, создаваемый сферическим прозрачным объектом Чем выше количество caustic-фотонов и количество сэмплов, тем качественнее результат расчета. Единственное ограничение – время расчета, которое может быть довольно большим, если caustic-эффекты используются в сочетании с расчетом GI или объемными эффектами.
Caustic от цилиндрического отражающего объекта. Количество сэмплов и фотонов невелико (Caustic Photons 50 000), поэтому качество эффекта довольно низкое. Время расчета также невелико – 2 минуты 19 секунд.Вариант изображения той же сцены, но с более высоким значением Samples=1000 и Сaustic Photons= 1 000 000. Время расчета – 2 часа 34 минуты 28 секунд (50 мин. 3 сек.), в основном из-за высокого качества суперсэмплинга – контраст 0.004, лучей 4-16. Расчет Caustic и GI одновременно еще больше увеличивает время расчета.
Расчет caustic и GI методом фотонных карт в сцене с Cornell box. Сфере назначен прозрачный DGS Material. Настройки GI: GI Photons 4 000 000, Photons 100 000, Radius 0.08 м, суперсэмплинг 1-4, контраст 0.025. Время расчета – 1 час 21 минута 19 секунд (28 мин. 37 сек.).Расчет caustic методом GI+FG. Настройки GI: GI Photons 400 000, Photons 100 000, Radius 0.08 м. Настройки FG: сэмплов 700, Max. Radius 0.1 м, Min. Radius 0.05 м; суперсэмплинг 1-4, контраст 0.025. Время расчета – 56 минут 10 секунд (19 мин. 14 сек.). Помимо caustic и GI для поверхностей, mental ray позволяет рассчитывать и объемные варианты этого эффекта, а также расчет GI для объемов. Для этого дополнительно потребуется использовать объемный шейдер Party Volume (physics), назначаемый в слот Extended Shaders: Volume mental ray Connection и фотонный шейдер для объемов Party Volume Photon (physics) для расчета эффектов непрямого освещения. Объемные эффекты с расчетом GI – задача почти неподъемная для современных компьютеров по причине огромного количества вычислений, поэтому создание и экспериментирование с такими эффектами довольно затруднительно. Тем не менее, если использовать объемные эффекты в небольших количествах и делать это осознанно, вполне возможно получить неплохой конечный результат.
Основные параметры шейдера Party Volume (physics), аналогичный вид имеет и фотонный объемный шейдер Party Volume Photon (physics). При создании объемных caustic можно использовать, например, такой прием. Создать объект (допустим, куб), внутреннее пространство которого и будет тем объемом, где просчитываются эффекты. Главное в данном случае – ограниченность объема. Для определения соответствующих свойств поверхности и свойств тени объекта назначаются обычно шейдеры прозрачности типа "transmat". Слоту "photons" - шейдер типа "transmat Photon", если нужно чтобы фотоны выходили за пределы объема. Наконец, если нужно, чтобы фотоны оставались внутри объема, назначается обычный шейдер типа DGS Material Photon. Смысл заключается в том, чтобы сделать поверхность прозрачной для камеры и прозрачной/непрозрачной для фотонов. Этому объему назначается только шейдер типа Party Volume (physics) и не назначается фотонный шейдер Party Volume Photon (physics), поскольку от него требуется только "включить" механизм ray marching (фирменная технология mental ray для расчета объемных эффектов, я подробно описывал ее в одной из предыдущих статей). Между источником света и объектом, генерирующим caustic, устанавливается специальным образом подготовленная небольшая по размеру плоскость (будем называть ее далее крышкой). Крышке назначаются transmat для поверхности и теней, transmat Photon для фотонной карты поверхности, объемный шейдер Party Volume (physics) и объемный фотонный шейдер Party Volume Photon (physics). Цель - сделать поверхность крышки абсолютно прозрачной для камеры и фотонов, а объемные шейдеры крышки - локализовать в пределах небольшого объема, где собственно и рассчитываются эффекты GI. Таким образом, она играет роль своеобразной "пустышки", помогающей организовать эффективный расчет объемных эффектов с использованием GI.
Пример объемного caustic, создаваемого прозрачным шаром внутри объема куба. Настройки Caustics: Samples 100; Photons (Caustic & GI): Volume: Samples 400, Radius 0.059, Max. Trace Depth: Reflections 4, Refractions 4, Sum 8; суперсэмплинг 4-16, контраст 0.012. Время расчета – 1 час 25 минут. Файл сцены. Использование стандартных процедурных объектов-примитивов (сфера, куб, пирамида и т. д.) в качестве контейнеров и назначение их поверхности шейдеров прозрачности – стандартный прием при создании локальных объемных эффектов, однако, объемный шейдер обоих типов может быть присоединен и к двумерному объекту – плоскости или полигону, например. Другой тип использования объемного шейдера – для глобальных эффектов, заполняющих все имеющееся трехмерное пространство, вроде тумана и других атмосферных явлений, тогда шейдер подключается к камере. В самом общем случае все, что необходимо для создания объемного эффекта – использовать объемный шейдер Party Volume (physics), если при этом еще необходимо рассчитывать и эффекты GI для объемов, то дополнительно используется Party Volume Photon (physics). Также, mental ray позволяет рассчитывать и любое сочетание поверхностных и объемных шейдеров с или без использования расчета эффектов GI.
Для настройки расчета объемных эффектов с GI используется группа параметров Photons (Caustic & GI) > Volume.
Настроечные параметры расчета GI для объемов Принцип расчета непрямого освещения для объемов тот же, что и для поверхностей, но с поправкой на третье измерение. Samples определяет количество сэмплирующих лучей, но в данном случае не полусферы, а сферы c радиусом, задаваемым в параметре Radius. Вполне понятно, что добиться чистого, без шума, и точного рендера очень трудно из-за огромного количества вычислений. Напомню, что теория расчета освещения объемных сред предполагает расчет прямого освещения вдоль луча, трассирующего направление от наблюдателя до точки поверхности (ray marching), расчет ослабления освещения вдоль луча (оператор ослабления) и расчет непрямого освещения. Поэтому, использование метода GI+FG в расчетах в принципе возможно, но практически требует такого огромного количества времени, что даже сами разработчики не рекомендуют использовать FG для объемных эффектов.
В этой сцене рассчитан объемный caustic от прозрачной сферы. Настройки: Caustic: Samples 100, Radius по умолчанию; Photons (Caustic & GI): Volume: Samples 400, Radius 0.15 м; источник света испускает 100 000 caustic –фотонов. Время расчета – 4 часа (1 час 27 минут), изображение содержит приличный шум. Попытка использовать более качественные настройки привела к сильному увеличению времени расчета. После того, как за 8 часов вычислений было готово только 6% изображения, я отказался от этой затеи. Вот еще один пример использования объемного шейдера для создания материала, предложен на одном из форумов, посвященных обсуждению разработки шейдеров для mental ray. В основе – стандартный материал 3ds max типа ray trace, которому добавлен объемный шейдер для определения цвета и характеристик рассеяния света, а также – объемный фотонный шейдер для расчета caustic в объеме материала.
Объемный caustic-материал. Время рендеринга – 42 минуты Объемный шейдер очень перспективен в плане возможных приложений, с его помощью можно создать множество интересных материалов и спецэффектов, например – кожу, а значит – эффекты subsurface scattering, но разработка таких шейдеров требует серьезной исследовательской работы.
Shader и Phenomena Все, что не может сделать mental ray, могут сделать за него шейдеры (shader). Именно так можно переформулировать одно из утверждений разработчиков из mental images. В самом деле, очень большая часть мощи и привлекательности mental ray заключена в его шейдерах.
Что же это такое? Шейдер представляет собой минипрограмму, написанную на языке программирования C или С++, которую программное ядро mental ray использует в нужном месте и в нужное время. Такие программы являются встраиваемыми (plug-in), то есть внешними или подключаемыми к основному ядру модулями, что подразумевает возможность написания шейдеров по мере возникновения необходимости. Шейдеры могут применяться для программирования буквально любого аспекта процесса рендеринга: свойств материалов, геометрии, камер, источников света, методов расчета и т.д. и т.п., вплоть до вполне реальной возможности написания собственного минирендера внутри mental ray. Прекрасный пример тому мы видели на примере шейдера DGS Material, реализующего distribution ray tracing на уровне одного конкретного материала. Таким же образом – при помощи написания шейдера, может быть реализована и дисперсия света, которая отсутствует в наборе стандартных средств mental ray. К сожалению, разработка шейдеров требует глубоких специализированных знаний в конкретной предметной области и является объектом и результатом профессионального программирования. На пользовательском уровне написать собственный шейдер невозможно – слишком сложная это штука. Поэтому, реальные возможности mental ray ограничены доступными для всех библиотеками готовых шейдеров (которые под Windows реализованы как файлы с расширением .DLL).
Но не все так фатально, поскольку есть еще и Phenomena. Шейдеры могут (и должны) обмениваться данными друг с другом. Это позволяет увязывать их в древовидные структуры, когда параметры одного шейдера определяются другим шейдером. Это и есть Phenomena. Такие структуры могут быть очень сложными и мощными по своим свойствам. Такие объекты как мех и волосы (fur) и их динамика вполне могут быть реализованы посредством механизма Phenomena – то есть сочетанием шейдеров материалов, теней и объемного шейдера из стандартной библиотеки mental ray. Разработка Phenomena не требует знаний языка программирования, а только знания свойств стандартных шейдеров. Поэтому, любая деятельность по созданию собственного Phenomena должна начинаться с изучения стандартных шейдеров, благо их описание достаточно полно представлено в справочных материалах 3ds max 6. Другое дело, что область эта мало исследована по причине прямо-таки спартанского (в смысле – лаконичного :)) подхода к информационной поддержке mental ray как со стороны mental images, так и со стороны Discreet. Но ситуация меняется в лучшую сторону – использование mental ray в Softimage и внедрение в Maya и 3ds max сильно расширило круг пользователей, что в свою очередь инициировало "народное творчество". В Сети все больше и больше появляется форумов, на которых обсуждаются многие аспекты практического использования mental ray, в том числе – разработка пользовательских материалов. В качестве примера можно привести совершенно замечательный форум на
cgtalk. Здесь можно не только почерпнуть полезную и важную информацию, например о том, как включить скрытые пока новые шейдеры в 3ds max, но и совершенно свободно получить очень интересную библиотеку готовых к использованию
материалов. Пример на последнем рисунке использует один из материалов этой библиотеки. Вот еще несколько примеров материалов оттуда же:
Так выглядит материал для создания травы при помощи displacement, все что нужно – bump-map текстура травы и прямоугольная низкополигонная плоскость.Материал, который сам автор назвал "хамелеоном", предназначен для использования в качестве материала кузовов автомобилей, обладает некоторыми свойствами subsurface scattering. Здорово то, что эти материалы можно не только использовать, но и изучать их устройство, что само по себе может стать неплохой отправной точкой в собственных исканиях.
Очень интересны также форумы Softimage – благодаря более длительному "стажу" работы с mental ray там уже накоплен довольно богатый опыт.
Заключение
Пора подвести черту. Mental ray – рендер, обладающий полным набором всех основных современных технологий расчета изображений, включая distribution ray tracing, полноценный photon mapping, работу с HDRI и фотометрическими источниками света, что позволяет рассчитывать широкий спектр эффектов взаимодействия освещения с поверхностями. Особенностью программы является ее исключительная надежность и стабильная работа, mental ray способен "перемолоть" все, что ему подсунуть и выдать предсказуемый результат "на гора" за приемлемое время. Это тем более важно, что расчет может быть довольно длительным. Не очень приятно через несколько часов вычислений получить сообщение об ошибке, mental ray защитит Вас от этого :). Наконец, то, чего еще нет в mental ray, может быть добавлено посредством шейдеров.
Недостатки есть.
Наиболее существенным является очень слабая информационная поддержка программы, что серьезно затрудняет ее широкое использование. Отсутствие достоверной информации приводит к появлению массы домыслов и заблуждений (которых вполне достаточно в Сети), что еще больше затрудняет изучение и овладение приемами работы с mental ray. Метод проб и ошибок – это очень неэффективный способ что-либо изучать.
В качестве частичного решения этой проблемы можно порекомендовать следующие форумы:
http://www.highend3d.com/boards,
http://www.cgtalk.com,
http://www.3dcenter.ru/forum/index.php?showforum=29,
http://eol3d.com/forum/index.php?s=5b049f80e4e19bdabbe24fb56992873b&act=idx,
а также сайт группы пользователей mental ray.
Хотелось бы, чтобы и библиотека шейдеров mental ray обладала более богатым набором возможностей. Многие дополнительные возможности, которых нет в основных свойствах mental ray могут быть реализованы шейдерами, например – та же дисперсия. Имеющаяся библиотека шейдеров для 3ds max 6 реализует только самый необходимый набор, да и то далеко не весь. В качестве альтернативной библиотеки могу указать на
Mental Ray 3.2 Shaders for all platforms, находящийся по
адресу в разделе
3ds max miscellaneous, или на
ftp-сервере mental images. Эта библиотека содержит как дополнительные шейдеры (геометрия, источники света, contour и другие), так и варианты уже имеющихся шейдеров, например, DGS Material содержит параметры "shiny_u" и "shiny_v", отсутствующие в варианте discreet.
Закончить хочется на оптимистической ноте.
Совсем недавно, mental images анонсировал mental ray 3.3. Среди новых возможностей заявлены существенное увеличение производительности, автоматическое использование при рендеринге аппаратных возможностей видеокарт (речь идет о профессиональных видеокартах NVIDIA QuadroFX 4000), поддержка NVIDIA Cg FX 1.2, новый алгоритм subsurface scattering физически корректно симулирующий оптические свойства взаимодействия света с объемом объектов, прямая поддержка HDRI в формате OpenEXR. Mental ray 3.3 уже поставляется в составе Maya 6.0 и SOFTIMAGE|XSI 4.0, каким образом он будет встроен в 3ds max – в следующей версии или посредством обновления, пока неизвестно. Но он будет, и тогда мы снова встретимся :).
А дальше мы посмотрим на vRay и finalrender.
Оставайтесь с нами :).