//Жирный и индусский
Shader "Custom/NewShader" {
Properties
{
_MainColor("Color(RGB), Opacity(A)", Color) = (1,1,1,1)
_CubeColor("CubeColor(RGB), Opacity(A)", Color) = (1,1,1,1)
_MainTex ("Base (RGB)", 2D) = "white" {}
_NoiseTex ("_NoiseTex (A)", 2D) = "white" {}
_NoiseScale ("NoiseScale", float) = 0.1
_NoiseSpeed ("NoiseSpeed", float) = 0.05
_DisplaceScale ("DisplaceScale", float) = 0.5
_RimPow ("RimPow", float) = -1.0
_Cube ("Cubemap", Cube) = "_Skybox" { TexGen CubeReflect }
}
SubShader
{
Cull Front
Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
LOD 200
CGPROGRAM
#pragma only_renderers d3d9 gles
#pragma target 3.0
#pragma glsl
#pragma surface surf Lambert alpha vertex:vert
fixed4 _MainColor;
fixed4 _CubeColor;
sampler2D _MainTex;
sampler2D _NoiseTex;
half _NoiseScale;
half _NoiseSpeed;
half _DisplaceScale;
half _RimPow;
samplerCUBE _Cube;
struct Input
{
float2 uv_MainTex;
float2 NoiseTextPos;
float3 viewDir;
float3 worldNormal;
float3 worldRefl;
INTERNAL_DATA
};
void vert (inout appdata_full v, out Input o)
{
half2 textPos = (v.vertex.xy + v.vertex.xz)*_NoiseScale + ((_Time+_Time.zxyw)*_NoiseSpeed);
o.NoiseTextPos = textPos;
half disp = tex2Dlod(_NoiseTex, float4(textPos,0,0)).a;
v.vertex.xyz += v.normal * (disp * _DisplaceScale);
}
void surf (Input IN, inout SurfaceOutput o)
{
half4 c = tex2D (_MainTex, IN.uv_MainTex);
o.Albedo = c.rgb*_MainColor.rgb;
o.Normal = UnpackNormal(tex2D(_NoiseTex, IN.NoiseTextPos));
float3 worldNormal = WorldNormalVector (IN, o.Normal);
fixed rim = pow((dot(worldNormal, IN.viewDir)), _RimPow);
float3 worldRefl = WorldReflectionVector (IN, o.Normal);
fixed4 reflcol = texCUBE (_Cube, worldRefl);
o.Emission = saturate(reflcol.rgb * rim);
fixed4 refRcol = texCUBE (_Cube, refract(IN.viewDir, worldNormal, 1.5));
o.Emission = saturate(o.Emission+(refRcol.rgb * (1-rim)))*_CubeColor.rgb;
o.Alpha = c.a*_MainColor.a*rim;
o.Alpha = min(o.Alpha, _MainColor.a*Luminance(o.Emission)*_CubeColor.a);
}
ENDCG
Cull Back
CGPROGRAM
#pragma only_renderers d3d9 gles
#pragma target 3.0
#pragma glsl
#pragma surface surf Lambert alpha vertex:vert
fixed4 _MainColor;
fixed4 _CubeColor;
sampler2D _MainTex;
sampler2D _NoiseTex;
half _NoiseScale;
half _NoiseSpeed;
half _DisplaceScale;
half _RimPow;
samplerCUBE _Cube;
struct Input
{
float2 uv_MainTex;
float2 NoiseTextPos;
float3 viewDir;
float3 worldNormal;
float3 worldRefl;
INTERNAL_DATA
};
void vert (inout appdata_full v, out Input o)
{
half2 textPos = (v.vertex.xy + v.vertex.xz)*_NoiseScale + ((_Time+_Time.zxyw)*_NoiseSpeed);
o.NoiseTextPos = textPos;
half disp = tex2Dlod(_NoiseTex, float4(textPos,0,0)).a;
v.vertex.xyz += v.normal * (disp * _DisplaceScale);
}
void surf (Input IN, inout SurfaceOutput o)
{
half4 c = tex2D (_MainTex, IN.uv_MainTex);
o.Albedo = c.rgb*_MainColor.rgb;
o.Normal = UnpackNormal(tex2D(_NoiseTex, IN.NoiseTextPos));
float3 worldNormal = WorldNormalVector (IN, o.Normal);
fixed rim = pow((dot(worldNormal, IN.viewDir)), _RimPow);
float3 worldRefl = WorldReflectionVector (IN, o.Normal);
fixed4 reflcol = texCUBE (_Cube, worldRefl);
o.Emission = saturate(reflcol.rgb * rim);
fixed4 refRcol = texCUBE (_Cube, refract(IN.viewDir, worldNormal, 1.5));
o.Emission = saturate(o.Emission+(refRcol.rgb * (1-rim)))*_CubeColor.rgb;
o.Alpha = c.a*_MainColor.a*rim;
o.Alpha = min(o.Alpha, _MainColor.a*Luminance(o.Emission)*_CubeColor.a);
}
ENDCG
}
FallBack "Diffuse"
}