我有一个面部动画装备我以两种不同的方式驾驶:它在Maya视口中有一个艺术家用户界面,这是交互式动画的常用方法,我将它与FaceShift无标记动作捕捉系统联系起来。 / p>
我设想了一个工作流程,在该工作流程中捕获性能,导入到Maya中,对样本数据进行平滑和缩小,然后动画师接管完成。
我们的面部装备具有由三个物体的小型层次控制的眼睛注视(全局lookAtTarget和左右眼偏移)。
由于眼睛注视由此LookAt设置控制,因此在导入眼睛注视(包括动作捕捉数据)时需要禁用它们。
导入动作捕捉数据后,现在可以通过动作捕捉旋转来设置目光。
我正在寻找一个简短的Mel例程,它执行以下操作:它通过动作捕捉眼旋转样本,向后计算并设置每只眼睛的LookAt目标位置,并平均两个以获得全局LookAt目标的位置。
在运行Mel例程之后,我可以重新开启眼睛的LookAt约束,眼睛凝视控制返回到装备,视觉上没有任何变化,动画师将使他们的眼睛UI再次在Maya视口中工作。
我认为这应该是任何做面部护理的人的共同逻辑。任何人都有这样的东西吗?
答案 0 :(得分:1)
mocap中的眼动追踪有多好?如果目标距离很远,可能会出现问题:根据数据的采样情况,您可能会看到“疯狂的眼睛”似乎没有收敛,或者是数据跳跃。如果是这种情况,您可能需要完全破坏眼睛数据,或在重新定位之前将其平滑。
为了找到两只眼睛的收敛,你试试这个(就像@julian我正在使用定位器等,因为在mel中进行所有数学运算会很烦人)。
1)将定位器约束到一只眼睛,使得一个轴沿着外观矢量定向而另一个轴定位在第二只眼睛的平面中。假设眼睛朝向Z,第二只眼睛位于XZ平面
2)制作第二个定位器,以第一个定位,并以相同的方式约束到第二只眼睛:向下指向Z,第一只眼睛在XZ平面中
3)第二个定位器的局部Y旋转是两只眼睛之间的会聚角。
4)使用正弦定律和第二只眼相对于第一只眼的偏移作弊来计算焦距。第二只眼睛的局部X距离是直角三角形的一条腿。三角形的角度是从#3和90-会聚角的会聚角。换句话说:
focal distance eye_locator2.tx
-------------- = ---------------
sin(90 - eye_locator2.ry) sin( eye_locator2.ry)
如此代数:
focal distance = eye_locator2.tx * sin(90 - eye_locator2.ry) / sin( eye_locator2.ry)
你必须减去eye2的局部Z,因为我们正在解决的三角形向前或向后移动了那么多:
focal distance = (eye_locator2.tx * sin(90 - eye_locator2.ry) / sin( eye_locator2.ry)) - eye_locator2.tz
5)将目标沿眼睛定位器的局部Z方向定位在上面导出的距离处。这听起来像实际控制使用两个可以移开的目标目标以避免交叉 - 这是一种判断调用,知道使用多少与实际收敛距离。对于许多真实世界的数据而言,对于动画师的便利而言,收敛可能太远了:30米外的目标对于使用来说是非常不切实际的,但可能会在距离10米远的目标上进行模拟。不幸的是,对于那个没有经验答案 - 这是一个判断力。
答案 1 :(得分:0)
我没有这个脚本,但它会相当简单。你能提供玛雅场景的例子吗?你不需要任何数学。以下是您可以采取的措施:
假设指向瞳孔的轴为正X,焦距为10个单位。
这一切都可以在脚本中使用命令完成:spaceLocator,createNode,connectAttr,setAttr,bakeSimulation,pointConstraint,aimConstraint,delete。
答案 2 :(得分:0)
解决方案最终非常简单。情况是眼睛的旋转节点上的运动捕捉数据,同时需要(非技术的)动画制作者对眼睛注视的超越控制。在Maya中,约束具有权重因子:控制约束影响的参数0-1值。解决方案是让动画师在他们想要控制眼睛注视时简单地将眼睛的lookAt约束权重键入1,当他们想要运动捕获的眼睛凝视时将那些相同的权重键入0,并使用这些约束权重的平滑过渡掩盖过渡。这比我上面描述的原始想法更好,因为原始动作捕捉数据保留在原位,可作为参考,允许动画师在需要时来回切换。