Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Mental ray 3.3 для 3ds max.docx
Скачиваний:
5
Добавлен:
01.09.2019
Размер:
9.59 Mб
Скачать

Редактирование вершин Cage

После завершения редактирования Cage можно считать подготовительную работу законченной. Возвращаемся в панель RTT и нажимаем Render. После завершения рендеринга в слоте Bump материала исходного объекта появится запеченная карта.

Карта нормалей

Растровая карта нормалей может быть открыта для просмотра и редактирования в Adobe Photoshop. Редактирование легче всего выполнять по каналам. Красный и зеленый цвет кодируют направление нормалей, синий - глубину, или величину смещения точек поверхности вдоль направления нормалей. Запекание Normal map не всегда выполняется идеально. Иногда удобнее и быстрее "вычистить" незначительные артефакты в растровом редакторе, чем выполнять повторную тонкую настройку Cage и рендеринг.

Устанавливаем для Bump Amount =100, скрываем высокополигонный объект и выполняем рендеринг.

Модель с Normal bump map

Сгенерированную Normal bump map можно дополнительно использовать и в слоте Displacement, это позволяет добавить деталей на краях объекта, хотя и замедляет рендер.

Высокополигонный источник и низкополигонный объект - цель

Таким образом, рендер в текстуры в 3ds max с использованием mental ray является гибким многофункциональным и вполне рабочим инструментом, знание и умение работать с которым позволяет существенно расширить возможности рендеринга и создания новых материалов. А появление Normal bump map превращает запекание текстур в полноценный инструмент моделирования, владеть которым должен каждый, кто работает с 3d. И хотя RTT не лишен недостатков, они не принципиальны. Будем надеяться, что в последующих релизах 3ds max эти недостатки полностью исчезнут.

Часть 6.

Hair, fur и mental ray.

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

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

В данной статье будут рассмотрены возможности описания (представления) сложных многосоставных динамических систем, реализованные в mental ray, и их практическое применение для моделирования волос, меха и травы в 3ds max 7.5.

Объекты, примитивы и API-функции mental ray

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

Способ описания многосоставных объектов, используемый в mental ray, учитывает эти две основные особенности и с успехом их преодолевает. В mental ray версии 3.1 введен hair primitive - новый фундаментальный тип элементарного объекта (примитив), позволяющий эффективно и компактно описывать произвольные сложные многосоставные объекты.

Представление многосоставного объекта с помощью hair - primitive основывается на использовании Безье-кривых. Каждый элемент составного объекта представляется Безье-кривой степени 1 (линия), 2 (квадратичная кривая) или 3 (кубическая кривая). Каждая кривая аппроксимируется набором прямолинейных сегментов и их вершин, количество которых не может быть меньше, чем степень кривой, умноженная на число сегментов + 1. Эта особенность является следствием математических свойств Безье-кривой. На практике это просто означает, что для построения прямой линии требуется минимум две точки, для простой кривой -три точки, две для определения концов и одна для управления кривизной. Для кубической кривой, состоящей из одного сегмента, требуется не менее четырех точек. Каждый элемент и его вершины описываются набором скаляров: координаты вершины, координаты вектора нормали вершины, текстурные координаты вершины, координаты векторов смещения вершины (для motion blur), радиус элемента для данной вершины и другими.

Произвольный многосоставной объект при помощи hair primitive может быть представлен как список заданного количества кривых, состоящих из вершин и связанных с ними скаляров, описывающих свойства этих вершин. Чтобы лучше понять все преимущества такого описания и его отличия от обычного геометрического представления, рассмотрим простой пример.

Если моделировать волосы при помощи геометрических объектов, например - четырехгранных цилиндров, то каждый элемент - волос должен быть представлен как минимум одним цилиндром. Чтобы волос мог иметь кривизну, количество сегментов волоса должно быть не меньше двух и для его представления потребуется два цилиндрических сегмента. Значит, для геометрического описания одного, очень простого по форме, волоска потребуется не меньше 20 треугольников и 13 вершин (восемь треугольников на сегмент + четыре треугольника для верхней "крышки" цилиндра). Если использовать hair-primitive, то для описания потребуется всего 3 вершины, один радиус и ни одного треугольника. Учитывая, что типичные системы волос на практике могут содержать от нескольких тысяч до нескольких миллионов элементов-волос и гораздо большее количество сегментов на один элемент, становится понятно, насколько прогрессивно описание при помощи hair-primitive.

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

