Ментален лъч за 3ds макс. Част 6.

Моделирането на динамични системи за коса и козина е една от най-популярните 3D компютърни графични технологии, особено в киното. Абсолютно невъзможно е да си представим пълноценна реалистична анимация на какъвто и да е компютърен персонаж, бил той човек, извънземно, фантастично същество или животно, без автентично изглеждащи коса, вежди, мигли, козина.

Понастоящем този проблем може да се счита за до голяма степен решен - разработените методи и алгоритми позволяват ефективно да се моделират и анимират не само косата и нейната динамика, но и редица други също толкова важни и интересни системи, като трева или тъкани, за пример.

Тази статия ще разгледа възможностите за описване (представяне) на сложни многокомпонентни динамични системи, внедрени в mental ray, и тяхното практическо приложение за моделиране на коса, козина и трева в 3ds max 7.5. Обекти на ментални лъчи, примитиви и API

Косата е типичен пример за сложен многокомпонентен обект, образуван от голям брой малки елементи. Характерна особеност на такива обекти е, че те нямат хомогенна непрекъсната повърхност. Тази функция прави стандартното описание на такива обекти неефективно с помощта на геометрични примитиви - триъгълници. Полигоналното представяне на многоделни повърхности ще изисква огромно количество памет, изчислителни ресурси и време за изчисляване на динамиката и осветлението.
Друга основна разлика между многокомпонентните обекти и обикновените е, че техните елементи могат да бъдат с много малки размери. Например отделните косми, съставляващи козината, са много тънки. Следователно, строго погледнато, стандартните модели за изчисляване на осветлението и особено сенките не са приложими за многокомпонентните обекти.

Начинът на описване на многочастни обекти на Mental ray отчита тези две основни характеристики и ги преодолява успешно. В mental ray версия 3.1 се въвежда примитив за коса - нов основен тип елементарен обект (примитив), който ви позволява ефективно и компактно да опишете произволни сложни многокомпонентни обекти.

Примитивното представяне на косата на многочасти се основава на използването на криви на Безие. Всеки елемент от съставен обект е представен от крива на Безие от степен 1 ​​(линия), 2 (квадратна крива) или 3 (кубична крива). Всяка крива се апроксимира от набор от отсечки с права линия и техните върхове, чийто брой не може да бъде по-малък от степента на кривата, умножена по броя на сегментите + 1. Тази характеристика е следствие от математическите свойства на кривата на Безие . На практика това просто означава, че за изчертаване на права линия са необходими поне две точки, три точки за обикновена крива, две за определяне на краищата и една за контрол на кривината. Кубична крива, състояща се от един сегмент, изисква поне четири точки.
Всеки елемент и неговите върхове се описват от набор скалари: координати на върхове, нормални векторни координати на върхове, координати на текстура на върха, координати на вектори на изместване на върха (за размазване в движение), радиус на елемента за този връх и други.

Произволен многокомпонентен обект, използващ примитив за коса, може да бъде представен като списък на даден брой криви, състоящ се от върхове и свързани скалари, които описват свойствата на тези върхове. За да разберете по-добре всички предимства на подобно описание и неговите разлики от обичайното геометрично представяне, разгледайте прост пример.

Ако моделирате коса, като използвате геометрични обекти, например - тетраедрични цилиндри, тогава всеки елемент - косата трябва да бъде представен с поне един цилиндър. За да има кривина косата, броят на сегментите на косата трябва да бъде най-малко два и са необходими два цилиндрични сегмента, които да я представят. Това означава, че за геометрично описание на един, много прост по форма, косата ще се нуждае от поне 20 триъгълника и 13 върха (осем триъгълника на сегмент + четири триъгълника за горния "капак" на цилиндъра).
Ако използвате примитивна коса, тогава за описанието са необходими само 3 върха, един радиус и триъгълници. Като се има предвид, че типичните системи за коса на практика могат да съдържат от няколко хиляди до няколко милиона елемента за коса и много по-голям брой сегменти на елемент, става ясно колко прогресивно е описанието, използващо косата-примитив.

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

Примитивът на косата е основен обект на умствените лъчи. За описанието на многокомпонентни системи е толкова важно, колкото представянето на полигони е за описване на повърхности. Затова ще си позволя тук да дам точна спецификация и подробно описание на примитивните параметри на косата.

