[鬼才狗仔]大佬给出10条技巧,用Houdini怎样才能模拟出理想的流体( 三 )


intp_prim;
vectorp_puv;
//gettingthedistanceandtheparametricpositionoftheclosestpoint
floatdist=xyzdist(1,@P,p_prim,p_puv);
vectorP2=primuv(1,P,p_prim,p_puv);
//mixingthePofthepoints,influencedbyamappeddistance
@P=fit(dist,chf(min_dist),chf(max_dist),P2,@P);
在制作中 , 更为实际的用法是在模拟过程中使用较低分辨率的碰撞 , 然后再后期模拟调整中运行这个功能 , 使流体看起来像是在于高分辨率碰撞产生的交互 。
建议查阅HenrytoadstormFoster的博客文章 , 详细了解xyzdist()和primuv() 。
https://www.toadstorm.com/blog/?p=465
0%
[鬼才狗仔]大佬给出10条技巧,用Houdini怎样才能模拟出理想的流体
文章图片
使用xyzdist()和primuv()将粒子推向碰撞表面7.使用ID属性消除有问题的粒子
当遇到模拟完成98% , 差不多快完事的时候 , 而剩余2%的粒子不起作用的情况时 , 有一个简单而又有效的解决技巧 。 如果存储了前面提到的ID属性 , 就可以用它来消除有问题的粒子 。 如果没有ID属性 , 随着pointcount在帧与帧之间的变化 , 就没法标记标记正确粒子以进行删除 。
有一个很好的方法 , 进入pointselection模式 , 在键盘上按9 , 这时会显示出GroupSelection窗格 , 按ID选择 , 点击齿轮图标 , 选择Attributesid , 然后只需在视窗中选择要删除的粒子 , 点击[Delete]即可 。 Blast节点会自动生成 , 参考的是pointID , 而不是pointnumber 。
0%
[鬼才狗仔]大佬给出10条技巧,用Houdini怎样才能模拟出理想的流体
文章图片
一种通过ID属性正确清除有问题粒子的简单方法8.使用reseeding来增加稀疏区域
在制作中 , 大部分的模拟开发工作都是使用中分辨率容器完成的 。 有时候 , 得到的中分辨率FLIP模拟可能达到了你的所有要求 , 唯独在最终网格渲染的时候看上去粒子不太够 。 遇到这种情况的解决办法是 , 在FLIP解算器中降低ParticleSeparation设置(提高分辨率和粒子数) , 将模拟提交到渲染农场 , (回家享受一下周末)第二天早上发现模拟效果看起来完全不同了 。
不过在这种情况下 , 更建议大家启用reseeding参数 , 而不是改变particleseparation 。 在默认情况下使用reseeding参数 , 增加SurfaceOversampling参数可以通过散布粒子来帮助增加稀疏区域中的粒子数量 。 这样 , 在保持了模拟的总体外观的同时 , 还得保证有足够粒子来避免网格流体看起来像瑞士奶酪一样 。
0%
[鬼才狗仔]大佬给出10条技巧,用Houdini怎样才能模拟出理想的流体
文章图片
增大surfaceoversampling来填充稀疏区域的模拟这里有一个视频 , 来看一下操作流程 。
FROM:DaveStewart9.直接使用原始FLIP模拟作为不同元素
在进行流体模拟时的目标之一是最大限度地利用原始FLIP模拟 , 包括直接将其用作湍流/急流效果 。
模拟湍流的传统方式是模拟FLIP流体 , 然后再其之上运行湍流解算器 。 当然第二步并不总是非要有的 , 尤其对于飞溅和喷水等快速运动的流体来说 。 还有一个问题就是在对粒子进行网格化的时候 , 想让流体看上去真实一些也很不容易 。
建议大家用FLIP模拟本身 , 直接加湍流着色器进行渲染 , 既可以渲染粒子本身 , 也可以将其光栅格为VDB , 进行体积渲染 。 有时KevinPinga会根据镜头的实际效果将两种方法结合到一起使用 。 使用Houdini海洋工具时自动创建的湍流着色器非常适合光栅化的粒子 。
[鬼才狗仔]大佬给出10条技巧,用Houdini怎样才能模拟出理想的流体
文章图片
将原始FLIP模拟直接渲为湍流10.优化模拟和缓存