從前兩節的範例程式可看出,粒子系統(SCNParticleSystem)產出實例時並不需要給任何參數,這表示粒子系統60多個屬性,一定都有預設值(在第5單元 class與struct異同曾提過:物件初始化最重要工作就是給所有屬性初始值),或屬性為Optional類型(預設為nil)。

每個預設值對應粒子系統的某些預設行為,因此,了解這些預設值非常重要,熟悉之後,會讓我們更活用粒子系統。以下將粒子系統所有屬性分成四組分別說明:

第一組:外觀與尺寸

第二組:產出與噴發

第三組:物理模擬

第四組:細部控制與修飾函式

前兩節範例已經對外觀與尺寸、產出與噴發這兩組有初步了解,下一節將學習粒子系統加上物理模擬之後的效果。至於最後一組是進階功能,留給讀者自行探索。

第一組:外觀與尺寸

# 粒子系統屬性 中文名稱 預設值 說明
1 particleImage 粒子圖案 nil 外觀(2D)圖案,預設(nil)使用正方形
2 imageSequenceRowCount 圖案列數 1 圖片含多少(MxN)圖案
3 imageSequenceColumnCount 圖案行數 1 圖片含多少(MxN)圖案
4 imageSequenceInitialFrame 首幀索引 0 0表示左上角第一個圖案
5 imageSequenceInitialFrameVariation 首幀索引變化 0 索引變化範圍(例如10,則表示±5)
6 imageSequenceFrameRate 幀率 0.0 (frame/sec) 每秒顯示多少幀圖案
7 imageSequenceFrameRateVariation 幀率變化 0.0 (frame/sec) 幀率變化範圍(例如10,則表示±5)
8 imageSequenceAnimationMode 動畫模式 .repeat .repeat (循環)
.clamp (一次動畫)
.autoReverse (迴轉)
9 particleSize 粒子尺寸 1 (m) 預設長、寬各1米
10 particleSizeVariation 尺寸變化 0 (m) 尺寸變化範圍(例如10,則表示±5)
11 particleColor 粒子顏色 UIColor.white 粒子主色,預設白色
12 particleColorVariation 顏色變化 (0, 0, 0, 0) 主色變化,4個值分別為彩度(hue)、飽和度(saturation)、亮度(brightness)以及透明度(alpha),0表示不變化,其他數值(0 < x ≤ 1)表示變化範圍。
13 fresnelExponent 菲涅耳係數 1.0 常用於透明表面的反光,若 particleImage 為六面圖案,則粒子會透過此係數映射為透明氣泡
14 stretchFactor 伸展係數 0.0 令粒子移動時,沿運動方向伸展變形

第二組:產出與噴發

# 粒子系統屬性 中文名稱 預設值 說明
15 birthRate (噴射)產出率 0 (particle/sec) 0 表示停止產出/噴射
16 birthRateVariation 產出率變化 0 產出率變動範圍(例如10,則表示±5)
17 particleLifeSpan 存活時間 1.0 秒 粒子存活時間(或生命週期)
18 particleLifeSpanVariation 存活時間變化 0.0 秒 存活時間變動範圍(例如10,則表示±5)
19 warmupDuration 預熱時間 0.0 (秒) 初次噴射前的準備時間
20 emissionDuration 噴射時間 1.0 (秒) 產出率 x 噴射時間 = 發出粒子數
若0.0則瞬間全部發射
21 emissionDurationVariation 噴射時間變化 0.0 (秒) 噴射時間變動範圍(例如10,則表示±5)
22 loops 是否循環/迴圈 true 噴射時間結束後,是否從頭繼續
23 idleDuration 閒置時間 0.0 (秒) 噴射時間結束後的休息時間
24 idleDurationVariation 閒置時間變化 0.0 (秒) 閒置時間變動範圍(例如10,則表示±5)
25 emitterShape 噴射器外形 nil (點/噴射源) 指定噴射源,從幾何形狀表面隨機位置(SCNPlane, SCNBox, SCNSphere, SCNPyramid, SCNCone, SCNCylinder, SCNCapsule, SCNTube, and SCNTorus),預設為單點
26 birthLocation 產出點/噴射源 .surface 預設從幾何形狀表面噴射,其他選項為:
.vertex 從頂點噴射
.volume 從內部空間噴射
27 birthDirection 產出方向 .constant 預設為固定方向,其他選項有:
.surfaceNormal 法線(垂直表面)方向
.random 隨機方向
28 emittingDirection 噴射方向 (0, 1, 0) 預設向上(+Y軸)噴射,僅出生方向為 .constant 時有效。採節點區域座標。
29 spreadingAngle 分散角度 0.0 (度) (隨機)噴射角度
30 particleAngle 旋轉角度 0.0 (度) 粒子旋轉角度
31 particleAngleVariation 旋轉角度變化 0.0 (度) 旋轉角度變動範圍(例如10,則表示±5)
32 particleVelocity 移動速度 0.0 (m/sec) 粒子移動速度,預設靜止
33 particleVelocityVariation 移動速度變化 0.0 (m/sec) 移動速度變動範圍(例如10,則表示±5)
34 particleAngularVelocity 角速度 0.0 (度/秒) 粒子旋轉速度(角速度)
35 particleAngularVelocityVariation 角速度變化 0.0 (度/秒) 角速度變動範圍(例如10,則表示±5)

