Глобальное освещение в компьютерной графике

      Комментарии к записи Глобальное освещение в компьютерной графике отключены

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

Давайте посмотрим, как выглядит вторичное освещение в компьютерной графике на конкретных примерах.

Для такого примера была создана простейшая сцена в 3ds Max.

На скриншоте выше видно, что это прямоугольное помещение с оконным проемом, в которое установлен источник света. Внутри помещения перед окном поставлен куб ChamferBox с небольшим Fillet радиусом, и обыкновенная Sphere за ним. Все материалы в сцене полностью матовые, без каких либо отражений, даже размытых. В материалах помещения применены только текстурные карты, материалы куба и сферы – стандартные материалы с белым цветом в слоте Diffuse.

Перед Вами визуализация этой сцены. Обратите внимание, что она освещена только лишь прямыми лучами источника света без использования GI. Для наглядности, один из лучей условно показан салатовой стрелкой.

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

Как было видно из скриншота вьюпорта 3ds Max, за кубом находится полностью белая сфера, тем не менее, ее совершенно не видно.

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

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

Чтобы понять эффект непрямого освещения, посмотрите на условный луч Direct Light от источника прямого света. Как было сказано ранее, вторичное освещение – это явление отражения световых лучей от объектов. Именно это явление и имитирует глобальное освещение в компьютерной графике. Луч прямого света исходит из его источника и попадает на стену, противоположную оконному проему. Затем, эстафету принимает вторичное освещение и лучи не исчезают, а отражаются, отскакивая от стены, попадая на сферу. Это условно показано красной стрелкой. Таким образом, происходит главный отскок прямого света от объекта сцены, который попадает на сферу, разумеется, освещая ее. После этого луч снова отражается, уже от сферы, попадает на нижнюю часть стены за ней и, опять же, освещает и ее. Это условно показано голубой стрелкой.

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

Первичный луч от источника прямого света, показанный салатовым цветом, бьется о поверхность, после чего формируются вторичные лучи, показанные красным. Эти вторичные лучи исходят от поверхности диффузно, т.е. разлетаясь множеством лучей от нее во все стороны. В свою очередь, эти уже отраженные лучи, ударяясь о другие встречающиеся им поверхности, таким же образом снова формируют множество лучей каждый, и так дальше и дальше. Луч вторичного освещения может отскакивать большое количество раз, в зависимости от количества вторичных отскоков, определяемогопараметрами рендерера. Опираясь на изображение выше, не составляет труда представить, что они образуют полусферу, похожую на одуванчик. Векторы лучей расходятся на все 180 градусов в разные стороны, то есть по полусфере от точки отражения. Именно так ведут себя лучи в GI движке и именно из-за формы отражения их еще называют Hemispheric Rays, т.е. полусферическими лучами.

Следует отметить, что отскоки лучей вторичного освещения в V-Ray разделяют на основные (первое отражение), названные Primary bounces и дополнительные (все последующие), названные Secondary bounces. Первый по счету отскок луча от объекта сцены неспроста назван Primary bounce, т.е. главным отскоком. Все дело в том, что рендер-движок, имитирующий поведение реального света, устанавливает затухание лучам по мере их переотражения. И, как это случается в реальном мире, первый отскок несет большую долю отраженной световой энергии. Причем энергия этого первого настолько значительная, что в разы превышает световую энергию всех последующих отражений вместе взятых. Т.е. он один влияет на освещенность сцены больше, чем все последующие в сумме. И наоборот, в виду своей меньшей значимости, все отскоки, следующие за первым главным, названы Secondary bounces, т.е. дополнительными.

Практическая настройка GI

Итак, самое время разобраться, как практически управлять глобальным освещением в V-Ray.

Откройте окно Render Scene (клавиша F10) и перейдите на вкладку Indirect illumination.

В данной вкладке главным управляющим свитком является V-Ray:: Indirect Illumination (GI). В нем осуществляется включение глобального освещения, выбор алгоритмов просчета главных и дополнительных отскоков и общие настройки GI.

Прежде всего, для активации глобального освещения в сцене следует установить галочку в чекбокс On. После этого Вам станут доступны параметры глобального освещения V-Ray движка.

В зоне GIcaustics можно включить или отключить так называемые рефлективные и рефрактивные каустики для GI лучей.

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

Именно эти эффекты имитирует фотонная карта кустик, находящаяся в свитке V-Ray::Caustics. Несмотря на то, что этот свиток является самым последним во вкладке Indirect illumination и логично о нем писать в самую последнюю очередь, хотелось бы вкратце написать о нем именно сейчас. Расчет каустик в V-Ray сопровождается появлением большого количества артефактов, чрезмерным потреблением оперативной памяти и сложной предварительной настройкой. Всё это – при минимально заметном, а то и отсутствующем эффекте в подавляющем большинстве сцен. В универсальных стартовых настройках V-Ray просчет каустик включать не следует.

