(Doc) Fracturing & Destruction

本篇文章、圖片出處來自 Fracturing & Destruction Help
軟體版本與本翻譯文件可能會有落差,本翻譯文件僅供參考。
本譯文為本站譯者原創翻譯內容,文字著作權歸本站所有。
未經授權,請勿任意轉載、改作或商業使用。

建立一個破碎物件其實很簡單。以下是一般開始時的快速步驟:

  1. 前往 GameObject » Create Other » Ultimate Game Tools » Fractured Object。 這會產生一個新的 GameObject,用來代表你的破碎物件。 重要的是:所有參數在滑鼠移上去時都會顯示提示(tooltip),所以即使參數很多,你也能很容易確認每個參數的用途。
  2. 在這個新的 GameObject 上,指定你要用來作為破碎來源(source for fracturing)的物件。 來源物件不會被修改,所以不需要備份,不用擔心。
  3. 如果你的物件不會附著在靜態世界(static world)上,並且你希望它在第一次撞擊時就塌陷,請勾選 Start Static。 如果你的物件會附著在世界上(這是最常見的情況),就保持預設狀態,稍後再加入支撐平面(support planes)。
  4. 設定 Interior material 參數。 這會使用你選擇的材質,改變內部面(interior faces)的外觀。
  5. 按下 Compute Chunks,產生所有碎塊(chunks)。 第一次會跳出提示,詢問你是否要隱藏來源物件並把新的破碎物件放到相同位置。 若你選擇「否」,破碎物件會建立在目前的位置。
  6. 現在你可以透過 Preview Chunks 的滑桿查看碎塊,完成!
  7. 如果你想調整碎塊數量、碎裂演算法或其他相關參數,請到 Fracturing & Interior Material 區段修改,然後重新產生碎塊。
  8. 如果 Chunk Interconnection 參數有勾選(預設是勾選),你可能會想新增支撐平面(support plane)來把物件附著到世界上。 通常你會建立代表地板的平面,但你也可以旋轉平面,讓物件附著到牆面或天花板。 位於平面 -Y 方向 的碎塊會以藍色標示,它們會固定在世界上並且不可破壞,我們稱它們為支撐碎塊(support chunks)。 其他碎塊都可以被破壞,但在受到足夠力道之前,仍會透過支撐碎塊與整體結構連結在一起。

支撐碎塊(Support chunks)

支撐碎塊非常重要,因為它們能啟用「智慧塌陷」。 例如你有一根柱子,從中間射擊把它打斷,你會希望中間以上的所有碎塊都一起塌下來。 這種情況下,你會建立一個代表地板的平面,讓它與底部的碎塊相交,將那些底部碎塊標記為支撐碎塊。

有些情況你不希望物件附著在地面,而是附著在天花板上,例如吊燈。 這時你需要旋轉平面把它上下顛倒,並移動到天花板位置,將頂部碎塊標記為支撐碎塊。 你可以建立多個平面,並設定任意方向與大小,用於更複雜的配置。

接下來你大概會想調整物件如何碎裂,以及加入視覺特效。 這些都在面板的 Events 區段中完成。

事件(Events)

Chunk Detach From Object Due To Physic Collision

這個區段可讓物件在剛體(rigidbody)碰撞時產生碎裂。 你可以設定使碎塊從結構上脫離所需的最小質量(mass)與速度(velocity)。 主區段中的 Interconnection Strength(互連強度)在此非常關鍵: 當數值較低時,不只會讓被撞到的碎塊脫離,連它的鄰近碎塊也可能一起脫離。

你也可以選擇碎塊脫離時要播放的音效(sound clip),並指定一個 prefab 清單, 系統會在碰撞點隨機選擇其中一個 prefab 生成(instance)。 這些 prefab 通常會是包含爆炸或粉塵雲的粒子系統(particle system)。 實際用法請參考我們的範例場景(sample scenes)。

Free (Detached) Chunks

這個區段用來處理已經從結構上脫離的碎塊之碰撞事件。 你可以調整碎塊的存活時間(lifetime),限制同時存在的剛體數量,以節省 CPU 運算。

你也可以設定碎塊需要達到的最小質量與速度,才會觸發碰撞事件。 和前一段相同,你可以設定播放哪個音效、以及要生成哪些 prefab。 另外還有一個功能: 你不必只指定單一音效,而是可以設定一個音效清單,系統會在每次碰撞時隨機選一個播放, 這樣聲音會更自然、變化更隨機。

