Как следует из документации к ноде pointOnSurfacelnfo, на вход к ней подается информация о поверхности и два числа, U и V координаты, которые однозначно определяют точку на поверхности. На выходе нода вычисляет трехмерные координаты этой точки, нормаль и касательные к поверхности в этой точке. U и V координаты можно найти в Attribute Editor в виде двух атрибутов: Parameter U и Parameter V, изменяя которые можно заставить конус перемещаться вдоль поверхности.

Таким образом, как следует из Hypergraph, нода pointOnSurfacelnfo, созданная для каждого конуса, вычисляет трехмерные координаты точки на поверхности тора, заданные атрибутами Parameter U/V, и подает результат вычислений на атрибуты translate конуса, что заставляет его всегда «приклеиваться» своим пивотом к поверхности. Тут, вроде все, понятно, за исключением, быть может, связи между поверхностью тора и нодой pointOnSurfacelnfo.

Если описание ноды pointOnSurfacelnfo вы можете легко разыскать в документации, то вот про rotateHelper, я боюсь, вы не найдете ничего.

В конце концов следует применить метод пристального взгляда в Hypergraph. Выбрав конус и показав его связи в окне Hypergraph, можно сделать следующие выводы:

Нода rotateHelper служит для того, чтобы развернуть объект перпендикулярно поверхности в данной точке. На входе она принимает от ноды pointOnSurfacelnfo вычисленные координаты нормали и одной из касательных в точке поверхности. Эти коодинаты подаются на ее входные атрибуты up и forward. Получив два направления, «вверх» и «вперед», нода rotateHelper вычисляет три значения вращений, на которые надо развернуть объект, чтобы он смотрел своей локальной осью Y вдоль направления «вверх» (up), а своей локальной осью X - вдоль направления «вперед» (forward). Три этих значения для вращений просто присоединяются на выходе к атрибутам rotate для конуса, чтобы он развернулся своей макушкой по нормали к поверхности, а осью X - вдоль поверхности.

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

Первый способ: «нарисовать» объектом по поверхности, как было показано выше, затем удалить ненужные объекты и, с помощью атрибутов Parameter U/V у ноды pointOnSurfacelnfo, привести объект в нужное место на поверхности.

Второй: можно сделать все вручную, создав две ноды pointOnSurfacelnfo и rotateHelper с помощью команд

createNode pointOnSurfacelnfo;

createNode rotateHelper; После этого нужно установить связи, так же, как в вышеописанной сцене. Следует только помнить, что для присоединения поверхности к ноде pointOnSurfacelnfo надо использовать ноду shape поверхности, содержащую атрибут worldSpace.

Примечание. Нода rotateHelper - не «родная» для MAYA, а реализованная в виде плагина. Чтобы она создавалась и работала без проблем, надо в окне Plugin Manager включить галочку напротив плагина rotateHelper.

Третий способ: если работа с нодой rotateHelper вас пугает, достаточно создать и присоединить, как положено, ноду pointOnSurfacelnfo для закрепления объекта на поверхности, а для ориентации его по нормали можно воспользоваться Normal Constraint.


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