Diffuse = MainDiffuse; Specular = MainSpecular; Color = MainColor * (MainDiffuse + MainSpecular); #ifndef SHADERGRAPH_PREVIEW uint pixelLightCount = GetAdditionalLightsCount(); LIGHT_LOOP_BEGIN(pixelLightCount) //get light color and direction lightIndex = GetPerObjectLightIndex(lightIndex); Light light = GetAdditionalPerObjectLight(lightIndex, WorldPosition); //calculate shadows light.shadowAttenuation = AdditionalLightRealtimeShadow(lightIndex, WorldPosition, light.direction); float atten = light.distanceAttenuation * light.shadowAttenuation; //calculate diffuse and specular float NdotL = saturate(dot(WorldNormal, light.direction)); float thisDiffuse = atten * NdotL; float3 thisSpecular = LightingSpecular(thisDiffuse, light.direction, WorldNormal, WorldView, 1, Smoothness); //accumulate light Diffuse += thisDiffuse; Specular += thisSpecular; Color += light.color * (thisDiffuse + thisSpecular); LIGHT_LOOP_END float total = Diffuse + dot(Specular, float3(0.333, 0.333, 0.333)); Color = total <= 0 ? MainColor : Color / total; #endif