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以便解决整个流程的问题
就是这样的。
相关文章推荐
- 计算机网络——3.网络协议工作原理
- java 序列化
- 【java】----日期函数大全
- c语言程序运行时的栈与寄存器的变化
- session_unset() 和 session_destroy()
- C++小程序开发(1)--加法测试题
- Android Studio导入Project的方法
- 【Scala类型系统】隐式转换与隐式参数
- excel分组求和
- golang windows 判断锁屏
- 数据库锁的基本原理
- 分布式系统唯一ID生成方案汇总
- java里面的标签运用 continue label, break label
- 安装版与绿色版,注册表
- 【Scala类型系统】函数式Queue的简易实现
- 16.二叉树最大宽度和高度
- Caused by: java.lang.ClassNotFoundException: com.mchange.v2.c3p0.ComboPooledDataSource
- 这学期学生的博客
- 二分查找
- HTTP协议概念篇