Hair-primitive является фундаментальным объектом mental ray. Для описания многосоставных систем он также важен, как полигонное представление для описания поверхностей. Поэтому, я позволю себе здесь привести точную спецификацию и подробное описание параметров hair-primitive.

object " name "

[ visible [ on|off] ]

[ shadow [ on|off] ]

[ shadowmap [ on|off] ] *3.3

[ trace [ on|off] ]

[ reflection [ mode] ] *3.4

[ refraction [ mode] ] *3.4

[ transparency [ mode] ] *3.4

[ select [ on|off] ]

[ tagged [ on|off] ]

[ caustic [ on|off] ]

[ globillum [ on|off] ]

[ caustic [ mode] ]

[ globillum [ mode] ]

[ finalgather [ mode] ] *3.4

[ box [min_x~~min_y~~min_z~~max_x~~max_y~~max_z] ]

[ motion box [min_x~~min_y~~min_z~~max_x~~max_y~~max_z] ]

[ max displace value ]

[ samples min~~max ] *3.1

[ data null|" data_name " ]

[ tag label_numberint ]

hair

[ material " material_name" ]

radius radius ]

[ approximate segments ]

[ degree degree ]

[ max size size ]

[ max depth depth ]

[ hair n ]

[ hair m hm ]

[ hair t ht ]

[ hair u hu ]

[ hair radius ]

[ vertex n ]

[ vertex m vm ]

[ vertex t vt ]

[ vertex u vu ]

[ vertex radius ]

scalar [ nscalars ]

scalar list

hair [ nhairs ]

hair offset list

end hair

end object

Все параметры между object " name " … hair описывают общие свойства многосоставного объекта и позволяют индивидуально для него определять будет ли он виден в камеру, имеет ли он тень и каков тип тени, его прозрачность, участие в расчетах глобального освещения и motion blur. Раздел общих свойств hair primitive идентичен свойствам обычных объектов и в этом смысле для mental ray он ничем не отличается от геометрического объекта.

