Unity 使用shader給角色描邊異常

2021-08-28 13:56:11 字數 1699 閱讀 3486

unity版本:unity 2018.2.0f2 (64-bit)

shader實現如下:

// upgrade note: replaced 'mul(unity_matrix_mvp,*)' with 'unityobjecttoclippos(*)'

#pragma fragmentoption arb_precision_hint_fastest

#include "unitycg.cginc"

half _outline;

fixed4 _outlinecolor;

half4 vertex : position;

half3 normal : normal;

};struct v2f_outline ;

v2f_outline o;

o.pos = unityobjecttoclippos(v.vertex);

half3 norm = mul ((float3x3)unity_matrix_it_mv, v.normal);

half2 offset = transformviewtoprojection(norm.xy);

o.pos.xy += offset * o.pos.z * _outline;

return o;

}fixed4 frag_outline(v2f_outline i) : color

ios真機上描邊顯示正常,android真機上描邊顯示得很粗,(專案保密,截圖不便公開,找了個圖替代)

左邊是預期的情況,右邊是android真機上顯示出來的效果

造成這個問題的原因是**中用到o.pos.z,這個值在不同平台上的值的範圍不同,即

o.pos.xy += offset * o.pos.z * _outline;

官方的解釋(

github上找到解決方案(

)最終的實現如下

// upgrade note: replaced 'mul(unity_matrix_mvp,*)' with 'unityobjecttoclippos(*)'

#pragma fragmentoption arb_precision_hint_fastest

#include "unitycg.cginc"

half _outline;

fixed4 _outlinecolor;

half4 vertex : position;

half3 normal : normal;

};struct v2f_outline ;

v2f_outline o;

v.vertex *= (1 + _outline);

o.pos = unityobjecttoclippos(v.vertex);

return o;

}fixed4 frag_outline(v2f_outline i) : color

Unity全域性光照以及shader的使用方法

unity自帶的shader都是支援光照貼圖的,光照貼圖可以讓unity中的模型在沒有光照的情況下,在物體上產生陰影效果。5.0以後光照貼圖的形式都有一定的改變。而在自己寫的shader中需要對光照貼圖進行相應的設定。光照貼圖準備工作 1.light中baking的模式選為baked,為了檢視效果,...

unity螢幕空間座標shader

螢幕座標效果不受物體在空間位置的影響,只受到物體本身和視口的影響,有時候可以做一些特殊效果 比如2d遊戲平鋪紋理,除錯螢幕位置,螢幕特效等等 下面是根據官方例子修改的 shader unlit show uvs subshader sampler2d maintex struct ccc v2f v...

Unity噴墨效果Shader實現

筆者介紹 姜雪偉,it公司技術合夥人,it高階講師,csdn社群專家,特邀編輯,暢銷書作者,已出版書籍 手把手教你架構3d遊戲引擎 電子工業出版社和 unity3d實戰核心技術詳解 電子工業出版社等。對於遊戲中使用的類似噴墨效果,在射擊類遊戲中經常使用比如玩家射擊的子彈會在牆上出現類似噴墨效果,效果...