Приветствую. Около года назад нашёл на просторах интернета шейдер для подсвечивания объектов (outline). Тогда сидел на Unity 5.6.7f1 и там он работал просто отлично. НО сейчас я перешел на LTS версию 2020.3.47f1 и на ней он так же хорошо работает, но стоит приблизить камеру к нему достаточно близко, подсвечивание перестаёт работать. Отдаляю камеру, снова подсвечивается. А в моей игре нужно подсвечивать только на близком расстоянии (скриптом это реализовал очень просто). В общем, в шейдерах я не силён, вот и пишу сюда, может кто сможет помочь. Собственно, вот сам шейдер:
Shader "Outlined/Uniform"
{
Properties
{
_Color("Main Color", Color) = (0.5,0.5,0.5,1)
_MainTex ("Texture", 2D) = "white" {}
_OutlineColor ("Outline color", Color) = (0,0,0,1)
_OutlineWidth ("Outlines width", Range (0.0, 2.0)) = 1.1
}
CGINCLUDE
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
};
struct v2f
{
float4 pos : POSITION;
};
uniform float _OutlineWidth;
uniform float4 _OutlineColor;
uniform sampler2D _MainTex;
uniform float4 _Color;
ENDCG
SubShader
{
Tags{ "Queue" = "Transparent" "IgnoreProjector" = "True" }
Pass //Outline
{
ZWrite Off
Cull Back
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
v2f vert(appdata v)
{
appdata original = v;
v.vertex.xyz += _OutlineWidth * normalize(v.vertex.xyz);
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
return o;
}
half4 frag(v2f i) : COLOR
{
return _OutlineColor;
}
ENDCG
}
Tags{ "Queue" = "Geometry"}
CGPROGRAM
#pragma surface surf Lambert
struct Input {
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutput o) {
fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
Fallback "Diffuse"
}
Пробовал предпинимать следующее:
- делал Near у камер ближе, но это так же относится и к редактору, так что это не помогло.
- увеличивал масштаб как самой модели, так и всех объектов на сцене в целом, так же не помогло.
Вот скриншоты проблемы:
https://files.fm/thumb_show.php?i=j7pjegt3w
https://files.fm/thumb_show.php?i=fq3jvdwxg