/// <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; }