第三組:物理模擬

# 粒子系統屬性 中文名稱 預設值 說明
36 isAffectedByGravity 是否受重力影響 false 預設不受重力影響
37 isAffectedByPhysicsFields 是否受力場影響 false 預設不受物理力場影響
38 colliderNodes 可碰撞節點 [ ] 碰撞偵測的對象
39 particleDiesOnCollision 碰撞後消亡 false (若有碰撞對象)碰撞後粒子是否消失
40 acceleration 加速度 (0, 0, 0) X/Y/Z三方向的加速度
41 dampingFactor 阻尼係數 0.0 運動(位移)時的阻力
42 particleMass 粒子質量 1.0 (Kg) 若受重力影響才有效
43 particleMassVariation 質量變化範圍 0 (Kg) 質量變動範圍(例如10,則表示±5)
44 particleCharge 粒子電荷 0.0 (庫侖C) 受電磁力場影響時才有效
45 particleChargeVariation 電荷變化範圍 0.0 (庫侖C) 電荷變動範圍(例如10,則表示±5)
46 particleBounce 反彈係數 0.7 與物理實體碰撞後的反彈(1.0表示能量未損耗)
47 particleBounceVariation 反彈係數變化 0.0 反彈係數變動範圍(例如10,則表示±5)
48 particleFriction 摩擦係數 1.0 無摩擦力,可自由滑行
49 particleFrictionVariation 摩擦係數變化 0.0 摩擦係數變動範圍(例如10,則表示±5)
50 systemSpawnedOnCollision 碰撞後啟動另一個粒子系統 nil 當粒子偵測到碰撞後,可啟動另一個粒子系統
51 systemSpawnedOnDying 消亡後啟動另一個粒子系統 nil 當一個粒子消亡後,可啟動另一個粒子系統
52 systemSpawnedOnLiving 產出後啟動另一個粒子系統 nil 當一個粒子產出時,可啟動另一個粒子系統
53 blendMode 色彩混合模式 .additive 適用於粒子重疊時:
.additive 顏色疊加
.subtract 顏色相減
.multiply (正規化)顏色相乘
.screen 顏色過濾
.alpha 透明度相乘
.replace 顏色取代
54 orientationMode 旋轉模式 .billboardScreenAligned .billboardScreenAligned 圖案永遠面向螢幕視角
.free 圖案可任意角度
.billboardViewAligned
.billboardYAligned
55 sortingMode (渲染次序)排序模式 .none 適用於粒子重疊時:
.none 無特定次序
.projectedDepth 投影深度
.distance 距離遠者優先
.oldestFirst 最早者優先
.youngestFirst 最後者優先
56 isLightingEnabled 是否受光照影響 false 是否開啟光照渲染
57 isBlackPassEnabled 啟用全黑塗色 false 先渲染為黑色,再套用圖案(增加對比,但影響效能)
58 isLocal 是否採區域座標 false 位置、距離、速度是否採用節點的區域座標
59 speedFactor 整體速度因子 1.0 加快或減慢整體速度

第四組:細部控制與修飾函式

# 粒子系統屬性 中文名稱 預設值 說明
60 reset() 重置函式 - 所有屬性返回預設值
61 handle() 事件處理函式 - 事件包括
.birth 粒子產出時
.death 粒子消亡後
.collision 粒子發生碰撞
62 propertyControllers 屬性控制動畫 nil 對粒子某個屬性增加動畫行為
63 addModifier() 新增修飾函式 - 對粒子某個或某些屬性增加自訂的修飾程式(匿名函式),每幀畫面執行一次
64 removeModifiers() 移除修飾函式 - 移除修飾函式
65 removeAllModifiers() 移除所有修飾函式 - 移除所有修飾函式
66 orientationDirection 面對方向 (0, 0, 0) 官方文件未說明
67 particleIntensity 粒子密度 1.0 官方文件未說明
68 particleIntensityVariation 粒子密度變化 0.0 官方文件未說明
69 writesToDepthBuffer 是否寫入深度緩衝(zBuffer) false 官方文件未說明