Ориентировать объект на неровной поверхности - PullRequest
1 голос
/ 22 марта 2019

У меня есть анимированный локатор, где он движется по неровной поверхности. Однако его оси / каналы вращения не соответствуют неровной поверхности.

Есть ли инструмент или сценарий, который позволяет мне анимировать локатор так, чтобы он находился на поверхности или в процессе его перемещения?

1 Ответ

1 голос
/ 25 марта 2019

Сначала вы попробовали обычное ограничение:

normalConstraint -weight 1 -aimVector 1 0 0 -upVector 0 1 0 -worldUpType "vector" -worldUpVector 0 1 0;

В противном случае вы можете использовать ClosestPointOnMesh (на основе uv): https://download.autodesk.com/us/maya/2008help/Nodes/closestPointOnMesh.html

# USER DEFINE
surface = cmds.polySphere(n='pSphere1')
movingObj = cmds.spaceLocator(n='locator1')[0]

# AUTOMATION
aimLocator = cmds.spaceLocator(n='aimloc')[0]
closest = cmds.createNode('closestPointOnMesh')

surface_sh = cmds.listRelatives(surface, ni=True)[0]
cmds.connectAttr(surface_sh+'.worldMesh[0]', closest+'.inMesh')
cmds.connectAttr(surface_sh+'.worldMatrix[0]', closest+'.inputMatrix')
cmds.connectAttr(movingObj+'.t', closest+'.inPosition')

# this command is bugged in python so, lets use mel.eval
cmds.select(surface, aimLocator)
pctr = mel.eval('pointOnPolyConstraint -offset 0 0 0  -weight 1;')[0]

cmds.connectAttr('{}.parameterU'.format(closest), '{}.target[0].targetU'.format(pctr), f=True)
cmds.connectAttr('{}.parameterV'.format(closest), '{}.target[0].targetV'.format(pctr), f=True)

cmds.orientConstraint(aimLocator, movingObj, mo=False, weight=1)

Вы можете подключить нормальный выход в любом случаеЯ позволю вам следовать его руководству (на русском языке, но все шаги здесь): https://www.youtube.com/watch?v=dPliNB4uZ0w

...