unity插件_试用_流体ObiFluid

  • 原理分析(个人看法)
  • 基础组件说明(试用,只介绍关键参数)
  • ObiFluildRenderer(摄像机上实际渲染的组件)
  • Obi Solver(解决者,解算器)
  • Obi Emitter(发射器)
  • ObiParticleRenderer(液体的renderer)
  • EmitterShape(发射器类型)
  • Rig相关
  • 相关ScriptableObject
  • ObiEmitterMaterialFluid(液体材质)
  • ObiEmitterMaterialGranular(烟尘材质)
  • ObiCollisionMaterial(碰撞材质)
  • 使用步骤
  • 创建出水口
  • 创建一个与水交互的物体


原理分析(个人看法)

生成大量带物理效果的小球(点),通过类似鱼群的算法对小球进行约束(模拟水的压力,张力什么的),最后通过小球的点来算出液体的表现。算出边缘的小球绘制液体圆滑的边缘,中心部位根据小球的密度来加深颜色。(取消勾选ObiParticleRenderer上的Render变量可以看小球)


基础组件说明(试用,只介绍关键参数)

大部分只要翻译单词就能懂的变量不会介绍

ObiFluildRenderer(摄像机上实际渲染的组件)

unity 水管流动效果 unity流体插件obi fluid_原理分析


如果camera上没有这个组件,或者该组件未启用则实际运行看不到液体

属性:

(1)ParticleRenderers 该摄像机会拍摄的流体的renderer数组,未挂载的拍不到

动态更改后要重新关闭打开一次才会刷新

(2)BlurRadius 模糊半径,range(0f,0.1f)

unity 水管流动效果 unity流体插件obi fluid_原理分析_02


BlurRadius为0时

unity 水管流动效果 unity流体插件obi fluid_ci_03


BlurRadius为0.1时

(3)thickness cutoff 厚度截止,range(0.01f,2f)

unity 水管流动效果 unity流体插件obi fluid_sed_04


thickness cutoff为0.01时

unity 水管流动效果 unity流体插件obi fluid_sed_05


thickness cutoff为2时

(4)ColorMaterial 颜色材质球,与ObiParticleRenderer的颜色乘法叠加(应该)

(5)FluidMaterial 流体材质球

最后两个材质球在添加该组件时有个默认的,没仔细研究

Obi Solver(解决者,解算器)

unity 水管流动效果 unity流体插件obi fluid_原理分析_06


实际计算小球位置的处理器

公开属性:

(1)MaxPartices 该处理器的总小球数,每个Emitter在初始的时候会在Solver申请预算。Solver的usedPartices显示的是被申请预算的值(成功申请预算的Emitter的MaxPartices总和,没申请到的不起效),而不是当前每个Emitter的UsedPartices的总和

(2)Parameters 属性

1.Mode 2D还是3D

Obi Emitter(发射器)

unity 水管流动效果 unity流体插件obi fluid_原理分析_07


公开属性:

(1)Solver 指定处理器

(2)CollisionMaterial 小球的碰撞材质,可以不加

(3)EmitterMaterial 小球的材质(液体材质或烟尘材质)

(4)NumParticles 小球数量限制(在Solver上面讲过)

(5)WorldVelocityScale 改了没感觉

(6)FluidPhase 没感觉

(7)Speed 发射器的初始速度,速度慢会有一滴一滴的感觉

(8)Lifespan 生命周期,单位秒

(9)RandomVelocity 随机速度的方法,调高了有出水口水花四溅的感觉

ObiParticleRenderer(液体的renderer)

公开属性
(1)Render 勾选时候显示小球,取消勾选显示液体(要在ObiFluildRenderer那边添加,上面说过)
(2)ParticleColor 显示液体时的颜色
(3)RadiusScale 每个小球在画大球时候的半径(原理分析说过),如果值太小,小于ParticleSize的话可能根本看不到液体(ParticleSize在后面会讲)

EmitterShape(发射器类型)

unity 水管流动效果 unity流体插件obi fluid_原理分析_08


请按名称自行尝试

Rig相关

unity 水管流动效果 unity流体插件obi fluid_unity_09


ObiRig要求已经添加过unity的Rig

ObiCol要求已经添加过unity的Col

ObiCol中的CollisionMaterial可以不管

注:ObiRig的KinematicForParticle勾选时会屏蔽液体的力,但是不会改变当前的运动状态。demo场景FluidMill可以试验

相关ScriptableObject

ObiEmitterMaterialFluid(液体材质)

unity 水管流动效果 unity流体插件obi fluid_ci_10


unity 水管流动效果 unity流体插件obi fluid_unity_11


简单说RestDensity(密度)越小Mass(质量)越小

Resolution越小,Mas跟Size都越小

ObiEmitterMaterialGranular(烟尘材质)

unity 水管流动效果 unity流体插件obi fluid_ci_12

ObiCollisionMaterial(碰撞材质)

unity 水管流动效果 unity流体插件obi fluid_原理分析_13

使用步骤

创建出水口

(1)创建处理器
右键/3DObject/Obi/ObiSolver
(2)创建发射器
右键/3DObject/Obi/Emitter
(3)创建液体材质
Assets/Create/Obi/Create ObiEmitterMaterialFluid
(4)配置Emitter
在Emitter上设置Solver跟EmitterMaterial
(5)摄像机配置
在camera上添加ObiFluildRenderer组件,并把刚生成的Emitter拖拽到ObiFluildRenderer的ParticleRenderers之中

创建一个与水交互的物体

(1)创建模型
(2)添加刚体,碰撞器
(3)添加Obi的rig跟col
(4)如果修改过Solver的CollisionLayers,要检查一下物体的layer
Mess值低(质量轻)的物体可以浮在水面