Maya应用之水滴表面流动效果的实现
白羽 2018-06-22 来源 :网络 阅读 1691 评论 0

摘要:本文将带你了解Maya应用之水滴表面流动效果的实现,希望本文对大家学Maya有所帮助。

 

Maya应用之水滴表面流动效果的实现

 

 

 

如上图,整个系统可以分解为4种粒子:

1. 自由水滴,普通粒子加个gravity field。和物体碰撞,event中产生第2种粒子和第4种粒子。

2. 引导粒子,也是表达式中主要要对付的粒子,负责弯弯曲曲的沿着表面往下移动,并且发射第3种粒子。

3. 轨迹水滴,被引导粒子发射出来,形成水滴流过的痕迹。

4. 喷溅粒子,自由水滴打到表面后溅出来的粒子,没什么特别。

呐,以下就是引导粒子的粒子表达式,场景中有一个closestPointOnMesh节点需要预先建立,并且把用来流淌的模型连到节点的inmesh上。这样每次设置不同的inposition,从outposition里取出来的就是inposition靠近inmesh最近的点。

 

[cpp] view plain copy
1. particleShape3Shape.velocity = <<0,0,0>>;  
2.   
3.   
4. // pos  
5. float $noiseScale = 1.4,$overallScale = 0.05;  
6. float $displacement = 0.05;  
7. vector $pos = particleShape3Shape.position;  
8. $pos+=<<noise($pos),noise($pos+<<100,0,0>>)*0.2,noise($pos+<<0,100,100>>)>>*$noiseScale*$overallScale;  
9. $pos+=<<0,-1.5,0>>*$overallScale;  
10. setAttr closestPointOnMesh1.inPositionX ($pos.x);  
11. setAttr closestPointOnMesh1.inPositionY ($pos.y);  
12. setAttr closestPointOnMesh1.inPositionZ ($pos.z);  
13. float $px,$py,$pz,$nx,$ny,$nz;;  
14. $px = `getAttr closestPointOnMesh1.positionX`;  
15. $py = `getAttr closestPointOnMesh1.positionY`;  
16. $pz = `getAttr closestPointOnMesh1.positionZ`;  
17. $nx = `getAttr closestPointOnMesh1.nx`;  
18. $ny = `getAttr closestPointOnMesh1.ny`;  
19. $nz = `getAttr closestPointOnMesh1.nz`;  
20.   
21. vector $pos2 = <<$px,$py,$pz>>+<<$nx,$ny,$nz>>*$displacement;  
22. vector $lastpos = particleShape3Shape.lastPos;  
23. if(abs($pos2.y-$lastpos.y)<0.0001){  
24.     particleShape3Shape.lifespanPP = 0;  
25.   
26.   
27.       
28.     if(dot(<<$nx,$ny,$nz>>,<<0,-1,0>>)>0){  
29.         emit -object particle1 -pos ($pos.x) ($pos.y-0.01) ($pos.z);  
30.     }  
31. }  
32. //print(id+": "+abs($pos2.y-$pos.y)+"\n");  
33. particleShape3Shape.position = $pos2;  
34. particleShape3Shape.lastPos = $pos2;


原理是这样的:

1. 把速度清零

2. 基于noise函数生成一个随机向量,加在目前的pos上,制造曲折效果

3. 讲pos往重力方向移动

4. 如果只是2和3两部,粒子极有可能会离开了物体表面,所以接下来进行了一次判断,取出移动后的目标位置所对应的最靠近mesh的点(通过ClosestPointOnMesh),判断一下和上一帧的pos在y轴的差,如果差很小,也就是说粒子基本没有往下落,说明流到了一个比较平的位置,那么接下来分两种情况,5和6:

5. 如果最近点处的法线点乘重力方向大于0,也就是说这一点法线是朝下的,那么水滴应该脱离表面,成为一个自由水滴,其他的喷溅啊继续生成引导水滴啊交给我们架设好的系统。
这一点如果仔细看视频就可以看到,在弯弯曲曲的留到圆环或者圆锥的最下面后,会掉下来,继续在下面的斜面上流淌。

6. 如果点乘小于0,也就是朝上的,那么水滴是没法穿透物体往下的,所以就让它消失吧。


 


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标常用软件之Maya频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程