Example #1
0
        //Alex: Draws to screen?
        //Tyler: Draws to whatever the camera is drawing to (which can be set in the editor.
        public override void Render(ScriptableRenderContext renderContext, Camera[] cameras)
        {
            //Tyler: Performs sanity checks (not well documented)
            base.Render(renderContext, cameras);

            //Tyler: Obtains a CommandBuffer instance from the pool to save on GC pressure.
            CommandBuffer cb = CommandBufferPool.Get(); //Alex: Obtain CommandBuffer queue from pool.

            //Alex: Call render for a camera?
            //Tyler: Process rendering for each camera in the order provided.
            foreach (Camera camera in cameras)
            {
                //Tyler: Sets up Unity's internal camera variables (not well documented) and binds the render target to the camera's target.
                renderContext.SetupCameraProperties(camera);            //Alex: Does some interesting things(?)
                cb.ClearRenderTarget(true, true, AssetReference.Color); //Alex: Set Color.  Tyler: Clear background color to the color in the FP Asset and clear out the depth buffer.

                foreach (FPRenderComponent FPRenderComponent in FPRenderPipelineAsset.ListOfRenderComponent)
                {
                    cb.DrawRenderer(FPRenderComponent.DefaultUnityMeshRenderer, FPRenderComponent.DefaultUnityMeshRenderer.sharedMaterial, 0);
                }

#if UNITY_EDITOR
                // Emit scene view UI
                if (camera.cameraType == CameraType.SceneView)
                {
                    ScriptableRenderContext.EmitWorldGeometryForSceneView(camera);
                }
#endif

                renderContext.ExecuteCommandBuffer(cb);                 //Alex: Execute commands in queue.
            }

            renderContext.Submit();                                     //Alex: Submit changes.
            cb.Release();                                               //Alex: Release obtained CommandBuffer.
        }
Example #2
0
 partial void PrepareForSceneWindow() //准备场景窗口(使UI在场景窗口中可见)
 {
     if (camera.cameraType == CameraType.SceneView)
     {
         ScriptableRenderContext.EmitWorldGeometryForSceneView(camera);
     }
 }
 /// <summary>
 /// 在编辑下显示UI
 /// </summary>
 protected void prepareForSceneWindow()
 {
     if (m_camera.cameraType == CameraType.SceneView)
     {
         ScriptableRenderContext.EmitWorldGeometryForSceneView(m_camera);
     }
 }
 /// <summary>
 /// 确保在场景中绘制, 必须剔除前使用
 /// </summary>
 private void PrepareForSceneWindow(Camera camera)
 {
     if (camera.cameraType == CameraType.SceneView)
     {
         ScriptableRenderContext.EmitWorldGeometryForSceneView(camera);
     }
 }
Example #5
0
        protected override void Render(ScriptableRenderContext context, Camera[] cameras)
        {
            BeginFrameRendering(context, cameras);
            foreach (var camera in cameras)
            {
                if (false == camera.TryGetCullingParameters(out _cullParam))
                {
                    continue;
                }

                BeginCameraRendering(context, camera);
#if UNITY_EDITOR
                if (CameraType.SceneView == camera.cameraType)
                {
                    ScriptableRenderContext.EmitWorldGeometryForSceneView(camera);
                }
#endif

                var ppLayer = camera.GetComponent <PostProcessLayer>();
                if (null == ppLayer)
                {
                    NormalRendering(context, camera);
                }
                else
                {
                    PostProcessingRendering(context, camera, ppLayer);
                }

                EndCameraRendering(context, camera);
            }
            EndFrameRendering(context, cameras);
        }
    protected override void Render(ScriptableRenderContext context, Camera[] cameras)
    {
        if (happyAsset.Passes == null)
        {
            return;
        }
        if (happyAsset.Passes.Count == 0)
        {
            return;
        }

        foreach (Camera camera in cameras)
        {
#if UNITY_EDITOR
            if (camera.cameraType == CameraType.SceneView)
            {
                ScriptableRenderContext.EmitWorldGeometryForSceneView(camera);
            }
#endif

            camera.TryGetCullingParameters(out cullingParameters);
            CullingResults cullingResults = context.Cull(ref cullingParameters);

            context.SetupCameraProperties(camera);
            happyAsset.Passes[0].Execute(context, camera, cullingResults);

            context.Submit();
        }
    }
