公司特效组最近一半的人一直都在做着修穿插这样的一个重复的事情,听说来公司之前大家也都一直这样做着,这种完全不能把艺术家从重复劳动中解放出来的状态确实有点让人神伤。最近本人也在做着这方面工作,想借着这个机会,总结一下自己这方面的经验,也重点探讨一个能够适用常规多数角色穿插问题的解决方法。希望能做到抛砖引玉的效果。
首先聊一聊角色动画中常见的两种穿插情况。
第一种比较常见的是角色与其他物体的穿插,比如手拿杯子脚踩地。这种情况的解决方法比较灵活,因为是两个物体,所以常常可以使用volume的那套方法找到穿插的位置在用gradient或者ray的方法解决穿插的问题。另外这种情况往往我们可以很清楚的定义穿插面和被穿插面,两个虽然理论上是相互影响的,但是处理起来我们完全可以忽略掉被穿插面(被角色碰到的区域)的变形问题,因为大多情况是根本不用变形,所以变形的变数是很好控制的。
还有另一种情况的角色穿插就是由于前端rigging流程没有做到百分中百的角色防穿插或者类似自己的手拂动自身的肉这种情况,首先我们是在一个solid surface上找到不同的面之间的穿插,如果引入volume的那套方法就意味着我们要依靠人为的判断,手动的在穿插之间的地方将角色砍开,在分别做处理。这种方法无疑是离不开重复劳动,而且如果穿插位置有好几处的话,大概拿到镜头的人就只会想怎么cheat了。
估计如果大家真有在houdini里面修穿插的经历后基本上都会了解怎么使用volume和ray来处理了。我这里只想重点聊一聊第二种情况下,如何程序化的搞定穿插问题。
解放艺术家的双手,让他们去做更有创造力的事情。 -- 机器猫
先看一看效果:
变形前
变形后
先讲一讲思路,再一个一个细聊:
1,使用intersect方法找到交叉位置
2,将穿插位置的法相方向统一
3,用新的法线在找出来的区域重新做一次intersect得到较准确的挤压偏移量displacement
4,找出交叉区域露在外面的边缘
5,柔化外边缘后根据法线和边缘权重向外挤出一点budge
6,统一给穿插以及边缘部位做平滑smooth
在整个过程中因为测试的几何体细分程度有比较大的不同,发现直接使用原mesh上的点做上面的采样与计算,结果是非常不稳定的,而且最后的动画穿插部位会有很严重的抖动问题。因为随着动画的运动,穿插部位的点进入穿插和离开穿插区域都会对之后的变形产生比较明显的影响,说白了就是采样点不够密。所以在这个讨论的改进版本中,使用了scatter给物体撒点来采样的方法。散的点密度越高,面片抖动的问题就会越小。这个方法要求的就是scatter撒的点在动画过程中相对位置是固定在mesh