关键词:houdini,粒子,motionblur,运动模糊,轨迹,弧形,曲线,渲染(该方法与所用渲染器无关)
一般粒子渲染运动模糊常见问题:
1.解算粒子直接渲染(不存盘)可以形成运动的弧度轨迹模糊(有substep),但是粒子量大了不可行!
2.粒子量较大需要存为硬盘缓存,这时运动模糊一般会用v通道来渲染,一旦速度快就会形成很明显的直线,很不舒服,不真实。
3.对于运动轨迹需要高度平滑的运动模糊,以上两种方法都不太适用
原理分析:
Motion Vector 方式:
根据渲染器不同读取一帧内的一个状态,再指定一个世界坐标下的运动向量,最终渲染时转化为raster空间做像素级别的模糊。
Substep方式:
这种方式的运动模糊在快门开启到快门关闭这段时间内本身存在多个位置状态,所以提高geometry sample,就可以在一帧范围内渲染出有弧度轨迹的运动模糊
所以要获得弧度轨迹的运动模糊必须得到——substep
Substep 获取方法:
Dop解算增加substep:
理想很丰满,现实往往比较骨感,算过巨量粒子的都懂,代价实在过高,解算太慢,缓存巨大,渲染加载过慢,等等(设备不差钱当我没说)
利用现有的帧缓存计算得到substep:
利用前后帧推算出substep的状态,需要考虑两个问题,计算量有多大?准确度够用吗?
cspline()函数
cspline()函数原理:
@P=cspline(time,p0,p1,p2,p3);
time取值范围[0,1]指p1到p2的时间
该函数使用Catmull-Rom方式自动平滑substep的位置
p0 p2 p3使用timeshift获取
源代码:
这里使用id属性来匹配粒子,要求当前粒子至少前面有一帧后面有两帧数据才能起到平滑substep的目的
这里不做不符合条件(前有1后有2)的粒子的判断,如不需要这些粒子可在链接该节点后自行判断删除
效果对比:
注意事项:
该功能已经做成一个独立SOP节点(hda,群里有下载) Motiontrail,不限于mantra使用,粒子需要id属性,shutter Time可以超过1,最好不要为整数(切记)。
由于需要4帧的粒子数据,所以渲染时候会增加一些缓存加载的时间。
案例文件图像的渲染用的是arnold。
运动模糊的Geometey Sample需要相应的提高。