Всички параметри между "име" на обекта ... косата описват общите свойства на многокомпонентния обект и му позволяват индивидуално да определи дали ще бъде видим за камерата, дали има сянка и какъв тип сянка, нейната прозрачност, участие в изчисления за глобално осветление и размазване в движение. Разделът за примитивни общи свойства на косата е идентичен със свойствата на обикновените предмети и в този смисъл за менталния лъч не се различава от геометричния обект.

Цялата специфичност се крие в параметрите между косата ... крайна коса. Нека ги разгледаме по-подробно.

  • [материал] - параметърът определя материала, който се използва при изчисляване на цвета на всеки елемент (например отделен косъм) на обект. Материалът може да дефинира един цвят за целия елемент като цяло или многокомпонентен цвят - отделно за всеки от сегментите на елементите. Последното е възможно поради факта, че върховете на елемента могат да имат координати на текстурата.
  • [радиус] - задава стойността на радиуса, обща за всички елементи на обекта. Този параметър може да бъде заменен от радиуса на елемента или стойността на върха на елемента, ако е посочен изрично. Радиусът е дефиниран в пространството на обекта и по подразбиране е 1.
  • [приблизителен] - броят на правите отсечки, за да се сближи всяка крива на Бези, описваща елемент на обекта, ако степента му е 2 или 3. Стойността по подразбиране е 1.
  • [степен] - степента на кривата на Безие, описваща елемента на обекта. Налични стойности: 1 (права линия), 2 (квадратен закон) или 3 (кубична крива).
  • [максимален размер] - определя максималния брой елементи - криви за един лист от BSP - дървото, който се използва за ускоряване на проследяването на лъчите по време на изобразяване. По подразбиране е 32.
  • [максимална дълбочина] - максимална дълбочина на BSP дървото. По подразбиране е 20.
  • [hair n] - израз (по-нататък вместо „statement“ ще се използва „параметър - флаг“), незадължителен параметър, ако е посочен изрично, означава, че всеки елемент - крива има нормален вектор, определен от три скалара. Индексът n се използва, за да покаже, че параметърът описва нормалата на елемента. Ако за елементи или върхове са посочени нормали, тогава елементът в изчисленията на пресичането вече не се интерпретира като цилиндър, а като плосък правоъгълник с малка дебелина.
  • [hair m hm] - незадължителен параметър - флаг, ако е посочен изрично, означава, че всеки елемент има hm вектори на изместване за изчисляване на размазването в движение, всеки от които се определя от три скалара. Индексът m се използва, за да покаже, че параметърът описва изместените вектори на елемента, hm дефинира броя на векторите и специфичните векторни стойности за всеки елемент ще бъдат посочени в скаларния списък.
  • [hair t ht] - незадължителен параметър - флагът, ако е посочен изрично, означава, че всеки елемент има текстурни координати, определени от скалари в размера на ht. Индексът t се използва, за да покаже, че параметърът описва скаларите на текстурата на елемента, ht определя броя на скаларите на текстурата и техните стойности ще бъдат посочени в списъка със скалари.
  • [hair u hu] - незадължителен параметър - флаг, ако е посочен изрично, означава, че всеки елемент има дефинирани от потребителя скаларни стойности в количеството hu. Индексът u се използва, за да покаже, че параметърът описва персонализираните скалари на елемента, hu определя броя на скаларите и техните стойности ще бъдат посочени в списъка със скалари.
  • [радиус на косата] - незадължителен параметър - флаг, ако е посочен изрично, означава, че всеки елемент има индивидуален радиус. Тази стойност заменя стойността, посочена от параметъра [радиус] (виж по-горе), и нейната специфична стойност за всеки елемент ще бъде посочена в списъка със скалари.
  • [връх n] - незадължителен параметър - ако е посочен изрично, флагът означава, че всеки връх има нормален вектор, определен от три скалара. В този случай параметърът [hair n] се игнорира. Индексът n се използва, за да покаже, че параметърът описва нормата на върха.
  • [vertex m vm] - незадължителен параметър - флаг, ако е посочен изрично, означава, че всеки връх има vm вектори на изместване, определени от три скалара всеки. Параметърът [hair m] се игнорира. Индексът m се използва, за да покаже, че параметърът описва векторите на изместване на върха, vm показва броя на векторите, а стойността на скаларите за всеки връх ще бъде посочена в списъка със скалари.
  • [vertex t vt] - незадължителен параметър - флагът, ако е посочен изрично, означава, че всеки връх има координати на текстурата, определени от скалари в количеството, посочено от vt. Индексът t се използва, за да покаже, че параметърът - флаг описва скаларите на текстурата на върха, vt определя броя на скаларите на текстурата и техните стойности ще бъдат посочени в списъка със скалари.
  • [vertex u vu] - незадължителен параметър - флаг, ако е посочен изрично, означава, че всеки връх има vu от дефинирани от потребителя скалари. Индексът u се използва, за да покаже, че параметърът описва персонализирани скалари на върхове, vu определя броя на скаларите и техните стойности ще бъдат посочени в списъка със скалари.
  • [радиус на върха] - незадължителен параметър - флаг, ако е посочен изрично, означава, че всеки връх има свой собствен радиус. Общите [радиус] и [радиус на косата] се игнорират, стойността на радиуса ще бъде посочена за всеки връх в скаларния списък.
  • [скаларен списък] - списък със скалари, съдържа стойностите на всички скалари, използвани в описанието на обекта. Започва с цифра, показваща общия брой на всички скалари, след това стойностите на самите скалари (координати, нормали, вектори на изместване и т.н.) следват в определен ред.
  • [списък на косата] - списък с отмествания, които определят началото на описанието на следващия елемент в списъка на скаларите. Започва с цифра, указваща общия брой на всички елементи в обекта + 1, последвана от стойности на изместване, определени от броя на скаларите, използвани за описание на елемента и неговите върхове. Дължините на отместването на елементите ще бъдат различни, ако броят на върховете, съставляващи елементите, не е еднакъв.

