1.
预备
这是这个教程要完成的效果。
注意:本教程主要内容来自虚幻引擎自带的内容示例
。
提示:使用 ⬆️ ⬇️ 可上下翻页。推荐用大屏浏览,以获得更好的阅读体验。
3.
介绍
表达式(Expressions)是 HLSL 的小片段,可以用来在堆栈中在线创建微观行为,而不需要创建新的模块。
在本例中,没有使用任何模块来影响模拟,只是结合表达式和动态输入直接设置变量。
4.
模拟目标
选择发射器属性(Emitter Properties)
,设置模拟目标(Sim Target)
为GPU计算模拟(GPUCompute Sim)
,然后勾选固定范围(Fixed Bounds)
5.
生成速率(Spawn Rate)
点击发射器更新(Emitter Update)
右边的 +
号,添加生成速率(Spawn Rate)
模块。
生成速率(Spawn Rate)
: 每秒生成的粒子数目。
6.
生成速率(Spawn Rate)
设置 生成速率(Spawn Rate)
值为 1000.0
。
每秒生成 1000.0 个粒子。
7.
发射器更新参数
在 发射器更新(Emitter Update)
部分添加 直接设置新的或现有的参数(Set new or existing parameter directly)
模块。
8.
发射器更新参数
新增一个向量(Vector)
参数。
9.
发射器更新参数
重命名这个参数为 InitialPosition
,并设其值为 模拟位置(Simulation Position)
。
10.
发射器更新参数
新增一个浮点数(Float)
参数。
11.
发射器更新参数
重命名这个参数为 ZOffset
,并设其值类型为 新建表达式(New Expression)
。
12.
发射器更新参数
设 ZOffset
的值为 sin(Emitter.Age)*56
。
13.
移除初始化粒子(Initialize Particles)
删除 初始化粒子(Initialize Particles)
模块。
14.
设置参数
在 粒子生成(Particles Spawn)
部分添加 直接设置新的或现有的参数(Set new or existing parameter directly)
模块。
15.
粒子生成参数
新增一个向量(Vector)
参数。
16.
粒子生成参数
重命名这个参数为 RandomVector
,并设其值类型为 新建表达式(New Expression)
,然后设置其值为: normalize(((( rand(float3(1.0,1.0,1.0) ))) * 2 ) -1 )
17.
粒子生成参数
同样操作增加一批参数到 粒子生成(Particle Spawn)
:
名称:Lifetime
类型:float
表达式:rand(1.5f) + 2.2f
名称:Position
类型:Vector
表达式:Emitter.InitialPosition + Particles.RandomVector *rand(145.0f)
18.
粒子生成参数
名称:SpriteRotation
类型:float - NormalizedAngle
表达式:rand(1.0f)
名称:SpriteSize
类型:Vector 2d - float
表达式:rand(2.5f) + 0.5f
19.
粒子生成参数
名称:Velocity
类型:Vector
表达式:cross(Particles.RandomVector, float3(0,8,0)) * (float3(0.0f, 0.0f, Emitter.ZOffset) *0.2f) + (-1.0f * normalize(Emitter.InitialPosition - Particles.Position)*20)
20.
设置参数
在 粒子更新(Particles Update)
部分添加 直接设置新的或现有的参数(Set new or existing parameter directly)
模块。
21.
粒子更新参数
名称:Color
类型:Linear Color
表达式:Particles.NormalizedAge < 0.333 ? float4(1,0.1,0.1,1) : Particles.NormalizedAge < 0.575 ? float4(0.1,1,0.1,1) : float4(0.1,0.1,1,1)
名称:Position
类型:Vector
表达式:Particles.Position + float3(0, 0, ( sin(Engine.Time) * 0.3f ))
22.
粒子更新参数
名称:SpriteSize
类型:Vector 2D
表达式:(1.0f - abs(Particles.NormalizedAge * 2.0f -1.0f)) * 2.0f
名称:PhysicsForce
类型:Vector
表达式:1-Particles.RandomVector * (length(Particles.Position - Emitter.InitialPosition)*0.25)
23.
粒子更新参数
注意,PhysicsForce 的命名空间,需要设在 Transient
24.
粒子更新参数
同样操作增加一个参数到 粒子更新(Particle Update)
:
名称:Position
类型:Vector
表达式:Particles.Position.z > Emitter.InitialPosition.z - Emitter.ZOffset ? Particles.Position : float3(Particles.Position.x, Particles.Position.y, Emitter.InitialPosition.z -Emitter.ZOffset)
25.
解算力和速度(Solve Forces and Velocity)
在 粒子更新(Particles Update)
部分添加 解算力和速度(Solve Forces and Velocity)
模块。