//---------------------------------------------------------------------------------------------------------------------------------------------------
        private void RenderShadowSplit(ref ShadowSliceData slice, Vector3 lightDirection, Matrix4x4 proj, Matrix4x4 view, ref RenderLoop loop, DrawShadowsSettings settings)
        {
            var commandBuffer = new CommandBuffer {
                name = "ShadowSetup"
            };

            // Set viewport / matrices etc
            commandBuffer.SetViewport(new Rect(slice.atlasX, slice.atlasY, slice.shadowResolution, slice.shadowResolution));
            //commandBuffer.ClearRenderTarget (true, true, Color.green);
            commandBuffer.SetGlobalVector("g_vLightDirWs", new Vector4(lightDirection.x, lightDirection.y, lightDirection.z));
            commandBuffer.SetProjectionAndViewMatrices(proj, view);
            //	commandBuffer.SetGlobalDepthBias (1.0F, 1.0F);
            loop.ExecuteCommandBuffer(commandBuffer);
            commandBuffer.Dispose();

            // Render
            loop.DrawShadows(ref settings);
        }
        private void SetupShadowSplitMatrices(ref ShadowSliceData lightData, Matrix4x4 proj, Matrix4x4 view)
        {
            var matScaleBias = Matrix4x4.identity;

            matScaleBias.m00 = 0.5f;
            matScaleBias.m11 = 0.5f;
            matScaleBias.m22 = 0.5f;
            matScaleBias.m03 = 0.5f;
            matScaleBias.m13 = 0.5f;
            matScaleBias.m23 = 0.5f;

            var matTile = Matrix4x4.identity;

            matTile.m00 = (float)lightData.shadowResolution / (float)m_Settings.shadowAtlasWidth;
            matTile.m11 = (float)lightData.shadowResolution / (float)m_Settings.shadowAtlasHeight;
            matTile.m03 = (float)lightData.atlasX / (float)m_Settings.shadowAtlasWidth;
            matTile.m13 = (float)lightData.atlasY / (float)m_Settings.shadowAtlasHeight;
            lightData.shadowTransform = matTile * matScaleBias * proj * view;
        }