Также, следует понимать, что расчет каустик и GI каустик это разные вещи. Каустики, созданные вышеупомянутой фотонной картой, рассчитываются лишь для первичных лучей от источника света. В то время как GI каустики просчитываются отдельно и настройки зоны GIcaustics свитка V-Ray:: Indirect Illumination (GI) отвечают как раз за эти каустики, произошедшие от вторичного освещения. Мало того, GI каустики названы каустиками лишь по некой аналогии с фотонными, на самом деле они таковыми не являются.

Опция Reflective позволяет включать просчет рефлективных каустик для GI отскоков, что позволяет GI лучам учитывать отражательные свойства материалов и сильнее отражаться от отражающих объектов, таких как хромированные детали, зеркала и прочее.

Учитывая меньшую энергию лучей вторичных отскоков, по сравнению с лучами от источников прямого света, влияние рефлективных каустик на общую освещенность сцены будет незначительное. Кроме того, в виду необходимости просчета Reflective caustics рендерером, их включение увеличит время просчета вторичного освещения, а также в виду сложности сэмплирования этого эффекта, возможно появление нежелательного шума в GI. Учитывая данные недостатки, эту опцию следует номинально оставлять выключенной в универсальных стартовых настройках V-Ray.

Опция Refractive позволяет включать просчет рефрактивных каустик для GI отскоков. Несмотря на схожее название с каустиками от прямых лучей источников света, где имитируются именно каустические световые эффекты, Refractive caustics просто позволяет проходить вторичному освещению через прозрачные поверхности. Например, это применимо в интерьерной сцене, которая освещается вторичным освещением от VRaySky / skylight /Skylight portal, находящимся за окном, а в оконных проемах стоят модели окон со стеклом. Отсутствие просчета Refractive caustics в этой сцене сделает весь рендер черным, просто потому что GI лучи не попадут внутрь интерьера, так как не смогут пройти даже через прозрачное оконное стекло.

Для большинства сцен такое поведение GI неприемлемо и поэтому опцию Refractive в универсальных настройках V-Ray следует активировать, установив чекбокс Refractive.

Следующая зона свитка V-Ray:: Indirect Illumination (GI) это – Post-processing, содержащая три параметра.

Saturation – очень важный параметр GI, который отвечает за цветовую насыщенность отраженных лучей или, как показывает практика, попросту за величину так называемого колор блидинг эффекта.

Данное изображение это визуализация использованной ранее сцены, с тем же источником света, с теми же материалами объектов, за одним лишь исключением материала куба, он – красный.

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

Его природа довольно проста. Красный объект – это объект, поглощающий лучи всех цветов и отражающий лишь лучи красного цвета. Именно это эффект отчетливо имитируется на этом изображении. Прямые лучи белого цвета, который, как известно, несет в себе все цвета видимого спектра, падают из окна на поверхность куба, после чего отражаются. Но отражаются они уже не белыми, какими они были изначально, а красными, т.к. красный материал куба поглотил все цвета кроме красного. Таким образом, красный куб освещает собой близлежащие объекты и окрашивает их в красный цвет.

Избавиться от этого, зачастую, чрезмерно выделяющегося, эффекта помогает понижение параметра Saturation. Меньшее значение saturation делает цветное диффузное отражение бледнее, в то время как большее значение делает его насыщеннее.

Вот та же сцена с тем же красным кубом, но со значением Saturation, равным нулю:

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

Если возникает необходимость исправить эффект колор блидинга от какого-либо конкретного объекта либо материала, то для локального контроля этого аспекта следует использовать VRayOverrideMtl, о чем красноречиво свидетельствует очень удачный пример в V-Ray Help.

Contrast и Contrastbase – параметры, которые буквально управляют контрастом GI, используемым рендерером при формировании финального изображения, аналогично как Saturation по сути всего лишь управляет цветовой насыщенностью GI. Параметр Contrast работает совместно с параметром Contrast base. Технически Contrast base – это одна из переменных алгоритма, вычисляющего контраст рендер-элемента GI, смещая диапазон его значений и тем самым влияя на его яркость. При базе Contrast base равной нулю, увеличение значения параметра Contrast осветляет GI; при базе Contrast base большей ноля, увеличивается общая яркость, и увеличение значения параметра Contrast приводит к затемнению GI.

На практике эти параметры проще рассматривать как аналог инструмента Brightness/Contrast растрового редактора Photoshop. В подавляющем большинстве ситуаций совершенно нет никакой необходимости как-либо изменять контрастность GI. Поэтому в универсальных стартовых настройках V-Ray их значения не стоит изменять, оставив 1 для Contrast и 0,5 для Contrast base, как это выставлено по умолчанию.