Example #7
0
    public void CullingAndDraw(ScriptableRenderContext context, Camera cam)
    {
        if (!CullResults.GetCullingParameters(cam, out cullingParameters))
        {
            return;
        }
#if UNITY_EDITOR
        if (cam.cameraType == CameraType.SceneView)
        {
            ScriptableRenderContext.EmitWorldGeometryForSceneView(cam);
        }
#endif
        UnityEngine.Profiling.Profiler.BeginSample("GCSource");
        CullResults.Cull(ref cullingParameters, context, ref cull);
        UnityEngine.Profiling.Profiler.EndSample();
        DrawRendererSettings drawSettings = new DrawRendererSettings(cam, new ShaderPassName("CstRP"));
        if (asset.enableDynamicBatching)
        {
            drawSettings.flags = DrawRendererFlags.EnableDynamicBatching;
        }
        if (asset.enableInstancing)
        {
            drawSettings.flags |= DrawRendererFlags.EnableInstancing;
        }
        drawSettings.sorting.flags = SortFlags.CommonOpaque;
        FilterRenderersSettings filterSettings = new FilterRenderersSettings(true)
        {
            renderQueueRange = RenderQueueRange.opaque
        };
        context.DrawRenderers(cull.visibleRenderers, ref drawSettings, filterSettings);
        context.DrawSkybox(cam);
        drawSettings.sorting.flags      = SortFlags.CommonTransparent;
        filterSettings.renderQueueRange = RenderQueueRange.transparent;
        context.DrawRenderers(cull.visibleRenderers, ref drawSettings, filterSettings);
    }
        public static void RenderSingleCamera(ScriptableRenderContext context, Camera camera)
        {
            if (!camera.TryGetCullingParameters(IsStereoEnabled(camera), out var cullingParameters))
            {
                return;
            }

            var settings = asset;
            LWRPAdditionalCameraData additionalCameraData = null;

            if (camera.cameraType == CameraType.Game || camera.cameraType == CameraType.VR)
#if UNITY_2019_2_OR_NEWER
            { camera.gameObject.TryGetComponent(out additionalCameraData); }
#else
            { additionalCameraData = camera.gameObject.GetComponent <LWRPAdditionalCameraData>(); }
#endif

            InitializeCameraData(settings, camera, additionalCameraData, out var cameraData);
            SetupPerCameraShaderConstants(cameraData);

            ScriptableRenderer renderer = (additionalCameraData != null) ? additionalCameraData.scriptableRenderer : settings.scriptableRenderer;
            if (renderer == null)
            {
                Debug.LogWarning(string.Format("Trying to render {0} with an invalid renderer. Camera rendering will be skipped.", camera.name));
                return;
            }

#if UNITY_EDITOR
            string tag = camera.name;
#else
            string tag = k_RenderCameraTag;
#endif
            CommandBuffer cmd = CommandBufferPool.Get(tag);
            using (new ProfilingSample(cmd, tag))
            {
                renderer.Clear();
                renderer.SetupCullingParameters(ref cullingParameters, ref cameraData);

                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, out var renderingData);

                renderer.Setup(context, ref renderingData);
                renderer.Execute(context, ref renderingData);
            }

            context.ExecuteCommandBuffer(cmd);
            CommandBufferPool.Release(cmd);
            context.Submit();
        }
