| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- void CTI_SimpleTranslucentLighting_float(
- float3 PositionWS,
- half3 NormalWS,
- half3 TangentWS,
- half3 BitangentWS,
- half3 Albedo,
- half3 NormalTS,
- half3 Transmission,
- half TransmissionMask,
- half Occlusion,
- out half3 o_NormalWS,
- out half3 o_Transmission
- )
- {
- #ifdef SHADERGRAPH_PREVIEW
- o_NormalWS = half3(0,1,0);
- o_Transmission = 0;
- #else
- half3 translucency = 1;
- half3 viewDirWS = GetWorldSpaceNormalizeViewDir(PositionWS);
- half3x3 tangentToWorld = half3x3(TangentWS, BitangentWS, NormalWS);
- o_NormalWS = NormalizeNormalPerPixel(TransformTangentToWorld(NormalTS, tangentToWorld));
- half4 shadowCoord = TransformWorldToShadowCoord(PositionWS);
- Light mainLight = GetMainLight(shadowCoord);
- half w = 0.3; // 0.4
- half NdotL = saturate((dot(o_NormalWS, mainLight.direction) + w) / ((1 + w) * (1 + w)));
- half3 transLightDir = mainLight.direction + o_NormalWS * Transmission.z;
- half transDot = dot( transLightDir, -viewDirWS );
- transDot = exp2(saturate(transDot) * Transmission.y - Transmission.y);
- o_Transmission = transDot * (1.0 - NdotL) * mainLight.color * mainLight.shadowAttenuation * Transmission.x;
- if(_AmbientTranslucency > 0)
- {
- o_Transmission += SampleSH(-o_NormalWS) * _AmbientTranslucency * Occlusion;
- }
- o_Transmission *= Albedo * TransmissionMask;
- #endif
- }
- void SampleSH(half3 normalWS, out half3 Ambient)
- {
- // LPPV is not supported in Ligthweight Pipeline
- real4 SHCoefficients[7];
- SHCoefficients[0] = unity_SHAr;
- SHCoefficients[1] = unity_SHAg;
- SHCoefficients[2] = unity_SHAb;
- SHCoefficients[3] = unity_SHBr;
- SHCoefficients[4] = unity_SHBg;
- SHCoefficients[5] = unity_SHBb;
- SHCoefficients[6] = unity_SHC;
- Ambient = max(half3(0, 0, 0), SampleSH9(SHCoefficients, normalWS));
- }
|