Houdini基础学习-DOP与POP
Solver
模拟的核心是Solver,提供了缓存当前帧供下一帧使用的功能,因此可以通过上一帧的结果和驱动逻辑去模拟出下一帧的结果。
核心:驱动逻辑,帧结果缓存,内外部数据通信,SubStep。
1,正常情况下,外部应该输入的是初始状态和场景信息,并将核心驱动逻辑放到Solver内执行。
如果驱动逻辑在外部作用,只输入结果,那么Solver内会一直重复输入的初始状态,因为上一帧一直是初始状态。
可通过StaticObject的Use Deform Geometry去导入,但只能用于动态物理碰撞。
2,可以通过Merge当前帧和上一帧的结果,来在当前帧缓存前面每一帧的状态,从而记录下了运动轨迹。
3,部分逻辑应该放在Solver之后作为后处理,因为之前的状态会被缓存,因此如果没有剔除逻辑,那么缓存好的之前状态可能会被重复使用,而实际上并不需要,从而造成效果错误。
比如脚印,每一次的脚印都被记录了下来,如果将Smooth逻辑放在Solver内,那么之前踩下的脚印会一直被Smooth,因此应该放在Solver之后去作为后处理。
4,SubStep的重要性,很多效果不够流程圆润都可以尝试提高SubStep去尝试解决。
Popnet
类似于Solver,负责控制整个系统的各种状态。
(1)输出:默认会输出所有,可以手动选择只导出粒子。
且popnet节点,哪怕多选了也只有一个输出口,因此本质上还是不能拆开输出。
因此需要与dop import配合,从而实现选择性导出(入)。
(2)模拟:
PopObject
粒子状态容器(导出也是PopObject部分对应粒子) + 初始模拟状态,比如Physical物理属性
PopSource
(1)粒子生成来源与方式
(2)粒子的爆发式生成与持续性生成,以及生成速率、新生成粒子标志、Life等设置。
Jitter与Interpolate:防止粒子速度过快导致断节,在中途插值式生成一些Age不从0开始的粒子。
(3)粒子属性继承设置,尤其是速度。
PopSolver
Sleeping:本质是设置i@stopped。
与active的区别,Sleep是暂时休眠还有唤醒可能,但是active=0几乎是确认停止不用了?
Physical与Collision
Particle
(1)PopObject_Physical
(2)PopSolver_Collision(Global Hit 和 Response)
(3)Pop Collision Detect(Special Hit 和 Response)
本质是对粒子Collision相关属性进行设置,得在Merge_Collision前设置好,一般在PopSolver前。
StaticObject
(0)碰撞体预处理
如何创建高效的近似碰撞体:Convex,VDB,HeightFiled_Project等近似方式。
(1)导入
SOP Path与opinputpath
注:不是冒号‘’而是波浪号的那个反引号·(~)。
OBJ Path与外部使用Null(out)去作为统一最终输出接口,防止增删逻辑后要修改Path。
导入设置
Use Defoming Geometry:运动物体的动态碰撞。
(2)Physical
(3)Collision_RBD Solver
一般情况下物体都用Volume(SDF),但也可以使用Surface(更精确,但是慢很多)。
Collision_RBD Solver_Volume
默认情况下是接收Polygon然后自己计算SDF,但也可以直接接收SDF,此时Divisions就没效了。
此外,还有HeightField等额外方式去创建碰撞体。
Collision_RBD Solver_Surface
Merge_Collision
Forces
Pop + Gravity、Wind、Noise、Axis、Curve、Drag、Attract、Fan(风扇锥形力)
注:很多Force也有单独的功能节点,加上Pop前缀才是该在Dop内使用的。
Pop group:常见用法是体积遮罩。
Suction:吸力。Orbit:螺旋缠绕力。
Particle Attribues
age,life,nage(Normalized Age),id,p,v...
SOP Solver
Time相关节点
ReTime:播放速率,自动实现帧间平滑采样插值。
TimeShift:定帧采样。
TimeBlend:定帧混合。
PBD(Position Based Dynamics)
常规粒子主要通过力和速度推进位置,且粒子之间没有强约束关系;
而PBD 先通过Force和V预测位置,再通过约束网络修正位置,并由位置修正反馈到速度。
Substeps 控制时间离散精度,Constraint Iterations 控制约束求解精度,在强耦合的PBD系统中,粒子之间的关联性和影响力都很强,且两者设置不够都会导致结果不准确,并且之后无法修补,错误会被一直积累,从而直接影响模拟结果的正确与错误。
效果循环
粒子信息:P、v、id、pscale、mass、rest 等
场景碰撞信息:Collisider、Physical、Respnse等
动态逻辑:Grain、Force、Merge_Collision
上一帧结果——>Force、V、P——>约束——>场景碰撞 + 约束——>SolverCache
常见效果套路
1,粒子运动(逻辑驱动 或者 速度场)
2,Trail + Wire / Sweep(轨迹、生长效果)
3,Copy To Point(存在实体可继续编辑) 与 Instance(几何实例化渲染,只存在引用关系)
与 PopSprite(把粒子配置成面向摄像机的精灵显示)
4,Pop Replicated(二次发射,比如烟花爆炸,水滴溅射等。)
本质上还是个粒子发射器,只是基于输入的Point位置等信息去拷贝发射,并可指定发射形状。
5,PBD - Grain
GrainSource与PopGrain
(1)干沙子:Fraction
(2)湿沙子:Clumping