Unity 6 URP 後處理描邊:從 Built-in 幾何邊到深度+法線+ID
最近學習 URP,找到了一個網上的 built-in 描邊項目,拿來改成 URP 模式,下面進行比較兩者差異
原本的做法是:
- 輪廓邊(第 69 行):一側的面朝向鏡頭、另一側背向鏡頭。
- 稜角邊(第 70 行):兩個面之間的折角夠大(以 60° 作為門檻)。
- 邊界邊:只有一側有三角形的邊(開放網格的邊緣)。
而常見的做法有:
| 做法 | 原理 | 內部輪廓 / 稜角線 | 線寬 | 成本與相容性 |
|---|---|---|---|---|
| 法線外擴(Inverted Hull,最常見) | 第二個 pass 把頂點沿法線往外推,只畫背面 | ❌ 只有外輪廓,畫不出內部的稜角線 | 跟著距離變化,要另外修正 | 很便宜,手機也能跑 |
| 後處理邊緣偵測(深度 / 法線 Sobel) | 對整個畫面的深度圖、法線圖做邊緣偵測 | △ 取決於門檻設定 | 受解析度影響,容易鋸齒、閃爍 | 每幀要做一次全螢幕運算,和模型無關,URP / HDRP 都能用 |
| Rim / Fresnel | 根據視角和法線的夾角把邊緣塗暗 | ❌ | 粗細不均 | 最便宜,但不是真正的線 |
| Stencil 描邊 | 先畫放大的模型,再用模板緩衝把原模型的部分扣掉 | ❌ 只有最外圈 | 同法線外擴 | 便宜 |
| 本專案(幾何邊提取) | 逐邊判斷輪廓和稜角,再用 GS 生成線段 | ✅ 都畫得出來,例如手臂擋在身體前面時的交界線也會出現 | 螢幕空間固定寬度,線條細且銳利 | CPU 和 GPU 成本都高,平台限制多 |

