当我点亮它指向我的物体时,我有一个脚本。我用normalConstrain做了这个。但有没有其他方法可以做到这一点没有约束?
我想我需要从我的光中计算出最接近顶点的法线? 但我不知道如何做到这一点,如果有人可以帮助我会很好!
以下是我如何做NormalConstrain:
myNormalConstrain = cmds.normalConstraint('mySphere','myLight', aimVector = (0,0,1), worldUpType = 'scene',name='NormalConstrainToObject')
答案 0 :(得分:0)
简单的方法是创建一个nearestPointOnMesh节点,并将其连接到网格的worldMesh
属性。唯一的缺点是,Maya 2016中存在一个错误(不确定其他错误),如果您使用的是除厘米以外的单位,那么从节点返回的正常值实际上不会正常化。这是一个功能:
import maya.cmds as cmds
import maya.api.OpenMaya as api
def get_closest_normal(surface, x, y , z):
node = cmds.createNode('closestPointOnMesh')
cmds.connectAttr(surface + '.worldMesh ', node + ".inMesh")
cmds.setAttr( node + ".inPosition", x, y, z, type='double3')
normal = cmds.getAttr(node + ".normal")
# there's a bug in Maya 2016 where the normal
# is not properly normalized. Not sure
# if it's fixed in other years.... this
# is the workaround
result = api.MVector(*normal)
cmds.delete(node)
result.normalize()
return result
print get_closest_normal('pSphereShape1', 10, 1, 1)
您可以保留节点并将其正常属性连接到实时更新的某些内容,而不是像在此处那样获取数字并删除节点。这是一个相当昂贵的更新节点,但是,不要将这个版本用于动画装备之类的东西,而不测试性能,以确保它的价格合理