模型(特別是帶有動畫的模型)作為WebAR/3D/VR場景中最富表現力和變化的素材,在制作規范方面具有比其它種類素材更多的要求,為了保障場景的最終呈現效果,本節將針對模型規范的各個方面進行詳細的闡述。
在講模型規范之前,需要明確兩個問題,第一個問題是:“WebAR/3D/VR模型動畫”同“傳統建模用作CG” 的區別,見下表:
項目WebAR/3D/VR模型傳統建模用作CG面數(四邊面)<30W理論上不限貼圖分UV可以不用動畫嚴格的標準建模軟件支持的方式
第二個問題是:如何確定腳本、參考圖/參考視頻,參考依據主要有以下四點:
* 原畫三視圖的設計;
* 參考物體三視圖照片;
* 動畫參考視頻;
* 需求腳本。
在明確了這兩個前提之后,下面就進入模型動畫具體的創作工作流。
### 1.建模時使用的軟件
常見的模型動畫制作軟件:3ds Max、Maya、Blender等;
常見的雕刻軟件:ZBrush(使用雕刻軟件后需要務必注意模型面數)
常見的貼圖處理工具:Photoshop
常見的材質與貼圖制作工具:Substance Painter、Quixel Suite
其它專業性的建模軟件:使用SketchUp、SolidWorks、AutoCAD、Inventor等其它建模軟件需要導出FBX,在常用建模軟件中減面和檢查模型及動畫是否正確
### 2.白模制作
* 使用四邊面,不建議使用三角面(尤其是具有動畫的模型),不允許使用多邊面;(注意:如果模型不帶動畫,三角面的使用不會帶來太大影響;如果模型帶動畫,如果不可避免的使用了三角面,那需要注意檢查模型動畫是否會穿插,建議將三角面放置在不容易看到的位置)
* 僅僅支持Polygon建模(多邊形建模),不支持NURBS建模(曲面建模),NURBS建模(曲面建模)可以做出一些多邊形建模不好調整的模型,但創建之后需要將其轉換為多邊形。
[曲面建模模型轉換為多邊形建模模型.mp4](https://www.yuque.com/kivicube/manual/workflow#ZfWiO)
* 采用右手坐標系建模;
* 模型制作單位統一:米(M),具體設置如下圖:建議制作為10-50單位大小的模型;
* 
* 模型坐標中心點歸于世界坐標系原點(建模軟件坐標系原點);模型坐標中心點需要放在模型自身合適的位置,[點擊此處](https://www.yuque.com/kivicube/manual/model-qa#i4h4c)獲取具體修改教程;
* 物體頂點處于閉合狀態,物體所有的點都需處于閉合狀態,防止出現模型上的破洞;
[閉合點.mp4](https://www.yuque.com/kivicube/manual/workflow#ZS3Al)
* 面數要求:建議單個物體模型控制在5W四邊面以內,場景控制在30W四邊面以內;并且針對帶有動畫的場景建議低于20W四邊面;
* 不允許重疊面(解決模型中面片閃爍的問題)、雙重頂點等情況發生;有些重疊面,有個別情況是觀察不出來的,可以在模型步驟完成后選擇所有頂點,將合并頂點數值調整為0.001進行合并(以Maya)為例;
[重疊面.mp4](https://www.yuque.com/kivicube/manual/workflow#slpyx)
* 法線方向需統一,請務必注意法線方向問題(解決模型貼圖顯示錯亂的問題,如果模型貼圖顯示錯誤,可以嘗試更改錯誤部分的法線),法線可以理解為這個物體的正面受光面,物體向內擠壓時可能會導致正面向內擠壓,從而形成正面在里,反面在外的法線反轉現象,這里提醒,盡量不要進行雙面照明進行觀察,或者可以選擇開啟法線顯示(朝向方向即為正面)以規范法線方向;
[法線方向.mp4](https://www.yuque.com/kivicube/manual/workflow#4eJdk)
* 光滑組后模型不允許出現黑面,可通過加線卡線的方法避免黑面,另外,想進行光滑效果的模型先要在模型輪廓上進行卡線處理,避免在光滑后出現形狀變化;
[網格平滑.mp4](https://www.yuque.com/kivicube/manual/workflow#be6fC)
* 模型網格名稱使用英文;
* 保持模型面與面之間的距離,推薦最小間距為當前場景最大尺度的二千分之一;如果物體的面與面之間貼得太近,會出現兩個面交替出現的閃爍現象。模型與模型之間不允許出現共面、漏面和反面,看不見的面要刪掉。在建模初期一定要注意檢查共面、漏面和反面的情況;兩個面交替閃爍的現象主要是因為這兩個面處于同一位置,且各自法線相反了,需要將法線反的一面刪除,或者結合合并。
[相反法線共面.mp4](https://www.yuque.com/kivicube/manual/workflow#4OQ08)
* 刪除場景中多余的面,在建立模型時,看不見的地方不用建模,對于看不見的面也可以刪除,主要是為了提高貼圖的利用率,降低整個場景的面數,以提高交互場景的運行速度。
* 進行模型的塌陷操作,當模型經過建模、貼紋理之后,然后就是將模型塌陷,這一步工作也是為了下一步貼圖制作做準備;
* 針對體量特別大或連體模型可分塌為2-3個物體,但導出前要按模型再塌成一個物體;
* 用Box反塌物體,轉成Poly模式,這時需檢查貼圖有無錯亂;
* 鏡像的物體需要修正:用鏡像復制的方法來創建新模型,需要加修改編輯器修正一下。需要選中鏡像后的物體,然后進入Utilities面板中單擊Reset XForm,然后單擊Reset Selected;進入Modfiy面板選取Normal命令,反轉一下法線即可;此外,也可以直接使用maya的鏡像功能;
[鏡像.mp4](https://www.yuque.com/kivicube/manual/workflow#b0uqm)
* 避免使用建模軟件自帶的非常規系統,比如曲線或毛發系統(Hair、Yeti、Haitrix、HairFarm等)制作毛發,而需要用Polygon模型和貼圖來表現;
* 模型不得出現漏洞面,不得出現刺角面,模型結構貼近部分需要分體展示,不得統一結構,配飾模型部分必須與主體模型位置保持正確,不得隨意穿插,模型薄體部分不得用單片體展示,必須以完整薄體模型展示;
* 模型完成之后統一使用重置命令(reset Xfrom)避免有縮放和變形等情況,然后轉換模型為 Mesh 或者 Poly 模式(有動畫的模型,需在動畫制作之前完成此步驟)
* 避免模型相互穿插,刪除部分重合或穿插的模型或面,如下圖:

左邊:穿插;中間:未穿插;右邊:穿插部分顯示混亂;

左邊:穿插;右邊:未穿插;
### 3.材質貼圖制作
* 平臺當前支持PBR渲染,PBR渲染帶來了更加逼真的模型效果以及美術創作的標準化工作流,后面會陸續增加對卡通材質的NPR渲染以及不受光照影響的Unit材質;
* 模型制作時需要新建材質并賦予相關網格,不允許無貼圖無UV的單個模型網格;
* 理想情況下,請盡量減少模型材質數量,建議小于10個;
* 需要將除“標準Standard材質”和“基于Standard的多維材質”外的其他材質轉換為標準材質,例如3DS MAX的VARY材質不支持;
* Multi/Sub-Object材質中的子材質一定要是Standard標準材質;
* 材質和貼圖名稱為英文,不能有重名;
* 材質球命名與物體名稱一致,材質球的父子層級的命名必須一致;
* 材質球命名:與物體名稱保持一致,單個材質球可以控制單個、多個物體。多維子材質,必須嚴格按照物體ID號,設置好材質ID,不能重復、錯亂、跳號和有空ID號,如下圖:

* 貼圖尺寸:不超過2048x2048,貼圖建議使用2的冪次方尺寸;
* 貼圖格式:不含透明通道:JPG(一般來講Photoshop導出品質設置為80%);含透明通道:PNG;(一般來講保證貼圖小于2M);最后建議在保證模型效果的基礎上壓縮圖片尺寸以及使用其他工具壓縮圖片質量;
* 展UV:UV須展平,合理拆分UV(避免UV破碎或UV反向),UV要占整張貼圖的80%以上;一般來講有兩種情況,舉例說明:(a)戶型模型制作:制作戶型白模后,給網格賦予材質和紋理,然后展UV,制作貼圖;
(b)卡通動物模型制作:制作動物白模后,給網格賦予材質,然后展UV,手繪貼圖;
* 貼圖UV不得細碎面片,分出的UV圖必須為組塊狀,貼圖通道和物體UV坐標通道必須為1通道;
* 材質貼圖 UV 通道需要和物體 UV 通道完全一樣

* 貼圖路徑的設置:支持相對路徑和絕對路徑
* 盡量減少模型貼圖的數量;要求展UV時候良好的布局;例如網易陰陽師模型UV貼圖:

* 模型貼圖僅支持漫反射貼圖(Diffuse)、透明貼圖(Transprent)及法線貼圖(Normal),其設置如下圖:

* 通過了解[PBR](https://www.allegorithmic.com/pbr-guide)渲染可知,模型支持的貼圖不僅僅只包括漫反射貼圖、透明貼圖及法線貼圖,如何在平臺中使用多貼圖的模型,請參閱[模型導出](https://www.yuque.com/kivicube/manual/workflow/edit#all8fk);
* 貼圖的制作:目前貼圖的制作一般包含三種方式,即傳統手繪貼圖(在貼圖中繪制各種細節,比如陰影)、烘焙貼圖(在建模軟件中提前將燈光布置好,烘焙出帶陰影效果的貼圖)、在支持PBR的材質貼圖制作軟件中制作(請參考[教程](https://www.allegorithmic.com/products/substance-painter));
* 烘焙貼圖:
烘焙的物體黑縫解決對辦法:在烘焙的時候,如果圖片不夠大的時候,往往會在邊緣產生黑縫。處理小技巧:
(a)如果做鳥瞰樓體比較復雜可以把樓體合并成一個物體變成多重材質,然后對樓體進行整體完全烘焙,這樣可以節省很多資源;
(b)對于建筑及地形,須檢查模型的貼圖材料平鋪的比例,對于較遠的地表(或者草地),可以考慮用一張有真實感的圖來平鋪,平鋪次數少一些;
(c)對于遠端的地面材料,如果平鋪次數大了,真實感比較差。
(d)若用CompleteMap烘焙,烘焙完畢后會自動產生一個Shell材質,必須將Shell材質變為Standard標準材質,并且通道要一致,否則不能正確導出貼圖;模型烘焙及導出模型烘焙:
? ?(a)渲染方式:采用 Max 自帶的 Light Tracer 光線追蹤進行渲染。
? ?(b)燈光效果控制:該項目在烘焙前會給出固定的烘焙燈光,燈光的高度、角度、參數均不可調整,可以在頂視圖中將燈光組平移到自己的區塊,必須要用燈光合并場景然后烘焙。
? ?(c)烘焙貼圖方式:建筑模型的烘焙方式有兩種:一種是 LightMap 烘焙貼方式,這種烘焙貼圖渲染出來的貼圖只帶有陰影信息,不包含基本紋理。具體應用于制作紋理較清晰的模型文件(如地形),原理是將模型的基本紋理貼圖和 LightMap 陰影貼圖兩者進行疊加。優點是最終模型紋理比較楚,而且可以使用重復紋理貼圖,節約紋理資源;烘焙后的模型可以直接導出 FBX 文件,不用修改貼圖通道。缺點是LightingMap 貼圖不帶有高光信息; 另一種是 CompleteMap 烘焙方式,這種烘焙貼圖方式的優點是渲染出來的貼圖本身就帶有基本紋理和光影信息,但缺點是沒有細節紋理,且在近處時紋理比較模糊。
### 4.動畫制作
[動畫規范~1.mp4](https://www.yuque.com/kivicube/manual/workflow#bkuLp)
* 動畫支持:幀動畫(Frame animation)、骨骼動畫(Bones animation)、變形動畫 (Morph animation);
* 模型動畫:單個頂點最多支持4個骨骼權重;具體設置[點擊此處](http://doc.babylonjs.com/resources/bones_influences_per_vertex)參考
* 動畫模型格式:FBX;
* FBX動畫縮放不能為零,如下圖錯誤:

* 一般來講,導出FBX文件后,務必再導入建模軟件檢查模型及動畫是否正確;
* 一般來講,為避免模型文件偏大,模型動畫幀率設置為30幀;
* 一般來講,建模軟件中特有的動畫制作功能(如建模軟件自帶的如修改器、變形器),導出為FBX后不支持;
* 不支持可見動畫屬性;
* 使用骨骼動畫時需要采用規范的蒙皮手法,蒙皮制作動畫后導出再導入檢查動畫是否正確;
* 骨骼節點不允許重名;
* 一個骨骼綁定一個模型網格,一個模型網格可對應多個骨骼;一個場景文件不超過300個骨骼,單個物體不超過80個骨骼;
* 避免出現兩組重復骨骼;
* 做動畫時,子父關系需要合理規范,關系層級不要太深,建議不超過兩級;(如果出現模型顯示為黑色,可以嘗試修改模型動畫層級關系);
* 一般的我們導出FBX后也需要關注軟件輸出的日志,考慮日志中的警告是否也會影響動畫的正確渲染;
* 在Key關鍵幀時,可見性應該設置Visible,如圖:可見性設置為禁用,如下圖:

* 關于模型動畫的時間
(a)動畫制作從零幀開始;
(b)不能出現負幀;
(c)動畫需要制作成原點動畫;
* FBX 輸出并不能完全兼容所有生成動畫的方法,一般只支持:
(a)通過簡單骨骼控制的蒙皮; ?
(b)簡單形狀変形 ?
一般不支持: ?
(a)復集骨骼控制系統; ?
(b)通過第三方插件生成之骨骼系統 (Autodesk HumanIK 除外) ;
(c)通過約束,表達式生成之動畫控制器,或動畫;
(d)通過模擬或粒子或毛髮或流體動力學相關或運動圖形生成之動畫
* 關于模型動畫,導出FBX時還應該注意:
(a)把所有骨骼動畫, 烘焙到基層/基本骨骼系統上; ?
(b)一般需要創建3D 動畫操作人配合;
(c)若有復集骨骼控制系統, 烘焙到基層/基本骨骼系統上; ?
(d)若有第三方插件生成之骨骼系統, 處理方法如相同(a); ?
(e)若有通過約束, 表達式生成之動畫控制器, 或動畫, 亦需要烘焙到相關對象上; ?
(f)所有通過模擬或粒子或毛髮或流體動力學相關或運動圖形生成之動畫,與(c) 相同方法處理; ?
注意:一般的,建議先使用Autodesk FBX Review做檢查, 確認沒問題再上傳平臺,[點擊此處](https://www.autodesk.com/products/fbx/fbx-review)下載Autodesk FBX Review 。
### 5.模型導出
> ***我們推薦使用AR模型編輯器、建模軟件或Unity軟件中直接導出gltf或glb文件,平臺對gltf與glb有著更加優異的PBR渲染支持,您可以參閱一下文檔:***
>
> **(1)[常見建模軟件導出glTF](https://www.yuque.com/kivicube/manual/3d-gltf-export):您可以在maya、3ds max等軟件中直接導出glTF模型**
>
> **(2)****[AR模型編輯器導出glTF](https://www.yuque.com/kivicube/manual/kivicube-model-editor):macOS用戶,可以使用我們提供的工具(AR模型編輯器)導出glTF模型**
>
> **(3)****[使用Unity導出glTF](https://www.yuque.com/kivicube/manual/gltf-export-tutorial):你可以先將模型放入Unity中,然后導出glTF模型**
* 不帶動畫的模型可導出OBJ/FBX;帶動畫的模型務必導出FBX;
* 模型材質的環境光和漫反射光設置為最亮,建議制作者通過改變漫反射貼圖的亮暗來實現最終效果;

* 帶有動畫的模型導出設置
(a)無論模型貼圖的路徑是相對路徑還是絕對路徑,都建議勾選“嵌入的媒體”;
(b)烘焙動畫選項,建議制作者先不勾選再導出FBX(減小FBX文件的大小),然后放到場景中測試,如果模型動畫顯示不正確再勾選導出;

(c)FBX文件格式選擇“二進制”和“FBX2014/2015”

* 無動畫的模型導出設置
(a)導出OBJ:對于所有文本文件,編碼應為utf-8

(b)導出FBX:同于“帶有動畫的模型導出設置“,但是不勾選”動畫“、”烘焙動畫“選項;
注意:選擇材質導出的時候,需要選擇OBJ所在的文件夾路徑;
* 導出前其它檢查:
(a)將其他材質球(如烘焙材質球)改為標準材質球,通道為1;
(b)將所有物體名、材質球名、貼圖名保持一致;
(c)合并頂點;
(d)清除場景,除了主要的有用的物體外,刪除一切其他物件;
(e)清材質球,刪除多余的材質球;
(f)按要求導出FBX;
(g)導出后檢查文件夾中文件,刪除無用文件;FBX只保留使用的貼圖和模型文件,OBJ只保留使用的貼圖、模型文件及MTL文件;
(h)壓縮模型文件夾為Zip格式,文件夾為英文命名;
(i)壓縮為zip格式建議使用WinRAR、7Z、WinZip的默認Zip壓縮設置;