前段時(shí)間根據(jù)油管上的教程寫過一篇Godot Shader特效:2D描邊(outline)效果的筆記具钥,此效果實(shí)現(xiàn)原理在2D和3D上是不通用的,于是又在油管上淘到了一個(gè)ID為Dave the Dev的朋友發(fā)布的教程How to outline a 3D object in Godot _ Game Dev Tutorial 4剖踊,感謝大神們無私的奉獻(xiàn)!
先看效果圖
注:這次實(shí)現(xiàn)全部使用Godot自帶的材質(zhì)和Shader
原理
Godot的材質(zhì)系統(tǒng)為每一個(gè)材質(zhì)提供了一個(gè)Next Pass
屬性衫贬,該屬性的作用就是給材質(zhì)提供一個(gè)次級(jí)材質(zhì)德澈,通過Next Pass
可以將多個(gè)材質(zhì)以鏈的形式串聯(lián)起來。在這個(gè)例子中固惯,我們會(huì)為主材質(zhì)添加一個(gè)Next Pass
材質(zhì)用于專門渲染Outline梆造。這意味著模型會(huì)被渲染兩次:第一次按照主材質(zhì)渲染第二次按照次級(jí)材質(zhì)渲染。
主材質(zhì)不需要什么特別設(shè)置葬毫,僅僅是在Next Pass處再新建一個(gè)SpatialMaterial就可以了
下面來說一下次級(jí)材質(zhì)的設(shè)置:
- 首先這個(gè)次級(jí)材質(zhì)僅用來實(shí)現(xiàn)輪廓镇辉,所以應(yīng)設(shè)為
Unshaded
意為不接受光照。 - 將
Cull Mode
設(shè)為Front
供常,意為將表面剔除設(shè)置為剔除前表面摊聋,而僅渲染背對(duì)攝像機(jī)的表面鸡捐,這樣次級(jí)材質(zhì)才不會(huì)遮擋住主材質(zhì)栈暇。 - 啟用
Grow
,Grow
即渲染時(shí)沿模型面的法線方向偏移渲染箍镜,以實(shí)現(xiàn)模型的視覺縮放效果源祈。 - 設(shè)置
Grow Amount
即Grow
的偏移量。 -
Albedo
即輪廓的顏色色迂。
原理還是很好理解的香缺,但是使用中一定要注意Grow Amount
值不宜過大,否則會(huì)出現(xiàn)下面的炸裂情況:
小結(jié)
這個(gè)實(shí)現(xiàn)方式要注意Grow Amount
大小歇僧,尤其是Low Poly模型图张,因?yàn)槊鏀?shù)較少锋拖,更容易出現(xiàn)穿幫。