Логиката зад това описание е доста проста. Съществува група от глобални параметри, които определят свойствата за всички елементи на даден обект - материал, радиус, приблизителен, степен, максимален размер и максимална дълбочина. Стойностите на тези параметри винаги са дефинирани - или са изрично посочени, или се използват стойностите им по подразбиране, или менталният лъч се определя съгласно някои вътрешни правила, например в случая, когато не е посочен материал.
Всички останали параметри не са задължителни, но ако са посочени, те играят ролята на параметри - флагове (оператор), сигнализиращи, че стойността на съответния параметър има индивидуална стойност за всеки елемент или връх и тази стойност трябва да се търси в списъка на скаларите.
Списъкът на скаларите се състои от групи, всяка група описва своя елемент. Броят на скаларите в група зависи от изрично декларираните параметри на елемента (косми), изрично декларираните параметри на върховете (върха) и броя на върховете във всеки елемент.

Ето точната последователност от скаларни групи в скаларния списък, описващи всеки елемент от многочастния обект:

Хедър (глава на елемента за коса):

  • ако параметърът - флаг [hair n] е посочен изрично при описване на обекта, следват три скалара на нормалните координати (X, Y, Z)
  • ако параметърът - флаг [hair m hm] е посочен изрично при описване на обекта, скаларите на отместването, последвани от числото = 3 x hm (три координати на вектор: X, Y, Z, X, Y, Z,.)
  • ако параметърът - флаг [hair t ht] е посочен изрично при описване на обекта, скаларите на текстурата следват числото ht
  • ако параметърът - флаг [hair u hu] е посочен изрично при описване на обекта, следват персонализирани скалари с номера hu
  • ако параметърът - флагът [радиус на косата] е посочен изрично при описване на обекта, следва един скалар със стойността на радиуса на елемента

Върхове (група скалари, описващи всеки връх на даден елемент):

  • три задължително представени скалари на координати на върхове на елемент, които определят неговата позиция в обектно пространство (X, Y, Z)
  • ако параметърът - флаг [връх n] е посочен изрично при описване на обекта, следват три скалара на нормалните координати (X, Y, Z)
  • ако параметърът - флаг [връх m vm] е посочен изрично при описване на обекта, тогава има скалари на вектори на преместване в размер = 3 x vm (три координати на вектор: X, Y, Z, X, Y, Z, .)
  • ако параметърът - флаг [vertex t vt] е посочен изрично при описване на обекта, следват скалари на текстура с номер vt
  • ако параметърът - флаг [връх u vu] е посочен изрично при описване на обекта, следват персонализирани скалари с номер vu
  • ако параметърът - флагът [радиус на върха] е посочен изрично при описване на обекта, следва един скалар със стойността на радиуса за върха

Всеки елемент може да съдържа само един заглавен елемент (Header) и няколко блока скалари на върховете (Vertices).

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