//简单shader //主要用于场景性能测试替换shader //by---王圣 Shader "Gonbest/FallBack/FBWithSimpleShader" { Properties { _Color ("Main Color", Color) = (1, 1, 1, 1) _ColorMultiplier("Color Multipler",range(0,2)) = 1 _MainTex("Base (RGB)", 2D) = "white" {} _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5 _BumpMap("Normal(RGB)",2D) = "black"{} _BumpScale("_BumpScale",Range(0,2)) = 1 //发现比率 _EnvPower("_EnvPower",float) = 0.1 //环境高亮的强度 _EnvCube("Env Cube", Cube) = "white" {} _NoiseMap ("_NoiseMap", 2D) = "white" {} _NoiseBumpMap ("_NoiseBumpMap", 2D) = "white" {} _NoiseTiling("_NoiseTiling",float) = 5.2 _NoisePower("_NoisePower",float) = 0.35 _MyShadowMap("Shadow map", 2D) = "black" {} //阴影贴图 _ShadowIntensity("Shadow Intensity",float) = 1 //阴影强度 _ShadowFadeFactor("Shadow Fade Factor",float) = 0 //阴影被材质影响消隐的效果 _Glossiness("_Glossiness",Range(0,1)) = 0.2 //光滑度 _Metallic("_Metallic",Range(0,1)) = 0 //金属度 _MetallicTex("Metallic(R)&Glossiness(G)&AO(B)",2D) = "white"{} //金属度 _SpecularPower("_SpecularPower",Range(0,2)) = 1 //高亮强度 _RainStength("_RainStength",Range(0,10)) = 0 //雨的强度 _RainSpeed("_RainSpeed",Range(-2,2)) = 1 //雨的闪烁速度 _DiffuseColor("EmissiveColor",Color) = (1,1,1,0) } CGINCLUDE #include "../Include/Base/CommonCG.cginc" #include "../Include/Base/MathCG.cginc" #include "../Include/Utility/VertexUtilsCG.cginc" #include "../Include/Utility/FogUtilsCG.cginc" #include "../Include/Utility/RainUtilsCG.cginc" #include "../Include/Utility/PixelUtilsCG.cginc" #include "../Include/Shadow/ShadowCG.cginc" #include "../Include/Utility/WidgetUtilsCG.cginc" #include "../Include/Base/EnergyCG.cginc" #include "../Include/Specular/GGXCG.cginc" #include "../Include/Base/FresnelCG.cginc" #include "../Include/Specular/BeckmannCG.cginc" #include "../Include/Indirect/Lightmap&SHLightCG.cginc" uniform sampler2D _MainTex; uniform sampler2D _BumpMap; uniform float4 _EnvCube_HDR; UNITY_DECLARE_TEXCUBE(_EnvCube); uniform sampler2D _MetallicTex; uniform float4 _MainTex_ST; uniform float _Glossiness = 0.8; //光滑度 uniform float _Metallic = 0; //金属度 uniform float _SpecularPower = 0.8; //高亮亮度 uniform float _BumpScale = 1; //发现比率 uniform float3 _DiffuseColor; uniform float _EnvPower; /*****************************带有lightmap的处理(分开了-_-!,这TM就是一个坑,lightmap处理好像不能放到一个宏判断中.)**********************************************/ struct v2f_lit { float4 pos : POSITION; float4 uv : TEXCOORD0; float4 wt : TEXCOORD1; float4 wb : TEXCOORD2; float4 wn : TEXCOORD3; GONBEST_FOG_COORDS(4) GONBEST_SHADOW_COORDS(5) GONBEST_SH_COORDS(6) }; //通用功能的vert v2f_lit vert_lit(appdata_full v) { v2f_lit o = (v2f_lit)0; float4 ppos,wpos; float3 wt,wn,wb; GetVertexParameters(v.vertex, v.tangent, v.normal, ppos, wpos, wn, wt, wb); o.pos = ppos; o.wt = float4(wt,wpos.x); o.wb = float4(wb,wpos.y); o.wn = float4(wn,wpos.z); o.uv.xy = TRANSFORM_TEX(v.texcoord, _MainTex); o.uv.zw = GONBEST_CALC_LIGHTMAP_UV(v.texcoord1.xy); GONBEST_TRANSFER_SH(o,wn,wpos); //阴影处理 GONBEST_TRANSFER_SHADOW_WPOS(o,wpos,v.texcoord1); //获取雾的采样点 GONBEST_TRANSFER_FOG(o, o.pos, wpos); return o; } //通用的frag fixed4 frag_lit(v2f_lit i) : COLOR { fixed4 mainTex = GONBEST_TEX_SAMPLE(_MainTex, i.uv.xy); //处理颜色值 GONBEST_APPLY_COLOR_MULTIPLIER(mainTex) //应用AlphaTest GONBEST_APPLY_ALPHATEST(mainTex) float3 emissive = mainTex.xyz;//_DiffuseColor *mainTex.xyz; //处理粗糙度和金属度 float4 metaColor = tex2D(_MetallicTex,i.uv); float smoothness = _Glossiness * metaColor.g; float perceptualRoughness = max(0.08, 1 - smoothness); float rough = perceptualRoughness * perceptualRoughness; float meta = _Metallic * metaColor.r; float specPowner = _SpecularPower ;// * GONBEST_INV_PI; float ao = GBLerpOneTo (metaColor.b, 1); //根据能量守恒获取基础的散射光和高亮光颜色 half oneMinusReflectivity; float3 diffColor,specularColor; GetDiffuseAndSpecular(mainTex.xyz, meta, diffColor, specularColor, oneMinusReflectivity); float4 NT = tex2D(_BumpMap,i.uv.xy); GONBEST_RAIN_NORMAL(NT,i.uv.xy) float3 N = GetWorldNormalFromBump(NT,_BumpScale,GBNormalizeSafe(i.wt.xyz),GBNormalizeSafe(i.wb.xyz),GBNormalizeSafe(i.wn.xyz)); float3 P = float3(i.wt.w, i.wb.w, i.wn.w); float3 L = GBNormalizeSafe(_WorldSpaceLightPos0.xyz); float3 V = GBNormalizeSafe((_WorldSpaceCameraPos.xyz - P.xyz)); float3 H = GBNormalizeSafe(L+V); float3 R = reflect(-V,N); float NoH = saturate(dot(N,H)); float NoL = saturate(dot(N,L)); float NoV = saturate(dot(N,V)); float VoH = saturate(dot(H,V)); float GGX = GBGGXSpecularTerm(NoH, NoL,NoV, rough); float3 F = GBFresnelTermFastWithSpecGreen(specularColor,VoH); //ggx的高光分布 fixed3 spec = GGX * F * specPowner ; //间接光 float3 indirectSpec = IndirectSpecular_Custom(UNITY_PASS_TEXCUBE(_EnvCube), _EnvCube_HDR,R,rough,meta) ; indirectSpec *= SurfaceReductionTerm(rough,perceptualRoughness); indirectSpec *= GBFresnelLerp(specularColor,GrazingTerm(smoothness,oneMinusReflectivity),NoV); indirectSpec *= _EnvPower; //间接散射光处理 float3 indirectDiff = (float3)1; GONBEST_APPLY_SH_COLOR(i,N,P,indirectDiff); GONBEST_APPLY_LIGHTMAP_COLOR(i.uv.zw,indirectDiff); //这里判断是否使用了探针和Lightmap float useSHorLIGHTMAP = step(0.001,indirectDiff.x+indirectDiff.y+indirectDiff.z); indirectDiff = lerp((float3)1,indirectDiff,useSHorLIGHTMAP); //阴影处理 indirectDiff *= GONBEST_DECODE_SHADOW_VALUE(i,P); float4 outColor = (float4)0; outColor.rgb += (spec + diffColor) * NoL * _LightColor0.rgb; outColor.rgb += indirectSpec * ao; outColor.rgb += emissive * ao; outColor.a = mainTex.a; //间接光的处理 outColor.rgb = indirectDiff * outColor.rgb ; //对应模型雾的颜色 GONBEST_APPLY_FOG(i, outColor.xyz); return outColor; } /***************************************************************************/ ENDCG SubShader { ZTest Less ZWrite On Pass { //这个Pass使用lightmap和使用阴影 Name "LIGHTMAP&ALPHATEST&ALPHATEX" Tags { "LightMode" = "ForwardBase" } CGPROGRAM #pragma vertex vert_lit #pragma fragment frag_lit #pragma fragmentoption ARB_precision_hint_fastest #pragma multi_compile _GONBEST_SHADOW_ON _GONBEST_SHADOW_OFF #pragma multi_compile _GONBEST_RAIN_BUMP_ON _GONBEST_RAIN_BUMP_OFF #pragma multi_compile _GONBEST_ALPHA_TEST_ON #pragma multi_compile _GONBEST_ALPHA_TEX_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 _GONBEST_HEIGHT_FOG_ON _GONBEST_HEIGHT_FOG_OFF #pragma multi_compile _GONBEST_CUSTOM_SHADOW_ON #pragma multi_compile_fog #pragma target 3.0 ENDCG } } FallBack "Diffuse" }