When Explode() Is Called Through Scripting (Explosions)

這個區段處理透過腳本觸發的事件:當呼叫 FracturedObject.Explode() 時會發生的行為 (詳情請見 scripting 區段)。

你可以設定爆炸發生時播放的音效,並指定一個 prefab 清單,系統會在整個物件上隨機生成(instance)這些 prefab。 這可用於爆炸粒子與粉塵粒子。

When Impact() Is Called Through Scripting (f.e. missiles)

這個區段處理透過腳本觸發的事件:當呼叫 FracturedChunk.Impact() 時會發生的行為 (詳情請見 scripting 區段)。

你可以設定撞擊時播放的音效,以及在碰撞點生成的 prefab(最常見是爆炸或粉塵的粒子系統)。

我們建議你查看範例(samples)以瞭解實際用例。

還有更多參數可以調整,以下是完整說明參考(help reference):

Main

主要的碎裂參數。

Main(主要)

這些是主要的碎裂參數。

Source Object(來源物件)

用來作為碎裂輸入的網格(mesh)來源物件。它不會被刪除,只是作為輸入使用。 typeof(GameObject), true);

Island Generation(孤島生成)

在切割(splitting)時偵測彼此隔離的網格,並將它們分離成獨立的碎塊(chunk)。 例如:如果你把一個 U 形物件水平切開,啟用 Island Generation 後會產生 3 個物件(底部 + 兩個尖端各自分離), 而不是 2 個(底部一個,兩個尖端合在同一個物件裡)。

Chunk Interconnection(碎塊互連)

會在碎塊之間生成一個內部連結圖(connection graph),以形成結構行為。 這能啟用「智慧破壞」:物件會依據碎塊彼此的互連狀態,以及它與世界(world)的連結方式,決定如何塌陷。 常見例子是範例場景中的拱門與柱子:如果你摧毀柱子,上方的碎塊也會跟著塌下來。 若要了解如何把碎塊連接到世界,請參考 Support Planes(支撐平面)。

Start Static(起始靜態)

如果 Chunk Interconnection 有勾選,且沒有定義支撐平面(support planes)或支撐碎塊(support chunks), 物件會在開始時就塌陷。若你希望物件維持靜態直到第一次接觸(first contact),請勾選此項。

Interconnection Min Area(互連最小面積)

兩個互連碎塊之間,要被視為「相連」所需的最小接觸面積。 設為 0 並不代表所有碎塊都會被視為相連;只有那些至少共享某個面積的共同面(即使很小)才會被視為相連。 你可以在不重新計算碎塊(recompute chunks)的情況下調整此值。

Interconnection Strength(互連強度)

當一個仍附著在物件上的碎塊被擊中並脫離時,此值用來控制「有多少互連的碎塊也會一起脫離」。 0.0 會讓整個物件塌陷;1.0 則不會讓任何互連碎塊跟著脫離。 你可以在不重新計算碎塊的情況下調整此值。

Support Hor. Strength(支撐水平強度)

控制碎塊與支撐碎塊之間允許的最大水平距離:在此距離內碎塊可維持附著於物件;超過則會掉落。 例如在拱門與柱子的範例場景中,如果你摧毀相鄰的柱子,而上方結構在水平距離上離最近的柱子(包含支撐碎塊)太遠, 那上方部分也會塌陷。

Support Is Indestructible(支撐不可破壞)

啟用後,支撐碎塊無法被破壞或從物件中移除。

Island Max Connect Dist.(孤島最大連接距離)

當指定來源物件且啟用 Island Generation 時,系統可能會偵測到內部存在多個封閉網格(closed meshes), 並且其中一些可能與其他網格相互接近或連在一起。 這個值用來控制:某個孤島的一個面,與另一個孤島的面之間,最遠可以相距多遠仍被視為兩個孤島相連。

Total Mass(總質量)

物件的總質量。每個碎塊的質量會依據其體積(size)與此總質量計算得到。 你可以在不重新計算碎塊的情況下調整此值。

Chunk Physic Material(碎塊物理材質)

指派給每個碎塊的 Physic Material(物理材質)。

Min Collider Volume(最小碰撞體體積)

體積小於此值的碎塊,會使用 Box Collider(盒狀碰撞體)而不是 Mesh Collider(網格碰撞體), 以加速碰撞運算(collisions)。

