用Unity來下一場雪吧——Particle System 下雪粒子特效

作者:Truly
我又來了。首先祝大家新年快樂!

這個(gè)時(shí)節(jié)為了應(yīng)景,咱們來弄點(diǎn)雪的特效來玩玩。
在游戲中對于火焰、煙霧、魔法等效果可以通過粒子系統(tǒng)(Particle System)來實(shí)現(xiàn)。粒子具有動態(tài)性,它的大小、速度、顏色可以隨著生命周期或者速度改變。本文將通過制作普通下雪粒子、優(yōu)化飄落細(xì)節(jié)以及添加刮風(fēng)效果三個(gè)部分,簡單介紹幾個(gè)常用的模塊。
一 制作下雪粒子特效
1 添加Particle System
(1)Hierarchy窗口右鍵 > Effects > Particle System

(2)新建一塊Plane作為地面,并且把Particle Syetem位置移到Plane上方。
(3)旋轉(zhuǎn)Directional Light,使背景變暗(隨意即可),便于觀察。

2 設(shè)置Shape模塊
Shape模塊定義粒子發(fā)射器的形狀,可提供沿著該形狀表面法線或隨機(jī)方向的初始力,并控制粒子的發(fā)射位置及方向。設(shè)置參數(shù),擴(kuò)大發(fā)射盒體積,粒子將會從發(fā)射器內(nèi)隨機(jī)發(fā)射:
Shape:Box,定義發(fā)射器形狀。
Scale:(100,100,11),根據(jù)需要調(diào)節(jié)發(fā)射器縮放大小。

3 設(shè)置Particle System Main模塊
Particle System Main模塊包含影響整個(gè)系統(tǒng)的全局屬性,大多數(shù)這些屬性用于控制新創(chuàng)建的粒子的初始狀態(tài)。

(1)Start Lifetime(生命周期):10,可以理解為粒子的起始“生命值”為10,每秒減1。
(2)Start Speed(初始速度):0,將在其他模塊控制它的速度。
(3)Start Size(初始大小):Random Between Two Constants(在兩常數(shù)間隨機(jī)) > 0.1 ~ 0.4。
數(shù)字屬性的變化方式(其他數(shù)字屬性也基本適用):點(diǎn)擊屬性值右側(cè)小三角,彈出的下拉選擇欄如圖所示:

Constant:屬性值為固定值。
Curve:隨著時(shí)間,屬性值根據(jù)曲線變化。
Random Between Two Constants:隨著時(shí)間,屬性值在兩常量間隨機(jī)變化。
Random Between Two Curves:隨著時(shí)間,屬性值在兩曲線間隨機(jī)變化。
(4)Simulation Space:World,使粒子的運(yùn)動坐標(biāo)在世界空間中(不隨父對象移動)。

4 設(shè)置Emission模塊
Emission模塊中的屬性影響粒子系統(tǒng)發(fā)射的速率。由于在第2步中增加了發(fā)射器的體積,粒子看起來比較稀疏,為了有飄雪的感覺,需要加快發(fā)射速率,提高粒子密度。
Rate over Time:100,每秒發(fā)射100個(gè)粒子。

5 設(shè)置Velocity Over Lifetime模塊
Velocity Over Lifetime模塊控制每個(gè)粒子在生命周期內(nèi)的速度。雪花飄落時(shí)會在XZ平面(水平)上隨機(jī)小幅度移動,而在Y軸的負(fù)方向(向下)也會忽快忽慢地下落。設(shè)置參數(shù):
Linear: Random Between Two Constants > x:(-1,1),y(-1,-2),z(-1,1)。
Space: World。

效果如下:

6 設(shè)置Renderer模塊
該模塊決定粒子如何被渲染。這是一個(gè)常用的模塊,本次保持默認(rèn)即可。
(1) Render Mode:允許在2D Billboard 圖形模式和3D Mesh模式之間選擇。
Billboard模式適合于標(biāo)識從任何方向看起來體積大致相投的粒子(例如云)。
(2) Material:用于渲染粒子的材質(zhì)。創(chuàng)建粒子系統(tǒng)是會使用默認(rèn)材質(zhì),假如有雪花的材質(zhì),效果會更上一層樓。

