示例#1
0
    public VXGIRenderer(VXGIRenderPipeline renderPipeline)
    {
        _command = new CommandBuffer {
            name = "VXGI.Renderer"
        };
        _eventCommand   = new CommandBuffer();
        _filterSettings = new FilterRenderersSettings(true);
        _renderPipeline = renderPipeline;

        _gBufferBinding = new RenderTargetBinding(
            new RenderTargetIdentifier[] { ShaderIDs._CameraGBufferTexture0, ShaderIDs._CameraGBufferTexture1, ShaderIDs._CameraGBufferTexture2, ShaderIDs._CameraGBufferTexture3 },
            new[] { RenderBufferLoadAction.DontCare, RenderBufferLoadAction.DontCare, RenderBufferLoadAction.DontCare, RenderBufferLoadAction.DontCare },
            new[] { RenderBufferStoreAction.DontCare, RenderBufferStoreAction.DontCare, RenderBufferStoreAction.DontCare, RenderBufferStoreAction.DontCare },
            ShaderIDs._CameraDepthTexture, RenderBufferLoadAction.DontCare, RenderBufferStoreAction.DontCare
            );

        _renderScale = new float[] { 1f, 1f, 1f, 1f };

        _lightingPasses = new LightingShader[] {
            new LightingShader(LightingShader.Pass.Emission),
            new LightingShader(LightingShader.Pass.DirectDiffuseSpecular),
            new LightingShader(LightingShader.Pass.IndirectDiffuse),
            new LightingShader(LightingShader.Pass.IndirectSpecular)
        };

        _postProcessRenderContext = new PostProcessRenderContext();
    }
示例#2
0
    public void Render(ScriptableRenderContext renderContext, Camera camera, VXGIRenderer renderer)
    {
        VXGIRenderPipeline.TriggerCameraCallback(camera, "OnPreRender", Camera.onPreRender);

        _command.BeginSample(_command.name);
        renderContext.ExecuteCommandBuffer(_command);
        _command.Clear();

        UpdateResolution();

        float realtime         = Time.realtimeSinceStartup;
        bool  tracingThrottled = throttleTracing;

        if (tracingThrottled)
        {
            if (_previousTrace + 1f / tracingRate < realtime)
            {
                _previousTrace = realtime;

                PrePass(renderContext, renderer);
            }
        }
        else
        {
            PrePass(renderContext, renderer);
        }

        renderContext.SetupCameraProperties(camera);

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

        SetupShader(renderContext);

        VXGIRenderPipeline.TriggerCameraCallback(camera, "OnPreCull", Camera.onPreCull);

        renderer.RenderDeferred(renderContext, camera, this);

        _command.EndSample(_command.name);
        renderContext.ExecuteCommandBuffer(_command);
        _command.Clear();

        VXGIRenderPipeline.TriggerCameraCallback(camera, "OnPostRender", Camera.onPostRender);
    }
    public void Render(ScriptableRenderContext renderContext, Camera camera, VXGIRenderer renderer)
    {
        VXGIRenderPipeline.TriggerCameraCallback(Camera, "OnPreRender", Camera.onPreRender);

        _command.BeginSample(_command.name);
        renderContext.ExecuteCommandBuffer(_command);
        _command.Clear();

        UpdateResolution();

        var time = Time.realtimeSinceStartup;

        if (!limitRefreshRate || (_previousRefresh + 1f / refreshRate < time))
        {
            _previousRefresh = time;

            PrePass(renderContext, renderer);
        }

        renderContext.SetupCameraProperties(camera);

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

        SetupShader(renderContext);

        VXGIRenderPipeline.TriggerCameraCallback(Camera, "OnPreCull", Camera.onPreCull);

        renderer.RenderDeferred(renderContext, camera, this);

        _command.EndSample(_command.name);
        renderContext.ExecuteCommandBuffer(_command);
        _command.Clear();

        VXGIRenderPipeline.TriggerCameraCallback(Camera, "OnPostRender", Camera.onPostRender);
    }
示例#4
0
    public VXGIRenderer(VXGIRenderPipeline renderPipeline)
    {
        _command = new CommandBuffer {
            name = "VXGIRenderer"
        };
        _filterSettings = new FilterRenderersSettings(true)
        {
            renderQueueRange = RenderQueueRange.all
        };
        _renderPipeline = renderPipeline;

        _cameraDepthTextureID        = Shader.PropertyToID("_CameraDepthTexture");
        _cameraDepthNormalsTextureID = Shader.PropertyToID("_CameraDepthNormalsTexture");
        _cameraGBufferTexture0ID     = Shader.PropertyToID("_CameraGBufferTexture0");
        _cameraGBufferTexture1ID     = Shader.PropertyToID("_CameraGBufferTexture1");
        _cameraGBufferTexture2ID     = Shader.PropertyToID("_CameraGBufferTexture2");
        _cameraGBufferTexture3ID     = Shader.PropertyToID("_CameraGBufferTexture3");
        _dummyID       = Shader.PropertyToID("Dummy");
        _frameBufferID = Shader.PropertyToID("FrameBuffer");

        _gBufferBinding = new RenderTargetBinding(
            new RenderTargetIdentifier[] { _cameraGBufferTexture0ID, _cameraGBufferTexture1ID, _cameraGBufferTexture2ID, _cameraGBufferTexture3ID },
            new[] { RenderBufferLoadAction.DontCare, RenderBufferLoadAction.DontCare, RenderBufferLoadAction.DontCare, RenderBufferLoadAction.DontCare },
            new[] { RenderBufferStoreAction.DontCare, RenderBufferStoreAction.DontCare, RenderBufferStoreAction.DontCare, RenderBufferStoreAction.DontCare },
            _cameraDepthTextureID, RenderBufferLoadAction.DontCare, RenderBufferStoreAction.DontCare
            );

        _renderScale = new float[] { 1f, 1f, 1f, 1f };

        _lightingPasses = new LightingShader[] {
            new LightingShader(LightingShader.Pass.Emission),
            new LightingShader(LightingShader.Pass.DirectDiffuseSpecular),
            new LightingShader(LightingShader.Pass.IndirectDiffuse),
            new LightingShader(LightingShader.Pass.IndirectSpecular)
        };

        _postProcessRenderContext = new PostProcessRenderContext();
    }
示例#5
0
    public VXGIRenderer(VXGIRenderPipeline renderPipeline)
    {
        _command = new CommandBuffer {
            name = "VXGIRenderer"
        };
        _commandDiffuse = new CommandBuffer {
            name = "VXGIRenderer.Diffuse"
        };
        _commandReflection = new CommandBuffer {
            name = "VXGIRenderer.Reflection"
        };
        _filterSettings = new FilterRenderersSettings(true)
        {
            renderQueueRange = RenderQueueRange.all
        };
        _renderPipeline = renderPipeline;

        _propDepth      = Shader.PropertyToID("Depth");
        _propDiffuse    = Shader.PropertyToID("Diffuse");
        _propEmission   = Shader.PropertyToID("Emission");
        _propIrradiance = Shader.PropertyToID("Irradiance");
        _propNormal     = Shader.PropertyToID("Normal");
        _propOther      = Shader.PropertyToID("Other");
    }