Zeppelinrock ·
15-Ноя-12 19:34
(спустя 10 месяцев)
woolfman
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 возможности для работы с многосоставными объектами.