323 lines
8.8 KiB
Plaintext
323 lines
8.8 KiB
Plaintext
// Upgrade NOTE: replaced 'mul(GONBEST_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
|
|
|
|
//风的Pass提供者
|
|
Shader "Gonbest/Legacy/WindHelper"
|
|
{
|
|
Properties
|
|
{
|
|
_Color ("Main Color", Color) = (1, 1, 1, 1)
|
|
_ColorMultiplier("Color Multipler",range(0,2)) = 1
|
|
_MainTex("Base (RGB)", 2D) = "white" {}
|
|
_DiffuseColor("EmissiveColor",Color) = (0.7,0.7,0.7,0)
|
|
}
|
|
|
|
CGINCLUDE
|
|
#include "../Include/Base/CommonCG.cginc"
|
|
#include "../Include/Utility/FogUtilsCG.cginc"
|
|
#include "../Include/Utility/FlowUtilsCG.cginc"
|
|
#include "../Include/Utility/WidgetUtilsCG.cginc"
|
|
#include "../Include/Shadow/ShadowCG.cginc"
|
|
#include "../Include/Utility/WindUtilsCG.cginc"
|
|
#include "../Include/Indirect/Lightmap&SHLightCG.cginc"
|
|
|
|
uniform sampler2D _MainTex;
|
|
uniform half4 _MainTex_ST;
|
|
|
|
struct v2flit
|
|
{
|
|
float4 pos : POSITION;
|
|
half4 uv : TEXCOORD0;
|
|
half2 litmapuv : TEXCOORD1;
|
|
float3 wn : TEXCOORD2;
|
|
float4 wpos : TEXCOORD3;
|
|
GONBEST_FOG_COORDS(4)
|
|
GONBEST_SHADOW_COORDS(5)
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
};
|
|
//顶点处理程序
|
|
v2flit vert_lit (appdata_full v)
|
|
{
|
|
UNITY_SETUP_INSTANCE_ID(v);
|
|
v2flit o = (v2flit)0;
|
|
//顶点处理
|
|
GONBEST_TRANSFER_WIND(v)
|
|
o.pos = UnityObjectToClipPos(v.vertex);
|
|
float4 wpos = mul(unity_ObjectToWorld,v.vertex);
|
|
|
|
//UV处理
|
|
o.uv.xy = TRANSFORM_TEX(v.texcoord, _MainTex);
|
|
GONBEST_TRANSFER_SCROLL_UV(v,o)
|
|
|
|
//Lightmap的处理
|
|
o.litmapuv.xy = GONBEST_CALC_LIGHTMAP_UV(v.texcoord1);
|
|
|
|
//法线
|
|
o.wn = UnityObjectToWorldNormal(v.normal);
|
|
|
|
//阴影处理
|
|
GONBEST_TRANSFER_SHADOW_WPOS(o,wpos,v.texcoord1);
|
|
//获取雾的采样点
|
|
GONBEST_TRANSFER_FOG(o, o.pos, wpos.xyz);
|
|
UNITY_TRANSFER_INSTANCE_ID(v, o);
|
|
return o;
|
|
}
|
|
|
|
fixed4 frag_lit(v2flit i) : COLOR
|
|
{
|
|
UNITY_SETUP_INSTANCE_ID(i);
|
|
fixed4 tex = GONBEST_TEX_SAMPLE(_MainTex, i.uv.xy);
|
|
GONBEST_APPLY_ALPHATEST(tex);
|
|
GONBEST_APPLY_SCROLL_UV(i,tex);
|
|
GONBEST_APPLY_COLOR_MULTIPLIER(tex);
|
|
|
|
fixed4 Albedo = tex;
|
|
//处理散射灯光
|
|
tex.rgb = _LightColor0.rgb * max (0, dot(i.wn, _WorldSpaceLightPos0.xyz));
|
|
//应用lightmap
|
|
tex.rgb += Albedo;
|
|
|
|
float3 idiff = (float3)1;
|
|
GONBEST_APPLY_LIGHTMAP_COLOR(i.litmapuv.xy,idiff);
|
|
//阴影处理
|
|
idiff *= GONBEST_DECODE_SHADOW_VALUE(i,i.wpos);
|
|
|
|
tex.rgb *= idiff;
|
|
//对应模型雾的颜色
|
|
GONBEST_APPLY_FOG(i, tex);
|
|
#if defined(_GONBEST_SPEC_ALPHA_ON)
|
|
tex.a = 0;
|
|
#endif
|
|
return tex;
|
|
}
|
|
|
|
struct v2f
|
|
{
|
|
float4 pos : POSITION;
|
|
half4 uv : TEXCOORD0;
|
|
GONBEST_FOG_COORDS(1)
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
|
|
};
|
|
//顶点处理程序
|
|
v2f vert (appdata_full v)
|
|
{
|
|
UNITY_SETUP_INSTANCE_ID(v);
|
|
v2f o = (v2f)0;
|
|
GONBEST_TRANSFER_WIND(v)
|
|
o.pos = UnityObjectToClipPos(v.vertex);
|
|
float4 wpos = mul(unity_ObjectToWorld,v.vertex);
|
|
|
|
o.uv.xy = TRANSFORM_TEX(v.texcoord, _MainTex);
|
|
GONBEST_TRANSFER_SCROLL_UV(v,o)
|
|
//获取雾的采样点
|
|
GONBEST_TRANSFER_FOG(o, o.pos, wpos.xyz);
|
|
UNITY_TRANSFER_INSTANCE_ID(v, o);
|
|
return o;
|
|
}
|
|
|
|
fixed4 frag(v2f i) : COLOR
|
|
{
|
|
UNITY_SETUP_INSTANCE_ID(i);
|
|
fixed4 tex = GONBEST_TEX_SAMPLE(_MainTex, i.uv.xy);
|
|
GONBEST_APPLY_ALPHATEST(tex);
|
|
GONBEST_APPLY_SCROLL_UV(i,tex);
|
|
GONBEST_APPLY_COLOR_MULTIPLIER(tex);
|
|
//对应模型雾的颜色
|
|
GONBEST_APPLY_FOG(i, tex);
|
|
#if defined(_GONBEST_SPEC_ALPHA_ON)
|
|
tex.a = 0;
|
|
#endif
|
|
return tex;
|
|
}
|
|
ENDCG
|
|
|
|
SubShader
|
|
{
|
|
Lighting Off
|
|
Cull Off
|
|
ZWrite Off
|
|
Pass
|
|
{ //一张滚动Shader的通用的顶点片段程序
|
|
Name "WIND&ADD"
|
|
Blend SrcAlpha One,Zero OneMinusSrcAlpha
|
|
CGPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
|
|
//#pragma fragmentoption ARB_precision_hint_fastest
|
|
#pragma multi_compile _GONBEST_COMPLEX_WIND_ON
|
|
#pragma multi_compile_fog
|
|
#pragma multi_compile_instancing
|
|
ENDCG
|
|
}
|
|
Pass
|
|
{ //一张滚动Shader的通用的顶点片段程序
|
|
Name "WIND&ADD&ALPHATEX"
|
|
Blend SrcAlpha One,Zero OneMinusSrcAlpha
|
|
CGPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
|
|
//#pragma fragmentoption ARB_precision_hint_fastest
|
|
#pragma multi_compile _GONBEST_COMPLEX_WIND_ON
|
|
#pragma multi_compile _GONBEST_ALPHA_TEX_ON
|
|
#pragma multi_compile_fog
|
|
#pragma multi_compile_instancing
|
|
ENDCG
|
|
}
|
|
|
|
Pass
|
|
{ //一张滚动Shader的通用的顶点片段程序
|
|
Name "WIND&BLEND"
|
|
Blend SrcAlpha OneMinusSrcAlpha,Zero OneMinusSrcAlpha
|
|
CGPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
|
|
//#pragma fragmentoption ARB_precision_hint_fastest
|
|
#pragma multi_compile _GONBEST_COMPLEX_WIND_ON
|
|
#pragma multi_compile_fog
|
|
#pragma multi_compile_instancing
|
|
ENDCG
|
|
}
|
|
Pass
|
|
{ //一张滚动Shader的通用的顶点片段程序
|
|
Name "WIND&BLEND&ALPHATEX"
|
|
Blend SrcAlpha OneMinusSrcAlpha,Zero OneMinusSrcAlpha
|
|
CGPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
|
|
//#pragma fragmentoption ARB_precision_hint_fastest
|
|
#pragma multi_compile _GONBEST_COMPLEX_WIND_ON
|
|
#pragma multi_compile _GONBEST_ALPHA_TEX_ON
|
|
#pragma multi_compile_fog
|
|
#pragma multi_compile_instancing
|
|
ENDCG
|
|
}
|
|
|
|
Pass
|
|
{ //两张滚动Shader的通用的顶点片段程序
|
|
Name "WIND&SCROLL&ADD"
|
|
Blend SrcAlpha One,Zero OneMinusSrcAlpha
|
|
CGPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
|
|
//#pragma fragmentoption ARB_precision_hint_fastest
|
|
#pragma multi_compile _GONBEST_ONE_SCROLL_UV_ON
|
|
#pragma multi_compile _GONBEST_COMPLEX_WIND_ON
|
|
#pragma multi_compile _GONBEST_COLOR_MULTIPLIER_ON
|
|
#pragma multi_compile_fog
|
|
#pragma multi_compile_instancing
|
|
ENDCG
|
|
}
|
|
|
|
Pass
|
|
{ //两张滚动Shader的通用的顶点片段程序
|
|
Name "WIND&SCROLL&ADD&ALPHATEX"
|
|
Blend SrcAlpha One,Zero OneMinusSrcAlpha
|
|
CGPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
|
|
//#pragma fragmentoption ARB_precision_hint_fastest
|
|
#pragma multi_compile _GONBEST_ONE_SCROLL_UV_ON
|
|
#pragma multi_compile _GONBEST_COMPLEX_WIND_ON
|
|
#pragma multi_compile _GONBEST_COLOR_MULTIPLIER_ON
|
|
#pragma multi_compile _GONBEST_ALPHA_TEX_ON
|
|
#pragma multi_compile_fog
|
|
#pragma multi_compile_instancing
|
|
ENDCG
|
|
}
|
|
|
|
Pass
|
|
{ //两张滚动Shader的通用的顶点片段程序
|
|
Name "WIND&SCROLL&BLEND"
|
|
Blend SrcAlpha OneMinusSrcAlpha,Zero OneMinusSrcAlpha
|
|
CGPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
|
|
//#pragma fragmentoption ARB_precision_hint_fastest
|
|
#pragma multi_compile _GONBEST_ONE_SCROLL_UV_ON
|
|
#pragma multi_compile _GONBEST_COMPLEX_WIND_ON
|
|
#pragma multi_compile _GONBEST_COLOR_MULTIPLIER_ON
|
|
#pragma multi_compile_fog
|
|
#pragma multi_compile_instancing
|
|
ENDCG
|
|
}
|
|
|
|
Pass
|
|
{ //两张滚动Shader的通用的顶点片段程序
|
|
Name "WIND&SCROLL&BLEND&ALPHATEX"
|
|
Blend SrcAlpha OneMinusSrcAlpha,Zero OneMinusSrcAlpha
|
|
CGPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
|
|
//#pragma fragmentoption ARB_precision_hint_fastest
|
|
#pragma multi_compile _GONBEST_ONE_SCROLL_UV_ON
|
|
#pragma multi_compile _GONBEST_COMPLEX_WIND_ON
|
|
#pragma multi_compile _GONBEST_COLOR_MULTIPLIER_ON
|
|
#pragma multi_compile _GONBEST_ALPHA_TEX_ON
|
|
#pragma multi_compile_fog
|
|
#pragma multi_compile_instancing
|
|
ENDCG
|
|
}
|
|
|
|
Pass
|
|
{
|
|
Name "WINDGRASS"
|
|
ZWrite On
|
|
CGPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
//#pragma fragmentoption ARB_precision_hint_fastest
|
|
#pragma multi_compile _GONBEST_ALPHA_TEST_ON
|
|
#pragma multi_compile _GONBEST_SIMPLE_WIND_ON
|
|
#pragma multi_compile _GONBEST_COLOR_MULTIPLIER_ON
|
|
#pragma multi_compile_fog
|
|
#pragma multi_compile_instancing
|
|
#pragma multi_compile _GONBEST_SPEC_ALPHA_ON
|
|
ENDCG
|
|
}
|
|
Pass
|
|
{
|
|
Name "WINDGRASS&ALPHATEX"
|
|
ZWrite On
|
|
CGPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
//#pragma fragmentoption ARB_precision_hint_fastest
|
|
#pragma multi_compile _GONBEST_ALPHA_TEST_ON
|
|
#pragma multi_compile _GONBEST_SIMPLE_WIND_ON
|
|
#pragma multi_compile _GONBEST_COLOR_MULTIPLIER_ON
|
|
#pragma multi_compile _GONBEST_ALPHA_TEX_ON
|
|
#pragma multi_compile_fog
|
|
#pragma multi_compile_instancing
|
|
#pragma multi_compile _GONBEST_SPEC_ALPHA_ON
|
|
ENDCG
|
|
}
|
|
Pass
|
|
{
|
|
Name "WINDGRASS&LIT"
|
|
Tags { "LightMode" = "ForwardBase" }
|
|
ZWrite On
|
|
CGPROGRAM
|
|
#pragma vertex vert_lit
|
|
#pragma fragment frag_lit
|
|
|
|
//#pragma fragmentoption ARB_precision_hint_fastest
|
|
#pragma multi_compile _GONBEST_ALPHA_TEST_ON
|
|
#pragma multi_compile _GONBEST_SIMPLE_WIND_ON
|
|
#pragma multi_compile _GONBEST_COLOR_MULTIPLIER_ON
|
|
#pragma multi_compile _GONBEST_INDIRECT_DIFFUSE_ON
|
|
#pragma multi_compile LIGHTMAP_ON LIGHTPROBE_SH
|
|
#pragma multi_compile_fog
|
|
#pragma multi_compile_instancing
|
|
#pragma multi_compile _GONBEST_SPEC_ALPHA_ON
|
|
ENDCG
|
|
}
|
|
}
|
|
} |