簡介
在模擬場景中是使用到Unity的3D Scene,因此模型(Model)是不可或缺的元素。這篇我們來說說我們在其他建模軟體要匯出檔案給Unity用時的一些基礎知識,讓後端在Unity建置場景的人可以順利的使用模型。
健康的身理數值
這裡會用這樣比喻是因為模型好比做事我們人的外觀,但我們卻不知道體內各項器官的健康程度、數據,在Unity中的三維空間會影響或改變模型的數據有Position , Rotation , Scale。那假如每個做出來的模型身理數值都不同,這會讓Unity端的製程變得不這麼統一,在製作上會浪費掉許多時間。
所以在建模軟體端就要做身體健檢,我們辛辛苦苦蓋好的模型拆好的UVmap當然不希望匯入Unity時無法使用,或是跟前一個物件的尺寸、比例有所落差。因此我使用Blender3D做範例,在模型建構初期要先設定環境尺寸單位:
在模型製作好進入匯出 (Export) 前,有兩個重要步驟,1.指定物件的原點(在Unity中會比較好去編輯物件位置與旋轉的角度)
2.Apply Position , Rotation , Scale (假如沒設定好,你的物件會與其他統一規特的物件相較之下顯得特別突兀)
匯出、匯入
上述步驟都確定後接著進入匯出的階段,通常匯出的格式是 .FBX ,而匯出時要設定物件的軸向、依循大小、有要匯出其他東西嗎(我們在unity只需要白模,其餘皆不用,材質球是在Unity做整合)
完成建置模型的建模軟體端後,將.FBX匯入就會有良好的身理素質,可以觀察物件的原點、Position、Rotation與Scale都是align最基礎的數值。
匯入Unity時我們來看看模型的參數,他會分Model , Animation , Rig , Material
Scene
Scale Factor
模型的大小,縮放因子,前期設定好,跟美術溝通好,節省後期時間,假如場景模型很多,最好要在一開始討論時候定好大小作業才會比較省時。
Convert Units
變更度量衡(意思是在3d軟體中的尺寸import到unity裡需不需要給他依照在unity中度量衡一樣比例)。
Import BlendShapes
允許Unity導入blendshapes <-> mesh ,允許後再geometry 會多出一個下拉式選單Blend Shape Normals (blendshapes:https://www.jianshu.com/p/4ae6662a40df)。
Import Visibility
導入FBX文件中讀取可見性屬性。例如值和動畫曲線 可以通過控制(要寫程式制)Renderer.enabled屬性來啟用或禁用MeshRenderer組件。
Import Cameras
要不要把在3d軟體中設定的camera在unity中顯示。
Import Lights
要不要把在3d軟體中設定的lighting在unity中顯示。
Preserve Hierarchy
在3d軟體中可能會有許多空的子物件,import到unity中軟體會自動過濾刪除掉這些空的子物件,假如想保留就把這選項打勾。
Mesh
Mesh Compression
要不要壓縮模型的網格,減少模型的精度,一般是不會去壓縮,radio button有三個等級可以去壓縮,低 中 高。
Read/Write Enable
這選項是關於模型在real-time render時,假如選項勾選他會把資料送到GPU記憶體去運算,且也會保留CPU記憶體去運算,可以透過程式編譯去改變模型的即時效果。但在許多案例中這選項通常是被disable掉的,因為會很吃效能。
Optimize Mesh
讓unity重新確認模型mesh三角面的排序,使GPU運算時會更優化模型呈現樣式,我看也是吃效能。
Generate Collider
自動產生模型的collider,在做物理運算或碰撞時是必須加入的,但你假如本身就有設定的話兩個collider會衝突。
Geometry
Keep Quads
quads > polygon (efficient) ,啟用此選項可以阻止Unity將具有四個頂點的多邊形轉換為三角形。按下去四邊變三邊。
Weld Vertices
主要用途是要把模型的好能降低,把模型的頂點數壓到最低,把模型中同一個位置且不同的兩個點自動的黏起來,跟3d軟體的weld功能相同。前提是他們的屬性是要相同的(包括UV,法線,切線和VertexColor)
Index Format
關於模型記憶體緩衝的設定,有自動、16bit、32bit,通常是選用auto或是16bit,必要時刻才會選32bit(仲要要呈現的模型,需要靠GPU-render去算圖)。
Normals
優化法線的功能,對於3d遊戲的系統優化是很有幫助,import-預設的選項,從.fbx匯入法線資料 ,calculate-在下方的三個選項可以設定Normals Mode & Smoothness Source & Smoothing Angle ,none- 選擇這的話下方的Normals Mode & Smoothness Source & Smoothing Angle會隱藏。
Blend Shape Normals
在Scene中有勾選import blendshapes就會出現這選單,定義是否以及如何計算混合形狀的法線。使用與法線屬性相同的值。
Normals Mode
定義如何計算法線。下拉式選單中的選項就是一些權重的設定,有角有面或是皆有等等。
Smoothness Source
設定模型的平滑,下拉式選單也是會影響smoothing angle的功能起步啟動。
Smoothing Angle
控制是否為硬邊分割頂點:通常,較高的值會導致較少的頂點。建議是在3d軟體中將這些細部要smooth的物件處理好再丟到unity中。
Tangents
定義應如何導入或計算頂點切線。
Swap UVs
模型中可以通用兩個UV,如果有需要用lightmap就要開啟這選項。
Generate Lightmap UV
為Lightmapping創建第二個UV。
Lightmap UVs Setting
調整Generate Lightmap參數。
Rig
其實就是把物件套上骨架 2D 3D皆可套上
For Humanoid characters, this means assigning or creating an Avatar. 人行rig , 骨架
For non-Humanoid (Generic) characters, this means identifying a Root bone in the skeleton.物件rig
你必須要在3d軟體中設定好rig相關的東西,匯入unity中才會有選項,否則預設都是none.
Animation
物件套上骨架後可以透過rig來製作動畫,例如人類走動、跳耀、待機等等,匯入unity中會產生一個animation檔案給物件套用。當你匯入在3d模型中製作好的物件動畫,在unity裡你可以簡易的編輯、刪除某些動作,或者是某個動作只要loop某一小段等等,都可以在此面板運行修改。
當然你有製作animation,rig的 tab也會自動從none變為generic在unity中,有個東西叫animator,可以透過這功能將物件animation做一個邏輯上的排部順序,例如個腳色平時是待機動作,當觸發某些事件後,可透過unity script通知animator切換到對應的animation。
Material
這邊的功能其實是重新在unity中剛匯入的模型給予相對應的材質球,但這種狀況比較少見,反而是在3d軟體中有先做好基礎的uv map,之後到了unity可能要再加入一些效果,例如(凹凸面、反射面等等)的添加材質球效果。
Import Materials
這個選項在於要不要導入你在3d軟體中賦予的材質
sRGB Albedo Colors
基於gamma space , 在unity中有兩種光線(color space)設定,一個是gamma 一個是linear
Location
Use Embedded Materials
在3d軟體賦予材質球在匯入.fbx檔案時會一併匯入到unity asset中,並且你可以remapping相對應材質球 (預設值)
Use Embedded Materials (legacy)
選擇此選項可將導入的材料作為外部資產提取。這是處理材料的傳統方式。細部功能可以將外部材質球匯入時重新命名 (通常這功能比較少用)
Remapped Materials
最後下方的Remapped Materials就是你在建模軟體已經設定好的材質球有幾顆,在這視窗內就會出現幾顆,他用意是可以在Unity中新增不同的材質球去重新賦予此model,賦予完成後按下Apply即可更新此模型的材質球;而Revert則是還原最初始的材質球。
小結
這篇介紹的有點冗長,有許多物件名詞的解釋,但是魔鬼藏在細節中,就如同上面所說的,整個場景中的每個物件都擁有健康的身理數值,在調整起來會變得非常省事並且省資源。
Reference:https://docs.unity3d.com/Manual/FBXImporter-Model.html#VisibilityImportProperties