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); }
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); }; }
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); }