Зеркальные поверхности

Зеркальные поверхности - один из особых предметов гордости Autodesk и Kinetix - ведь именно их 3DS'ка смогла быть не только трехмерным моделлером, но еще и крутой рендеринговой системой и рендерить такие вещи, как bump, отражения, прозрачность и т.п. До этого, конечно были системы типа POVRay'я, но они в основном - рендереры, т.е. моделлить в них особенно нельзя.

Способ #1 - Reflect/Refract

Будущее сферическое зеркалоСоздадим сферу и сплющим ее так, чтобы она была похожа по форме на линзу. Теперь идем в Material Editor и создаем новый материал. Можете оставить все основные установки так, как они есть - вполне подойдет почти любой шейдинг, блеск и т.п. Наша цель - раздел Maps и пункт Reflect в нем. Нажмите на него и из появившегося списка "New" выберите Reflect/Refract Map. Можете не менять никаких установок, вернуться в основной материал и присвоить этот материал вашему объекту - сплющенной сфере. Все - рендерите.


Результат

Выводы: Быстрый и простой метод. Но это единственное его достоинство. Дальше идут одни недостатки. Во-первых - это очень плохое качество изображение. Даже на той пожатой из 640*480 до 200*150 картинке вы можете заметить ребристость границы - поверьте, она выглядит действительно отвратительно. Во-вторых, это качество изображения (количество пикселей) уменьшается с отхождением объекта от сферической формы. Для идеальной сферы этот способ очень привлекателен, но его ни в коем случае нельзя использовать на плоских объектах (см. способ ╧2), и не рекомендуется на несферических объектах.

Способ #2 - Flat Mirror

Будущее плоское зеркалоСразу оговорюсь, что этот способ - только для идеально ровных поверхностей. Если у вас хотя бы на одну милионную координата сдвинута - уже не сработает. К тому же способ не так прост, как ╧1. Итак, приступим. Создайте Box так, как показано на картинке.

Материал нам понадобится не простой, а многокомпонентный, а точнее двухкомпонентный. Создайте новый материал Multi/Sub-Object. Сделайте Set Number и укажите 2 компонента. Нам надо создать два простых материала: один - собственно зеркало, а другой - то, что будет как бы обрамлять его. Зеркало будет вторым материалом, а обрамление - первым - это важно.


Нанесение зеркального материала на Box

Тыкаем мышкой во второй материал, если нужно - регулируем основные параметры, но самое главное - создаем Flat Mirror Map в разделе Reflect Map (так же, как и Reflect/Refract). Теперь самое интересное. Берете свой Box, и добавляете модификатор Edit Mesh (можно также сконвертить Box в Editable Mesh). Теперь переключаете Sub-Object на Face и выделяете ту поверхность, что показана штриховкой на рисунке. Теперь ищите Material ID и вводите туда 2. Все - мы готовы к рендерингу.


Результат

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


Способ #3 - Raytrace

Будущее цилиндрическое зеркалоRaytrace - это встроенный рейтрейсер 3DSMAX, доступ начиная с версии 2.0. Для, кто впервые встречается с понятием рейтресинга - поясняю. Рейтрейсинг или трассировка лучей - это способ построения изображение, при котором каждая точка поверхности, выбираемая с каким-либо шагом дискретизации испускает "луч", который просчитывается по обычным физическим законам (преломления, отражения) и таким образом получается идеальная картинка. Минусы такого подхода тоже очевидны - очень низкая скорость по сравнению со всем остальным.


Результат рейтрейсинга

Хотя использование Raytrace я и поставил третьим по сложности способом, использовать его в самом примитивном виде крайне просто. Продемонстрируем его на не самом традиционном цилиндрическом зеркале. Сделайте цилиндр и расположите его примерно так, как показано на картинке.

Создайте новый материал и в Reflection Map задаем новый map - Raytrace (не буду углубляться в этот процесс для новичков - он аналогичен заданию Reflect/Refract из #1). Присвойте материал объекту и ренедерите.

Выводы: Идеальное качество изображений. Очень низкая скорость просчета - самая низкая из всех методов. Проблема в том, что встроенный рейтресер MAX'а очень и очень медленный по сравнению со своими аналогами. Так что в ряде случаев вместо него рекомендуется использовать способ 4.

Способ #4 - Внешний рейтрейсер

Хитрый зеркальный узелВ качестве внешнего рейтрейсера советую всем попробовать RayGun - это один из лучших рейтрейсеров, который я видел. Во-первых, он очень быстрый по сравнению со всеми аналогами, а во-вторых, дает хорошее управление над соотношением времени рендеринга и качества получаемой картинки.

Итак, положим, вы достали RayGun и установили его. Теперь загрузите исходную сцену и создайте что-нибудь экзотическое, например, Torus Knot, как сделал я. Создайте новый материал, но не Standard, а RayGunMaterial. У этого материала оставьте все установки по-умолчанию, лишь поднимите Reflection до уровня 200-220.


RayGun в действии

Очень важная часть - не забыть сменить рендерер. Дело в том, что RayGun использует для визуализации свой собственный рендерер, который надо активизировать. Делается это так: File/Preferences, Rendering, Assign Production Renderer, RayGun. Теперь остается лишь отрендерить.

Выводы: Качество - варьируемо, и возможно и низкое для черновых пререндерингов и идеальное (pedantic antialiasing и т.п.) для законченных работ. Фактически, самый лучший способ делать зеркальные поверхности, но вам необходимо иметь RayGun (для справки - он стоит $300).


Способ #5 - Копирование

Плоскость разбивкиВ случае, если вам нужно точно отзеркалить одно полупространство в другое, можно воспользоваться этим методом. Это довольно странный способ, но он позволяет добиваться результатов, которых не получишь никаким другим образом.

Отзеркалим с помощью команды Mirror все необходимые объекты сцены (включая источники света). В идеале надо бы еще и поставить ограничение источников света, чтобы призеркальные зоны не освещались сразу двумя источниками, но сцена у нас простая, поэтому обойдемся без этого.


Теперь самое интересное - нам надо создать бесконечную плоскость, которая будет разбивать пространство на два полупространства и служить границей между двумя мирами. Так как ничего бесконечного нет, создайте просто очень большой Box - я взял 2000 на 2000 на 5. (на рисунке он оттекстурен клеточками, чтобы можно было понять, где этот Box).


Два пространства

Сделайте поверхность прозрачной до 20-30% (можно наложить Opacity Map - например Noise). Можно поставить Filter Color - тогда зеркало будет тонированым. И т.п...

Выводы: При всех недостатках метода (в два раза большее количество памяти на сцену, ограниченность типа зеркала - только большие плоскости), есть множество преимуществ. Во-первых, это быстрота. Максимум скорости - так как геометрия не просчитывается - она существует. Во-вторых, это множество всевозможных эффектов - например, можно сделать анимированного персонажа, проходящего через зеркало и оказывающегося как бы в потустороннем мире или отражение персонажа, подмигивающее ему.

Hosted by uCoz