void CTI_SimpleTranslucentLighting_half( 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)); }