Столкнулся с проблемой, на некоторых поверхностях шейдер материал с текстурой некорректно накладывается:
Скрин
https://sun9-59.userapi.com/impg/wmAMFOg8f3jam_aj2nWELRNq3GwjTQrtVzYemg/BMVy85-Dvww.jpg?size=1920x1080&quality=96&sign=a8254886ceb72f7b16b5210f8d1c35b6&type=album
На некоторых объектах текстура проектора как бы растягивается...
Кто-нибудь сталкивался с подобной проблемой?
P.S. И да, используется старая версия юньки (4.6)
Собственно мой шейдер:
Синтаксис:
Используется csharp
Shader "Projector/CoolCloundShadows" {
Properties {
_CloundColor ("CloundColor", Color) = (1,1,1,1)
_NoiseCloundsTexure ("NoiseCloundsTexure", 2D) = "white" {TexGen ObjectLinear}
_CloundsMoveX ("CloundsMoveX", Float ) = 0
_CloundsMoveZ ("CloundsMoveZ", Float ) = 0
_CloundTin ("CloundTin", Float ) = 0.1
_Dessolve ("Dessolve", Range(0, 10)) = 1
_CloundDiss ("CloundDiss", Range(0, 1)) = 0.1553778
_CloudDest ("CloudDest", Range(0, 1)) = 0
_CloundCulloff ("CloundCulloff", Float ) = 10
[HideInInspector]_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
}
SubShader {
Tags {
"IgnoreProjector"="True"
"Queue"="Transparent+1000"
"RenderType"="Transparent"
}
Pass {
Blend SrcAlpha OneMinusSrcAlpha
ZWrite Off
Offset -3, -3
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
uniform float _CloundsMoveX;
uniform float _CloundsMoveZ;
uniform float _CloundTin;
uniform float _Dessolve;
uniform sampler2D _NoiseCloundsTexure; uniform float4 _NoiseCloundsTexure_ST;
uniform float _CloundDiss;
uniform float _CloundCulloff;
uniform float _CloudDest;
uniform float4 _CloundColor;
struct VertexInput {
float4 vertex : POSITION;
};
struct VertexOutput {
float4 pos : SV_POSITION;
float4 posWorld : TEXCOORD0;
};
VertexOutput vert (VertexInput v) {
VertexOutput o = (VertexOutput)0;
o.posWorld = mul(_Object2World, v.vertex);
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
return o;
}
fixed4 frag(VertexOutput i) : COLOR {
float3 node_9919 = normalize(i.posWorld.rgb);
float node_8203 = node_9919.g;
float node_8471 = 0.0;
float node_2306 = 1.0;
float2 node_3018 = ((float2(_CloundsMoveX,_CloundsMoveZ)+(node_9919.rb/(node_8471 + ( (abs(node_8203) - node_8471) * (node_2306 - node_8471) ) / (node_2306 - node_8471))))*_CloundTin);
float4 node_9676 = tex2D(_NoiseCloundsTexure,TRANSFORM_TEX(node_3018, _NoiseCloundsTexure));
float node_6481 = (saturate(min(node_9676.r,saturate((1.0 - _Dessolve))))*pow(saturate((node_8203+_CloundDiss)),_CloundCulloff));
float node_1885 = lerp(1.0,node_6481,_CloudDest);
float3 finalColor = (_CloundColor.rgb*node_1885);
return fixed4(finalColor,(node_1885*_CloudDest*_CloundColor.a));
}
ENDCG
}
}
}
Properties {
_CloundColor ("CloundColor", Color) = (1,1,1,1)
_NoiseCloundsTexure ("NoiseCloundsTexure", 2D) = "white" {TexGen ObjectLinear}
_CloundsMoveX ("CloundsMoveX", Float ) = 0
_CloundsMoveZ ("CloundsMoveZ", Float ) = 0
_CloundTin ("CloundTin", Float ) = 0.1
_Dessolve ("Dessolve", Range(0, 10)) = 1
_CloundDiss ("CloundDiss", Range(0, 1)) = 0.1553778
_CloudDest ("CloudDest", Range(0, 1)) = 0
_CloundCulloff ("CloundCulloff", Float ) = 10
[HideInInspector]_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
}
SubShader {
Tags {
"IgnoreProjector"="True"
"Queue"="Transparent+1000"
"RenderType"="Transparent"
}
Pass {
Blend SrcAlpha OneMinusSrcAlpha
ZWrite Off
Offset -3, -3
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
uniform float _CloundsMoveX;
uniform float _CloundsMoveZ;
uniform float _CloundTin;
uniform float _Dessolve;
uniform sampler2D _NoiseCloundsTexure; uniform float4 _NoiseCloundsTexure_ST;
uniform float _CloundDiss;
uniform float _CloundCulloff;
uniform float _CloudDest;
uniform float4 _CloundColor;
struct VertexInput {
float4 vertex : POSITION;
};
struct VertexOutput {
float4 pos : SV_POSITION;
float4 posWorld : TEXCOORD0;
};
VertexOutput vert (VertexInput v) {
VertexOutput o = (VertexOutput)0;
o.posWorld = mul(_Object2World, v.vertex);
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
return o;
}
fixed4 frag(VertexOutput i) : COLOR {
float3 node_9919 = normalize(i.posWorld.rgb);
float node_8203 = node_9919.g;
float node_8471 = 0.0;
float node_2306 = 1.0;
float2 node_3018 = ((float2(_CloundsMoveX,_CloundsMoveZ)+(node_9919.rb/(node_8471 + ( (abs(node_8203) - node_8471) * (node_2306 - node_8471) ) / (node_2306 - node_8471))))*_CloundTin);
float4 node_9676 = tex2D(_NoiseCloundsTexure,TRANSFORM_TEX(node_3018, _NoiseCloundsTexure));
float node_6481 = (saturate(min(node_9676.r,saturate((1.0 - _Dessolve))))*pow(saturate((node_8203+_CloundDiss)),_CloundCulloff));
float node_1885 = lerp(1.0,node_6481,_CloudDest);
float3 finalColor = (_CloundColor.rgb*node_1885);
return fixed4(finalColor,(node_1885*_CloudDest*_CloundColor.a));
}
ENDCG
}
}
}