Exemple #1
0
        private void CreatePipeline()
        {
            // Processor
            Entities.Processors.Add(new CubemapSourceProcessor(GraphicsDevice));

            // Rendering pipeline
            RenderSystem.Pipeline.Renderers.Add(new CameraSetter(Services));

            RenderSystem.Pipeline.Renderers.Add(new RenderTargetSetter(Services)
            {
                ClearColor       = Color.CornflowerBlue,
                EnableClearDepth = true,
                ClearDepth       = 1f
            });

            // Create G-buffer pass
            var gbufferPipeline = new RenderPipeline("GBuffer");

            // Renders the G-buffer for opaque geometry.
            gbufferPipeline.Renderers.Add(new ModelRenderer(Services, "CubemapIBLEffect.XenkoGBufferShaderPass"));
            var gbufferProcessor = new GBufferRenderProcessor(Services, gbufferPipeline, GraphicsDevice.DepthStencilBuffer, false);

            // Add sthe G-buffer pass to the pipeline.
            RenderSystem.Pipeline.Renderers.Add(gbufferProcessor);

            var readOnlyDepthBuffer = GraphicsDevice.DepthStencilBuffer; // TODO ToDepthStencilBuffer(true);

            IBLRenderer = new LightingIBLRenderer(Services, "CubemapIBLSpecular", readOnlyDepthBuffer);
            RenderSystem.Pipeline.Renderers.Add(IBLRenderer);
            RenderSystem.Pipeline.Renderers.Add(new RenderTargetSetter(Services)
            {
                ClearColor       = Color.CornflowerBlue,
                EnableClearDepth = false,
            });
            RenderSystem.Pipeline.Renderers.Add(new DelegateRenderer(Services)
            {
                Render = ShowIBL
            });
        }
        /// <summary>
        /// Creates the rendering pipeline
        /// </summary>
        private void CreatePipeline()
        {
            var renderers         = RenderSystem.Pipeline.Renderers;
            var width             = GraphicsDevice.BackBuffer.Width;
            var height            = GraphicsDevice.BackBuffer.Height;
            var viewport          = new Viewport(0, 0, width, height);
            var clearColor        = Color.Black;
            var effectName        = "ParadoxCraftEffectMain";
            var fowardEffectName  = "ParadoxCraftEffectForward";
            var prepassEffectName = "ParadoxCraftPrepassEffect";

            // Adds a light processor that will track all the entities that have a light component.
            // This will also handle the shadows (allocation, activation etc.).
            var lightProcessor = Entities.GetProcessor <LightShadowProcessor>();

            if (lightProcessor == null)
            {
                Entities.Processors.Add(new DynamicLightShadowProcessor(GraphicsDevice, false));
            }

            // Camera
            renderers.Add(new CameraSetter(Services));

            // Create G-buffer pass
            var gbufferPipeline = new RenderPipeline("GBuffer");

            // Renders the G-buffer for opaque geometry.
            gbufferPipeline.Renderers.Add(new ModelRenderer(Services, effectName + ".ParadoxGBufferShaderPass").AddOpaqueFilter());
            var gbufferProcessor = new GBufferRenderProcessor(Services, gbufferPipeline, GraphicsDevice.DepthStencilBuffer, false);

            // Add sthe G-buffer pass to the pipeline.
            renderers.Add(gbufferProcessor);

            // Performs the light prepass on opaque geometry.
            // Adds this pass to the pipeline.
            var lightDeferredProcessor = new LightingPrepassRenderer(Services, prepassEffectName, GraphicsDevice.DepthStencilBuffer, gbufferProcessor.GBufferTexture);

            renderers.Add(lightDeferredProcessor);

            renderers.Add(new RenderTargetSetter(Services)
            {
                ClearColor       = clearColor,
                EnableClearDepth = false,
                RenderTarget     = GraphicsDevice.BackBuffer,
                DepthStencil     = GraphicsDevice.DepthStencilBuffer,
                Viewport         = viewport
            });

            renderers.Add(new RenderStateSetter(Services)
            {
                DepthStencilState = GraphicsDevice.DepthStencilStates.Default, RasterizerState = GraphicsDevice.RasterizerStates.CullBack
            });

            // Renders all the meshes with the correct lighting.
            renderers.Add(new ModelRenderer(Services, fowardEffectName).AddLightForwardSupport());

            // Blend atmoshpere inscatter on top
            renderers.Add(new AtmosphereRenderer(Services, Atmosphere, Sunlight));

            // Wireframe mode
            if (isWireframe)
            {
                GraphicsDevice.Parameters.Set(Effect.RasterizerStateKey, RasterizerState.New(GraphicsDevice, new RasterizerStateDescription(CullMode.None)
                {
                    FillMode = FillMode.Wireframe
                }));
            }

            GraphicsDevice.Parameters.Set(RenderingParameters.UseDeferred, true);
        }
        private void CreatePipeline()
        {
            // Processor
            Entities.Processors.Add(new CubemapSourceProcessor(GraphicsDevice));

            // Rendering pipeline
            RenderSystem.Pipeline.Renderers.Add(new CameraSetter(Services));

            RenderSystem.Pipeline.Renderers.Add(new RenderTargetSetter(Services)
            {
                ClearColor = Color.CornflowerBlue,
                EnableClearDepth = true,
                ClearDepth = 1f
            });

            // Create G-buffer pass
            var gbufferPipeline = new RenderPipeline("GBuffer");
            // Renders the G-buffer for opaque geometry.
            gbufferPipeline.Renderers.Add(new ModelRenderer(Services, "CubemapIBLEffect.XenkoGBufferShaderPass"));
            var gbufferProcessor = new GBufferRenderProcessor(Services, gbufferPipeline, GraphicsDevice.DepthStencilBuffer, false);

            // Add sthe G-buffer pass to the pipeline.
            RenderSystem.Pipeline.Renderers.Add(gbufferProcessor);

            var readOnlyDepthBuffer = GraphicsDevice.DepthStencilBuffer; // TODO ToDepthStencilBuffer(true);
            IBLRenderer = new LightingIBLRenderer(Services, "CubemapIBLSpecular", readOnlyDepthBuffer);
            RenderSystem.Pipeline.Renderers.Add(IBLRenderer);
            RenderSystem.Pipeline.Renderers.Add(new RenderTargetSetter(Services)
            {
                ClearColor = Color.CornflowerBlue,
                EnableClearDepth = false,
            });
            RenderSystem.Pipeline.Renderers.Add(new DelegateRenderer(Services) { Render = ShowIBL });
        }