Example #9
0
  public override void Render(ScriptableRenderContext renderContext, Camera[] cameras) {
    base.Render(renderContext, cameras);
    BeginFrameRendering(cameras);

    foreach (var camera in cameras) {
      BeginCameraRendering(camera);

      var vxgi = camera.GetComponent<VXGI>();

      if (vxgi != null && vxgi.isActiveAndEnabled) {
        vxgi.Render(renderContext, _renderer);
      } else {
#if UNITY_EDITOR
        bool rendered = false;

        if (camera.cameraType == UnityEngine.CameraType.SceneView) {
          ScriptableRenderContext.EmitWorldGeometryForSceneView(camera);
        }

        if (Camera.main != null) {
          vxgi = Camera.main.GetComponent<VXGI>();

          if (vxgi != null && vxgi.isActiveAndEnabled) {
            vxgi.Render(renderContext, camera, _renderer);
            rendered = true;
          }
        }

        if (!rendered) RenderFallback(renderContext, camera);
#else
        RenderFallback(renderContext, camera);
#endif
      }
    }
  }
Example #10
0
        protected override void Render(ScriptableRenderContext context, Camera[] cameras)
        {
            BeginFrameRendering(context, cameras);
            foreach (var RenderCamera in cameras)
            {
#if UNITY_EDITOR
                //seting UI in SceneEdit
                bool isSceneViewCam = RenderCamera.cameraType == CameraType.SceneView;
                if (isSceneViewCam)
                {
                    ScriptableRenderContext.EmitWorldGeometryForSceneView(RenderCamera);
                }
#endif

                //////Set Camera Property
                BeginCameraRendering(context, RenderCamera);
                context.SetupCameraProperties(RenderCamera);

                /////Cull Object
                ScriptableCullingParameters cullingParameters;
                if (!RenderCamera.TryGetCullingParameters(out cullingParameters))
                {
                    continue;
                }

                CullingResults CullingData = context.Cull(ref cullingParameters);

                //Drwa PipeLine Pass
                RenderingContent(isSceneViewCam, RenderCamera, CullingData, context);

                ///Submit RenderContent
                context.Submit();
                EndCameraRendering(context, RenderCamera);
            }
        }
 partial void EmitSceneUIGeometry()
 {
     if (_camera.cameraType == CameraType.SceneView)
     {
         ScriptableRenderContext.EmitWorldGeometryForSceneView(_camera);
     }
 }
Example #12
0
    private void RenderCamera(ScriptableRenderContext context, Camera camera)
    {
        //设置摄像机属性给上下文
        context.SetupCameraProperties(camera);
        //清除背景
        CameraClearFlags clearFlags = camera.clearFlags;

        cameraClearBuff.ClearRenderTarget(
            (clearFlags & CameraClearFlags.Depth) != 0,
            (clearFlags & CameraClearFlags.Color) != 0,
            camera.backgroundColor
            );
        context.ExecuteCommandBuffer(cameraClearBuff);
        cameraClearBuff.Clear();
        //剔除视图外的物体
        ScriptableCullingParameters cullingParameters;

        if (!CullResults.GetCullingParameters(camera, out cullingParameters))
        {
            return;
        }
#if UNITY_EDITOR
        if (camera.cameraType == CameraType.SceneView)
        {
            ScriptableRenderContext.EmitWorldGeometryForSceneView(camera);
        }
#endif
        CullResults.Cull(ref cullingParameters, context, ref cull);
        //绘制物体
        DrawOpaqueRenders(context, camera, cull);
        DrawDefaultPipeline(context, camera);
        context.DrawSkybox(camera);
        DrawTransparentRenders(context, camera, cull);
        context.Submit();
    }
