UE5 Niagara | 官方小案例練習(xí)1.4 控制粒子的朝向
實(shí)現(xiàn)Sprite朝向
創(chuàng)建粒子系統(tǒng)
創(chuàng)建粒子系統(tǒng) eif_1_4

**發(fā)射器更新(Emitter Update)**模塊 生成速率(SpawnRate)

調(diào)整一個數(shù)值—-表示每秒生成 30個粒子
創(chuàng)建SineWave變量
發(fā)射器屬性(Emitter Attributes)增加一個 float類型的變量

命名SineWabe

選擇這個變量 ?拖到粒子發(fā)射器更新(Emitter Update)模塊

理解:
創(chuàng)建這個數(shù)值是想控制每一個粒子的旋轉(zhuǎn)角度,
發(fā)射器更新(Emitter Update)是在發(fā)射器層面計(jì)算的,而不是按粒子計(jì)算的,所以每一個引用它的粒子都會得到相同的值,在這種情況下,它們可以同時旋轉(zhuǎn)
這個變量拖到發(fā)射器更新階段,就是每一幀都可以修改這個數(shù)值
設(shè)置SineWave數(shù)值類型是 浮點(diǎn)數(shù)范圍(Clamp Float)

限制計(jì)算 ?范圍(0-1)

Flaot 設(shè)置 ?Sine輸入

設(shè)置 ?標(biāo)準(zhǔn)化角度(Normalized Angle)的值類型為浮點(diǎn)數(shù)相乘(Multiply Float)

A設(shè)置綁定粒子的生命周期Age

設(shè)置B ? 0. 25 ? ? ? 乘粒子的生命周期
初始化粒子
設(shè)置粒子的存活時間(Lifetime) ?顏色 ? ? 粒子的大小

需要注意的是隨機(jī)獨(dú)立通道(Random Individual Channels)
擴(kuò)展
隨機(jī)獨(dú)立通道(Random Individual Channels)
創(chuàng)建球體發(fā)射器
在 粒子生成(Particles Spawn) 部分的添加 球體位置(Sphere Location)模塊

效果

設(shè)置發(fā)射器的半徑(SphereRadius)

點(diǎn)擊上面的參數(shù)小按鈕,顯示出所有的

臨時階段(Stage Transients) 增加一個 變量 設(shè)置成向量類型

命名—FacingCenter

注意
粒子屬性(Particle Attributes)
寫在粒子階段的屬性,可以在粒子階段讀取。
階段臨時(Stage Transients)
臨時變量可以寫到任何模塊,也可以從任何模塊讀取。臨時變量不會在幀與幀之間或階段之間持久化,例如發(fā)射器到粒子,或生成到更新。
把這個變量拖到粒子更新(Particles Update)

設(shè)置這個變量的類型 向量減法(Subtract Vector)—表示倆個向量減

A 點(diǎn)設(shè)置粒子的現(xiàn)在位置,——-注意選擇下面這個,上面那個是初始位置。

B 點(diǎn)設(shè)置 模擬位置(Simulation Position)

擴(kuò)展模擬位置(Simulation Position)
根據(jù)發(fā)射器上的 局部空間(Local Space) 標(biāo)志,返回 Engine.Owner.Position 或本地(0,0,0)????

粒子屬性中增加一個 ——變量 ——向量(Vector)類型????

命名

拖到粒子更新(Particles Update)

設(shè)置 這個變量類型為旋轉(zhuǎn)向量(RotateVector)

把控制旋轉(zhuǎn)的VectorToRotate ?變量設(shè)置為FacingCenter變量(一開始創(chuàng)建的)

變成這樣

設(shè)置 Yaw 軸 ? Pitch ?軸 ?Roll旋轉(zhuǎn) ? ?的值 ? ? 60.
時間增量(Delta Time) ?的值 ?設(shè)置成粒子的 年齡(Age)
再次SpiteFacing變量拖入粒子更新模塊

設(shè)置SpriteFacing 的類型 向量插值(Lerp Vector)
表示倆個位置的數(shù)值插值計(jì)算
A點(diǎn) ? 設(shè)置 ?FacingCenter ? B點(diǎn)設(shè)置 SpriteFacing ? Alpha 設(shè)置 ?Sinewave

