В Taarna я расширил сферу своей деятельности, включив в нее разработку систем прически и одежды, которые важны для анимации персонажей.

Я вернулся к своим масс-пружинным имитационным моделям со времен работы с Symbolics Lisp Machine в MIT Media Lab. Вооружившись гораздо более мощной вычислительной мощностью — пять лет закона Мура — включая машину SGI с 8 (или 16?) процессорами, это был забавный вызов.

Одна из техник, которую я впервые применила (или изобрела независимо, не уверен, что это правильная терминология), заключалась в использовании направляющих волос для ухода за волосами. Вот что я придумал. Я взял 3D-модель головы персонажа и удалил все полигоны, кроме областей, где должны были расти волосы. Обычно кожа головы и бакенбарды. Я триангулировал эту сетку. Моя программа для волос поместила одну прядь волос в каждую вершину. Это были «направляющие волосы», которыми пользователь мог манипулировать и укладывать.

Чтобы заполнить поверхность кожи головы тысячами отдельных прядей волос, я вспомнил концепцию барицентрических координат из одного из моих математических занятий в Массачусетском технологическом институте (в конце концов, я изучал математику). Генерируя барицентрические координаты внутри каждого треугольника, я мог легко заполнить каждый треугольник любым количеством волосков.

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

В Taarna мы использовали средство визуализации Pixar prman, основанное на их стандарте Renderman. Один из первых (из многих) шейдеров Renderman, которые я написал, предназначался для анизотропного затенения прядей волос.

Для анимации волос я использовал свою надежную модель пружинной массы, чтобы имитировать движение направляющих волос, а все остальные волосы следовали за этим движением с плавной интерполяцией.

Дизайн и код

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

Поэтому я подумал, что вместо этого поделюсь с вами своим main.lisp файлом. Разработчики Common Lisp могут наблюдать полное отсутствие defsystem или правильное использование пакетов и пространств имен. Определенно не лучшие практики.

У меня пока даже нет подходящего названия для этого проекта. Нужно крутое кодовое имя.

Следующая серия