Игра со стеклом

Игра со стеклом

У всякого, кто хоть раз прикоснулся к удивительному миру 3D, возникает непреодолимое желание воплотить в реальность (пусть и виртуальную!) свои фантазии. Конечно, сразу ничего не получается. На этом этапе, в основном, отсеиваются люди, у которых не хватает терпения часами подбирать нужную текстуру или постоянно "крутить" какой-нибудь параметр. С одной стороны, такой "естественный отбор" закономерен, но с другой — в число отсеявшихся может попасть человек, обладающий неразвитым талантом 3D-дизайнера, который без посторонней помощи так и не нашел ответа на интересующий его вопрос. Чтобы такая досадная ошибка не произошла с вами, мы попытаемся создать сцену с использованием профессионального пакета для работы с 3D-графикой — 3D StudioMax, — которая, надеемся, подтолкнет вас к дальнейшему изучению трехмерной графики.

Прежде всего, хотелось бы отметить, что программа 3D StudioMax (к слову сказать, на сегодняшний день имеет смысл использовать версию 5.1) обретает свою силу благодаря огромному числу подключаемых модулей, плагинов, которые значительно расширяют стандартные возможности программы. С их помощью создаются различные эффекты, такие, как облака, жидкость, огонь и прочее. Результат работы можно сохранить в виде какой-нибудь анимации, например, в виде файла с расширением *.avi. Работа в любом 3D-редакторе напоминает самую настоящую видеосъемку. Вы создаете трехмерные модели, после чего расставляете виртуальные осветительные источники и указываете расположение в сцене, откуда будет производиться съемка, т.е. где будут размещаться ваши виртуальные камеры. Процесс виртуальной съемки называется рендерингом (от английского render — визуализация).