Example #13
0
        protected override void Render(ScriptableRenderContext context, Camera[] cameras)
        {
            int maxWidth  = 1;
            int maxHeight = 1;

            foreach (var camera in cameras)
            {
                maxWidth  = Mathf.Max(maxWidth, camera.pixelWidth);
                maxHeight = Mathf.Max(maxHeight, camera.pixelHeight);
            }
            //RTHandles.SetReferenceSize(maxWidth,maxHeight,m_MSAASample);
            RTHandles.SetReferenceSize(1920, 1080, m_MSAASample);
            ShaderBindings.SetPerFrameShaderVariables(context);
            foreach (Camera camera in cameras)
            {
#if UNITY_EDITOR
                if (camera.cameraType == CameraType.SceneView)
                {
                    ScriptableRenderContext.EmitWorldGeometryForSceneView(camera);
                }
#endif

                CullingResults cullingResults = Cull(context, camera);
                ShaderBindings.SetPerCameraShaderVariables(context, camera);
                DrawCamera(context, cullingResults, camera);
            }
        }
 partial void PrepareForSceneWindow()
 {
     if (_camera.cameraType == CameraType.SceneView)
     {
         ScriptableRenderContext.EmitWorldGeometryForSceneView(_camera);
     }
 }
Example #15
0
        public static void RenderSingleCamera(ScriptableRenderContext context, Camera camera)
        {
            if (!camera.TryGetCullingParameters(IsStereoEnabled(camera), out var cullingParameters))
            {
                return;
            }

            var settings = asset;
            LWRPAdditionalCameraData additionalCameraData = null;

            if (camera.cameraType == CameraType.Game || camera.cameraType == CameraType.VR)
            {
                additionalCameraData = camera.gameObject.GetComponent <LWRPAdditionalCameraData>();
            }

            InitializeCameraData(settings, camera, additionalCameraData, out var cameraData);
            SetupPerCameraShaderConstants(cameraData);

            ScriptableRenderer renderer = (additionalCameraData != null) ? additionalCameraData.scriptableRenderer : settings.scriptableRenderer;

            if (renderer == null)
            {
                Debug.LogWarning(string.Format("Trying to render {0} with an invalid renderer. Camera rendering will be skipped.", camera.name));
                return;
            }

            camera.cullingMatrix = Matrix4x4.Ortho(-99999, 99999, -99999, 99999, 0.001f, 99999) *
                                   Matrix4x4.Translate(Vector3.forward * -99999 / 2f) *
                                   camera.worldToCameraMatrix;

            CommandBuffer cmd = CommandBufferPool.Get(camera.name);

            using (new ProfilingSample(cmd, camera.name))
            {
                renderer.Clear();
                renderer.SetupCullingParameters(ref cullingParameters, ref cameraData);

                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, out var renderingData);

                renderer.Setup(context, ref renderingData);
                renderer.Execute(context, ref renderingData);
            }

            context.ExecuteCommandBuffer(cmd);
            CommandBufferPool.Release(cmd);
            context.Submit();
        }
