Godot Shader特效:3D描邊(outline)效果 原理篇

前段時間根據油管上的教程寫過一篇Godot Shader特效:2D描邊(outline)效果的筆記,此效果實現原理在2D和3D上是不通用的,於是又在油管上淘到了一個ID爲Dave the Dev的朋友發佈的教程How to outline a 3D object in Godot _ Game Dev Tutorial 4,感謝大神們無私的奉獻!

先看效果圖

注:這次實現全部使用Godot自帶的材質和Shader

原理

Godot的材質系統爲每一個材質提供了一個Next Pass屬性,該屬性的作用就是給材質提供一個次級材質,通過Next Pass可以將多個材質以的形式串聯起來。在這個例子中,我們會爲主材質添加一個Next Pass材質用於專門渲染Outline。這意味着模型會被渲染兩次:第一次按照主材質渲染第二次按照次級材質渲染。

主材質不需要什麼特別設置,僅僅是在Next Pass處再新建一個SpatialMaterial就可以了

下面來說一下次級材質的設置:

  1. 首先這個次級材質僅用來實現輪廓,所以應設爲Unshaded意爲不接受光照。
  2. Cull Mode設爲Front,意爲將表面剔除設置爲剔除前表面,而僅渲染背對攝像機的表面,這樣次級材質纔不會遮擋住主材質。
  3. 啓用GrowGrow即渲染時沿模型面的法線方向偏移渲染,以實現模型的視覺縮放效果。
  4. 設置Grow AmountGrow的偏移量。
  5. Albedo即輪廓的顏色。

原理還是很好理解的,但是使用中一定要注意Grow Amount值不宜過大,否則會出現下面的炸裂情況:

小結
這個實現方式要注意Grow Amount大小,尤其是Low Poly模型,因爲面數較少,更容易出現穿幫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章