Следующая зона свитка V-Ray:: Indirect Illumination (GI) это зона выбора движков просчета основных и дополнительных отскоков световых лучей, называемых Primary иSecondarybounces.

У многих 3d визуализаторов количество настроек GI вызывает панику. На самом деле в этих настройках, если все и не сильно просто, то, как минимум, все достаточно логично. Есть основные, есть дополнительные отскоки луча. Просчитываться одни и другие с помощью специальных алгоритмов – GI engine. Всего в V-Ray существует четыре алгоритма просчета отскоков GI. Их выбор можно сравнить с выбором алгоритмов антиалиасинга. Есть грубый алгоритм просчета GI отскоков Brute force и три несколько более гибких алгоритма – Global photon map, Irradiance map и Light cache.

В зонах Primary и Secondary bounces находятся всего два параметра, числовой параметр Multiplier и выпадающий список GI engine.

Multiplier – это величина применения рендер элемента данного светового отскока GI при формировании финального изображения, проще говоря его яркость.

По умолчанию, для Primary и Secondary bounces значения Multiplier установлены равные единице. Однако это не самые удачные значения, потому что в виду излишней яркости лучей GI по сравнению с яркостью лучей от источников прямого света, получаются сильно пересветленные и неконтрастные изображения. Часто это сказывается еще и на тенях, которые становятся более светлыми, что на визуализации сразу вызывает эффект летающих объектов, под которыми нет привычной тени.

Внимательно посмотрите на это изображение. Оно достаточно светлое, но при этом слабо видны все делатели сцены, они кажутся смазанными и нечеткими. Это происходит, потому что вторичное освещение очень высветлят тени и тем самым сильно снижает детализацию сцены, делая ее плоской. В сценах, содержащих объекты насыщенных цветов, величина Color bleeding также увеличится, вследствие большего влияния лучей GI на сцену. Кроме того, не сразу ясно, что же является источником света в этой сцене, так как совершенно нет контраста между ярким светом из окна и столь же ярким вторичным освещением. Создается иллюзия, что где-то внутри помещения присутствует дополнительный источник света. Совершено иная картина наблюдается на изображении с более удачными значениями интенсивности вторичного освещения.

На этом изображении выбран верный баланс интенсивности между первичным освещением от источника света и вторичным освещением в сцене. Посмотрите, как сразу же видно происхождение освещения, не возникает никаких сомнений в том, что его источником является свет из окна, а не импровизированные источники внутри помещения. Также гораздо четче видны детали, сцена становиться сочной и проработанной. Такой подход значительно поднимает контраст изображения, делая его более фотореалистичным. Если изображение Вам покажется недостаточно ярким, то это элементарно решается поднятием значения общего Multiplier в настройках колор мэппинга V-Ray, расположенных в свитке V-Ray: color mapping вкладки V-Ray. Более подробно о глобальной регулировке яркости финального рендера читайте в уроке Замена VRayPhysicalCamera стандартной.

Если требуется лишь незначительная доводка общей яркости визуализации, то гораздо рациональнее осуществлять ее в графическом 2d редакторе. Кроме того, как уже было сказано в первом уроке серии оптимальных настроек V-Ray, адаптивное поведение рендер-движка V-Ray в значительной степени зависит от яркости просчитываемого изображения, откуда следует, что более светлый GI неизбежно приведет к большему времени просчета финального изображения. По этим причинам следует выбирать верное значение яркости GI. Рациональными и наиболее удачными, подходящими для подавляющего большинства сцен и случаев являются значения 0.85 и 0.7 для Primary и Secondary bounces соответственно. Именно их и следует устанавливать в стартовых универсальных настройках V-Ray.

GI engine – выпадающий список, в котором можно выбрать тот или иной алгоритм просчета отскоков лучей. Для того, чтобы понять какие именно алгоритмы следует использовать для Primary bounces и какие для Secondary bounces, необходимо познакомиться поближе с каждым из них.

В этом уроке мы познакомилась поближе с некоторыми важными аспектами настройки V-Ray рендерера, в частности с инструментарием свитка V-Ray:: Indirect Illumination (GI), а также с теоретическими основами вторичного освещения и его сущностью в реальном мире.

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

В следующем уроке мы познакомимся с конкретной реализацией, принципом работы и подробными настройками двух алгоритмов просчета GI, Brute Force и Irradiance Map.

Всем легких настроек и красивых 3d визуализаций!

Статьи к прочтению:

[Проверка реальности] Глобальное освещение в реальном времени


Похожие статьи:

  • Системы компьютерной графики

    Принципы формирования изображений на экране Существует два способа реализации построения изображений на экране дисплея – векторный (функциональный)…

  • Методы визуализации в компьютерной графики

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