Houdini Pyro流体的插值变速
2016-01-27 10:25
162 查看
用简单的节点尝试了下Houdini流体的变速,这里的流体指的是Pyro,而不是FLIP。FLIP仅仅须要记录ID属性然后TimeBlend & TimeShift就可以。
Vimeo
上图是一个10倍降速的測试对照,在这个对照中,左边是retime的測试,右两个是对照,当中中间是TimeBlend & TimeShift,右边是仅仅一个简单的TimeShift。
使用的方法类似advect,即 density = volumesample(p - v * length / Δ ),当中Δ为1/$FPS,length是advect的长度。=0时不变,=1时类似于下一帧。
但仅仅是从floor($FF)去推下一帧时会发生的情况是$FF在跨越整数帧时会有一个小小的突变,所以用了一个另外的反向advect去推了上一帧,并在这两个插值之间mix。
w=$FF-floor($FF)
dens1= volumesample(density1, p - v1 * w/ Δ )
dens2=volumesample(density2, p + v2 * (1-w)/ Δ )
density=mix(dens1, dens2, w)
(density1, v1, density2, v2分别为floor($FF)帧和ceil($FF)的密度和速度)
在流体细节特别多时会能看出插值的不精确来。这玩意儿怎么说呢,毕竟是插值。等看看是否能把BFECC的思想应用进去,假设能够会精确非常多。
Vimeo
上图是一个10倍降速的測试对照,在这个对照中,左边是retime的測试,右两个是对照,当中中间是TimeBlend & TimeShift,右边是仅仅一个简单的TimeShift。
使用的方法类似advect,即 density = volumesample(p - v * length / Δ ),当中Δ为1/$FPS,length是advect的长度。=0时不变,=1时类似于下一帧。
但仅仅是从floor($FF)去推下一帧时会发生的情况是$FF在跨越整数帧时会有一个小小的突变,所以用了一个另外的反向advect去推了上一帧,并在这两个插值之间mix。
w=$FF-floor($FF)
dens1= volumesample(density1, p - v1 * w/ Δ )
dens2=volumesample(density2, p + v2 * (1-w)/ Δ )
density=mix(dens1, dens2, w)
(density1, v1, density2, v2分别为floor($FF)帧和ceil($FF)的密度和速度)
在流体细节特别多时会能看出插值的不精确来。这玩意儿怎么说呢,毕竟是插值。等看看是否能把BFECC的思想应用进去,假设能够会精确非常多。
相关文章推荐
- 【摘】linux中fstab解说
- 查找数据库中某一列名
- 八一八可重用工作流(权当学习记录)
- jQuery Easyui学习之datagrid 动态添加、移除editor
- Linux 下 C++ 异常处理技巧
- 引发类型为“System.Windows.Forms.AxHost+InvalidActiveXStateException”的异常 解决办法
- JavaEE web.xml 中ContextLoaderListener的解析
- 有用的学习网站链接
- hdu 4143(分解质因数)
- 使用组合模式与迭代器模式遍历文件夹中所有文件
- 获取手机缓存路径比较好的方法
- 毛玻璃.老记不住,
- 产品经理的进阶学习
- tomact server.xml配置说明
- arrow functions 箭头函数
- 手机上怎么看chm文件
- python的range()函数用法
- hdu 1873 看病要排队 (优先队列)
- 百度离线API获取坐标和添加标注
- BZOJ(本校) 2525 公约数 - 莫比乌斯反演