Simple Breaking Waves in Maya

来源:互联网 发布:淘宝玉器店 编辑:程序博客网 时间:2024/04/25 09:56


之前的博文中写了个使用Houdini来做breaking wave的方法,鉴于出了一个Maya商业教程,为了给Mayaer涨涨士气今天在Maya里也实现了下。

原理都是一样的,最初需要解决的问题就是如何动态改变每个point的坐标,Maya中没有vop sop这种东西,但是粒子可以任意的改变posPP,而柔体就是直接受粒子控制的模型,所以这个问题直接解决:把模型转换为柔体,然后给柔体的粒子shape新加表达式。

另一个问题就是如何给平面增加海浪细节,这个就更简单了,同时用HOT和我们的柔体给原始的平面做blendshape,这样这个平面就既有海浪又能卷起来。

制作方法

把一个平面转换为softbody,然后在creation里加如下表达式
[cpp] view plain copy
  1. if(pPlane1ParticleShape.particleId==0) {  
  2.     catch("windowPref -r rampWin");  
  3.     if(`window -exists rampWin`)  
  4.         deleteUI rampWin;  
  5.     window -title "Rollingwave Control" rampWin;  
  6.     columnLayout;  
  7.     optionVar -stringValueAppend "falloffCurveOptionVar" "0,1,3";  
  8.     optionVar -stringValueAppend "falloffCurveOptionVar" "1,0,3";  
  9.     gradientControlNoAttr -h 250 -w 600 -optionVar "falloffCurveOptionVar" falloffCurve1;  
  10.     showWindow;  
  11.   
  12.     print (pPlane1ParticleShape.position0);  
  13. }  
这个其实就是弹出一个ramp UI来,用于控制卷浪的形态。(具体形态,而不是动态,动态只需要调节locator1的y轴位置就可以实现从水平面到卷起到消失了)。
然后在runtime里加:
[cpp] view plain copy
  1. vector $ref = <<locator1.translateX,locator1.translateY,locator1.translateZ>>;  
  2. vector $p = pPlane1ParticleShape.position0;  
  3. vector $diff = $p-$ref;  
  4. $diff = <<$diff.x/locator1.scaleX, $diff.y/locator1.scaleY, $diff.z/locator1.scaleZ>>;  
  5. float $dist = mag($diff);  
  6. pPlane1ParticleShape.rgbPP = $dist/locator1.preScale;  
  7.   
  8. // roll  
  9. // ( x*cos(a)+y*sin(a) ,  x*sin(a)-y*cos(a) )  
  10. float $alpha = `gradientControlNoAttr -valueAtPoint $dist -query falloffCurve1`;  
  11. $alpha*= locator1.roll/180*3.14;  
  12. float $x = $diff.x*cos($alpha)+$diff.y*sin($alpha);  
  13. float $y = $diff.x*sin($alpha)-$diff.y*cos($alpha);  
  14. $ref = <<$ref.x, -$ref.y, $ref.z>>;  
  15. pPlane1ParticleShape.position = <<$x*locator1.scaleX, $y*locator1.scaleY, $p.z>>+$ref;  


这个就是把每个点的坐标转换到locator1的局部坐标,因为在mel里做矩阵乘法比较麻烦,所以只是用了一个简化的方法。大家瞅瞅都懂的。
最后还是因为为了我的教程想为Maya说两句:
1.如果单纯特效的话那Maya和Houdini是没法比的,不要说软件用好了都一样,这个真不是人不人的问题。
2.但是如果在一个动画公司那是100%离不开Maya的,包括很多针对CG角色的影视公司也是。因为对这些公司而言Maya不止是一个软件,更多的是作为一个平台运转于流程中,其他的软件从前期到后期都要围绕这个核心来,原因很简单,因为Maya的Rigging牛逼。模型可以在Max里做Zbrush里做无所谓,但是如果Rigging在Maya里做那动画就必须在Maya里,动画在Maya里那渲染就要在Maya里,所以注定在很多的公司是离不开Maya的。而我们学Mel并不只是为了特效,更多的是为了Rigging、提速、以及了解Maya以便解决整个流程的问题
就是这样的。
0 0
原创粉丝点击