下面來分析粒子系統驅動的數據,Michał使用粒子的尺寸(Size)和顏色(Color)來控制一些著色器參數。為了更好的進行參數調整,MeltingObject腳本除了引用了「熔化」對象的渲染器(Melting Object Renderer)和粒子渲染器(Particles Renderer),還添加了網格剔除值(Cutoff Value),塌陷強度(Collapse Strength,即重力)和發光強度倍數值(Emission Strength),以曲線的形式編輯。如下圖所示:
最後提交大賽評審的版本,事實已經禁用了粒子渲染,因為這些粒子只是為了將數據傳遞給著色器,不會執行任何其它操作。
下面的操作視頻打開了粒子渲染,幫助大家理解特定參數的調整所引起的變化:
那這些粒子到底是如何驅動著色器的呢?這點在Unity中實現並不複雜。
1、ParticleSystem有這樣一個API:
public int GetParticles(Particle[] particles);
其作用是將粒子數據寫入一個粒子數組作為緩衝,返回值就是該粒子的數量。
2、粒子的每個參數都可以被讀取,比如尺寸、速度、位置、顏色、透明值等。在運行時還可以使用GetCurrentColor、GetCurrentSize、GetCurrentSize3D,獲得當前狀態下的顏色、二維尺寸和三維尺寸
3、取得這些數值後,便可以通過「圓環」的渲染器,去修改應用該渲染器的材質的著色器參數。而這裡只需做幾件事:用尺寸(Size)設定點亮面積的大小;用透明值(Alpha)設置網格變形值;在粒子發射器的生命周期內,基於網格剔除值、塌陷強度和發光強度倍數的曲線進行變化。
這樣,就能產生粒子系統驅動著色器的效果了。