Вся специфика заключена в параметрах, заключенных между hair … end hair. Рассмотрим их подробнее.

  • [ material ] - параметр определяет материал, который используется при расчете цвета каждого элемента (например, отдельного волоска) объекта. Материал может определять один цвет для всего элемента целиком, или многосоставной цвет - отдельно для каждого из сегментов элемента. Последнее возможно благодаря тому, что вершины элемента могут иметь текстурные координаты.

  • [ radius ] - задает значение радиуса, общее для всех элементов объекта. Этот параметр может быть заменен значением радиуса элемента или вершины элемента, если они указываются явно. Величина радиуса определяется в объектном пространстве и по умолчанию имеет значение, равное 1.

  • [ approximate ] - число прямолинейных сегментов для аппроксимации каждой Безье-кривой, описывающей элемент объекта, если ее степень 2 или 3. Значение по умолчанию равно 1.

  • [ degree ] - степень Безье-кривой, описывающей элемент объекта. Допустимые значения: 1 (пряма линия), 2 (квадратичная кривая) или 3 (кубическая кривая).

  • [ max size ] - определяет максимальное число элементов - кривых для одного листа BSP - древа, которое используется для ускорения трассировки лучей при рендеринге. Значение по умолчанию равно 32.

  • [ max depth ] - максимальная глубина BSP - древа. Значение по умолчанию равно 20.

  • [ hair n ] - statement (далее вместо "statement" будет употребляться "параметр - флаг"), необязательный параметр, если указывается явно, означает, что каждый элемент - кривая имеет вектор нормали, определяемый тремя скалярами. Индекс n используется для обозначения того, что параметр описывает нормаль элемента. Если для элементов или вершин указываются нормали, то элемент в расчетах пересечений интерпретируется уже не как цилиндр, а как плоский прямоугольник малой толщины.

  • [ hair m hm ] - необязательный параметр - флаг, если указывается явно, означает, что каждый элемент имеет hm векторов смещения для расчета motion blur, каждый из которых определяется тремя скалярами. Индекс m используется для обозначения того, что параметр описывает вектора смещения элемента, hm определяет число векторов, а конкретные значения векторов для каждого элемента будут указаны в списке скаляров (scalar list).

  • [ hair t ht ] - необязательный параметр - флаг, если указывается явно, означает, что каждый элемент имеет текстурные координаты, определяемые скалярами в количестве ht. Индекс t используется для обозначения того, что параметр описывает текстурные скаляры элемента, ht определяет число текстурных скаляров, а их значения будут указаны в списке скаляров.

  • [ hair u hu ] - необязательный параметр - флаг, если указывается явно, означает, что каждый элемент имеет определяемые пользователем скалярные величины в количестве hu. Индекс u используется для обозначения того, что параметр описывает пользовательские скаляры элемента, hu определяет число скаляров, а их значения будут указаны в списке скаляров.

  • [ hair radius ] - необязательный параметр - флаг, если указывается явно, означает, что каждый элемент имеет индивидуальный радиус. Это значение отменяет значение, заданное параметром [ radius ] (см. выше), а его конкретное значения для каждого элемента будет указано в списке скаляров.

  • [ vertex n ] - необязательный параметр - флаг, если указывается явно, означает, что каждая вершина имеет вектор нормали, определяемый тремя скалярами. В этом случае параметр [ hair n ] игнорируется. Индекс n используется для обозначения того, что параметр описывает нормаль вершины.

  • [ vertex m vm ] - необязательный параметр - флаг, если указывается явно, означает, что каждая вершина имеет vm векторов смещения, определяемых тремя скалярами каждый. Параметр [ hair m ] игнорируется. Индекс m используется для обозначения того, что параметр описывает вектора смещения вершины, vm указывает количество векторов, а значение скаляров для каждой вершины будут указаны в списке скаляров.

  • [ vertex t vt ] - необязательный параметр - флаг, если указывается явно, означает, что каждая вершина имеет текстурные координаты, определяемые скалярами в количестве, заданном vt. Индекс t используется для обозначения того, что параметр - флаг описывает текстурные скаляры вершины, vt определяет число текстурных скаляров, а их значения будут указаны в списке скаляров.

  • [ vertex u vu ] - необязательный параметр - флаг, если указывается явно, означает, что каждая вершина имеет vu скаляров, определяемых пользователем. Индекс u используется для обозначения того, что параметр описывает пользовательские скаляры вершины, vu определяет число скаляров, а их значения будут указаны в списке скаляров.

  • [ vertex radius ] - необязательный параметр - флаг, если указывается явно, означает, что каждая вершина имеет свой радиус. Глобальный [ radius ] и [ hair radius ] игнорируются, значение радиуса будет указано для каждой вершины в списке скаляров.

  • [ scalar list ] - список скаляров, содержит значения всех используемых в описании объекта скаляров. Начинается с цифры, указывающей общее числа всех скаляров, далее в определенном порядке следуют значения самих скаляров (координат, нормалей, векторов смещения и так далее).

  • [ hair list ] - список смещений, определяющих начало описания очередного элемента в списке скаляров . Начинается с цифры, указывающей общее число всех элементов объекта + 1, затем следуют значения смещений, определяемых количеством скаляров, используемых для описания элемента и его вершин. Длины смещений элементов будут разными, если количество вершин, составляющих элементы, неодинаково.

Логика такого описания довольно проста. Существует группа глобальных параметров, определяющих свойства для всех элементов объекта - это material, radius, approximate, degree, max size и max depth. Значения этих параметров всегда определены - они либо явно указываются, либо используются их значения по умолчанию, либо определяются mental ray по некоторым внутренним правилам, как например, в случае, если не указан материал. Все другие параметры необязательны, но если они указаны, то выполняют роль параметров - флагов (statement), сигнализирующих о том, что значение соответствующего параметра имеет индивидуальное значение для каждого элемента или вершины и значение это нужно искать в списке скаляров. Список скаляров состоит из групп, каждая группа описывает свой элемент. Число скаляров в группе зависит от объявленных явно параметров элемента (hair), объявленных явно параметров вершин (vertex) и количества вершин в каждом элементе.

Вот точная последовательность групп скаляров в scalar list, описывающих каждый элемент многосоставного объекта:

Header (заголовок элемента hair):

  • если параметр - флаг [ hair n ] указывался явно при описании объекта, следуют три скаляра координат нормали (X, Y, Z)

  • если параметр - флаг [ hair m hm] указывался явно при описании объекта, следуют скаляры смещения числом = 3 х hm (по три координаты на вектор: X, Y, Z, X, Y, Z, ...)

  • если параметр - флаг [ hair t ht] указывался явно при описании объекта, следуют текстурные скаляры числом ht

  • если параметр - флаг [ hair u hu ] указывался явно при описании объекта, следуют пользовательские скаляры числом hu

  • если параметр - флаг [ hair radius ] указывался явно при описании объекта, следует один скаляр со значением радиуса элемента

