public void Update() { Renderer renderer; m_HasRenderer = TryGetComponent <Renderer>(out renderer); bool rebuildMesh = LightUtility.CheckForChange(m_ShapePathHash, ref m_PreviousPathHash); if (rebuildMesh) { m_ProjectedBoundingSphere = ShadowUtility.GenerateShadowMesh(m_Mesh, m_ShapePath); } m_PreviousShadowCasterGroup = m_ShadowCasterGroup; bool addedToNewGroup = ShadowCasterGroup2DManager.AddToShadowCasterGroup(this, ref m_ShadowCasterGroup); if (addedToNewGroup && m_ShadowCasterGroup != null) { if (m_PreviousShadowCasterGroup == this) { ShadowCasterGroup2DManager.RemoveGroup(this); } ShadowCasterGroup2DManager.RemoveFromShadowCasterGroup(this, m_PreviousShadowCasterGroup); if (m_ShadowCasterGroup == this) { ShadowCasterGroup2DManager.AddGroup(this); } } if (LightUtility.CheckForChange(m_ShadowGroup, ref m_PreviousShadowGroup)) { ShadowCasterGroup2DManager.RemoveGroup(this); ShadowCasterGroup2DManager.AddGroup(this); } if (LightUtility.CheckForChange(m_CastsShadows, ref m_PreviousCastsShadows)) { if (m_CastsShadows) { ShadowCasterGroup2DManager.AddGroup(this); } else { ShadowCasterGroup2DManager.RemoveGroup(this); } } }
protected void OnDisable() { ShadowCasterGroup2DManager.RemoveGroup(this); }
protected void OnEnable() { ShadowCasterGroup2DManager.AddGroup(this); }
protected void OnDisable() { ShadowCasterGroup2DManager.RemoveFromShadowCasterGroup(this, m_ShadowCasterGroup); }
public static void RenderLights(this IRenderPass2D pass, RenderingData renderingData, CommandBuffer cmd, int layerToRender, ref LayerBatch layerBatch, ref RenderTextureDescriptor rtDesc) { // Before rendering the lights cache some values that are expensive to get/calculate var culledLights = pass.rendererData.lightCullResult.visibleLights; for (var i = 0; i < culledLights.Count; i++) { culledLights[i].CacheValues(); } ShadowCasterGroup2DManager.CacheValues(); var blendStyles = pass.rendererData.lightBlendStyles; for (var i = 0; i < blendStyles.Length; ++i) { if ((layerBatch.lightStats.blendStylesUsed & (uint)(1 << i)) == 0) { continue; } var sampleName = blendStyles[i].name; cmd.BeginSample(sampleName); if (!Light2DManager.GetGlobalColor(layerToRender, i, out var clearColor)) { clearColor = Color.black; } var anyLights = (layerBatch.lightStats.blendStylesWithLights & (uint)(1 << i)) != 0; var desc = rtDesc; if (!anyLights) // No lights -- create tiny texture { desc.width = desc.height = 4; } var identifier = layerBatch.GetRTId(cmd, desc, i); cmd.SetRenderTarget(identifier, RenderBufferLoadAction.DontCare, RenderBufferStoreAction.Store, RenderBufferLoadAction.DontCare, RenderBufferStoreAction.DontCare); cmd.ClearRenderTarget(false, true, clearColor); if (anyLights) { RenderLightSet( pass, renderingData, i, cmd, layerToRender, identifier, pass.rendererData.lightCullResult.visibleLights ); } cmd.EndSample(sampleName); } }