您的位置:首页 > 其它

Simple Breaking Waves in Maya

2016-02-27 21:36 176 查看


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

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

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

制作方法

把一个平面转换为softbody,然后在creation里加如下表达式

[cpp] view
plain copy

if(pPlane1ParticleShape.particleId==0) {  

    catch("windowPref -r rampWin");  

    if(`window -exists rampWin`)  

        deleteUI rampWin;  

    window -title "Rollingwave Control" rampWin;  

    columnLayout;  

    optionVar -stringValueAppend "falloffCurveOptionVar" "0,1,3";  

    optionVar -stringValueAppend "falloffCurveOptionVar" "1,0,3";  

    gradientControlNoAttr -h 250 -w 600 -optionVar "falloffCurveOptionVar" falloffCurve1;  

    showWindow;  

  

    print (pPlane1ParticleShape.position0);  

}  

这个其实就是弹出一个ramp UI来,用于控制卷浪的形态。(具体形态,而不是动态,动态只需要调节locator1的y轴位置就可以实现从水平面到卷起到消失了)。

然后在runtime里加:

[cpp] view
plain copy

vector $ref = <<locator1.translateX,locator1.translateY,locator1.translateZ>>;  

vector $p = pPlane1ParticleShape.position0;  

vector $diff = $p-$ref;  

$diff = <<$diff.x/locator1.scaleX, $diff.y/locator1.scaleY, $diff.z/locator1.scaleZ>>;  

float $dist = mag($diff);  

pPlane1ParticleShape.rgbPP = $dist/locator1.preScale;  

  

// roll  

// ( x*cos(a)+y*sin(a) ,  x*sin(a)-y*cos(a) )  

float $alpha = `gradientControlNoAttr -valueAtPoint $dist -query falloffCurve1`;  

$alpha*= locator1.roll/180*3.14;  

float $x = $diff.x*cos($alpha)+$diff.y*sin($alpha);  

float $y = $diff.x*sin($alpha)-$diff.y*cos($alpha);  

$ref = <<$ref.x, -$ref.y, $ref.z>>;  

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以便解决整个流程的问题
就是这样的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: