Поставил себе задачу сделать голографический прицел на основе шейдера, хотя я на самом деле профан в шейдерах но меня это не особо останавливает и вот я сделал "нечто" каряво-рабочее методом тыка..
основной кусок этого "нечто":
Синтаксис:
Используется csharp
CGPROGRAM
#pragma surface surf Lambert alpha
float _Amount;
struct Input {
float2 uv_MainTex;
float3 viewDir;
};
fixed4 _Color;
sampler2D _MainTex;
void surf (Input IN, inout SurfaceOutput o) {
float3 norm = o.Normal;
norm.x = -norm.x;
norm.y = -norm.y;
float3 gundir = norm+normalize(IN.viewDir);
half h = _Amount;
float2 offset = ParallaxOffset( h, _Amount, gundir);
IN.uv_MainTex += offset;
half4 c = tex2D (_MainTex, IN.uv_MainTex)*_Color;
o.Albedo = c.rgb;
o.Emission = tex2D (_MainTex, IN.uv_MainTex).rgb;
o.Alpha = tex2D (_MainTex, IN.uv_MainTex).a;
}
ENDCG
#pragma surface surf Lambert alpha
float _Amount;
struct Input {
float2 uv_MainTex;
float3 viewDir;
};
fixed4 _Color;
sampler2D _MainTex;
void surf (Input IN, inout SurfaceOutput o) {
float3 norm = o.Normal;
norm.x = -norm.x;
norm.y = -norm.y;
float3 gundir = norm+normalize(IN.viewDir);
half h = _Amount;
float2 offset = ParallaxOffset( h, _Amount, gundir);
IN.uv_MainTex += offset;
half4 c = tex2D (_MainTex, IN.uv_MainTex)*_Color;
o.Albedo = c.rgb;
o.Emission = tex2D (_MainTex, IN.uv_MainTex).rgb;
o.Alpha = tex2D (_MainTex, IN.uv_MainTex).a;
}
ENDCG
Суть проблемы в том что изображение искажается при повороте персонажа с прицелом.
Что в шейдере не правильно и как это исправить, или хотя бы подскажите направление куда рыть..