12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #ifndef URP_BLENDLIGHTING_INCLUDED
- #define URP_BLENDLIGHTING_INCLUDED
- half4 LuxFragmentBlendPBR(InputData inputData, half3 albedo, half metallic, half3 specular,
- half smoothness, half occlusion, half3 emission, half alpha, float3 shadowShift)
- {
- BRDFData brdfData;
- InitializeBRDFData(albedo, metallic, specular, smoothness, alpha, brdfData);
-
- // ShadowMask: To ensure backward compatibility we have to avoid using shadowMask input, as it is not present in older shaders
- #if defined(SHADOWS_SHADOWMASK) && defined(LIGHTMAP_ON)
- half4 shadowMask = inputData.shadowMask;
- #elif !defined (LIGHTMAP_ON)
- half4 shadowMask = unity_ProbesOcclusion;
- #else
- half4 shadowMask = half4(1, 1, 1, 1);
- #endif
- Light mainLight = GetMainLight(inputData.shadowCoord, inputData.positionWS, shadowMask);
- //Light mainLight = GetMainLight(inputData.shadowCoord);
- // SSAO
- #if defined(_SCREEN_SPACE_OCCLUSION)
- AmbientOcclusionFactor aoFactor = GetScreenSpaceAmbientOcclusion(inputData.normalizedScreenSpaceUV);
- mainLight.color *= aoFactor.directAmbientOcclusion;
- occlusion = min(occlusion, aoFactor.indirectAmbientOcclusion);
- #endif
- MixRealtimeAndBakedGI(mainLight, inputData.normalWS, inputData.bakedGI, half4(0, 0, 0, 0));
- half3 color = GlobalIllumination(brdfData, inputData.bakedGI, occlusion, inputData.normalWS, inputData.viewDirectionWS);
- color += LightingPhysicallyBased(brdfData, mainLight, inputData.normalWS, inputData.viewDirectionWS);
- #ifdef _ADDITIONAL_LIGHTS
- uint pixelLightCount = GetAdditionalLightsCount();
- for (uint lightIndex = 0u; lightIndex < pixelLightCount; ++lightIndex)
- {
- // shadowShift is > 0 only for pixels around or below the intersection. So using inputData.positionWS + shadowShift should be ok.
- //Light light = GetAdditionalLight(lightIndex, inputData.positionWS + shadowShift);
- // URP 10: We have to use the new GetAdditionalLight function
- Light light = GetAdditionalLight(lightIndex, inputData.positionWS + shadowShift, shadowMask);
- #if defined(_SCREEN_SPACE_OCCLUSION)
- light.color *= aoFactor.directAmbientOcclusion;
- #endif
- color += LightingPhysicallyBased(brdfData, light, inputData.normalWS, inputData.viewDirectionWS);
- }
- #endif
- #ifdef _ADDITIONAL_LIGHTS_VERTEX
- color += inputData.vertexLighting * brdfData.diffuse;
- #endif
- color += emission;
- return half4(color, alpha);
- }
- #endif
|