Example #16
0
    void Render(ScriptableRenderContext context, Camera camera)
    {
        ScriptableCullingParameters scriptableCullingParameters;

        if (!camera.TryGetCullingParameters(out scriptableCullingParameters))
        {
            return;
        }

#if UNITY_EDITOR
        if (camera.cameraType == CameraType.SceneView)
        {
            ScriptableRenderContext.EmitWorldGeometryForSceneView(camera);
        }
#endif

        BeginCameraRendering(context, camera);
        _cullingResults = context.Cull(ref scriptableCullingParameters);
        context.SetupCameraProperties(camera);

        CameraClearFlags clearFlags = camera.clearFlags;
        commandBuffer.ClearRenderTarget((clearFlags & CameraClearFlags.Depth) != 0,
                                        (clearFlags & CameraClearFlags.Color) != 0, camera.backgroundColor);

        ConfigureLights();

        commandBuffer.BeginSample("Render Camera");
        commandBuffer.SetGlobalVectorArray(visibleLightColorsId, visibleLightColors);
        commandBuffer.SetGlobalVectorArray(visibleLightDirectionsOrPositionsId, visibleLightDirectionsOrPositions);
        commandBuffer.SetGlobalVectorArray(visibleLightAttenuationsId, visibleLightAttenuations);
        commandBuffer.SetGlobalVectorArray(visibleLightSpotDirectionsId, visibleLightSpotDirections);
        context.ExecuteCommandBuffer(commandBuffer);
        commandBuffer.Clear();

        SortingSettings sortingSettings = new SortingSettings(camera);
        sortingSettings.criteria = SortingCriteria.CommonOpaque;
        DrawingSettings drawingSettings = new DrawingSettings(new ShaderTagId("SRPDefaultUnlit"), sortingSettings);
        drawingSettings.enableInstancing      = _instancing;
        drawingSettings.enableDynamicBatching = _dynamicBatching;

        FilteringSettings filteringSettings = FilteringSettings.defaultValue;
        filteringSettings.renderQueueRange = RenderQueueRange.opaque;
        context.DrawRenderers(_cullingResults, ref drawingSettings, ref filteringSettings);

        context.DrawSkybox(camera);

        sortingSettings.criteria           = SortingCriteria.CommonTransparent;
        filteringSettings.renderQueueRange = RenderQueueRange.transparent;
        context.DrawRenderers(_cullingResults, ref drawingSettings, ref filteringSettings);

        DrawDefaultPipeline(context, camera);

        commandBuffer.EndSample("Render Camera");
        context.ExecuteCommandBuffer(commandBuffer);
        commandBuffer.Clear();

        context.Submit();
        EndCameraRendering(context, camera);
    }
Example #17
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();
        }
 partial void PrepareForSceneWindow()
 {
     if (camera.cameraType == CameraType.SceneView)
     {
         ScriptableRenderContext.EmitWorldGeometryForSceneView(camera);
         useScaledRendering = false;
     }
 }
Example #19
0
 partial void PrepareForSceneWindow()
 {
     //Emit UI geometry into the Scene view for rendering.
     if (camera.cameraType == CameraType.SceneView)
     {
         ScriptableRenderContext.EmitWorldGeometryForSceneView(camera);
     }
 }
Example #20
0
        protected override void Render(ScriptableRenderContext context, Camera[] cameras)
        {
            FilteringSettings opaqueFilteringSettings      = new FilteringSettings(RenderQueueRange.opaque);
            FilteringSettings transparentFilteringSettings = new FilteringSettings(RenderQueueRange.transparent);

            bool          enableDynamicBatching = false;
            bool          enableInstancing      = false;
            PerObjectData perObjectData         = PerObjectData.None;

            foreach (Camera camera in cameras)
            {
#if UNITY_EDITOR
                if (camera.cameraType == CameraType.SceneView)
                {
                    ScriptableRenderContext.EmitWorldGeometryForSceneView(camera);
                }
#endif

                // Culling. Adjust culling parameters for your needs. One could enable/disable
                // per-object lighting or control shadow caster distance.
                camera.TryGetCullingParameters(m_IsStereoSupported, out var cullingParameters);
                var cullingResults = context.Cull(ref cullingParameters);

                SortingSettings opaqueSortingSettings = new SortingSettings(camera);
                opaqueSortingSettings.criteria = SortingCriteria.CommonOpaque;

                // ShaderTagId must match the "LightMode" tag inside the shader pass.
                // If not "LightMode" tag is found the object won't render.
                DrawingSettings opaqueDrawingSettings = new DrawingSettings(m_ShaderTagId, opaqueSortingSettings);
                opaqueDrawingSettings.enableDynamicBatching = enableDynamicBatching;
                opaqueDrawingSettings.enableInstancing      = enableInstancing;
                opaqueDrawingSettings.perObjectData         = perObjectData;

                // Helper method to setup some per-camera shader constants and camera matrices.
                context.SetupCameraProperties(camera, m_IsStereoSupported);

                // Sets active render target and clear based on camera backgroud color.
                var cmd = CommandBufferPool.Get();
                cmd.SetRenderTarget(BuiltinRenderTextureType.CameraTarget);
                cmd.ClearRenderTarget(true, true, camera.backgroundColor);
                context.ExecuteCommandBuffer(cmd);
                CommandBufferPool.Release(cmd);

                // Render Opaque objects given the filtering and settings computed above.
                // This functions will sort and batch objects.
                context.DrawRenderers(cullingResults, ref opaqueDrawingSettings, ref opaqueFilteringSettings);

                // Renders skybox if required
                if (camera.clearFlags == CameraClearFlags.Skybox && RenderSettings.skybox != null)
                {
                    context.DrawSkybox(camera);
                }

                // Submit commands to GPU. Up to this point all commands have been enqueued in the context.
                // Several submits can be done in a frame to better controls CPU/GPU workload.
                context.Submit();
            }
        }
