static private void RenderLightVolumeSet(Camera camera, int blendStyleIndex, CommandBuffer cmdBuffer, int layerToRender, RenderTargetIdentifier renderTexture, RenderTargetIdentifier depthTexture, List <Light2D> lights) { if (lights.Count > 0) { for (int i = 0; i < lights.Count; i++) { Light2D light = lights[i]; int topMostLayer = light.GetTopMostLitLayer(); if (layerToRender == topMostLayer) { if (light != null && light.lightType != Light2D.LightType.Global && light.volumeOpacity > 0.0f && light.blendStyleIndex == blendStyleIndex && light.IsLitLayer(layerToRender) && light.IsLightVisible(camera)) { Material lightVolumeMaterial = GetLightMaterial(light, true); if (lightVolumeMaterial != null) { Mesh lightMesh = light.GetMesh(); if (lightMesh != null) { RenderShadows(cmdBuffer, layerToRender, light, light.shadowVolumeIntensity, renderTexture, depthTexture); if (light.lightType == Light2D.LightType.Sprite && light.lightCookieSprite != null && light.lightCookieSprite.texture != null) { cmdBuffer.SetGlobalTexture("_CookieTex", light.lightCookieSprite.texture); } cmdBuffer.SetGlobalFloat("_FalloffIntensity", light.falloffIntensity); cmdBuffer.SetGlobalFloat("_FalloffDistance", light.shapeLightFalloffSize); cmdBuffer.SetGlobalVector("_FalloffOffset", light.shapeLightFalloffOffset); cmdBuffer.SetGlobalColor("_LightColor", light.intensity * light.color); cmdBuffer.SetGlobalFloat("_VolumeOpacity", light.volumeOpacity); // Is this needed if (light.useNormalMap || light.lightType == Light2D.LightType.Point) { RendererLighting.SetPointLightShaderGlobals(cmdBuffer, light); } // Could be combined... if (light.lightType == Light2D.LightType.Parametric || light.lightType == Light2D.LightType.Freeform || light.lightType == Light2D.LightType.Sprite) { cmdBuffer.DrawMesh(lightMesh, light.transform.localToWorldMatrix, lightVolumeMaterial); } else if (light.lightType == Light2D.LightType.Point) { Vector3 scale = new Vector3(light.pointLightOuterRadius, light.pointLightOuterRadius, light.pointLightOuterRadius); Matrix4x4 matrix = Matrix4x4.TRS(light.transform.position, Quaternion.identity, scale); cmdBuffer.DrawMesh(lightMesh, matrix, lightVolumeMaterial); } } } } } } } }
static private bool RenderLightSet(Camera camera, int blendStyleIndex, CommandBuffer cmdBuffer, int layerToRender, RenderTargetIdentifier renderTexture, List <Light2D> lights) { bool renderedAnyLight = false; foreach (var light in lights) { if (light != null && light.lightType != Light2D.LightType.Global && light.blendStyleIndex == blendStyleIndex && light.IsLitLayer(layerToRender) && light.IsLightVisible(camera)) { // Render light Material lightMaterial = GetLightMaterial(light, false); if (lightMaterial != null) { Mesh lightMesh = light.GetMesh(); if (lightMesh != null) { //注释render Shadows // RenderShadows(cmdBuffer, layerToRender, light, light.shadowIntensity, renderTexture, renderTexture); renderedAnyLight = true; if (light.lightType == Light2D.LightType.Sprite && light.lightCookieSprite != null && light.lightCookieSprite.texture != null) { cmdBuffer.SetGlobalTexture("_CookieTex", light.lightCookieSprite.texture); } cmdBuffer.SetGlobalFloat("_FalloffIntensity", light.falloffIntensity); cmdBuffer.SetGlobalFloat("_FalloffDistance", light.shapeLightFalloffSize); cmdBuffer.SetGlobalVector("_FalloffOffset", light.shapeLightFalloffOffset); cmdBuffer.SetGlobalColor("_LightColor", light.intensity * light.color); cmdBuffer.SetGlobalFloat("_VolumeOpacity", light.volumeOpacity); if (light.useNormalMap || light.lightType == Light2D.LightType.Point) { RendererLighting.SetPointLightShaderGlobals(cmdBuffer, light); } // Light code could be combined... if (light.lightType == Light2D.LightType.Parametric || light.lightType == Light2D.LightType.Freeform || light.lightType == Light2D.LightType.Sprite) { cmdBuffer.DrawMesh(lightMesh, light.transform.localToWorldMatrix, lightMaterial); } else if (light.lightType == Light2D.LightType.Point) { Vector3 scale = new Vector3(light.pointLightOuterRadius, light.pointLightOuterRadius, light.pointLightOuterRadius); Matrix4x4 matrix = Matrix4x4.TRS(light.transform.position, Quaternion.identity, scale); cmdBuffer.DrawMesh(lightMesh, matrix, lightMaterial); } } } } } return(renderedAnyLight); }