Loading
0

[vfxinfo 独家]TP 动力学碰撞检测注意事项

文章一部分是转载在Hammer Chen的Blog(本文获得Hammer的转载许可),一部分是自己的使用心得 感谢Hammer无私的让我们转载他的文章,感谢!!!

Hammer的原始文章链接 http://hammerbchen.blogspot.com/2011/05/thinking-particles.html

如果你正在製作有铁鍊的案子, 在试过Rayfire, Reactor, NVidia PhysX等方案后, 最后发现只有Thinking Particles能够模拟铁鍊动画的话, 那你应该要读这篇文章.

既然是注意事项, 就直接跳到重点. 所有刚体都要给予重力才会有物理写实的结果. 在TP裡面你可以用max标準的gravity或是用一个向量做出重力的效果.

如上图:方法一 你可以用stdForce, activate场景中的gravity; 方法二是先做一个Force oprator再接上一个往下的向量. 第二个方法似乎比较笨, 比较明显的优点是不需要在场景中拉一个gravity force, 另一个优点是重力可以是对速度增加数值, 或是相乘数值(如果初速度等於零, 计算就会错误)但是其实用向量的方法的优点会比你预期的还要更重要!

首先是可以控制strength强度, 这没有什麼. 可以有variation变化度, 这就厉害了, 一条直挺挺的铁鍊每个铁鍊可以对重力有不同反应, 模拟结果会更加自然.

绿色的小点表示voxel

Tip:在粒子组跟SC里面都有一个参数叫做Voxel Grid.这个参数的大小对碰撞的精细起到很关键的作用.当设置为0的时候就表示为使用一个box来进行碰撞,当设置为1的时候表示使用真实的几何体来进行碰撞,也是最精准速度也是比较慢的,在配合提高采样的话效果是很精准的.超过1就表示使用网格细分来进行碰撞

第二个优点就非常重要了, 那就是关於collision leak 刚体间没有正确的碰撞导致铁鍊断掉. 若是忽略重力这件事, 要避免collision leak, 1)可以增加sub-frame的数目 (让快速移动的物件可以计算更多的内差位置, 增加碰撞的成功机会 2)增加voxel数值, 同样可以让铁鍊更容易碰撞 3)修改模型的密度, 让网格分布更加平均更加紧密.

答案揭晓, subframe, voxel与模型这叁个因子都没有重力的影响要重要. 而重力的设定务必要使用向量加Force Operator的串法, 这裡引用Bobo在CGTALK的一句话:

请记住, 外力要影响粒子需要花费一点时间 (因為外力影响的是速度, 速度进而影响粒子的位置). 预设值的状况, 外力的强度往往对那些速度很小的物件影响力不足.

我通常会把Influence ¨­為10000.0 另外加一个Wind将其Turbulence设為1.0 Frequency 0.01 and Scale 1.0 外加 Drag with 5for X,Y and Z 最后的结果就会很随机.

换句话说当铁链物件起始速度为零时, 标准的gravity根本就对铁链没有影响力 (这时候你会以为重力的强度不够, 或是认为模拟的结果不够真实), 问题就在用标准的gravity的连接有根本上的问题, 它可能是把重力与速度相乘, 而不是真正把重力作用到铁链本身. 因此场景中已经有设key的铁链本身有初速度, 它会拖着没有速度的铁链, 而没有速度的铁链是在被拖动的时候才真正被重力所影响, 造成铁链之间的模型交错, 最后就发生collision leak的问题了.