Это дополнительный (но не обязательный) трюк для выращивания волос точно в центре граней.
Жмите Create.
![](/images/openglorg10/openglorg10-722.png)
Задайте «для красоты» следующие параметры для системы волос hairSysteml: Hair Per Clump=20; Clump Width=1.2.
Форму Clump Width Scale можно сделать уже к основанию и шире к концам.
![](/images/openglorg10/openglorg10-723.png)
Выберите сферу и положите на канал Color материала lambertl какую-нибудь цветастую текстуру, например Ramp. Задайте для текстуры rampl значение Noise=1.
![](/images/openglorg10/openglorg10-724.png)
Задача состоит в том, чтобы назначить тот же самый цвет и на волосы, растущие на сфере.
Сохраните файл (texturedHairStart.ma).
Выберите hairSysteml, а в Script Editor выполните следующие строки:
// перевод выбранной системы волос в отдельные кривые
convertHairSelection “follicles”;
// получение списка кривых
string $list[] = 'Is -si'; string Sit;
// цикл no всем кривым
for ($it 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[1 ]) ($col[2]);
// задание полного индивидуального цвета setAttr ($it+".colorBlend”) 1; i
Естественно, вместо текстуры rampl можно использовать любую карту. Следует также отметить, что цвет унаследовали не отдельные волосы, а целые пучки, внутри которых все волосы имеют одинаковый цвет. Чтобы написать более изысканный скрипт, окрашивающий отдельные волосины внутри пучков в цвет текстуры, понадобится полторы страницы книги и немного времени, поэтому я оставлю это за рамками изложения.
![](/images/openglorg10/openglorg10-725.png)
Данный скрипт может быть моментально модифицирован для выполнения следующей задачи: предположим, что надо удалить все волосы там, где текстура имеет черный цвет, поставить там, где цвет белый. Такая возможность аналогична картам для атрибута Baldness системы MAYA Fur.
![](/images/openglorg10/openglorg10-726.png)
Измените зеленый цвет текстуры rampl на белый, а синий и красный - на черный. Задайте lnterpolation=None.
![](/images/openglorg10/openglorg10-727.png)
Выберите hairSysteml, а в Script Editor выполните новые строки:
// перевод выбранной системы волос в отдельные кривые
convertHairSelection “follicles”;
// получение списка кривых
string $list[] = ' Is -si ';
pickWalk -d down;
string Sit;
// цикл по всем кривым
for ($it in Slist) {
// получение UV координат основания кривой
float $u = getAttr ($it+”.parameterU”)'; float $v = getAttr ($it+”.parameterV”)';
// запрос цвета в точке с такими коодинатами на текстуре rampl float $col[] = 'colorAtPoint -о RGB -u $u -v $v rampl';
// удаление кривой, если цвет(красный) меньше 0.9 if($col[0]<0.9) delete ('listConnections -t “nurbsCurve” Sit') $it;
} '
![](/images/openglorg10/openglorg10-728.png)
Вместо наследования цвета, кривые просто удаляются, если цвет текстуры около их основания меньше, чем 0.9 (в черном-белом варианте достаточно сравнивать красный канал цвета).