Vertices (группа скаляров, описывающих каждую вершину данного элемента):

  • три обязательно присутствующих скаляра координат вершин элемента, определяющих его положение в объектном пространстве (X, Y, Z)

  • если параметр - флаг [vertex n ] указывался явно при описании объекта, следуют три скаляра координат нормали (X, Y, Z)

  • если параметр - флаг [vertex m vm ] указывался явно при описании объекта, следуют скаляры векторов смещения в количестве = 3 х vm ( по три координаты на вектор: X, Y, Z, X, Y, Z, ...)

  • если параметр - флаг [vertex t vt ] указывался явно при описании объекта, следуют текстурные скаляры числом vt

  • если параметр - флаг [vertex u vu] указывался явно при описании объекта, следуют пользовательские скаляры числом vu

  • если параметр - флаг [vertex radius ] указывался явно при описании объекта, следует один скаляр со значением радиуса для вершины

Каждый элемент может содержать только один заголовок элемента (Header) и несколько блоков скаляров вершин (Vertices).

Пример. Рассмотрим листинг описания объекта, состоящего из трех волосков.

object "hair1"

visible trace shadow

hair

material "mtl"

radius 0.3

degree 1

hair t 2

vertex t 1

scalar [ 42 ]

11 22

0.0 0.0 0.0 1111

0.0 1.0 0.0 1112

1.0 1.0 0.0 1113

33 44

0.0 0.0 0.0 1114

0.0 -1.0 0.0 1115

-1.0 -1.0 0.0 1116

55 66

0.0 0.0 0.0 1117

0.0 -1.0 0.0 1118

-1.0 -1.0 0.0 1119

hair [ 4 ]

0 14 28 42

end hair

end object

Итак:

object "hair1" // объект hair1, уникальный символьный идентификатор (имя) объекта;

visible trace shadow // объект видим в камеру (видим для первичных лучей из камеры), участвует в трассировке лучей (видим для вторичных лучей), и может быть затенен другими объектами;

hair // начало описания свойств элементов hair1; material "mtl" // назначен материал "mtl"; radius 0.3 // все волоски будут иметь одинаковый радиус; degree 1 // все волоски - прямые линии; hair t 2 // каждый волосок имеет 2 текстурных скаляра-координаты; vertex t 1 // каждая вершина имеет один текстурный скаляр-координату;

scalar [ 42 ] // начало списка значений скаляров, описывающих каждый волосок, 42 - общее число скаляров в списке; 11 22 // первый волосок, заголовок состоит всего из двух текстурных скаляров со значениями "11" и "22", поскольку явно объявлен только параметр hair t 2; 0.0 0.0 0.0 1111 // блок описания первой вершины первого волоска - три обязательных скаляра координат вершины и один текстурный скаляр со значением "1111". Поскольку кроме [ vertex t 1 ] другие вершинные параметры явно не определялись, каждая вершина будет содержать только 4 скаляра; 0.0 1.0 0.0 1112 // скаляры второй вершины первого волоска; 1.0 1.0 0.0 1113 // скаляры третьей вершины первого волоска;

33 44 // заголовок второго элемента; 0.0 0.0 0.0 1114 // скаляры первой вершины второго волоска; 0.0 -1.0 0.0 1115 // скаляры второй вершины второго волоска; -1.0 -1.0 0.0 1116 // скаляры третьей вершины второго волоска;

55 66 // заголовок третьего элемента; 0.0 0.0 0.0 1117 // скаляры первой вершины третьего волоска; 0.0 -1.0 0.0 1118 // скаляры второй вершины третьего волоска;

hair [ 4 ] // смещения для определения начала записи каждого волоска, 4 = (общее число волосков объекта hair1 + 1) - всего у объекта три волоска;

0 14 28 42 // Смещения. Группа скаляров первого волоска имеет смещение 0 и описывается 14-ю скалярами с 0-го по 13-й. Скаляры второго волоска начинаются с 14-го скаляра и заканчиваются на 27-м. Скаляры третьего элемента начинаются с 28-го и заканчиваются на 41-м, 42-й скаляр - конец списка.

API - функции

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

miHair_list *mi_api_hair_begin(void) Функция mi_api_hair_begin начинает блок описания объекта. Возвращает список miHair_list, который может быть использован для определения глобальных переменных hair-primitive: material, radius, degree, approx, space_max_size, space_max_depth.