Example #21
0
        public static void RenderSingleCamera(DoomSRPPipeline pipelineInstance, ScriptableRenderContext context, Camera camera, ref CullResults cullResults, IRendererSetup setup = null)
        {
            if (pipelineInstance == null)
            {
                Debug.LogError("Trying to render a camera with an invalid render pipeline instance.");
                return;
            }

            ScriptableCullingParameters cullingParameters;

            if (!CullResults.GetCullingParameters(camera, out cullingParameters))
            {
                return;
            }

            CommandBuffer cmd = CommandBufferPool.Get(k_RenderCameraTag);

            using (new ProfilingSample(cmd, k_RenderCameraTag))
            {
                CameraData         cameraData;
                PipelineSettings   settings  = pipelineInstance.settings;
                ScriptableRenderer renderer  = pipelineInstance.renderer;
                LightLoop          lightloop = pipelineInstance.GetLightLoop();
                InitializeCameraData(pipelineInstance.settings, camera, out cameraData);
                SetupPerCameraShaderConstants(cameraData);

                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
                CullResults.Cull(ref cullingParameters, context, ref cullResults);

                RenderingData renderingData;
                InitializeRenderingData(settings, ref cameraData, ref cullResults, ref lightloop, out renderingData);
                var setupToUse = setup;
                if (setupToUse == null)
                {
                    setupToUse = defaultRendererSetup;
                }

                renderer.Clear();
                setupToUse.Setup(renderer, ref renderingData);
                renderer.Execute(context, ref renderingData);
            }
            context.ExecuteCommandBuffer(cmd);
            CommandBufferPool.Release(cmd);
            context.Submit();
#if UNITY_EDITOR
            Handles.DrawGizmos(camera);
#endif
        }
Example #22
0
    public override void Render(ScriptableRenderContext renderContext, Camera[] cameras)
    {
        base.Render(renderContext, cameras);
        BeginFrameRendering(cameras);

        foreach (var camera in cameras)
        {
            var layer = camera.GetComponent <PostProcessLayer>();

            if (layer != null && layer.isActiveAndEnabled)
            {
                layer.UpdateVolumeSystem(camera, _command);
                renderContext.ExecuteCommandBuffer(_command);
                _command.Clear();
            }

            BeginCameraRendering(camera);

            var vxgi = camera.GetComponent <VXGI>();

            if (vxgi != null && vxgi.isActiveAndEnabled)
            {
                vxgi.Render(renderContext, _renderer);
            }
            else
            {
#if UNITY_EDITOR
                bool rendered = false;

                if (camera.cameraType == UnityEngine.CameraType.SceneView)
                {
                    ScriptableRenderContext.EmitWorldGeometryForSceneView(camera);
                }

                if (Camera.main != null)
                {
                    vxgi = Camera.main.GetComponent <VXGI>();

                    if (vxgi != null && vxgi.isActiveAndEnabled)
                    {
                        vxgi.Render(renderContext, camera, _renderer);
                        rendered = true;
                    }
                }

                if (!rendered)
                {
                    RenderFallback(renderContext, camera);
                }
#else
                RenderFallback(renderContext, camera);
#endif
            }

            renderContext.Submit();
        }
    }