Cap Precision Fix (Adv.)(封口精度修正/進階)

只有在你遇到「網格出現奇怪三角形」或「意外崩潰」時,才把此值從 0 改動! 這通常發生在面非常薄(very thin faces)的網格上,因為浮點誤差(floating point errors)造成。 合理範圍通常是 0.001 到 0.02;更大的值會在某些切割上引入些微可見的變形。 如果只有 2~3 個面有問題,另一個替代方法是改用不同的 random seed(隨機種子)。

Reverse Cap Normals(反轉封口法線)

如果內部面(interior faces)的光照(lighting)方向反了,請勾選此項。

Fracturing & Interior Material(碎裂與內部材質)

這些參數用來控制切割(slicing)的執行方式,以及內部材質。

Fracture Method(碎裂方法)

碎裂演算法。Voronoi 會生成像細胞分割般、較自然的碎塊; BSP 則透過平面逐步切割物件,直到達到目標碎塊數量。 BSP 計算速度較快,且提供不同的控制方式。

目前 Voronoi 正在進行大量效能優化,以便在高細胞數量(high number of cells)時能更快運行。

For Voronoi fracturing:

For Voronoi fracturing(Voronoi 碎裂參數)

Use Volume Optimization(使用體積最佳化)

在使用大型網格(large meshes)或具有大量空體積(huge empty volume)時,會讓碎裂計算更快。

Use Proximity Optimization(使用鄰近最佳化)

用於加速 Voronoi 計算。在某些情況下可能會導致碎塊彼此相交(intersecting chunks);若發生此情況請停用。

Use Multithreading(使用多執行緒)

在 Voronoi 計算的部分步驟中使用多執行緒。此功能尚未完全測試/最佳化,但理論上可正常運作。 只有在你遇到任何問題時才停用。

Cells In Local X(本地 X 方向細胞數)

Voronoi 會生成 X*Y*Z 個 cells。此參數是 X 維度要生成的 cells 數量。

Cells In Local Y(本地 Y 方向細胞數)

Voronoi 會生成 X*Y*Z 個 cells。此參數是 Y 維度要生成的 cells 數量。

Cells In Local Z(本地 Z 方向細胞數)

Voronoi 會生成 X*Y*Z 個 cells。此參數是 Z 維度要生成的 cells 數量。

X Cells Variation(X 細胞變異度)

數值越大,X 維度上 cells 的尺寸與位置差異會越大。

Y Cells Variation(Y 細胞變異度)

數值越大,Y 維度上 cells 的尺寸與位置差異會越大。

Z Cells Variation(Z 細胞變異度)

數值越大,Z 維度上 cells 的尺寸與位置差異會越大。

For BSP fracturing:

For BSP fracturing(BSP 碎裂參數)

Number Of Chunks(碎塊數量)

要將網格(mesh)碎裂成的碎塊(chunks)數量。

Slice In World Space(在世界座標切割)

控制切割(slicing)是在物件的本地座標(local object space)中進行,或是在世界座標(world space)中進行。 請注意:系統採用的是原始物件(original object)的朝向,而不是破碎後物件(fractured object)的朝向。

Slice Regularly(規則切割)

若啟用,切割會以「讓碎塊在各軸向尺寸都盡量小」為目標來進行; 若未啟用,切割會依照你設定的機率,以隨機方式進行。

Slice X Probability(X 切割機率)

在 X 方向進行一次切割的機率(0~1)。

Slice Y Probability(Y 切割機率)

在 Y 方向進行一次切割的機率(0~1)。

Slice Z Probability(Z 切割機率)

在 Z 方向進行一次切割的機率(0~1)。

Slice Size Variation(切割尺寸變異度)

0.0 會讓碎塊大小更平均;數值越高,碎塊尺寸差異會越大。

Slice X Variation(X 平面切割角度變異)

在 X 平面上的切割角度變異程度。

Slice Y Variation(Y 平面切割角度變異)

在 Y 平面上的切割角度變異程度。

Slice Z Variation(Z 平面切割角度變異)

在 Z 平面上的切割角度變異程度。

Interior & Events(內部材質與事件)

Interior Material(內部材質)

套用在碎塊(chunks)內部面(interior faces)上的材質。

Interior Mapping U Tile(內部貼圖 U 平鋪)

內部面貼圖映射的 U 方向平鋪(Tiling)數值。

