Ejemplo n.º 1
0
        void BlurSsao(GameTime gameTime, DeferredRenderer deferred)
        {
            GraphicsDevice.DepthStencilState = DepthStencilState.None;
            GraphicsDevice.BlendState        = BlendState.Opaque;
            GraphicsDevice.RasterizerState   = RasterizerState.CullNone;
            GraphicsDevice.SetRenderTarget(_blurTarget);
            GraphicsDevice.Clear(Color.TransparentBlack);

            _ssaoBlur.Parameters["NormalBuffer"]?.SetValue(deferred.Normals);
            _ssaoBlur.Parameters["DepthBuffer"]?.SetValue(deferred.Depth);
            _ssaoBlur.Parameters["SSAO"]?.SetValue(_ssaoTarget);
            _ssaoBlur.Parameters["BlurDirection"]?.SetValue(new Vector2(0, 1));
            _ssaoBlur.Parameters["TargetSize"]?.SetValue(new Vector2(_ssaoTarget.Width, _ssaoTarget.Height));
            _ssaoBlur.CurrentTechnique.Passes[0].Apply();

            _fsq.Draw(gameTime);
        }
Ejemplo n.º 2
0
        protected override void LoadContent()
        {
            base.LoadContent();

            var ar = GraphicsDevice.Viewport.Width / (float)GraphicsDevice.Viewport.Height;

            _baseCamera = new BaseCamera(GraphicsDevice)
            {
                FieldOfView = (float)Math.PI * 0.4f,
                AspectRatio = ar,
                NearClip    = 0.1f,
                FarClip     = 10000
            };

            TerrainDrawEffect = Game.Content.Load <Effect>("BasicTextured");
            TerrainDrawEffect.CurrentTechnique = TerrainDrawEffect.Techniques[0];

            TerrainTexture = Game.Content.Load <Texture>("Tiles");

            Font = Game.Content.Load <SpriteFont>("Font");

            var parameters = VoxelGame.Instance.ClientSize;

            _deferredRenderer = new DeferredRenderer(Game, Game.Content, parameters.X, parameters.Y);
            _lightManager     = new LightManager(Game.Content);
            _lightManager.AddLight(new DirectionalLight(new Vector3(1f, -3f, 1f), Color.White, 0.9f));
            _lightManager.AddLight(new DirectionalLight(new Vector3(-2f, -1f, -1f), new Color(1.0f, 1.0f, 0.5f), 0.5f));
            _lightManager.AddLight(new DirectionalLight(new Vector3(2f, -1f, -1f), new Color(0.5f, 1.0f, 1.0f), 0.3f));
            _ssao = new SSAO(Game, Game.Content, parameters.X, parameters.Y);

            CurrentEffect = TerrainDrawEffect;

            CreateRenderTargets(parameters.X, parameters.Y);
            VoxelGame.Instance.ResolutionChanged += (sender, args) =>
            {
                CreateRenderTargets(args.Width, args.Height);
            };
        }
Ejemplo n.º 3
0
 public void Draw(GameTime gameTime, DeferredRenderer deferred, RenderTarget2D scene, BaseCamera camera, bool blur, RenderTarget2D output)
 {
     RenderSsao(gameTime, deferred, camera);
     BlurSsao(gameTime, deferred);
     Compose(gameTime, scene, output, blur);
 }