Среди индивидуальных свойств динамических кривых (follicle) присутствуют также атрибуты Parameter U/V, определяющие UV-координаты точки, из которой произрастает конкретный пучок. Имея эту информацию можно вычислить цвет текстуры, лежащей на поверхности, из которой растут кривые (кстати, не обязательно забирать цвет именно с этой текстуры, можно использовать любую карту) и назначить этот цвет на кривую, то есть на весь пучок.

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

Проделаем небольшое упражнение.

•    Создайте полигональную сферу, задайте радиус равным пяти.

•    Создайте систему волос на поверхности.

•    Откройте Option Box операции Create Hair и задайте Output=Paint Effects, U_Count=20 V_ Count=20, Equalize=off. Это дополнительный (но необязательный) трюк для выращивания волос точно в центре граней.

•    Жмите Create.

• Задайте «для красоты» следующие параметры для системы волос hairSysteml: Hair Per Clump=20; Clump Width=1.2. Форму Clump Width Scale можно сделать уже к основанию и шире к концам.

• Выберите сферу и положите на канал Color материала lambertl какую-нибудь цветастую текстуру, например Ramp. Задайте для текстуры ramp1 значение Noise=1.

Задача состоит в том, чтобы назначить тот же самый цвет и на волосы, растущие на сфере. Сохраните файл (texturedHairStart.ma).

• Выберите hairSystem1, а в Script Editor выполните    следующие строки:

//    перевод выбранной системы    волос    в    отдельные кривые

convertHairSelection "follicles";

//    получение списка кривых

string $list[] в 'ls -sl'; string $it;

//    цикл по всем кривым

for (Sit in $list) {

// получение UV координат основания кривой float $u = 'getAttr ($it+".parameterU")'; float $v = 'getAttr ($it+".parameterV")';

//    запрос цвета в точке с такими коодинатами    на текстуре rampl

float $col[] = 'colorAtPoint -о RGB -u $u -v $v rampl';

//    назначение полученного цвета на кривую

setAttr <$it+".color") -type double3 ($col[0]) ($col[l}) ($col[2]);

//    задание полного индивидуального цвета

setAttr ($it+".colorBlend") 1;

}

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

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


⇐ вернуться назад | | далее ⇒