Interior Mapping V Tile(內部貼圖 V 平鋪)

內部面貼圖映射的 V 方向平鋪(Tiling)數值。

Events(事件)

這些參數用來控制物件在某些事件發生時的行為。

Chunk Detach From Object Due To Physics Collision(因物理碰撞而使碎塊從物件脫離)

Min Impact Mass(最小撞擊質量)

物件在撞擊時要讓本物件的碎塊脫離,所需的最小質量。

Min Impact Velocity(最小撞擊速度)

物件在撞擊時要讓本物件的碎塊脫離,所需的最小速度。

Exit Force(退出力)

若碎塊因撞擊而脫離,會對該碎塊施加此數值的力。

Upwards Modifier(向上修正)

為有 Exit Force 的碎塊增加向上爆發的效果。數值 0.0 表示不添加任何效果; 2.0 表示會以「從碎塊下方 2 的距離」來施加力量。 "));

Detach Sound(脫離音效)

當碎塊因撞擊而脫離時,會在碰撞點播放此音效。

Instance Prefab List (1 Randomly Spawned On Detach)(Prefab 實例清單:脫離時隨機生成 1 個)

Prefab 清單。當碎塊因撞擊而脫離時,系統會從此清單隨機挑選一個 prefab, 並在碰撞點進行實例化(instance)。可用於粒子/爆炸效果。

Call Method Name(呼叫方法名稱)

在「撞擊觸發碎塊脫離」事件發生時要呼叫的方法名稱(請見下一個參數與 scripting reference)。

Call GameObject(呼叫目標 GameObject)

要被呼叫其方法的 GameObject。請參考 scripting reference。

Free (Detached) Chunks(自由/已脫離的碎塊)

Min Chunk LifeTime(碎塊最短存活時間)

自由碎塊的最短存活時間。當碎塊壽命到期時會被刪除。

Max Chunk LifeTime(碎塊最長存活時間)

自由碎塊的最長存活時間。當碎塊壽命到期時會被刪除。

Offscreen LifeTime(離開畫面存活時間)

若自由碎塊離開可見畫面超過此秒數,會被刪除。

Min Impact Mass(最小撞擊質量)

自由碎塊要觸發碰撞事件所需的最小撞擊質量。

Min Impact Velocity(最小撞擊速度)

自由碎塊要觸發碰撞事件所需的最小撞擊速度。

Max Simult. Sounds(同時音效上限)

同一時間允許播放的碰撞音效最大數量。

Collision Sound List (1 Randomly Played On Collision)(碰撞音效清單:碰撞時隨機播放 1 個)

音效清單。當自由碎塊發生碰撞時,會從清單中隨機挑選一個音效, 並在碰撞點播放。

Max Simult. Prefabs(同時 Prefab 上限)

同一時間允許存在的碰撞 prefab 最大數量。

Collision Prefab List (1 Randomly Spawned On Collision)(碰撞 Prefab 清單:碰撞時隨機生成 1 個)

Prefab 清單。當自由碎塊發生碰撞時,會從清單中隨機挑選一個 prefab, 並在碰撞點進行實例化(instance)。可用於粒子/爆炸效果。

Call Method Name(呼叫方法名稱)

在自由碎塊碰撞時要呼叫的方法名稱(請見下一個參數與 scripting reference)。

Call GameObject(呼叫目標 GameObject)

要被呼叫其方法的 GameObject。請參考 scripting reference。

When Explode() Is Called Through Scripting (Explosions)(透過腳本呼叫 Explode() 時:爆炸)

Explosion Sound(爆炸音效)

當在此物件上呼叫 Explode() 時要播放的音效。

Random Prefabs(隨機 Prefab 數量)

要在物件的隨機位置實例化(instance)的 prefab 數量。

Instance Prefab List (Spawned Randomly Around)(Prefab 實例清單:周圍隨機生成)

Prefab 清單。當呼叫 Explode() 時,會從此清單中以隨機數量挑選並在物件的隨機位置實例化(instance)。 可用於粒子/爆炸效果。

When Impact() Is Called Through Scripting (f.e. Missiles)(透過腳本呼叫 Impact() 時:例如飛彈)

Impact Sound(撞擊音效)

當在此物件上呼叫 Impact() 時要播放的音效。

Impact Prefab List (1 Randomly Spawned On Impact)(撞擊 Prefab 清單:撞擊時隨機生成 1 個)

