/// <summary>
        /// Should the renderer index be changed at runtime, this function must be called to update any reflection cameras
        /// </summary>
        /// <param name="index"></param>
        public void SetRendererIndex(int index)
        {
            index = PipelineUtilities.ValidateRenderer(index);

            foreach (var kvp in reflectionCameras)
            {
                if (kvp.Value == null)
                {
                    continue;
                }

                cameraData = kvp.Value.GetComponent <UniversalAdditionalCameraData>();
                cameraData.SetRenderer(index);
            }
        }
        private void CreateReflectionCamera(Camera source)
        {
            GameObject go = new GameObject(source.name + "_reflection");

            go.hideFlags = HideFlags.DontSave | HideFlags.HideInHierarchy;
            Camera newCamera = go.AddComponent <Camera>();

            newCamera.hideFlags = HideFlags.DontSave;
            newCamera.CopyFrom(source);
            //Always exclude water layer
            newCamera.cullingMask = ~(1 << 4) & cullingMask;
            //newCamera.cameraType = CameraType.Reflection; //Will cause shadow pass to execute twice?!
            newCamera.depth               = source.depth - 1f;
            newCamera.rect                = new Rect(0, 0, 1, 1);
            newCamera.enabled             = false;
            newCamera.clearFlags          = includeSkybox ? CameraClearFlags.Skybox : CameraClearFlags.Depth;
            newCamera.useOcclusionCulling = false;

            UniversalAdditionalCameraData data = newCamera.gameObject.AddComponent <UniversalAdditionalCameraData>();

            data.requiresDepthTexture = false;
            data.requiresColorTexture = false;
            data.renderShadows        = renderShadows;

            rendererIndex = PipelineUtilities.ValidateRenderer(rendererIndex);
            data.SetRenderer(rendererIndex);

#if RENDER_FEATURE
            cameraLeft.cullingMask = 0;
            data.SetRenderer(1);
            ReflectionRenderers[newCamera] = this;
#endif

            CreateRenderTexture(newCamera, source);

            reflectionCameras[source] = newCamera;
        }