〰️ 15.模型空間描邊(輪廓線)的設定

本頁將會解說如何設定基於背面法(inverted hull)的模型空間輪廓線,
以及如何利用ASP提供的平滑法線工具來提高輪廓線的品質。
1.啟用ASP Mesh Outline Renderer Feature
要使用模型空間的輪廓線,必須要在URP Renderer data中加入ASP Mesh Outline Renderer Feature,設置的流程如下 :

加入ASP Mesh Outline renderer feature後,回到當前人物的ASP Character Panel上,這時Check List中的Mesh Outline應該會顯示Active。

💡 在ASP Character Panel的GUI中的Check List中,會顯示目前ASP Mesh Outline的啟用狀態,如果未啟用的話可以透過Open URP Data按鈕,快速指向當前URP Renderer data。
2.利用Layer或者Rendering Layer Mask設定產生輪廓線的部位。

在Shadow Behaviour內有個分類可以直接觀察目前所有ASP passs所指定的layer 與 rendering layer mask。以上圖為例,目前繪製Mesh輪廓線的pass指定的layer是 Default,指定的Rendering layer mask為Outline,同時滿足 這一個組合的renderer即會被渲染至輪廓線pass中。
3.在MeshOutline Param分類下調整參數

人物中被渲染至模型空間輪廓線pass的renderer,在ASP Character Panel的MeshOutline Param分類下可以控制輪廓線的外推模式
| 參數名稱 | 說明 |
|---|---|
| Current Extrude Method | 輪廓線外推模式 |
| - FROM_VERTEX_NORMAL | 根據頂點的法線方向外推模型空間輪廓線 |
| - FROM_UV4 | 使用儲存在模型頂點的UV4中的值作為外推的方向 |
| Mesh Outline Color | 模型空間輪廓線顏色 |
| Mesh Outline Width | 模型空間輪廓線外推的距離(可當成輪廓線寬度) |
| Fade Out Start End Distance | 輪廓線淡入起始距離與淡出最遠距離 |
| Bake Smooth Normal Field | 展開顯示烘培平滑法線選項 |
| Smooth Target | 欲烘培模型檔案(FBX, OBJ) |
| Quick Find | 快速搜尋當前人物object的FBX檔 |
| Bake Normal Into UV4 | 將平滑後的法線烘培並且儲存在當前人物模型的uv4中 |
4.烘培平滑法線

模型空間的輪廓線依賴模型本身的法向量資訊來做輪廓線的外推,在尚未平滑法線的頂點上,模型角度變化大的頂點上,輪廓線會呈現出斷裂的情形(如上圖左),為了解決這個問題,ASP提供了在unity的editor終烘培平滑後的法線資訊,並儲存在模型的uv4通道中
💡 模型的UV map從0開始算 : uv0, uv1, uv2…以此類推。
因此,uv4通道其實是模型的第五個uv通道。
在ASP Character Panel的Mesh Outline Param分類下,預設的輪廓線外推模式(Extrude Mode)為FROM_VERTEX_NORAML,可以從下圖看出,在袖子的邊緣出現了斷裂。
依照下圖的步驟,將當前人物模型的FBX拖拉至Smooth Target(或者直接按Quick Find按鈕),Smooth Target選定後按下Bake smooth normal into uv4按鈕。按下後會執行烘培的動作(需要等待幾秒鐘)
烘培完畢後將Extrude mode設為FROM_UV4並按下Apply。
💡 1. 烘培後,會再FBX的同資料夾下產出一個character_model_name@smoothRef的FBX檔案,這個檔案會作為平滑法線的參考,請保留下來。如果刪除了就在烘培一次就可以了。
2. 烘培法線的腳本需要在Package Manager中安裝
com.unity.collections1.5.1以後的版本,才能正常運作。

⏭️ 前往下一頁 🔧 17.Tone Mapping後處理
5.讓模型空間描邊與螢幕空間描邊粗細一致的選項

從1.03版開始,在ASP Character Panel內新增了Make mesh-based outline scale behave as screen-space outline的選項,開啟這個選項之後,會讓模型空間描邊的粗細計算與螢幕空間描邊一致。
由下面兩張圖可以看出,當人物靠近相機時,模型空間描邊會變粗,導致與螢幕空間描邊初先明顯的差異。而當開啟Make mesh-based outline scale behave as screen-space outline後,不論距離遠近,模型空間描邊的粗細都會與螢幕空間一致。

Make mesh-based outline scale behave as screen-space outline - Off

Make mesh-based outline scale behave as screen-space outline - On
💡 要注意的是,開啟這個選項也代表模型空間描邊也會有螢幕空間描邊的最大的缺點 - 人物距離相機過遠時描邊過粗的問題,請使用Fade Out Start End Distance來控制模型空間描邊根據距離的淡入淡出效果(對模型空間描邊來說,淡出=粗細縮小到0)
模型空間描邊Demo