Particles.SpriteFacing 是控制粒子面對那個方向的變量 ?,這一步操作的是,控制粒子不斷的旋轉(zhuǎn)向量和球體發(fā)射器中心之間的向量進(jìn)行混合,
控制粒子的旋轉(zhuǎn)軸
粒子更新階段(Particle Update) ? ?增加 ? 漩渦力(VortexVelocity)

效果

設(shè)置 漩渦力(VortexVelocity)
設(shè)置 速度量(Velocity Amount) ?的隨機(jī)值

設(shè)置 ? 最小值 ? ?最大值

設(shè)置 漩渦軸(Vortex Axis) 的值類型為 向量插值(Lerp Vector)。

設(shè)置 漩渦軸(Vortex Axis) 的 A 向量(A Vector) 的值為 隨機(jī)向量(Random Vector)。
B點(diǎn)也設(shè)置 ? ? ?隨機(jī)向量(Random Vector)

注意:使用的是點(diǎn)向量 ? ? 不是上面的 RabdomRange Vector
設(shè)置 ?B點(diǎn)的Alpha設(shè)置成粒子的(Normalized Age) ?標(biāo)準(zhǔn)化年齡

效果

設(shè)置粒子的大小優(yōu)化
在粒子粒子更新(Particles Update) ?增加一個 縮放精靈大小(Scale Sprite Size)

編輯縮放大小數(shù)值 ?為 float類型

這個是轉(zhuǎn)換成單變量——在設(shè)置成功曲線

根據(jù)個人設(shè)置數(shù)值

效果
從小變大

設(shè)置粒子的朝向模式
選擇渲染器(Sprite Randerer) 然后設(shè)置面向模式(Facing Mode) 為自定義面向向量(Custom Facing Vector)

效果

注意:
這樣設(shè)置后,精靈廣告牌(Sprite Billboard)會面向 Particles.SpriteFacing 向量屬性,如果沒有這個屬性,則會倒退為 FaceCamera 模式.
FaceCamera 模式: 精靈廣告牌(Sprite Billboard)原點(diǎn)會一直"看著"攝像頭原點(diǎn),嘗試把它的向上軸(up axis)和攝像頭保持一致。
在設(shè)置一些渲染組件下的 排列模式 ?排序模式(Sorting Mode) 為 視距(View Distance)

這會給渲染設(shè)置優(yōu)先條件:根據(jù)到攝像頭原點(diǎn)的距離排序
綁定
Particles.SpriteFacing 并不是唯一一個有特殊的意義、 由模擬自動處理的渲染器綁定(Renderer Binding)。點(diǎn)擊一個渲染器,本例中是堆棧底部的 精靈渲染器(Sprite Renderer),然后向下滾動到 Bindings(綁定)

你會看到一個粒子屬性的列表,這些屬性對引用它們的渲染器有特殊意義。如果需要的話,每個屬性都可以用其他屬性覆蓋。
完成

總結(jié)
開始創(chuàng)建SineWave變量是控制每個一個粒子的旋轉(zhuǎn)角度的 ,設(shè)置成Sine輸入類型
Sine 曲線是(-1 到1 )的范圍,所以要限制最大值和最小值(0-1)范圍

公式y(tǒng) = sine(x) ? ?這里的X ? ?是由粒子的生命周期Age乘一個數(shù)得到了。

使用材質(zhì)節(jié)點(diǎn)模擬了一下效果

2. 變量 FacingCenter 是得到每一個粒子的向量,使用粒子的位置(Position)減去模擬位置(Simulation Position)

模擬位置就是粒子局部空間 (0,0,0)的位置

設(shè)置 ?FacingCenter ? B點(diǎn)設(shè)置 SpriteFacing ? Alpha 設(shè)置 ?Sinewave
Particles.SpriteFacing 是控制粒子面對那個方向的變量 ? , 這一步操作的是,控制粒子不斷的旋轉(zhuǎn)向量和球體發(fā)射器中心之間的向量進(jìn)行混合,
使用SineWave 進(jìn)行混合,就是曲線混合方法
資料
https://www.cyanhall.com/cn/tutorial/4.niagara-sprite-facing/