Prefab 清單。當呼叫 Impact() 時,會在撞擊點實例化(instance)一個隨機 prefab。 可用於粒子/爆炸效果。

On Every Chunk Detach Event (Collision, Impact, Explosion, User scripted detach...)(每次碎塊脫離事件:碰撞、衝擊、爆炸、使用者腳本脫離等)

Call Method Name(呼叫方法名稱)

無論碎塊因何原因脫離,都會呼叫的方法名稱(請見下一個參數與 scripting reference)。

Call GameObject(呼叫目標 GameObject)

要被呼叫其方法的 GameObject。請參考 scripting reference。

Support Planes(支撐平面)

支撐平面用來控制哪些碎塊(chunks)會被標記為支撐(support)。 所有位於平面負向一側(由平面的 -Y 指向所代表的那一側),且落在平面範圍限制內的碎塊,都會被標記為支撐。

作為支撐的碎塊無法被摧毀,並會把物件維持在一起。 一個碎塊必須連結到支撐碎塊(可以是直接連結,或透過其他碎塊間接連結),否則它就會掉落。 這能避免碎塊靜止地「漂浮」在空中,並啟用更寫實的塌陷行為。

Add Support Plane(新增支撐平面)

會為此物件新增一個支撐平面(support plane)。

Support plane parameters(支撐平面參數)

Plane Name(平面名稱)

會顯示在 Scene 視圖(scene view)中的名稱。

Local Position(本地位置)

平面相對於破碎物件(fractured object)的座標位置。

Local Rotation(本地旋轉)

平面相對於破碎物件(fractured object)的旋轉。 可用此設定改變附著方向,例如要改成附著在天花板時就會用到。

Local Scale(本地縮放)

平面的縮放大小。

Delete(刪除)

刪除此支撐平面。

Rest of the parameters

Utilities & Generation(工具與生成)

Random Seed(隨機種子)

每個種子都會產生不同的碎裂結果。如果你對結果不滿意,就更換種子。

Preview Chunks(預覽碎塊)

使用此滑桿預覽已生成的碎塊(chunks)。

Always Gen. Colliders(每次都生成碰撞體)

每次計算碎塊時,也會一併生成碰撞體(colliders)。

Show Chunk Connections(顯示碎塊連結)

會在 Scene 視圖(scene view)中畫線,顯示碎塊彼此之間如何相互連結。

Color Chunk State(以顏色顯示碎塊狀態)

會在 Scene 視圖中以顏色標示碎塊狀態:哪些是支撐碎塊(support chunks),以及哪些碎塊無論直接或間接都沒有連結到任何支撐碎塊, 因此在檢查結構完整性(structure integrity)時會掉落。

Color Chunks(隨機上色碎塊)

會把碎塊隨機上色,讓你在編輯器視窗或遊戲視窗中更容易分辨(遊戲視窗需在 Play 模式下才會顯示)。

Enable Prefab Usage(啟用 Prefab 用途支援)

在計算碎塊時,會把碎塊網格與碰撞體網格儲存成磁碟上的資產檔(asset file)。 如果你要把此物件加入 prefab,請使用這個選項;否則網格與碰撞體在實例化時可能無法正確生成。

Output Console Info(輸出主控台資訊)

會將訊息與警告輸出到 Console 視窗。

Compute Chunks(計算碎塊)

計算並生成碎裂後的碎塊(fractured chunks)。

Delete Chunks(刪除碎塊)

刪除已生成的碎裂碎塊。

Collider Generation(碰撞體生成)

Use Concave Collider(使用凹形碰撞體工具)

使用外部的 Concave Collider 工具,以便更細緻控制網格碰撞體(mesh colliders)的生成方式。

Algorithm(演算法)

凸分解(convex decomposition)演算法。 Fast 在 95% 的情況下會是最佳選擇;如果 Fast 無法正常運作,再改用其他選項。

Max Collider Vertices(碰撞體最大頂點數)

限制單個碰撞體外殼(collider hull)最多可包含的頂點數量。

Compute Colliders(計算碰撞體)

計算並生成碎塊的碰撞體(chunk colliders)。

Delete Colliders(刪除碰撞體)

刪除碎塊的碰撞體。

此網誌的熱門文章

哥利亞遙控炸彈 (Leichter Ladungsträger Goliath)

O-I(試製120t超重戰車「オイ」)