此時(shí),一個(gè)普通的下雪粒子特效已經(jīng)制作完成了,但別著急,還有很大美化的空間,美術(shù)的感染力往往在于一些細(xì)節(jié)。
二 優(yōu)化飄落表現(xiàn)
7 設(shè)置Noise模塊
制作粒子特效的思路像是做“加法”,不斷的添加一些合適的點(diǎn)綴、整體和局部的運(yùn)動,會讓粒子更加逼真。當(dāng)然也不能加入很多無關(guān)的效果,反而會讓粒子變得很亂。
對下雪來說,真實(shí)的空氣中一定有微風(fēng),就算沒有風(fēng)也有氣流的擾動,所以加入一些噪聲擾動,會讓統(tǒng)一下落的雪花更真實(shí)一些。
使用噪聲影響粒子的運(yùn)動,遵循水平面小幅度隨機(jī),下落忽快忽慢的思路,使其更加自然:
(1)Separate Axes(分離軸):勾選后,可以調(diào)整每個(gè)軸向的影響:
Random Between Two Constants > X(-0.8,0.8),Y(-0.5,0),Z(-0.8,0.8)。
(2)Frenquency(頻率):0.5,數(shù)值越低變化越平緩。
(3)Scroll Speed(滾動速度):0.5,隨著時(shí)間滾動噪聲圖,使粒子移動效果更加動態(tài)。

8 設(shè)置Collsion模塊
除了噪聲擾動以外,Unity的粒子系統(tǒng)還支持一種非常強(qiáng)大的功能:讓粒子可以像剛體一樣發(fā)生碰撞。Collsion模塊控制粒子如何與場景中的游戲?qū)ο笈鲎?,支持世界碰撞和平面碰撞?/p>
雪花留在地面上的效果非常棒,其實(shí)粒子碰撞的性能開銷比較大,如果用在實(shí)際游戲中,可以看看開啟碰撞是否會對幀率有影響。
當(dāng)需要雪花飄落在地上時(shí),可以勾選此模塊。如下設(shè)置后,粒子便能停留在地面上:
Type:World。
Bounce(彈力):雪噴到地面后不需要反彈,設(shè)為0。
Dampen:粒子碰撞后損失速度的比例,設(shè)為1。

9 設(shè)置Color over Lifetime
雪花飄落在地面上,隨著時(shí)間慢慢淡化,當(dāng)生命周期結(jié)束時(shí)最終消失褪去。
Color over Lifetime模塊控制粒子的顏色和透明度在生命周期中的變化。當(dāng)雪花快消失的時(shí)候,調(diào)節(jié)透明度,使粒子有淡出的消失效果。點(diǎn)擊Color屬性右側(cè)圖標(biāo)進(jìn)入Gradient Editor:
漸變條上下兩側(cè)左鍵可以新增標(biāo)識點(diǎn)。
漸變條上方用于調(diào)節(jié)透明度(藍(lán)線附近),在靠近右側(cè)的地方新增一個(gè)標(biāo)識點(diǎn)。
把漸變條右上角標(biāo)識點(diǎn)的透明度調(diào)為0。
漸變條下方用于調(diào)節(jié)顏色(紅線附近)。
操作如圖所示:

經(jīng)過一輪優(yōu)化之后,雪花不僅飄落的細(xì)節(jié)更加豐富,而且能夠接觸場景物體,消失也能自然淡出。
三 添加刮風(fēng)效果
優(yōu)化完飄落細(xì)節(jié)后,下雪特效已經(jīng)有不錯的表現(xiàn),根據(jù)具體的使用場景,還有進(jìn)一步美化的空間。比如有時(shí)候游戲需要一個(gè)下雪的同時(shí)并且刮風(fēng)的場景,此時(shí)可以結(jié)合External Forces模塊以及Particle System Force Field組件,讓雪花飄落的同時(shí)接收特定力場的作用。
10 設(shè)置External Forces模塊
External Forces模塊控制影響粒子的風(fēng)區(qū)。
(1) 勾選External Forces模塊后,在Hierarcy窗口中添加Particle System Force Field:

(2)設(shè)置Particle System Force Field參數(shù):
Shape:Box。
EndRange:20,增加外邊界,擴(kuò)大影響范圍。粒子會在力場范圍內(nèi)受到影響。
Direction(方向) > ?x > Random Between Two Constants : 0 ~ 1.5。
Gravity(引力) > Strength:0,不需要引力。
效果如圖:

結(jié)語:本文先制作了普通的雪粒子特效,再優(yōu)化飄落過程的細(xì)節(jié),最后為粒子添加力場達(dá)到了刮風(fēng)的效果,通過三個(gè)部分簡單介紹了粒子系統(tǒng)常用的模塊,希望對大家有所啟發(fā)。

咱們的游戲開發(fā)交流群也歡迎強(qiáng)勢插入:869551769
希望參與線下游戲開發(fā)學(xué)習(xí)的,歡~~~~~~迎訪問:http://www.levelpp.com/