Files
tianrunCRM/Assets/CoolapeFrame/3rd/NGUI_Enhance/Examples/Shaders/Refractive.shader
2020-07-04 14:41:25 +08:00

271 lines
5.9 KiB
Plaintext

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "Transparent/Refractive"
{
Properties
{
_MainTex ("Base (RGB), Alpha (A)", 2D) = "white" {}
_BumpMap ("Normal Map (RGB)", 2D) = "bump" {}
_Mask ("Specularity (R), Shininess (G), Refraction (B)", 2D) = "black" {}
_Color ("Color Tint", Color) = (1,1,1,1)
_Specular ("Specular Color", Color) = (0,0,0,0)
_Focus ("Focus", Range(-100.0, 100.0)) = -100.0
_Shininess ("Shininess", Range(0.01, 1.0)) = 0.2
}
Category
{
Tags
{
"Queue" = "Transparent+1"
"IgnoreProjector" = "True"
"RenderType" = "Transparent"
}
SubShader
{
LOD 500
GrabPass
{
Name "BASE"
Tags { "LightMode" = "Always" }
}
Cull Off
ZWrite Off
ZTest LEqual
Blend SrcAlpha OneMinusSrcAlpha
AlphaTest Greater 0
CGPROGRAM
#pragma exclude_renderers gles
#pragma vertex vert
#pragma surface surf PPL alpha
#include "UnityCG.cginc"
sampler2D _GrabTexture;
sampler2D _MainTex;
sampler2D _BumpMap;
sampler2D _Mask;
fixed4 _Color;
fixed4 _Specular;
half4 _GrabTexture_TexelSize;
half _Focus;
half _Shininess;
struct Input
{
float4 position : POSITION;
float2 uv_MainTex : TEXCOORD0;
float4 color : COLOR;
float4 proj : TEXCOORD1;
};
void vert (inout appdata_full v, out Input o)
{
UNITY_INITIALIZE_OUTPUT(Input, o);
o.position = UnityObjectToClipPos(v.vertex);
#if UNITY_UV_STARTS_AT_TOP
float scale = -1.0;
#else
float scale = 1.0;
#endif
o.proj.xy = (float2(o.position.x, o.position.y * scale) + o.position.w) * 0.5;
o.proj.zw = o.position.zw;
}
void surf (Input IN, inout SurfaceOutput o)
{
half4 tex = tex2D(_MainTex, IN.uv_MainTex);
half3 nm = UnpackNormal(tex2D(_BumpMap, IN.uv_MainTex));
half3 mask = tex2D(_Mask, IN.uv_MainTex);
float2 offset = nm.xy * _GrabTexture_TexelSize.xy * _Focus;
IN.proj.xy = offset * IN.proj.z + IN.proj.xy;
half4 ref = tex2Dproj( _GrabTexture, UNITY_PROJ_COORD(IN.proj));
half4 col;
col.rgb = lerp(IN.color.rgb * tex.rgb, _Color.rgb * ref.rgb, mask.b);
col.a = IN.color.a * _Color.a * tex.a;
o.Albedo = col.rgb;
o.Normal = nm;
o.Specular = mask.r;
o.Gloss = _Shininess * mask.g;
o.Alpha = col.a;
}
// Forward lighting
half4 LightingPPL (SurfaceOutput s, half3 lightDir, half3 viewDir, half atten)
{
half3 nNormal = normalize(s.Normal);
half shininess = s.Gloss * 250.0 + 4.0;
#ifndef USING_DIRECTIONAL_LIGHT
lightDir = normalize(lightDir);
#endif
// Phong shading model
half reflectiveFactor = max(0.0, dot(-viewDir, reflect(lightDir, nNormal)));
// Blinn-Phong shading model
//half reflectiveFactor = max(0.0, dot(nNormal, normalize(lightDir + viewDir)));
half diffuseFactor = max(0.0, dot(nNormal, lightDir));
half specularFactor = pow(reflectiveFactor, shininess) * s.Specular;
half4 c;
c.rgb = (s.Albedo * diffuseFactor + _Specular.rgb * specularFactor) * _LightColor0.rgb;
c.rgb *= (atten * 2.0);
c.a = s.Alpha;
return c;
}
ENDCG
}
SubShader
{
LOD 400
Cull Off
ZWrite Off
ZTest LEqual
Blend SrcAlpha OneMinusSrcAlpha
AlphaTest Greater 0
CGPROGRAM
#pragma surface surf PPL alpha
#include "UnityCG.cginc"
sampler2D _MainTex;
sampler2D _BumpMap;
sampler2D _Mask;
float4 _Color;
float4 _Specular;
float _Shininess;
struct Input
{
float4 position : POSITION;
float2 uv_MainTex : TEXCOORD0;
float4 color : COLOR;
};
void surf (Input IN, inout SurfaceOutput o)
{
half4 tex = tex2D(_MainTex, IN.uv_MainTex);
half3 nm = UnpackNormal(tex2D(_BumpMap, IN.uv_MainTex));
half3 mask = tex2D(_Mask, IN.uv_MainTex);
half4 col;
col.rgb = IN.color.rgb * tex.rgb;
col.rgb = lerp(col.rgb, _Color.rgb, mask.b * 0.5);
col.a = IN.color.a * _Color.a * tex.a;
o.Albedo = col.rgb;
o.Normal = nm;
o.Specular = mask.r;
o.Gloss = _Shininess * mask.g;
o.Alpha = col.a;
}
// Forward lighting
half4 LightingPPL (SurfaceOutput s, half3 lightDir, half3 viewDir, half atten)
{
half3 nNormal = normalize(s.Normal);
half shininess = s.Gloss * 250.0 + 4.0;
#ifndef USING_DIRECTIONAL_LIGHT
lightDir = normalize(lightDir);
#endif
// Phong shading model
half reflectiveFactor = max(0.0, dot(-viewDir, reflect(lightDir, nNormal)));
// Blinn-Phong shading model
//half reflectiveFactor = max(0.0, dot(nNormal, normalize(lightDir + viewDir)));
half diffuseFactor = max(0.0, dot(nNormal, lightDir));
half specularFactor = pow(reflectiveFactor, shininess) * s.Specular;
half4 c;
c.rgb = (s.Albedo * diffuseFactor + _Specular.rgb * specularFactor) * _LightColor0.rgb;
c.rgb *= (atten * 2.0);
c.a = s.Alpha;
return c;
}
ENDCG
}
SubShader
{
LOD 300
Cull Off
ZWrite Off
ZTest LEqual
Blend SrcAlpha OneMinusSrcAlpha
AlphaTest Greater 0
CGPROGRAM
#pragma surface surf BlinnPhong alpha
#include "UnityCG.cginc"
sampler2D _MainTex;
sampler2D _Mask;
float4 _Color;
struct Input
{
float4 position : POSITION;
float2 uv_MainTex : TEXCOORD0;
float4 color : COLOR;
};
void surf (Input IN, inout SurfaceOutput o)
{
half4 tex = tex2D(_MainTex, IN.uv_MainTex);
half3 mask = tex2D(_Mask, IN.uv_MainTex);
half4 col;
col.rgb = IN.color.rgb * tex.rgb;
col.rgb = lerp(col.rgb, _Color.rgb, mask.b * 0.5);
col.a = IN.color.a * _Color.a * tex.a;
o.Albedo = col.rgb;
o.Alpha = col.a;
}
ENDCG
}
SubShader
{
LOD 100
Cull Off
Lighting Off
ZWrite Off
Fog { Mode Off }
ColorMask RGB
AlphaTest Greater .01
Blend SrcAlpha OneMinusSrcAlpha
Pass
{
ColorMaterial AmbientAndDiffuse
SetTexture [_MainTex]
{
Combine Texture * Primary
}
}
}
}
Fallback Off
}