miBoolean mi_api_hair_info(int where, char what, int num) Функция mi_api_hair_info используется для определения параметров-флагов элементов (если where = 0) или вершин (если where = 1). Символьный параметр "what" позволяет определить тип флага, а целочисленный параметр "num" задает число скаляров:

  • what = 'n' - нормаль, num = 0 или 3 скаляра

  • what = 'm' - вектора смещения, num должен быть равен либо 0, либо кратен 3

  • what = 't' - текстурные скаляры, num определяет их число

  • what = 'u' - пользовательские скаляры, num определяет их число

  • what = 'r' - радиус, num должен быть равен либо 0 либо 1

Эта функция за один вызов может определить только один параметр-флаг. Если требуется определить несколько параметров-флагов, mi_api_hair_info должна вызываться столько же раз.

miScalar *mi_api_hair_scalars_begin(int num) Функция используется для определения общего числа скаляров в списке объекта при помощи целочисленного параметра num. Функция возвращает пустой массив скаляров числом num, значения которых должны быть определены.

miBoolean mi_api_hair_scalars_end(int num) Функция должна быть вызвана для завершения процесса определения значений скаляров. Она также выполняет некоторые тесты корректности определения массива значений скаляров и возвращает соответствующее булевское значение true в случае успешного прохождения тестов.

miGeoIndex *mi_api_hair_hairs_begin(int num) Функция определяет величины смещений - количество скаляров, описывающих каждый элемент. Параметр num должен быть равен общему количеству элементов hair-объекта + 1. Возвращает указатель miGeoIndex на массив индексов числом num, значения которых теперь нужно определить при помощи повторных вызовов функции mi_api_hair_hairs_add.

miBoolean mi_api_hair_hairs_add(int si) Определяет значение индекса смещения для одного очередного элемента. Функция должна вызываться повторно столько раз, сколько всего элементов в объекте плюс еще один раз для определения индекса последнего скаляра, завершающего список скаляров объекта.

miBoolean mi_api_hair_hairs_end(void) Эта функция завершает определение индексов смещения.

void mi_api_hair_end(void) Функция завершает определение всего hair - объекта.

Все эти функции должны вызываться единым блоком и в определенной последовательности:

mi_api_hair_begin

mi_api_hair_info

mi_api_hair_scalars_begin

mi_api_hair_scalars_end

mi_api_hair_hairs_begin

mi_api_hair_hairs_add

mi_api_hair_hairs_end

mi_api_hair_end

Из всего вышесказанного можно сделать следующие выводы об общих свойствах hair-primitive:

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

  • он использует процедурное описание элементов и при рендеринге для него строится специальное BSP-древо для ускорения расчетов трассировки лучей, что делает доступным весь арсенал средств трассировки лучей и работы с памятью

  • пространственное положение, материальные свойства и motion blur элемента или его вершины могут быть определено индивидуально

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

  • процедурный bump для радиусов элемента

Хочу подчеркнуть, что mental ray не обладает функциями или шейдерами для конвертирования других объектов, например полигональных, в многосоставные объекты. Он лишь обеспечивает необходимые базисные функции, переменные и фундаментальный hair - примитив для создания инструментов моделирования и редактирования в прикладных программах.

3ds max версий более ранних, чем 7.5, не имеет таких инструментов, встроенных в ядро программы. В 3ds max 7.5 интегрирован Hair and Fur Extension, который впервые позволяет достаточно полно использовать предоставляемые mental ray возможности для работы с многосоставными объектами.

Система волос в 3ds max - Hair and Fur Extension от Joe Alter

Полноценное использование возможностей mental ray для представления и рендеринга многосоставных систем впервые стало возможным в 3ds max 7.5 благодаря появившемуся Hair and Fur Extension (далее - H&F). Давайте поближе познакомимся c его возможностями.

Hair and Fur Extension, являясь расширением 3ds max, основывается на хорошо известной программе Shave and a Haircut, разработанной Joe Alter, Gonzalo Rueda и Dean Edmonds, которая в 2003 году получила "Innovation Award" от Computer Graphic World. Shave and a Haircut заслуженно пользуется высокой репутацией и в настоящее время, как плагин, работает в Maya, C4d, XSI и 3ds max под различными операционными системами - Windows, Linux, Mac OS X. Shave and a Haircut успел сняться во многих фильмах, в том числе и анимационных - достаточно вспомнить впечатляющие "Шрек" и "Шрек-2".