В ходе создания трехмерной сцены самым важным этапом является процесс визуализации.
Точно так же, как на двух пленках разных фирм могут получаться яркий и блеклый снимки, результат вашей работы может быть красивый или посредственный в зависимости от того, какой алгоритм просчета изображения вы выбрали. Именно по этой причине в последнее время различные фирмы предлагают использовать их плагины для визуализации объектов, которые называются внешними рендерами.
На рынке 3D-софта очень четко определилась тройка лидеров в этой области: Cebas Computer (http://www.cebas.com) и его продукт под названием Final Render, компания Splutterfish и ее внешний рендер Brazil (http://www.splutterfish.com) и, наконец, Chaos Group (http://www.chaosgroup.com) с еще одним неплохим рендером Vray. Каждый из предлагаемых продуктов по-своему хорош, у каждого есть какие-то недостатки. Последний упомянутый нами, Vray, отличает простота настроек по сравнению с конкурентами, поэтому начинающим 3D'шникам лучше всего использовать именно его.
После его установки запускаем настройки рендеринга (клавиша F10 или Главное меню> Rendering> Render) 3D StudioMax и в свитке Current Renderers нажимаем кнопку Assign, после чего появится небольшое окошко, в котором необходимо выбрать строчку Vray. Теперь просчет сцены будет производиться согласно алгоритму от ChaosGroup.

Недостатком многих рендеров можно считать их плохую совместимость со стандартными эффектами 3D StudioMax, а также с другими дополнительными модулями. В этом смысле Vray превосходит многих своих конкурентов.
Знаком ли вам термин "каустика"? Уверены, что само явление вы наблюдали неоднократно, однако не все знают его название. Этим термином называются блики света на поверхностях, полученные вследствие прохождения света через прозрачную среду. Например, солнечный зайчик от стакана с водой. Стандартный алгоритм просчета изображения в "Максе" имеет два серьезных упущения. Во-первых, такой метод вычислений не учитывает каустику, а во-вторых, визуализация теней происходит некорректно. Вторая проблема решается при помощи технологии Global Illumination, о которой мы поговорим чуть позже.
Рассмотрим конкретный пример — работу Vray с рефрактивной каустикой. Несмотря на то, что настройки рендера не очень сложные, есть отдельные моменты, о которых хотелось бы рассказать.
Создайте в окне проекции 3D StudioMax несколько объектов, но не менее двух. Первый объект, скажем, плоскость, будет получателем каустики, второй — создателем. Делаем направленный источник света, например, Target Spot. Отмечаем в его настройках отображение теней (VrayShadow), а параметр Яркость (Multiplier) выставляем равным 150000. Выбираем один из параметров затухания (Decay) — пусть это будет Inverse Square. Теперь разместим источник света под определенным углом к объекту, так, чтобы за ним могла наблюдаться отбрасываемая тень. Обратите внимание, что источник света должен располагаться на таком расстоянии от модели, чтобы сцена в окне проекции не была чрезмерно залита светом.
Теперь нужно создать материалы. Во-первых, стекло. В стандартном типе материала в качестве карты преломления Refraction выбирается текстурная карта VrayMap. В ее свойствах устанавливается опция Refract. Чтобы будущее стекло имело определенный цвет, требуемый оттенок можно установить значением Filter Color в группе параметров RefractionParams. Материал для плоскости создадим при помощи собственного материала рендера VrayMtl. Цвет и прочие параметры плоскости, на которой будет отображаться каустика, значения не имеют и зависят только от вашей фантазии.

Теперь перейдем к настройкам самого рендера. После выбора Vray в списке Current Renderers возникает большое количество свитков с настройками. Отображение каустики включается в свитке Caustics при помощи галочки On.
Несколько слов о том, как просчитывается каустика. Механизм просчета каустики (равно как и принцип вычислений рассеиваемого света Global Illumination) во всех подключаемых рендерах один и тот же. Для получения освещенных участков каустики программа осуществляет трассировку фотонов. Это означает, что каждый источник света в сцене как бы начинает испускать частицы. Программа прослеживает ход этих частиц, анализирует участки поверхностей, на которые попадают фотоны, и соответственно рисует каустику (рис.1).
Качество каустики зависит от многих параметров: от количества фотонов, расстояния до источника света, на котором еще происходит анализ фотонов, глубины трассировки и т.д. В нашем случае мы пока не будем трогать настройки, предлагаемые рендером по умолчанию, поскольку большинство настроек подходит для любой сцены.
Для того, чтобы источник света, который мы сделали, использовался для трассировки фотонов, его необходимо указать в свитке System. Раскрыв этот свиток с настройками, нажимаем на кнопку Lights Settings, в появившемся окне Scene Lights выделяем Spot Light и включаем опцию Generate Caustics.
После этого на отрендеренном изображении мы должны получить на плоскости световой блик каустики. Ее следует ожидать предположительно в области тени объекта. Если каустики на изображении не видно (что, в принципе, неудивительно, так как у каждого, кто захочет проделать этот эксперимент с каустикой, источник света будет расположен по-своему), следует попробовать изменить некоторые параметры. Так, в частности, можно увеличить максимальное количество фотонов и расстояние, на котором будет искаться каустика (настройки в свитке Caustics, Search Dist. и Max photons). Если же это не помогает, попробуйте увеличить яркость эффекта, повысив значение Multiplier.

Vray имеет довольно неплохой сглаживающий фильтр, применив который можно получить высококачественное изображение. Свиток Image sampler (Anti-Aliasing) содержит несколько алгоритмов сглаживания. Чтобы не перегружать читателей терминологией, скажем лишь, что самый оптимальный вариант сглаживающего алгоритма — Adaptive Subdivision. Этот способ позволяет автоматически выбирать характер обработки изображения. Так, например, если в некоторой области фильтр сглаживания не требуется вовсе, программа считает этот участок с минимальным качеством. Такой подход позволяет значительно уменьшить время расчета по сравнению с фиксированным значением качества фильтра Fixed rate и двухпроходным фильтром Simple Two-level.
Рефлективная каустика (каустика, созданная вследствие отражения света от поверхностей) создается в сцене 3D StudioMax аналогичным образом. Однако, следует иметь в виду, что параметры для рефлективной и рефрактивной каустики очень часто не совпадают. Если в сцене присутствуют тела, обладающие свойствами отражения и преломления, то для каждого из типов каустики применяется свой источник света. Это дает возможность управлять раздельно яркостью и формой каждого из бликов.
Для создания бликов отражения необходимо применить в качестве карты отражения (Reflection) ту же текстурную карту, что и в первом случае — VrayMap (рис.2). Единственное отличие состоит в том, что в свойствах VrayMap указывается не Refract, а Reflect. Для получения лучшего результата используйте при создании материала шейдер Metal.

Кроме качественного отображения текстур, Vray позволяет просчитывать Global Illumination (GI) — метод просчета освещенности с учетом рассеиваемости света.
В настройках рендера этот термин фигурирует как Indirect Illumination. Vray использует два метода для вычисления GI: прямое вычисление (Direct Computation) и вычисление GI на основе карты свечения (Irradiance Map). Чтобы показать на примере, как рендер работает в режиме Indirect Illumination, используем источник света, который добавляет Vray.
Создайте обычный примитив Box и примените к нему стандартный модификатор Normal. Этот модификатор предназначен для того, чтобы обратить нормали параллелепипеда. Иными словами, примитив "вывернется наизнанку". Обратим примитив в Editable Mesh и, редактируя ее, удалим одну из стенок параллелепипеда, чтобы видеть, что находится внутри. Получится предмет, напоминающий по форме коробку.
Теперь разместим камеру так, чтобы она фиксировала все, что находится внутри получившейся "коробки". Создадим источник света VrayLight, придадим ему прямоугольную форму (с любыми геометрическими размерами) и разместим его на условном "потолке" нашей коробки. После этого вовнутрь коробки поставим несколько примитивов: чайник, цилиндр, тор и т.д. (рис.3).
Переходим в настройки рендера и галочкой On включаем функцию Indirect Illumination в свитке с одноименным названием. Для более наглядной демонстрации эффекта создадим материал, в котором в качестве карты отражения (Reflection) укажем текстурную карту VrayMap. Этот материал назначим примитивам, находящимся внутри коробки. Материал для коробки создадим при помощи собственного материала рендера VrayMtl.
По умолчанию рендеринг использует алгоритм, основанный на карте свечения Irradiance Map. Этот метод работает быстрее, чем Direct Computation, однако, и результат менее реалистичен. Попробуйте отрендерить получившуюся картинку. Даже используя настройки по умолчанию, Vray создаст достаточно правдоподобную картинку.
Однако, некоторые читатели наверняка захотят поэкспериментировать с настройками, чтобы добиться еще лучшего результата. Для них мы вкратце перечислим, за что отвечают основные параметры рендера.

Группа настроек First Diffuse Bounce (свиток Indirect Illumination) определяет параметры первичного рассеянного освещения. В этой группе выбирается один из типов просчета, о которых мы говорили выше. Здесь также расположен параметр SubDivs. Он активируется, если выбран метод просчета Direct Computation. Значение SubDivs определяет число subdivision-поверхностей и влияет на качество просчета первичного света.
Группа настроек Secondary Bounces, как нетрудно догадаться, определяет параметры вторичного рассеянного освещения. Если отмечена строчка None, просчет вторичного освещения происходить не будет. Если же вы хотите, чтобы Vray делал трассировку вторичных лучей, отметьте опции Direct Computation или Global Photon Map. Параметр Depth определяет число попаданий вторичного освещения.
Параметры Multiplier отвечают за яркость первичного и вторичного рассеивания (First Diffuse Bounce и Secondary Bounces).
Возможно, кому-то описанный пример использования Vray покажется чересчур сложным. Таким 3D-новичкам мы можем только посоветовать не сдаваться, и тогда все получится. И если это произойдет не сегодня, то через несколько дней обязательно!

Сергей Бондаренко, blackmore_s_night@yahoo.com



Компьютерная газета. Статья была опубликована в номере 15 за 2003 год в рубрике soft :: графика

©1997-2024 Компьютерная газета