Example #23
0
 partial void PrepareForSceneWindow()
 {
     //标识为摄像机Scene窗口模式
     if (camera.cameraType == CameraType.SceneView)
     {
         //Scene 窗口模式画 UI将UI几何体到“场景”视图中以进行渲染。
         ScriptableRenderContext.EmitWorldGeometryForSceneView(camera);
     }
 }
Example #24
0
        public static void RenderSingleCamera(LightweightRenderPipeline pipelineInstance, ScriptableRenderContext context, Camera camera, IRendererSetup setup = null)
        {
            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))
            {
                PipelineSettings   settings = pipelineInstance.settings;
                ScriptableRenderer renderer = pipelineInstance.renderer;
                InitializeCameraData(settings, camera, out var cameraData);
                SetupPerCameraShaderConstants(cameraData);

                if (pipelineInstance.settings.additionalLightsRenderingMode == LightRenderingMode.Disabled ||
                    pipelineInstance.settings.maxAdditionalLights == 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();

                var rendererSetup = setup ?? settings.rendererSetup;
                rendererSetup.Setup(renderer, ref renderingData);
                renderer.Execute(context, ref renderingData);
            }

            context.ExecuteCommandBuffer(cmd);
            CommandBufferPool.Release(cmd);
            context.Submit();
        }
Example #25
0
        private void DrawSceneView()
        {
            if (camera.cameraType != CameraType.SceneView)
            {
                return;
            }

            ScriptableRenderContext.EmitWorldGeometryForSceneView(camera);
        }
Example #26
0
 private void PrepareForSceneWindow()
 {
     #if UNITY_EDITOR
     if (camera.cameraType == CameraType.SceneView)
     {
         ScriptableRenderContext.EmitWorldGeometryForSceneView(camera);
     }
     #endif
 }
Example #27
0
    public override void Render(ScriptableRenderContext renderContext, Camera[] cameras)
    {
        base.Render(renderContext, cameras);

        foreach (var camera in cameras)
        {
            renderContext.SetupCameraProperties(camera);

            CameraClearFlags clearFlags = camera.clearFlags;
            cameraBuffer.ClearRenderTarget((clearFlags & CameraClearFlags.Depth) != 0, (clearFlags & CameraClearFlags.Color) != 0, camera.backgroundColor);
            renderContext.ExecuteCommandBuffer(cameraBuffer);
            cameraBuffer.Clear();

            if (!CullResults.GetCullingParameters(camera, out ScriptableCullingParameters cullingParameters))
            {
                return;
            }

#if UNITY_EDITOR
            if (camera.cameraType == CameraType.SceneView)
            {
                ScriptableRenderContext.EmitWorldGeometryForSceneView(camera);
            }
#endif

            CullResults.Cull(ref cullingParameters, renderContext, ref cull);

            var drawSettings = new DrawRendererSettings(camera, new ShaderPassName("SRPDefaultUnlit"));
            //先渲染不透明
            //This instructs Unity to sort the renderers by distance, from front to back, plus a few other criteria.
            drawSettings.sorting.flags = SortFlags.CommonOpaque;
            //筛选不透明物体
            var filterSettings = new FilterRenderersSettings(true)
            {
                renderQueueRange = RenderQueueRange.opaque
            };

            renderContext.DrawRenderers(
                cull.visibleRenderers, ref drawSettings, filterSettings
                );
            //渲染天空
            renderContext.DrawSkybox(camera);

            //筛选透明物体
            drawSettings.sorting.flags      = SortFlags.CommonTransparent;
            filterSettings.renderQueueRange = RenderQueueRange.transparent;
            //渲染透明
            renderContext.DrawRenderers(
                cull.visibleRenderers, ref drawSettings, filterSettings
                );

#if UNITY_EDITOR
            DrawDefaultPipeline(renderContext, camera);
#endif
        }
        renderContext.Submit();
    }
 partial void PrepareForSceneView()
 {
     //Add the UI as geo to render in SceneView camera. for betterUP
     if (camera.cameraType == CameraType.SceneView)
     {
         ScriptableRenderContext.EmitWorldGeometryForSceneView(camera);
         useScaledRendering = false;//no need for scaled rendering for editor window
     }
 }
