Жмите Undo, а затем выполните в Script Editor следующее заклинание: optionVar -intValue createHairMaxDensity 101; Порисуйте снова на переносице. Так в чем же сакральность числа 101? Попробуем разобраться.

По умолчанию рисование ведется на сетке из ячеек размером 100x100, поэтому линии ровно посередине сетки просто отсутствуют. Представьте себе сетку 4x4 и вы поймете, о чем идет речь. Таким образом, если вы хотите, чтобы ряды волос появлялись ровно посередине участка, то нужно использовать нечетное значение для createHair-MaxDensity.

Примечание. Создайте сплайновую плоскость, в параметрах рисования задайте UIVFol licle Density=4, порисуйте на плоскости волосами. Затем устанавливайте eScript Editor createHairMaxDensity=100 ucreateHairMaxDensity=101. Почувствуйте разницу. Помните, что вы всегда рисуете на сетке, а не на самой поверхности, и что у сетки есть максимальное разрешение.

Очевидно, что такие тонкости могут понадобиться в некоторых специфических случаях, например, вам понадобится пробор или идеально равномерное заполнение поверхности. В общем случае нас мало волнует симметричность волосяного покрова. Рисуйте по поверхности, не заботясь о точном расположении волос и залезая с запасом на остальные участки поверхности. Сейчас мы удалим ненужные волосы одним махом.

Прежде всего, сохраните сцену как 2_headPainted.ma

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

К счастью, текстура уже украдена до вас и находится прямо в сцене под дивным именем file1. Для усиления эффекта, она даже назначена на цвет поверхности, хотя это совершенно необязательно. Нажмите «6» и вы все увидите.

Идея состоит в том, что можно написать маленький скрипт (без этого неинтересно), который пробежится по всем «волосинам», получит их UV-координаты, прочитает цвет текстуры в точках, откуда они растут, и в зависимости от этого цвета, либо оставит их на месте, либо удалит их совсем.

Напишите такой скрипт и выполните его в Script Editor. Предварительно надо выбрать объект hairSystem1.

string $texture = "filel";

// converting selection to follicles convertHairSelection "follicles";

// list of follicles string $list[] = 'ls -sl'; string $it;

// for each follicle for ($it in $list) {

// get UV-position float $u = 'getAttr ($it+".parameterU")'; float $v = 'getAttr ($it+".parameterV")';

// get color at point on surface under follicle

float $col[] = 'colorAtPoint -o RGB -u $u -v $v $texture';

// delete follicle and it's curve if red channel is white if($col[0]>0.5) delete ('listConnections -t "nurbsCurve" $it') $it ("list-Transforms $it');

}

Теперь вы можете видеть «подстриженный» вариант.

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


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