Files
Main/Assets/GameAssets/RawResources/shader/Ares/Gonbest/Legacy/WindHelper.shader
2025-01-25 04:38:09 +08:00

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
}
}
}