Example #29
0
        public static void RenderSingleCamera(ScriptableRenderContext context, Camera camera, Camera uiCamera = null)
        {
            if (!camera.TryGetCullingParameters(IsStereoEnabled(camera), out var cullingParameters))
            {
                return;
            }

            var settings = asset;
            LWRPAdditionalCameraData additionalCameraData = null;

            if (camera.cameraType == CameraType.Game || camera.cameraType == CameraType.VR || camera.cameraType == CameraType.Reflection)
            {
                additionalCameraData = camera.gameObject.GetComponent <LWRPAdditionalCameraData>();
            }

            InitializeCameraData(settings, camera, additionalCameraData, out var cameraData);
            SetupPerCameraShaderConstants(cameraData);

            ScriptableRenderer renderer = camera.name == FeedbackGlobals.FeedbackCamName ? settings.feedbackRenderer : (additionalCameraData != null) ? additionalCameraData.scriptableRenderer : settings.scriptableRenderer;

            // renderer = settings.scriptableRenderer;
            if (renderer == null)
            {
                Debug.LogWarning(string.Format("Trying to render {0} with an invalid renderer. Camera rendering will be skipped.", camera.name));
                return;
            }

            string        camera_tag_string = string.Format("{0},{1}", k_RenderCameraTag, camera.name);
            CommandBuffer cmd = CommandBufferPool.Get(camera_tag_string);

            using (new ProfilingSample(cmd, camera_tag_string))
            {
                renderer.Clear();
                renderer.SetupCullingParameters(ref cullingParameters, ref cameraData);
                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, out var renderingData);
                renderingData.uiCmaera = uiCamera;
                renderer.Setup(context, ref renderingData);
                renderer.Execute(context, ref renderingData);
            }

            context.ExecuteCommandBuffer(cmd);
            CommandBufferPool.Release(cmd);
            context.Submit();
        }
        public static void RenderSingleCamera(ScriptableRenderContext context, PipelineSettings settings, Camera camera, ref CullResults cullResults, IRendererSetup setup, ScriptableRenderer renderer)
        {
            string        renderCameraTag = camera.name;
            CommandBuffer cmd             = CommandBufferPool.Get(renderCameraTag);

            using (new ProfilingSample(cmd, renderCameraTag))
            {
                CameraData cameraData;
                InitializeCameraData(settings, camera, out cameraData);
                SetupPerCameraShaderConstants(cameraData);

                ScriptableCullingParameters cullingParameters;
                if (!CullResults.GetCullingParameters(camera, cameraData.isStereoEnabled, out cullingParameters))
                {
                    CommandBufferPool.Release(cmd);
                    return;
                }

                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
                CullResults.Cull(ref cullingParameters, context, ref cullResults);
                List <VisibleLight> visibleLights = cullResults.visibleLights;

                RenderingData renderingData;
                InitializeRenderingData(settings, ref cameraData, visibleLights,
                                        renderer.maxSupportedLocalLightsPerPass, renderer.maxSupportedVertexLights,
                                        out renderingData);

                var setupToUse = setup;
                if (setupToUse == null)
                {
                    setupToUse = defaultRendererSetup;
                }

                setupToUse.Setup(renderer, ref context, ref cullResults, ref renderingData);

                renderer.Execute(ref context, ref cullResults, ref renderingData);

                context.ExecuteCommandBuffer(cmd);
                CommandBufferPool.Release(cmd);
                context.Submit();
#if UNITY_EDITOR
                Handles.DrawGizmos(camera);
#endif
            }
        }