123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979 |
- // Shader uses custom editor to set double sided GI
- // Needs _Culling to be set properly
- Shader "New_skin"
- {
- Properties
- {
-
- [HeaderHelpLuxURP_URL(snoamqpqhtdl)]
- [ToggleOff]_Receive_Shadows ("Receive Shadows", Float) = 1.0
- _BaseColor ("Color", Color) = (1,1,1,1)
- _BaseMap ("BaseTex", 2D) = "white" { }
- _ClothMask1("Cloth Mask1", 2D) = "white" {}
- _ClothMask2("Cloth Mask2", 2D) = "white" {}
- _ClothMask3("Cloth Mask3", 2D) = "white" {}
- _BumpMap ("NormalMap", 2D) = "bump" { }
- _MetalSmoothTex ("R粗糙度,G金属度,B=AO", 2D) = "white" { }
- _SSSMap ("R=SSS,G=自发光,B=透明", 2D) = "black" { }
- _BloomTex ("Bloom MaskTex", 2D) = "black" { }
- [Header(Rough Metal Control)] _Metalness ("金属度", Range(0, 1)) = 1
- _Roughness ("粗糙度", Range(0, 1)) = 1
- [Header(Light Control)] _DirLightColor ("平行光颜色", Color) = (1,1,1,0)
- _DirLightExposure ("平行光亮度", Range(0, 10)) = 0.8
- _EnvExposure ("环境光强度", Range(0, 10)) = 0.96
- _SHExposure ("SH亮度", Range(0, 10)) = 0.53
- [Header(SSS Control)] _SkinSSSfresnelMask ("皮肤菲尼尔", Range(0, 1)) = 0.128
- _SkinSSSTransmission ("SSS强度", Range(0, 1)) = 0.866
- _SkinSSSScatterColor ("SSS颜色", Color) = (1.0,0.3161765,0.3161765,0)
- [Header(Shadow Control)] _ShadowDarkness ("阴影深浅", Range(0, 1)) = 0
- _ShadowCol ("阴影颜色", Color) = (0,0,0,0)
- _EmissionCol ("自发光颜色", Color) = (0.448,0.591,0.662,0)
- _EmissionExposure ("自发光亮度", Float) = 1
- [Header(Advanced Control (Ask TA About This))]
- _PunctualLightSpecularExposure ("高光亮度", Range(0, 10)) = 1
- _PointLightExposure("点光亮度", Range(0, 10)) = 1
- _CosMin("暗部曝光", Range(0.01, 0.95)) = 0.01
- _envBDRFFactor("高光色泽度", Range(-1, 1)) = 0.58
- [Header(PostProcessing Control)] _BloomIntensity ("Bloom 强度", Float) = 1
- _DarkCornerColor("DarkCornerColor", Vector) = (0,0,0,0)
- [Header(Mask)]
- [Space(8)]
- _MakeUpMask1_RGB("MakeUpMask1_RGB (R: 眼影 G: 腮红 B: 口红 A: 眼线)", 2D) = "black" {}
- _MakeUpMask2_RGB("MakeUpMask2_RGB (R: 纹身区域)", 2D) = "black" {}
- _Mask1_Rchannel_TextureAmountA("Mask1_Rchannel_Texture-Amount(A)", 2D) = "black" {}
- _Mask1_Gchannel_TextureAmountA("Mask1_Gchannel_Texture-Amount(A)", 2D) = "black" {}
- _Mask1_Bchannel_TextureAmountA("Mask1_Bchannel_Texture-Amount(A)", 2D) = "black" {}
- _Mask1_Achannel_TextureAmountA("Mask1_Achannel_Texture-Amount(A)", 2D) = "black" {}
- _Mask2_Rchannel_TextureAmountA("Mask2_Rchannel_Texture-Amount(A)", 2D) = "black" {}
- //_Mask2_Gchannel_TextureAmountA("Mask2_Gchannel_Texture-Amount(A)", 2D) = "black" {}
- //_Mask2_Bchannel_TextureAmountA("Mask2_Bchannel_Texture-Amount(A)", 2D) = "black" {}
- _Mask1_Rchannel_ColorAmountA("Mask1_Rchannel_Color-Amount(A)", Color) = (0.7735849, 0.2006942, 0.3233189, 0.7843137)
- _Mask1_Gchannel_ColorAmountA("Mask1_Gchannel_Color-Amount(A)", Color) = (0.2, 0.772549, 0.4917381, 0.7843137)
- _Mask1_Bchannel_ColorAmountA("Mask1_Bchannel_Color-Amount(A)", Color) = (0.2, 0.406334, 0.772549, 0.7843137)
- _Mask1_Achannel_ColorAmountA("Mask1_Achannel_Color-Amount(A)", Color) = (0.2, 0.406334, 0.772549, 0.7843137)
- _Mask2_Rchannel_ColorAmountA("Mask2_Rchannel_Color-Amount(A)", Color) = (0.2, 0.772549, 0.7071339, 0.7843137)
- //_Mask2_Gchannel_ColorAmountA("Mask2_Gchannel_Color-Amount(A)", Color) = (0.772549, 0.2, 0.6776864, 0.7843137)
- //_Mask2_Bchannel_ColorAmountA("Mask2_Bchannel_Color-Amount(A)", Color) = (0.772549, 0.7037676, 0.2, 0.7843137)
- // Needed by the inspector
- [HideInInspector] _Culling("Culling", Float) = 0.0
- // Lightmapper and outline selection shader need _MainTex, _Color and _Cutoff
- [HideInInspector] _MainTex("Albedo", 2D) = "white" {}
- [HideInInspector] _Color("Color", Color) = (1,1,1,1)
- [HideInInspector] _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.0
- // URP 10.1. needs this for the depthnormal pass
- [HideInInspector] _Cutoff(" Threshold", Range(0.0, 1.0)) = 0.5
- [HideInInspector] _Surface("__surface", Float) = 0.0
- }
- Category{
- CGINCLUDE
- // Upgrade NOTE: excluded shader from OpenGL ES 2.0 because it uses non-square matrices
- #pragma exclude_renderers gles
- #include "UnityCG.cginc"
- #include "UnityPBSLighting.cginc"
- #include "AutoLight.cginc"
- sampler2D _BaseMap, _BumpMap, _MetalSmoothTex, _EmissiveTex;
- float4 _DirLightColor, _SkinSSSScatterColor, _MainTex_ST,_BaseMap_ST;
- float3 _EmissionCol, _ShadowCol;
- half4 _BaseColor;
- float _Metalness, _Roughness, _DirLightExposure, _EnvExposure, _SHExposure, _SkinSSSfresnelMask, _SkinSSSTransmission, _ShadowDarkness, _EmissionExposure, _PointLightExposure, _PunctualLightSpecularExposure, _CosMin;
- fixed _envBDRFFactor;
- uniform sampler2D _EnvironmentTex, _SGameShadowTexture;
- uniform float4x4 _SGameShadowMatrix, _SGameMV, _envSHR, _envSHG, _envSHB, _envRot;
- //uniform float4 _SGameShadowParams, _PointLightPosAndRange, _PointLightColorAndAtten;
- uniform float _Global_BloomThreshold;
- uniform half4 _HeroShowOverallExposureColor;
- uniform half3 _DarkCornerColor;
- uniform half _BloomIntensity;
- sampler2D _MakeUpMask1_RGB;
- sampler2D _MakeUpMask2_RGB;
- sampler2D _Mask1_Rchannel_TextureAmountA;
- sampler2D _Mask1_Gchannel_TextureAmountA;
- sampler2D _Mask1_Bchannel_TextureAmountA;
- sampler2D _Mask1_Achannel_TextureAmountA;
- sampler2D _Mask2_Rchannel_TextureAmountA;
- //sampler2D _Mask2_Gchannel_TextureAmountA;
- //sampler2D _Mask2_Bchannel_TextureAmountA;
- // Mask
- float4 _MakeUpMask1_RGB_ST;
- float4 _MakeUpMask2_RGB_ST;
- float4 _Mask1_Rchannel_ColorAmountA;
- float4 _Mask1_Gchannel_ColorAmountA;
- float4 _Mask1_Bchannel_ColorAmountA;
- float4 _Mask1_Achannel_ColorAmountA;
- float4 _Mask2_Rchannel_ColorAmountA;
- //float4 _Mask2_Gchannel_ColorAmountA;
- //float4 _Mask2_Bchannel_ColorAmountA;
- float4 _Mask1_Rchannel_TextureAmountA_ST;
- float4 _Mask1_Gchannel_TextureAmountA_ST;
- float4 _Mask1_Bchannel_TextureAmountA_ST;
- float4 _Mask1_Achannel_TextureAmountA_ST;
- float4 _Mask2_Rchannel_TextureAmountA_ST;
- //float4 _Mask2_Gchannel_TextureAmountA_ST;
- //float4 _Mask2_Bchannel_TextureAmountA_ST;
- sampler2D _ClothMask1;
- sampler2D _ClothMask2;
- sampler2D _ClothMask3;
- struct v2f
- {
- float4 pos : SV_POSITION;
- float4 uv : TEXCOORD0;
- float4 worldPos : TEXCOORD1;
- half4 wNormal : TEXCOORD2;
- half4 wTangent : TEXCOORD3;
- //half4 shadowPos : TEXCOORD4;
- //float4 viewPos : TEXCOORD5;
- UNITY_LIGHTING_COORDS(4,5)
- //UNITY_FOG_COORDS(8)
- };
- half4 AddMaskColor(half3 baseColor, float2 uv) {
- half4 albedoAlpha = half4(baseColor,1);
- float2 uv_MakeUpMask1_RGB = uv.xy * _MakeUpMask1_RGB_ST.xy + _MakeUpMask1_RGB_ST.zw;
- float4 tex2DNode143 = tex2D(_MakeUpMask1_RGB, uv_MakeUpMask1_RGB);
- float2 uv_Mask1_Rchannel_TextureAmountA = uv.xy * _Mask1_Rchannel_TextureAmountA_ST.xy + _Mask1_Rchannel_TextureAmountA_ST.zw;
- float4 tex2D_mask1_R = tex2D(_Mask1_Rchannel_TextureAmountA, uv_Mask1_Rchannel_TextureAmountA);
- float2 uv_Mask1_Gchannel_TextureAmountA = uv.xy * _Mask1_Gchannel_TextureAmountA_ST.xy + _Mask1_Gchannel_TextureAmountA_ST.zw;
- float4 tex2D_mask1_G = tex2D(_Mask1_Gchannel_TextureAmountA, uv_Mask1_Gchannel_TextureAmountA);
- float2 uv_Mask1_Bchannel_TextureAmountA = uv.xy * _Mask1_Bchannel_TextureAmountA_ST.xy + _Mask1_Bchannel_TextureAmountA_ST.zw;
- float4 tex2D_mask1_B = tex2D(_Mask1_Bchannel_TextureAmountA, uv_Mask1_Bchannel_TextureAmountA);
- float2 uv_Mask1_Achannel_TextureAmountA = uv.xy * _Mask1_Achannel_TextureAmountA_ST.xy + _Mask1_Achannel_TextureAmountA_ST.zw;
- float4 tex2D_mask1_A = tex2D(_Mask1_Achannel_TextureAmountA, uv_Mask1_Achannel_TextureAmountA);
- float2 uv_Mask2_Rchannel_TextureAmountA = uv.xy * _Mask2_Rchannel_TextureAmountA_ST.xy + _Mask2_Rchannel_TextureAmountA_ST.zw;
- float4 tex2D_mask2_R = tex2D(_Mask2_Rchannel_TextureAmountA, uv_Mask2_Rchannel_TextureAmountA);
- //float2 uv_Mask2_Gchannel_TextureAmountA = uv.xy * _Mask2_Gchannel_TextureAmountA_ST.xy + _Mask2_Gchannel_TextureAmountA_ST.zw;
- //float4 tex2D_mask2_G = tex2D(_Mask2_Gchannel_TextureAmountA, uv_Mask2_Gchannel_TextureAmountA);
- //float2 uv_Mask2_Bchannel_TextureAmountA = uv.xy * _Mask2_Bchannel_TextureAmountA_ST.xy + _Mask2_Bchannel_TextureAmountA_ST.zw;
- //float4 tex2D_mask2_B = tex2D(_Mask2_Bchannel_TextureAmountA, uv_Mask2_Bchannel_TextureAmountA);
- float clampResult295 = clamp((tex2DNode143.r * tex2D_mask1_R.a * _Mask1_Rchannel_ColorAmountA.a), 0.0, 1.0);
- float4 _Mask1_R_Color = tex2D_mask1_R * _Mask1_Rchannel_ColorAmountA;
- float4 lerpResult145 = lerp(albedoAlpha, _Mask1_R_Color, clampResult295);
- float clampResult296 = clamp((tex2DNode143.g * tex2D_mask1_G.a * _Mask1_Gchannel_ColorAmountA.a), 0.0, 1.0);
- float4 _Mask1_G_Color = tex2D_mask1_G * _Mask1_Gchannel_ColorAmountA;
- float4 lerpResult160 = lerp(lerpResult145, _Mask1_G_Color, clampResult296);
- float clampResult297 = clamp((tex2DNode143.b * tex2D_mask1_B.a * _Mask1_Bchannel_ColorAmountA.a), 0.0, 1.0);
- float4 _Mask1_B_Color = tex2D_mask1_B * _Mask1_Bchannel_ColorAmountA;
- float4 lerpResult161 = lerp(lerpResult160, _Mask1_B_Color, clampResult297);
- float clampResult2971 = clamp((tex2DNode143.a * tex2D_mask1_A.a * _Mask1_Achannel_ColorAmountA.a), 0.0, 1.0);
- float4 _Mask1_A_Color = tex2D_mask1_A * _Mask1_Achannel_ColorAmountA;
- float4 lerpResult1611 = lerp(lerpResult161, _Mask1_A_Color, clampResult2971);
- //mask2
- float2 uv_MakeUpMask2_RGB = uv.xy * _MakeUpMask2_RGB_ST.xy + _MakeUpMask2_RGB_ST.zw;
- float4 tex2DNode144 = tex2D(_MakeUpMask2_RGB, uv_MakeUpMask2_RGB);
- float clampResult298 = clamp((tex2DNode144.r * tex2D_mask2_R.a * _Mask2_Rchannel_ColorAmountA.a), 0.0, 1.0);
- float4 _Mask2_R_Color = tex2D_mask2_R * _Mask2_Rchannel_ColorAmountA;
- float4 lerpResult162 = lerp(lerpResult1611, _Mask2_Rchannel_ColorAmountA, clampResult298);
- //float clampResult299 = clamp((tex2DNode144.g * tex2D_mask2_G.a * _Mask2_Gchannel_ColorAmountA.a), 0.0, 1.0);
- //float4 _Mask2_G_Color = tex2D_mask2_G * _Mask2_Gchannel_ColorAmountA;
- //float4 lerpResult163 = lerp(lerpResult162, _Mask2_Gchannel_ColorAmountA, clampResult299);
- //float clampResult300 = clamp((tex2DNode144.b * tex2D_mask2_B.a * _Mask2_Bchannel_ColorAmountA.a), 0.0, 1.0);
- //float4 _Mask2_B_Color = tex2D_mask2_B * _Mask2_Bchannel_ColorAmountA;
- //float4 lerpResult164 = lerp(lerpResult163, _Mask2_Bchannel_ColorAmountA, clampResult300);
- albedoAlpha.rgb = half3(lerpResult162.r, lerpResult162.g, lerpResult162.b);
- return albedoAlpha;
- }
- half4 GetColor(float2 uv) {
- //half4 albedoAlpha = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, uv) * _BaseColor;
- half4 albedoAlpha = tex2D(_BaseMap, uv) * _BaseColor;
- float2 uv_MakeUpMask1_RGB = uv.xy * _MakeUpMask1_RGB_ST.xy + _MakeUpMask1_RGB_ST.zw;
- //float4 tex2DNode143 = SAMPLE_TEXTURE2D(_MakeUpMask1_RGB, sampler_MakeUpMask1_RGB, uv_MakeUpMask1_RGB);
- float4 tex2DNode143 = tex2D(_MakeUpMask1_RGB, uv_MakeUpMask1_RGB);
- float2 uv_Mask1_Rchannel_TextureAmountA = uv.xy * _Mask1_Rchannel_TextureAmountA_ST.xy + _Mask1_Rchannel_TextureAmountA_ST.zw;
- //float4 tex2D_mask1_R = SAMPLE_TEXTURE2D(_Mask1_Rchannel_TextureAmountA, sampler_Mask1_Rchannel_TextureAmountA, uv_Mask1_Rchannel_TextureAmountA);
- float4 tex2D_mask1_R = tex2D(_Mask1_Rchannel_TextureAmountA, uv_Mask1_Rchannel_TextureAmountA);
- float2 uv_Mask1_Gchannel_TextureAmountA = uv.xy * _Mask1_Gchannel_TextureAmountA_ST.xy + _Mask1_Gchannel_TextureAmountA_ST.zw;
- //float4 tex2D_mask1_G = SAMPLE_TEXTURE2D(_Mask1_Gchannel_TextureAmountA, sampler_Mask1_Gchannel_TextureAmountA, uv_Mask1_Gchannel_TextureAmountA);
- float4 tex2D_mask1_G = tex2D(_Mask1_Gchannel_TextureAmountA, uv_Mask1_Gchannel_TextureAmountA);
- float2 uv_Mask1_Bchannel_TextureAmountA = uv.xy * _Mask1_Bchannel_TextureAmountA_ST.xy + _Mask1_Bchannel_TextureAmountA_ST.zw;
- //float4 tex2D_mask1_B = SAMPLE_TEXTURE2D(_Mask1_Bchannel_TextureAmountA, sampler_Mask1_Bchannel_TextureAmountA, uv_Mask1_Bchannel_TextureAmountA);
- float4 tex2D_mask1_B = tex2D(_Mask1_Bchannel_TextureAmountA, uv_Mask1_Bchannel_TextureAmountA);
- float2 uv_Mask1_Achannel_TextureAmountA = uv.xy * _Mask1_Achannel_TextureAmountA_ST.xy + _Mask1_Achannel_TextureAmountA_ST.zw;
- //float4 tex2D_mask1_A = SAMPLE_TEXTURE2D(_Mask1_Achannel_TextureAmountA, sampler_Mask1_Achannel_TextureAmountA, uv_Mask1_Achannel_TextureAmountA);
- float4 tex2D_mask1_A = tex2D(_Mask1_Achannel_TextureAmountA, uv_Mask1_Achannel_TextureAmountA);
- float2 uv_Mask2_Rchannel_TextureAmountA = uv.xy * _Mask2_Rchannel_TextureAmountA_ST.xy + _Mask2_Rchannel_TextureAmountA_ST.zw;
- //float4 tex2D_mask2_R = SAMPLE_TEXTURE2D(_Mask2_Rchannel_TextureAmountA, sampler_Mask2_Rchannel_TextureAmountA, uv_Mask2_Rchannel_TextureAmountA);
- float4 tex2D_mask2_R = tex2D(_Mask2_Rchannel_TextureAmountA, uv_Mask2_Rchannel_TextureAmountA);
- //float2 uv_Mask2_Gchannel_TextureAmountA = uv.xy * _Mask2_Gchannel_TextureAmountA_ST.xy + _Mask2_Gchannel_TextureAmountA_ST.zw;
- //float4 tex2D_mask2_G = SAMPLE_TEXTURE2D(_Mask2_Gchannel_TextureAmountA, sampler_Mask2_Gchannel_TextureAmountA, uv_Mask2_Gchannel_TextureAmountA);
- //float4 tex2D_mask2_G = tex2D(_Mask2_Gchannel_TextureAmountA, uv_Mask2_Gchannel_TextureAmountA);
- //float2 uv_Mask2_Bchannel_TextureAmountA = uv.xy * _Mask2_Bchannel_TextureAmountA_ST.xy + _Mask2_Bchannel_TextureAmountA_ST.zw;
- //float4 tex2D_mask2_B = SAMPLE_TEXTURE2D(_Mask2_Bchannel_TextureAmountA, sampler_Mask2_Bchannel_TextureAmountA, uv_Mask2_Bchannel_TextureAmountA);
- //float4 tex2D_mask2_B = tex2D(_Mask2_Bchannel_TextureAmountA, uv_Mask2_Bchannel_TextureAmountA);
- float clampResult295 = clamp((tex2DNode143.r * tex2D_mask1_R.a * _Mask1_Rchannel_ColorAmountA.a), 0.0, 1.0);
- float4 _Mask1_R_Color = tex2D_mask1_R * _Mask1_Rchannel_ColorAmountA;
- float4 lerpResult145 = lerp(albedoAlpha, _Mask1_R_Color, clampResult295);
- float clampResult296 = clamp((tex2DNode143.g * tex2D_mask1_G.a * _Mask1_Gchannel_ColorAmountA.a), 0.0, 1.0);
- float4 _Mask1_G_Color = tex2D_mask1_G * _Mask1_Gchannel_ColorAmountA;
- float4 lerpResult160 = lerp(lerpResult145, _Mask1_G_Color, clampResult296);
- float clampResult297 = clamp((tex2DNode143.b * tex2D_mask1_B.a * _Mask1_Bchannel_ColorAmountA.a), 0.0, 1.0);
- float4 _Mask1_B_Color = tex2D_mask1_B * _Mask1_Bchannel_ColorAmountA;
- float4 lerpResult161 = lerp(lerpResult160, _Mask1_B_Color, clampResult297);
- float clampResult2971 = clamp((tex2DNode143.a * tex2D_mask1_A.a * _Mask1_Achannel_ColorAmountA.a), 0.0, 1.0);
- float4 _Mask1_A_Color = tex2D_mask1_A * _Mask1_Achannel_ColorAmountA;
- float4 lerpResult1611 = lerp(lerpResult161, _Mask1_A_Color, clampResult2971);
- //mask2
- float2 uv_MakeUpMask2_RGB = uv.xy * _MakeUpMask2_RGB_ST.xy + _MakeUpMask2_RGB_ST.zw;
- //float4 tex2DNode144 = SAMPLE_TEXTURE2D(_MakeUpMask2_RGB, sampler_MakeUpMask2_RGB, uv_MakeUpMask2_RGB);
- float4 tex2DNode144 = tex2D(_MakeUpMask2_RGB, uv_MakeUpMask2_RGB);
- float clampResult298 = clamp((tex2DNode144.r * tex2D_mask2_R.a * _Mask2_Rchannel_ColorAmountA.a), 0.0, 1.0);
- float4 _Mask2_R_Color = tex2D_mask2_R * _Mask2_Rchannel_ColorAmountA;
- float4 lerpResult162 = lerp(lerpResult1611, _Mask2_Rchannel_ColorAmountA, clampResult298);
- //float clampResult299 = clamp((tex2DNode144.g * tex2D_mask2_G.a * _Mask2_Gchannel_ColorAmountA.a), 0.0, 1.0);
- //float4 _Mask2_G_Color = tex2D_mask2_G * _Mask2_Gchannel_ColorAmountA;
- //float4 lerpResult163 = lerp(lerpResult162, _Mask2_Gchannel_ColorAmountA, clampResult299);
- //float clampResult300 = clamp((tex2DNode144.b * tex2D_mask2_B.a * _Mask2_Bchannel_ColorAmountA.a), 0.0, 1.0);
- //float4 _Mask2_B_Color = tex2D_mask2_B * _Mask2_Bchannel_ColorAmountA;
- //float4 lerpResult164 = lerp(lerpResult163, _Mask2_Bchannel_ColorAmountA, clampResult300);
- albedoAlpha.rgb = half3(lerpResult162.r, lerpResult162.g, lerpResult162.b);
- return albedoAlpha;
- }
- fixed3 GetAlbedo (v2f i) {
- fixed3 albedo = tex2D(_BaseMap, i.uv.xy * _BaseMap_ST.xy + _BaseMap_ST.zw).rgb * _BaseColor.rgb;
- //fixed3 albedo = GetColor(i.uv.xy).rgb;
- return albedo;
- }
- float3 GetMetalSmooth (v2f i){
- float3 metalSmooth = tex2D(_MetalSmoothTex, i.uv.xy).rgb;
- metalSmooth.g *= _Metalness;
- metalSmooth.r *= _Roughness;
- return metalSmooth;
- }
- float3 GetEmission (v2f i) {
- return tex2D(_EmissiveTex, i.uv.xy).rgb;
- }
- float3 GetTangentSpaceNormal (v2f i){
- float3 normal = float3(0, 0, 1);
- normal = UnpackScaleNormal(tex2D(_BumpMap, i.uv.xy), 1.0);
- return normal;
- }
- float3 CreateBinormal (float3 normal, float3 tangent, float binormalSign){
- return cross(normal, tangent.xyz) * (binormalSign * unity_WorldTransformParams.w);
- }
- void InitializeFragmentNormal(inout v2f i){
- float3 tangentSpaceNormal = GetTangentSpaceNormal(i);
- float3 binormal = CreateBinormal(i.wNormal.xyz, i.wTangent.xyz, i.wTangent.w);
- i.wNormal.xyz = normalize(tangentSpaceNormal.x * i.wTangent + tangentSpaceNormal.y * binormal + tangentSpaceNormal.z * i.wNormal.xyz);
- }
- float D(float NdotH, float roughness){
- //float a2 = roughness * roughness + 0.0040000002;
- float a2 = max(roughness * roughness, 0.002);
- float a4 = a2 * a2;
- float d = (NdotH * a4 - NdotH) * NdotH + 1.0f;
- return a4 / (d * d);
- }
- float G(float NdotL, float NdotV, float roughness){
- //float a2 = roughness * roughness;
- //float a4 = a2 * a2;
- //float k = (a4 + 1.0f) * (a4 + 1.0f) /8.0;
- float a2 = roughness * 0.5 + 0.5;
- float k = a2 * a2;
- float g = 0.25 / ((NdotL * (1.0 - k) + k) * (NdotV * (1.0 - k) + k));
- return g;
- }
- float3 F(float VdotH, float3 specColor){
- return (clamp ((50.0 * specColor.y), 0.0, 1.0) - specColor) * exp2((((-5.5547299 * VdotH) + (- 6.98316)) * VdotH)) + specColor;
- }
- inline float3 Shade4PointLightsSpecCol(float4 worldPos, half3 normal, float3 viewDir, float roughness, float skinMask, float NDotV, float3 specColor, out float3 sh){
- // to light vectors
- float4 toLightX = unity_4LightPosX0 - worldPos.x;
- float4 toLightY = unity_4LightPosY0 - worldPos.y;
- float4 toLightZ = unity_4LightPosZ0 - worldPos.z;
- // squared lengths
- float4 lengthSq = 0;
- lengthSq += toLightX * toLightX;
- lengthSq += toLightY * toLightY;
- lengthSq += toLightZ * toLightZ;
- // don't produce NaNs if some vertex position overlaps with the light
- lengthSq = max(lengthSq, 0.000001);
- // NdotL
- float4 ndotl = 0;
- ndotl += toLightX * normal.x;
- ndotl += toLightY * normal.y;
- ndotl += toLightZ * normal.z;
- // correct NdotL
- float4 corr = rsqrt(lengthSq);
- ndotl = max (float4(0,0,0,0), ndotl * corr);
- // attenuation
- float4 atten = 1.0 / (1.0 + lengthSq * unity_4LightAtten0);
- //float4 diff = ndotl * atten;
- // halfVec
- float4 halfX = unity_4LightPosX0 + viewDir.x;
- float4 halfY = unity_4LightPosY0 + viewDir.y;
- float4 halfZ = unity_4LightPosZ0 + viewDir.z;
- float4 lengthHalfSq = 0;
- lengthHalfSq += halfX * halfX;
- lengthHalfSq += halfY * halfY;
- lengthHalfSq += halfZ * halfZ;
- lengthHalfSq = max(lengthHalfSq, 0.000001);
- float4 ndoth = 0;
- ndoth += halfX * normal.x;
- ndoth += halfY * normal.y;
- ndoth += halfZ * normal.z;
- float4 corrHalf = rsqrt(lengthHalfSq);
- ndoth = max (float4(0,0,0,0), ndoth * corrHalf);
- float4 vdoth = 0;
- vdoth += halfX * viewDir.x;
- vdoth += halfY * viewDir.y;
- vdoth += halfZ * viewDir.z;
- vdoth = max (float4(0,0,0,0), vdoth * corrHalf);
- //d
- float a2 = max ((roughness * roughness), 0.002);
- float a4 = (a2 * a2);
- float4 d = ((ndoth * a4 - ndoth) * ndoth) + 1.0;
- d = a4 / (d * d);
- //g
- float b2 = 0.5 + (0.5 * roughness);
- float k = (b2 * b2);
- float4 g = 0.25 / ((ndotl * (1.0 - k) + k) * (NDotV * (1.0 - k) + k));
- //f
- float4 f = exp2((((-5.5547299 * vdoth) + (- 6.98316)) * vdoth));
- half3 oneMinusSpecColor = clamp ((50.0 * specColor.y), 0.0, 1.0) - specColor;
- //compute
- float4 a = d * g * f * ndotl;
- float4 b = d * g * ndotl;
- half3 col[4];
- col[0] = unity_LightColor[0].rgb * atten.x;
- col[1] = unity_LightColor[1].rgb * atten.y;
- col[2] = unity_LightColor[2].rgb * atten.z;
- col[3] = unity_LightColor[3].rgb * atten.w;
- float3x4 colorAtten = {col[0].x, col[1].x, col[2].x, col[3].x, col[0].y, col[1].y, col[2].y, col[3].y, col[0].z, col[1].z, col[2].z, col[3].z};
- float3 scatterColor = (_SkinSSSScatterColor * skinMask).xyz;
- sh = (mul(colorAtten, ndotl) + (col[0] + col[1] + col[2] + col[3]) * scatterColor) / (scatterColor + 1.0) * _PointLightExposure;
- return mul(colorAtten, a) * oneMinusSpecColor + mul(colorAtten, b) * specColor;
- }
- half3 SH(half3 normal, inout float3 refDir){
- (_envRot[0].x = 1.0);
- (_envRot[0].y = 0.0);
- (_envRot[0].z = 0.0);
- (_envRot[0].w = 0.0);
- (_envRot[1].x = 0.0);
- (_envRot[1].y = 1.0);
- (_envRot[1].z = 0.0);
- (_envRot[1].w = 0.0);
- (_envRot[2].x = 0.0);
- (_envRot[2].y = 0.0);
- (_envRot[2].z = 1.0);
- (_envRot[2].w = 0.0);
- (_envRot[3].x = 0.0);
- (_envRot[3].y = 0.0);
- (_envRot[3].z = 0.0);
- (_envRot[3].w = 1.0);
- refDir = mul(_envRot , refDir).xyz;
- float4 tmpvar_41 = mul(_envRot , half4(normal, 1.0));
- //_envSHR = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- (_envSHR[0].x = 0.046);
- (_envSHR[0].y = 0.0);
- (_envSHR[0].z = 0.0);
- (_envSHR[0].w = 0.0);
- (_envSHR[1].x = 0.036);
- (_envSHR[1].y = -0.046);
- (_envSHR[1].z = 0.0);
- (_envSHR[1].w = 0.0);
- (_envSHR[2].x = -0.021);
- (_envSHR[2].y = -0.049);
- (_envSHR[2].z = 0.02);
- (_envSHR[2].w = 0.0);
- (_envSHR[3].x = 0.109);
- (_envSHR[3].y = 0.131);
- (_envSHR[3].z = -0.09);
- (_envSHR[3].w = 0.569);
- //_envSHG = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- (_envSHG[0].x = 0.043);
- (_envSHG[0].y = 0.0);
- (_envSHG[0].z = 0.0);
- (_envSHG[0].w = 0.0);
- (_envSHG[1].x = 0.066);
- (_envSHG[1].y = -0.043);
- (_envSHG[1].z = 0.0);
- (_envSHG[1].w = 0.0);
- (_envSHG[2].x = -0.03);
- (_envSHG[2].y = -0.072);
- (_envSHG[2].z = 0.018);
- (_envSHG[2].w = 0.0);
- (_envSHG[3].x = 0.134);
- (_envSHG[3].y = 0.145);
- (_envSHG[3].z = -0.118);
- (_envSHG[3].w = 0.466);
- // _envSHB = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- (_envSHB[0].x = 0.036);
- (_envSHB[0].y = 0.0);
- (_envSHB[0].z = 0.0);
- (_envSHB[0].w = 0.0);
- (_envSHB[1].x = 0.091);
- (_envSHB[1].y = -0.036);
- (_envSHB[1].z = 0.0);
- (_envSHB[1].w = 0.0);
- (_envSHB[2].x = -0.025);
- (_envSHB[2].y = -0.091);
- (_envSHB[2].z = 0.012);
- (_envSHB[2].w = 0.0);
- (_envSHB[3].x = 0.14);
- (_envSHB[3].y = 0.142);
- (_envSHB[3].z = -0.126);
- (_envSHB[3].w = 0.394);
- float3 tmpvar_42;
- tmpvar_42.x = dot (tmpvar_41, mul(_envSHR , tmpvar_41));
- tmpvar_42.y = dot (tmpvar_41, mul(_envSHG , tmpvar_41));
- tmpvar_42.z = dot (tmpvar_41, mul(_envSHB , tmpvar_41));
- half3 sRGB = tmpvar_42;
- half3 SHColor = GammaToLinearSpace(sRGB);
- return SHColor;
- }
- half3 IBL(half3 linearAlbedo, half3 metalSmooth, float NDotV, float3 reflectonDir){
- float roughnessLod = (0.04859 + 14.8158 * metalSmooth.r) - (7.45063 * metalSmooth.r) * metalSmooth.r;
- float refDirTexcoordV = abs(reflectonDir.y) * -0.03102955 + 0.086566716;
- refDirTexcoordV = abs(reflectonDir.y) * refDirTexcoordV - 0.2146018;
- refDirTexcoordV = abs(reflectonDir.y) * refDirTexcoordV + UNITY_HALF_PI;
- refDirTexcoordV = UNITY_HALF_PI - sqrt(1.0 - abs(reflectonDir.y)) * refDirTexcoordV;
- refDirTexcoordV = UNITY_HALF_PI - sign(reflectonDir.y) * refDirTexcoordV;
- float refDirU = (min (abs(reflectonDir.z / reflectonDir.x), 1.0) / max (abs(reflectonDir.z / reflectonDir.x), 1.0));
- float SqrtRefDirTexcoordU = refDirU * refDirU;
- float refDirTexcoordU = -0.01213232 * SqrtRefDirTexcoordU + 0.053681381;
- refDirTexcoordU = refDirTexcoordU * SqrtRefDirTexcoordU - 0.1173503;
- refDirTexcoordU = refDirTexcoordU * SqrtRefDirTexcoordU + 0.19389249;
- refDirTexcoordU = refDirTexcoordU * SqrtRefDirTexcoordU - 0.33267561;
- refDirTexcoordU = refDirTexcoordU * SqrtRefDirTexcoordU + 0.99997932;
- refDirTexcoordU = refDirTexcoordU * refDirU;
- refDirTexcoordU = refDirTexcoordU + (abs(reflectonDir.z / reflectonDir.x) > 1.0) * ((refDirTexcoordU * -2.0) + UNITY_HALF_PI);
- refDirTexcoordU = refDirTexcoordU * sign(reflectonDir.z / reflectonDir.x);
- if (abs(reflectonDir.x) > (1e-08 * abs(reflectonDir.z))) {
- if (reflectonDir.x < 0.0) {
- if (reflectonDir.z >= 0.0) {
- refDirTexcoordU += UNITY_PI;
- } else {
- refDirTexcoordU = (refDirTexcoordU - UNITY_PI);
- };
- };
- } else {
- refDirTexcoordU = (sign(reflectonDir.z) * UNITY_HALF_PI);
- };
- float2 uv;
- uv.x = clamp ((0.5 + refDirTexcoordU / UNITY_TWO_PI), 0.0, 1.0);
- uv.y = 1.0 - clamp (refDirTexcoordV / UNITY_PI, 0.0, 1.0);
- fixed4 envRefCol = tex2Dlod (_EnvironmentTex, float4(uv, 0, roughnessLod));
- float3 envCol = envRefCol.xyz * envRefCol.w;
- float4 roughnessCol = metalSmooth.r * float4(-1.0, -0.0275, -0.572, 0.022) + float4(1.0, 0.0425, 1.04, -0.04);
- float2 roughness = float2(-1.04, 1.04) * (min ((roughnessCol.x * roughnessCol.x), exp2(-9.28 * NDotV)) * roughnessCol.x + roughnessCol.y) + roughnessCol.zw;
- float3 albedoCol = lerp (0.04, linearAlbedo, metalSmooth.g);
- float roughnessRim = clamp ((roughness.y - 0.01), 0.0, 1.0);
- half3 envSpecular = (((albedoCol * roughness.x) + roughnessRim) * (18.84956 * (envCol * envCol))) * _EnvExposure;
- return envSpecular;
- }
- inline float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax){
- #if UNITY_SPECCUBE_BOX_PROJECTION
- UNITY_BRANCH
- if(cubemapPosition.w > 0){
- float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction;
- float scalar = min(min(factors.x, factors.y), factors.z);
- direction = direction * scalar + (position - cubemapPosition);
- }
- #endif
- return direction;
- }
- inline half3 SHEval(half3 normal) {
- half4 n = half4(normal, 1.0);
- half3 x1, x2, x3;
- // Linear + constant polynomial terms
- x1.r = dot(unity_SHAr,n);
- x1.g = dot(unity_SHAg,n);
- x1.b = dot(unity_SHAb,n);
- // 4 of the quadratic polynomials
- half4 vB = n.xyzz * n.yzzx;
- x2.r = dot(unity_SHBr,vB);
- x2.g = dot(unity_SHBg,vB);
- x2.b = dot(unity_SHBb,vB);
- // Final quadratic polynomial
- half vC = n.x*n.x - n.y*n.y;
- x3 = unity_SHC.rgb * vC;
- return x1 + x2 + x3;
- }
- inline half3 DarkCornerColor(in float3 col, float3 viewDir){
- float camSpaceDir = mul(unity_MatrixV, float4(viewDir, 0)).z;
- float squCamSpaceDir = camSpaceDir * camSpaceDir;
- float biquCamSpaceDir = squCamSpaceDir * squCamSpaceDir;
- float dark = biquCamSpaceDir * biquCamSpaceDir;
- dark = dark * dark;
- float3 darkCornerColor = (dark + _DarkCornerColor) - (dark * _DarkCornerColor);
- _HeroShowOverallExposureColor = fixed4(1,1,1,1);
- return col * (_HeroShowOverallExposureColor.xyz * darkCornerColor);
- }
- UnityIndirect CreateGI(half3 normal, float3 refDir, float3 worldPos, half roughness){
- UnityIndirect indirectLight;
- indirectLight.diffuse = 0;
- indirectLight.specular = 0;
- indirectLight.diffuse = max (SHEval(normal), 0.0);
- Unity_GlossyEnvironmentData envData;
- envData.roughness = roughness;
- envData.reflUVW = BoxProjection(refDir, worldPos.xyz, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax);
- indirectLight.specular = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), unity_SpecCube0_HDR, envData);
- return indirectLight;
- }
- half4 BRDF_KingHonour_PBS(v2f i, float4 worldPos, half3 linearAlbedo, half3 albedo, half3 metalSmooth, half3 normal, float3 viewDir, float3 refDir, half3 effCol, float NDotH, float VDotH, float NDotV, float atten, UnityLight light){
- half3 diffColor = linearAlbedo * (1.0 - metalSmooth.g);
- half3 specColor = lerp (0.04, linearAlbedo, metalSmooth.g);
- float skinMask = clamp ((effCol.r - 0.1), 0.0, 1.0) * 1.1 * _SkinSSSTransmission;
- float3 skinRim = ((float3(0.66, 2.34, 2.34) * ((albedo.y * albedo.z) * _SkinSSSfresnelMask)) * ((1.0 - NDotV) * (1.0 - NDotV))) * skinMask;
- float oneMinusNDotV = 1.0 - NDotV;
- float rimEnv = lerp (metalSmooth.z * metalSmooth.z, 1.0, (oneMinusNDotV * oneMinusNDotV));
- //half3 shColor = SH(normal, refDir);
- //shColor *= _SHExposure;
- UnityIndirect indirectLight = CreateGI(normal, refDir, worldPos, metalSmooth.r);
- half3 shColor = indirectLight.diffuse * _SHExposure;
- half3 scatterColor = (_SkinSSSScatterColor * skinMask).xyz;
- half3 tmpvar_59 = _DirLightColor.xyz;// * i.worldPos.w;
- ///Shadow Color
- half3 scatterCol = min (light.ndotl, atten) + scatterColor;
- float3 shAndSkinColor = shColor * rimEnv + max (lerp(scatterCol * _ShadowCol , scatterCol , atten) / (scatterColor + 1.0), 0.0) * _DirLightExposure * tmpvar_59;
- ///
- //float3 shAndSkinColor = shColor * rimEnv + max (((min (light.ndotl, atten) + scatterColor) / (scatterColor + 1.0)), 0.0) * _DirLightExposure * tmpvar_59;
- float d = D(NDotH, metalSmooth.r);
- float g = G(light.ndotl, NDotV, metalSmooth.r);
- half3 f = F(VDotH, specColor);
- //half3 specCol = tmpvar_59 * d * g * f * light.ndotl * atten;
- ///Shadow Color
- half3 specCol = tmpvar_59 * d * g * f * light.ndotl;
- specCol = lerp(specCol * _ShadowCol, specCol, atten);
- ///
- //branch realtime 4pointLight with in struct's normal.w
- UNITY_BRANCH
- if(i.wNormal.w > 0.0){
- float3 vertexCol;
- half3 pointCol = Shade4PointLightsSpecCol(worldPos, normal, viewDir, metalSmooth.r, skinMask, NDotV, specColor, vertexCol);
- shAndSkinColor += vertexCol;
- specCol += pointCol;
- }
- //half3 envSpecular = IBL(linearAlbedo, metalSmooth, NDotV, refDir);
- half3 envSpecular = GammaToLinearSpace(indirectLight.specular);
- float4 roughnessCol = metalSmooth.r * float4(-1.0, -0.0275, -0.572, 0.022) + float4(1.0, 0.0425, 1.04, -0.04);
- float2 roughness = float2(-1.04, 1.04) * (min ((roughnessCol.x * roughnessCol.x), exp2(-9.28 * NDotV)) * roughnessCol.x + roughnessCol.y) + roughnessCol.zw;
- float roughnessRim = clamp ((roughness.y - 0.01), 0.0, 1.0);
- envSpecular = (((specColor * roughness.x) + roughnessRim) * (18.84956 * (envSpecular * (envSpecular + _envBDRFFactor)))) * _EnvExposure;
- ///Right indirect specular color
- float surfaceReduction = 1.0 / (roughness * roughness + 1.0); //Liner空间
- float oneMinusReflectivity = 1 - max(max(specColor.r, specColor.g), specColor.b);
- float grazingTerm = saturate(1 - metalSmooth.r + (1 - oneMinusReflectivity));
- half3 rightIndirSpec = surfaceReduction * FresnelLerp(specColor, grazingTerm, NDotV);
- ///
- specCol = specCol * _PunctualLightSpecularExposure + envSpecular * rimEnv * rightIndirSpec;
- float emissiveMask = clamp ((effCol.y - 0.1), 0.0, 1.0) * 1.1 * _EmissionExposure;
- float3 emissiveCol = (emissiveMask * linearAlbedo) * _EmissionCol;
- half3 col = (shAndSkinColor * diffColor + skinRim) + (specCol + emissiveCol);
- //half3 col = specCol;
- col = DarkCornerColor(col, viewDir);
- half4 finalCol;
- finalCol.w = 1.0;
- #ifdef MANUAL_LINEAR_SPACE
- float bloomFactor = sqrt(max ((dot (col, float3(0.299, 0.587, 0.114)) - _Global_BloomThreshold), 0.0) * _BloomIntensity);
- bloomFactor = bloomFactor / (1.0 + bloomFactor);
- finalCol.w = bloomFactor;
- finalCol.rgb = (col / (col + 0.187)) * 1.035;
- #else
- col = (col * ((2.51 * col) + 0.03)) / ((col * ((2.43 * col) + 0.59)) + 0.14);
- finalCol.rgb = LinearToGammaSpace(col);
- #endif
- return finalCol;
- }
- ENDCG
- SubShader
- {
- Tags { "Queue" = "Geometry" "RenderType"="Opaque" "MirrorReplace" = "Mirror" "ignoreprojector" = "true" }
- LOD 500
- Pass{
- Name "ForwardLit"
- Tags { "LightMode"="UniversalForward"}
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- #pragma multi_compile_fwdbase
- //#pragma shader_feature _ _SGAME_HIGH_QUALITY_SHADOW_ON MANUAL_LINEAR_SPACE
- #pragma target 3.0
- //#define _SGAME_HIGH_QUALITY_SHADOW_ON
- //#define MANUAL_LINEAR_SPACE
- v2f vert (appdata_full v)
- {
- v2f o;
- UNITY_SETUP_INSTANCE_ID(v);
- UNITY_INITIALIZE_OUTPUT(v2f, o);
- o.pos = UnityObjectToClipPos(v.vertex);
- o.uv.xy = TRANSFORM_TEX(v.texcoord.xy, _MainTex);
- float4 worldVertex = mul(unity_ObjectToWorld, v.vertex);
- o.wNormal.xyz = UnityObjectToWorldNormal(v.normal);
- /*
- /////
- float4 shadowPos_9;
- float4 shadowVertex = mul(_SGameShadowMatrix , worldVertex);
- shadowPos_9.w = shadowVertex.w;
- shadowPos_9.xyz = (shadowVertex.xyz / shadowVertex.w);
- shadowPos_9.xyz = shadowPos_9.xyz * 0.5 + 0.5;
- o.shadowPos.xyz = shadowPos_9.xyz;
- /////
- //////
- o.viewPos = mul(UNITY_MATRIX_V, worldVertex);
- float3 lightDir = (worldVertex.xyz - _DirLightPos.xyz);
- _SGameShadowParams.xyz = -_WorldSpaceLightPos0.xyz;
- float NDotV = dot (lightDir, _SGameShadowParams.xyz);
- float3 x_15 = (lightDir - (NDotV * _SGameShadowParams.xyz));
- float x_17 = (clamp ((1.0 - ((sqrt(dot (x_15, x_15)) - _DirLightRanges.x) / (_DirLightRanges.y - _DirLightRanges.x))), 0.0, 1.0) + 0.0001);
- half NDotL = pow (x_17, _DirLightAttens.x);
- float atten1_12 = NDotL;
- float x_19 = (clamp ((1.0 - ((NDotV - _DirLightRanges.z) / (_DirLightRanges.w - _DirLightRanges.z)).x), 0.0, 1.0) + 0.0001);
- half tmpvar_18 = pow (x_19, _DirLightAttens.y);
- float atten2_11 = tmpvar_18;
- worldVertex.w = max (atten1_12 * atten2_11, _DirLightAttens.z);
- //////
- #ifdef _SGAME_POINT_LIGHT_ON
- _PointLightPosAndRange = fixed4(-29.167,-30.527,106.016,2.3);
- float3 tmpvar_20 = ((worldVertex.xyz - _PointLightPosAndRange.xyz) / _PointLightPosAndRange.w);
- _PointLightColorAndAtten = fixed4(0,0,0,3.1);
- o.shadowPos.w = pow (clamp ((1.0 - dot (tmpvar_20, tmpvar_20)), 0.0, 1.0), (_PointLightColorAndAtten.w + 0.001));
- #else
- o.shadowPos.w = clamp (dot (-(o.wNormal), normalize(_SGameShadowParams.xyz)), 0.0, 1.0);
- #endif
- */
- #ifdef VERTEXLIGHT_ON
- o.wNormal.w = 1.0;
- #else
- o.wNormal.w = 0.0;
- #endif
- o.worldPos = worldVertex;
- o.wTangent.xyz = UnityObjectToWorldDir(v.tangent.xyz);
- o.wTangent.w = v.tangent.w;
- //We need this for shadow receving
- UNITY_TRANSFER_LIGHTING(o, v.texcoord1);
- return o;
- }
- fixed4 frag (v2f i) : SV_Target
- {
- half v_ClothMask1 = tex2D(_ClothMask1, i.uv.xy).r;//_ClothMask1.Sample(sampler_ClothMask1, input.uv.xy).r;
- clip(v_ClothMask1 - 0.5);
- half v_ClothMask2 = tex2D(_ClothMask2, i.uv.xy).r;
- clip(v_ClothMask2 - 0.5);
- half v_ClothMask3 = tex2D(_ClothMask3, i.uv.xy).r;
- clip(v_ClothMask3 - 0.5);
- UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
- half3 albedo = GetAlbedo(i);
- half3 linearAlbedo = GammaToLinearSpace(albedo);
- linearAlbedo = AddMaskColor(linearAlbedo,i.uv.xy).rgb;
- float3 metalSmooth = GetMetalSmooth(i);
- half3 effCol = GetEmission(i);
- float4 worldPos = i.worldPos;
- UnityLight light;
- light.dir = UnityWorldSpaceLightDir(worldPos);
- #ifndef USING_DIRECTIONAL_LIGHT
- light.dir = normalize(light.dir);
- #endif
- light.color = _LightColor0.rgb;
- InitializeFragmentNormal(i);
- half3 worldNormal = i.wNormal.xyz;
- float3 viewDir = normalize(UnityWorldSpaceViewDir(worldPos));
- float3 refLight = reflect(-viewDir, worldNormal);
- float NDotV = clamp(dot(worldNormal, viewDir), 0.01, 1.0);
- light.ndotl = clamp(dot(worldNormal, light.dir), _CosMin, 1.0);
- float3 halfDir = Unity_SafeNormalize(float3(light.dir) + viewDir);
- //float NDotH = saturate(dot(worldNormal, halfDir));
- //float VDotH = saturate(dot(viewDir, halfDir));
- float NDotH = clamp(dot(worldNormal, halfDir), _CosMin, 1.0);
- float VDotH = clamp(dot(viewDir, halfDir), 0.01, 1.0);
- UNITY_LIGHT_ATTENUATION(atten, i, worldPos.xyz);
- atten = max(atten, _ShadowDarkness);
- half4 col = BRDF_KingHonour_PBS(i, worldPos, linearAlbedo, albedo, metalSmooth, worldNormal, viewDir, refLight, effCol, NDotH, VDotH, NDotV, atten, light);
- col = saturate(col);
- return col;
- }
- ENDCG
- }
- //Pass{
- // Blend One One
- // Name "Bloom_Mask"
- // Tags { "LightMode"="ForwardAdd"}
- // CGPROGRAM
- // #pragma vertex vert_Bloom
- // #pragma fragment frag_Bloom
- // #pragma exclude_renderers xboxone ps4 psp2 n3ds wiiu
- // struct v2f_Bloom
- // {
- // float4 pos : SV_POSITION;
- // float4 uv : TEXCOORD0;
- // };
- // sampler2D _BloomTex;
- // v2f_Bloom vert_Bloom(appdata_base v){
- // v2f_Bloom o;
- // UNITY_INITIALIZE_OUTPUT(v2f_Bloom, o);
- // o.pos = UnityObjectToClipPos(v.vertex);
- // o.uv.xy = v.texcoord.xy;
- // return o;
- // }
- // half4 frag_Bloom(v2f_Bloom i):SV_Target{
- // half4 bloomMask = tex2D(_BloomTex, i.uv);
- // return bloomMask;
- // }
- // ENDCG
- //}
- Pass {
- Name"ShadowCaster"
- Tags{"LightMode" = "ShadowCaster"}
- CGPROGRAM
- #pragma vertex ShadowVertex
- #pragma fragment ShadowFrag
- #pragma glsl_no_auto_normalization
- #pragma exclude_renderers xboxone ps4 psp2 n3ds wiiu
- //#include "UnityCG.cginc"
- #if defined(_RENDERING_FADE) || defined(_RENDERING_TRANSPARENT)
- #if defined(_SEMITRANSPARENT_SHADOWS)
- #define SHADOWS_SEMITRANSPARENT 1
- #else
- #define _RENDERING_CUTOUT
- #endif
- #endif
- #if SHADOWS_SEMITRANSPARENT || defined(_RENDERING_CUTOUT)
- #if !defined(_SMOOTHNESS_METALLIC)
- #define SHADOWS_NEED_UV 1
- #endif
- #endif
- float _CutOff;
- sampler3D _DitherMaskLOD;
- struct VertexData {
- float4 position : POSITION;
- float3 normal : NORMAL;
- float2 uv : TEXCOORD0;
- UNITY_VERTEX_INPUT_INSTANCE_ID
- };
- struct InterpolatorsVertex {
- float4 position : SV_POSITION;
- #if SHADOWS_NEED_UV
- float2 uv : TEXCOORD0;
- #endif
- #if defined(SHADOWS_CUBE)
- float3 lightVec : TEXCOORD1;
- #endif
- UNITY_VERTEX_INPUT_INSTANCE_ID
- };
- struct Interpolators {
- #if SHADOWS_SEMITRANSPARENT
- float4 vpos : VPOS;
- #else
- float4 positions : SV_POSITION;
- #endif
- #if SHADOWS_NEED_UV
- float2 uv : TEXCOORD0;
- #endif
- #if defined(SHADOWS_CUBE)
- float3 lightVec : TEXCOORD1;
- #endif
- UNITY_VERTEX_INPUT_INSTANCE_ID
- };
- float GetAlpha (Interpolators i) {
- float alpha = 1.0;
- #if SHADOWS_NEED_UV
- alpha *= tex2D(_MainTex, i.uv.xy).a;
- #endif
- return alpha;
- }
- half RoughnessSetup_ShadowGetOneMinusReflectivity(half2 uv)
- {
- half metallicity = _Metalness;
- #ifdef _GLOSSMAP
- metallicity = tex2D(_MetalSmoothTex, uv).g;
- #endif
- return OneMinusReflectivityFromMetallic(metallicity);
- }
- InterpolatorsVertex ShadowVertex (VertexData v) {
- UNITY_SETUP_INSTANCE_ID(v);
- InterpolatorsVertex i;
- UNITY_INITIALIZE_OUTPUT(InterpolatorsVertex, i);
- UNITY_TRANSFER_INSTANCE_ID(v,i);
- UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(i);
- #if defined(SHADOWS_CUBE)
- i.position = UnityObjectToClipPos(v.position);
- i.lightVec =
- mul(unity_ObjectToWorld, v.position).xyz - _LightPositionRange.xyz;
- #else
- i.position = UnityClipSpaceShadowCasterPos(v.position.xyz, v.normal);
- i.position = UnityApplyLinearShadowBias(i.position);
- #endif
- #if SHADOWS_NEED_UV
- i.uv = TRANSFORM_TEX(v.uv, _MainTex);
- #endif
- return i;
- }
- float4 ShadowFrag (Interpolators i) : SV_TARGET {
- UNITY_SETUP_INSTANCE_ID(i);
- float alpha = GetAlpha(i);
- #if defined(_RENDERING_CUTOUT)
- clip(alpha - _CutOff);
- #endif
- #if SHADOWS_SEMITRANSPARENT
- #if defined(_ALPHAPREMULTIPLY_ON)
- half outModifiedAlpha;
- PreMultiplyAlpha(half3(0, 0, 0), alpha, RoughnessSetup_ShadowGetOneMinusReflectivity(i.uv), outModifiedAlpha);
- alpha = outModifiedAlpha;
- #endif
- float dither =
- tex3D(_DitherMaskLOD, float3(i.vpos.xy * 0.25, alpha * 0.9375)).a;
- clip(dither - 0.01);
- #endif
- #if defined(SHADOWS_CUBE)
- float depth = length(i.lightVec) + unity_LightShadowBias.x;
- depth *= _LightPositionRange.w;
- return UnityEncodeCubeShadowDepth(depth);
- #else
- return 0;
- #endif
- }
- ENDCG
- }
- }
- }// Category
- }
|