Beispiel #1
0
        public static void RenderSingleCamera(LightweightRenderPipeline pipelineInstance, ScriptableRenderContext context, Camera camera)
        {
            if (pipelineInstance == null)
            {
                Debug.LogError("Trying to render a camera with an invalid render pipeline instance.");
                return;
            }

            if (!camera.TryGetCullingParameters(IsStereoEnabled(camera), out var cullingParameters))
            {
                return;
            }

            CommandBuffer cmd = CommandBufferPool.Get(k_RenderCameraTag);

            using (new ProfilingSample(cmd, k_RenderCameraTag))
            {
                ScriptableRenderer renderer = pipelineInstance.renderer;
                var settings = asset;
                LWRPAdditionalCameraData additionalCameraData = camera.gameObject.GetComponent <LWRPAdditionalCameraData>();
                InitializeCameraData(settings, camera, additionalCameraData, out var cameraData);
                SetupPerCameraShaderConstants(cameraData);

                // TODO: PerObjectCulling also affect reflection probes. Enabling it for now.
                // if (asset.additionalLightsRenderingMode == LightRenderingMode.Disabled ||
                //     asset.maxAdditionalLightsCount == 0)
                // {
                //     cullingParameters.cullingOptions |= CullingOptions.DisablePerObjectCulling;
                // }

                cullingParameters.shadowDistance = Mathf.Min(cameraData.maxShadowDistance, camera.farClipPlane);

                context.ExecuteCommandBuffer(cmd);
                cmd.Clear();

#if UNITY_EDITOR
                // Emit scene view UI
                if (cameraData.isSceneViewCamera)
                {
                    ScriptableRenderContext.EmitWorldGeometryForSceneView(camera);
                }
#endif

                var cullResults = context.Cull(ref cullingParameters);

                InitializeRenderingData(settings, ref cameraData, ref cullResults,
                                        renderer.maxVisibleAdditionalLights, renderer.maxPerObjectAdditionalLights, out var renderingData);

                renderer.Clear();

                IRendererSetup rendererSetup = (additionalCameraData != null) ? additionalCameraData.rendererSetup : settings.rendererSetup;
                rendererSetup.Setup(renderer, ref renderingData);
                renderer.Execute(context, ref renderingData);
            }

            context.ExecuteCommandBuffer(cmd);
            CommandBufferPool.Release(cmd);
            context.Submit();
        }
Beispiel #2
0
        public static void RenderSingleCamera(ScriptableRenderContext context, Camera camera,
                                              ref CullResults cullResults, IRendererSetup setup, ScriptableRenderer renderer)
        {
            CommandBuffer cmd = commandBufferPool.Get("RenderSingleCam");

            CameraData cameraData;

            InitializeCameraData(camera, out cameraData);

            ScriptableCullingParameters cullingParam;

            if (!CullResults.GetCullingParameters(camera, false, out cullingParam))
            {
                commandBufferPool.Release(cmd);
                return;
            }

            cullingParam.shadowDistance = Mathf.Min(ShadowDistance, camera.farClipPlane);
            context.ExecuteCommandBuffer(cmd);
            cmd.Clear();

#if UNITY_EDITOR
            //SceneView Camera
#endif
            CullResults.Cull(ref cullingParam, context, ref cullResults);
            RenderingData renderingData;
            InitializeRenderingData(ref cameraData, ref cullResults, out renderingData);

            IRendererSetup setupToUse = setup;
            if (setupToUse == null)
            {
                setupToUse = defaultRenderSetup;
            }

            renderer.Clear();
            setupToUse.Setup(renderer, ref renderingData);
            renderer.Execute(context, ref renderingData);

            context.ExecuteCommandBuffer(cmd);
            commandBufferPool.Release(cmd);
            context.Submit();
        }