В рабочей среде 3ds max H&F выполняет роль прикладного интерфейса высокого уровня и позволяет работать с многосоставными системами привычными инструментами моделирования, не задумываясь об особенностях их программной реализации. H&F совершенно "прозрачен" для mental ray - при рендеринге hair - объекты могут конвертироваться в "родной" формат описания hair-primitive mental ray, который мы рассмотрели выше.

Создать hair - объект можно либо из геометрических поверхностей практически любого типа: mesh, poly, NURBS, patch, геометрических примитивов 3ds max (куб, сфера и других), либо из набора кривых - сплайнов. Все что требуется сделать - это назначить модификатор Hair and Fur (WSM) геометрическому объекту, группе полигонов или группе сплайнов и затем выполнить настройку параметров модификатора.

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

Hair and Fur (WSM) является неразрушающим модификатором - тип объекта, к которому он применен, остается неизменным. Например, назначение модификатора кубическому примитиву не приводит к его конвертированию в mesh. Элементы hair - объекта могут быть собраны в отдельные группы - пучки травы, локоны и тому подобное. Доступно конвертирование hair-объектов в набор сплайнов или обычные геометрические объекты.

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

Элементы hair-объекта можно "причесывать" с помощью инструментов стилизации специального редактора. В арсенале различные режимы выбора элементов, изменения их положения и размера: Brush, Drag, Shake, Translate, Stand, Puff Roots, Clump, Rotate, Scale и другие. Редактирование выполняется интерактивно в отдельном OpenGL - окне Style Dialog, которое имеет собственный интерфейс и средства навигации сцены, в большинстве идентичные 3ds max.

Элементы hair-объекта могут быть анимированы как единая система, находящаяся под влиянием внешних динамических сил, например гравитации или ветра. В качестве внешних сил используются 3ds max Forces (Space Warp), а расчет анимации учитывает detect collision - расчет столкновений с другими объектами.

При рендеринге объекты H&F рассчитываются как render effect, который автоматически создается и появляется в списке эффектов Rendering > Effects. Возможны три различных режима рендеринга: buffer, geometry и MR prim.

Buffer является собственным режимом рендеринга модуля H&F, элементы многосоставной системы генерируются процедурно во время рендеринга по настройкам модификатора. В этом режиме допустимо дополнительно задавать такие опции, как подготовка рассчитываемого изображения к компоузингу, motion blur, oversampling, определение некоторых свойства источников освещения (разрешение карты Shadow map для расчета тени). H&F в режиме рендеринга buffer может рассчитывать освещение только от источников 3 ds max типа omni и spot, любые другие источники игнорируются. Единственный допустимый тип теней элементов hair-объекта - Shadow Map. Расчет изображения может быть выполнен только для вида из камеры или перспективного вида. Порядок расчета - сначала изображение объекта, на основе которого создается hair- объект, затем - тени, в последнюю очередь рассчитываются сами элементы многосоставного объекта.

В режиме geometry hair-объект преобразуется в стандартный полигональный объект, состоящий из треугольников. Это самый медленный режим рендеринга, требующий большого количества памяти.

В режиме MR prim H&F преобразовывает свои объекты в mental ray hair-primitive и происходит это непосредственно во время рендеринга. Такое преобразование возможно благодаря библиотеке дополнительных шейдеров, основывающихся на шейдерах и функциях mental ray. Как правило, файл библиотеки находится в диск:\корневой каталог 3dsmax7\mentalray\shaders_autoload\shaders\hairMRShader.dll, файл декларации шейдеров - диск:\корневой каталог 3dsmax7\shaders_autoload\include\ hairMRShader.mi. Библиотека содержит два типа шейдеров - для геометрического представления hair-объектов и для конвертирования материалов в цвет элементов. Основная задача этих шейдеров - описать hair-объекты модуля H&F на "языке" hair-primitive mental ray.

Использование режима MR prim превращает модуль H&F в инструмент моделирования 3ds max, результаты работы которого рендерятся mental ray. При этом сразу становятся доступны все возможности mental ray: hair- объекты освещаются любыми источниками света, рассчитываются все типы освещения, включая global illumination и ambient occlusion, доступны тени и материалы любого типа. Можно также выполнить экспорт сцены в mi - файл для рендера в standalone mеntal ray.

Рассмотрим пример - вырастим мех у крысы. Трехмерная модель выглядит следующим образом:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]