🎮 Major Features
Post-Processing Pipeline
This release introduces a powerful Post-Processing Stack system that allows you to chain multiple visual effects together for stunning graphics:
C#
_postProcessStack = new PostProcessStack();
_postProcessStack.Filter.Add(GrayscaleFX.Noir);
_postProcessStack.Filter.Add(ColorTintFX.NightVision);
_postProcessStack.Filter.Add(FilmGrainFX.FoundFootage);
_postProcessStack.Filter.Add(VignetteFX.Soft);
_postProcessStack.Init(Viewport, RenderDevice);
Available Effects:
- BrightnessContrastFX - Cinematic color grading
- ChromaticAberrationFX - Lens distortion effects
- GrayscaleFX - Noir and monochrome styles
- PixelationFX - Retro pixel art look
- PosterizationFX - Comic book style rendering
- SepiaFX - Antique photo effects
- SharpenFX - Image sharpening
- ColorTintFX - Night vision and color overlays
- FilmGrainFX - Found footage and vintage film looks
- ScanlinesFX - Old TV screen effects
- VignetteFX - Soft edge darkening
Mix and match effects to create unique visual styles for your game!
⚠️ Breaking Changes
1. Deprecated Model Class
The generic Model class is now deprecated. Please migrate to the new specialized model classes:
- StaticMeshModel - For static 3D models (non-animated)
- SkinnedMeshModel - For animated models with skeletal animation
Old way (deprecated):
C#
var model = AssetManager.Load<Model>("path/to/model.gltf");
New way:
C#
// For static models
var lionModel = AssetManager.Load<StaticMeshModel>("Ressources/Lion/Lion.gltf");
// For animated models
var vampModel = AssetManager.Load<SkinnedMeshModel>("Ressources/Vampire/vampir.fbx");
var chicken = AssetManager.Load<SkinnedMeshModel>("Ressources/Chicken/chicken.gltf");
2. Manual Render Target Drawing Required
Scene.Render() and Canvas.Render() no longer automatically draw to the window. You must now explicitly draw render targets to the screen.
Migration Example:
C#
public override void Render()
{
// Render the 3D scene to its internal render target
Scene.RenderShadowMaps(Viewport, RenderDevice, Camera);
Scene.Render(Viewport, RenderDevice, Camera);
// Apply post-processing effects to the scene render target
var renderTarget = Scene.RenderTarget as MSAARenderTarget2D;
_postProcessStack.Apply(RenderDevice, renderTarget.TextureId);
// Draw the final result to the screen
RenderDevice.DrawRenderTarget(_postProcessStack.RenderTarget, 0);
// Render UI elements
HUD.AddRenderAction((viewport, renderer) =>
{
renderer. BindShaderProgram(renderer.GetShaderProgram("RectShader"));
renderer.FillRect(new Rect(-2, -2, 4, 4), new Vector4(0.0f, 1.0f, 1.0f, 1.0f));
renderer.UnbindShaderProgram();
});
HUD.Render(Viewport, RenderDevice);
RenderDevice.DrawRenderTarget(HUD.RenderTarget as RenderTarget2D, 0);
}
Display More
Why this change?
This gives you full control over the rendering pipeline, enabling:
- Custom post-processing effects
- Multiple render passes
- Render target composition
- Advanced rendering techniques
🚀 Enhancements
- Improved model loading with specialized classes for better performance
- More flexible rendering pipeline architecture
- Better separation between scene rendering and screen output
- Enhanced shadow map rendering workflow
📝 Migration Guide
- Update Model Loading:
- Replace Model with StaticMeshModel for static meshes
- Replace Model with SkinnedMeshModel for animated meshes
- Update Render Methods:
- Add explicit RenderDevice.DrawRenderTarget() calls after rendering
- Consider implementing post-processing effects for enhanced visuals
- Test Your Rendering:
- Ensure all scenes and canvases are properly drawn to the window
- Verify post-processing effects work as expected