IPR, which stands for Isometric Pixel Rendering, aims to be a graphics rendering module for LÖVE.
The core ideas and constraints for the project are as follow:
- Isometric: Pseudo-isometric orthographic projection. It is not exactly isometric to respect the ratio of 2:1 for a square tile. The hope is that the isometric constraint will allow different kind of optimizations and specializations.
 - Pixel-based: Deferred rendering and the exclusive use of screen space and post-processing techniques. The user only provides the geometry and materials through different pixel buffers; how their content is generated is up to the user. Each pixel must have a valid depth, normal and material properties. Per pixel blending is not supported; dithering techniques can be used to compensate this limitation.
 - Immediate API: No scene/object management. There are processing passes that the user directly setups and fills with commands on-the-fly. This should keep the module simple while giving the user flexibility, e.g. to easily embed the rendering into their application or to add new kind of lighting or post-processing passes without having to modify the module.
 
The primary purpose of this project is to allow me to experiment with isometric rendering / lighting with algorithmic generation using analytic signed distance functions. Complex and weird (animated) objects can be generated, and baked, at scale, thanks to the isometric view and the rendering being independent of the geometry complexity. Although this kind of 3D vector graphics is my goal, anything that can output to the pixel buffers may work; e.g. baked textures of complex objects from a 3D modeling software.
Considered Techniques
- Physically based rendering, which should be heavily based on the work done on the Filament renderer.
 - Direct lighting (directional, point, spot, etc.).
 - Screen-space shadows.
 - Screen-space light shafts.
 - Screen-space ambient occlusion.
 - Screen-space global illumination.
 - Screen-space reflections.
 - FXAA / SMAA / TAA.
 - Bloom.
 - Dithering.
 - Try to use half floats wherever possible.
 
For shadows and global illumination, it should be heavily based on the work of Alexander Sannikov, specifically Radiance Cascades and screen-space shadows with cascades. Or just for the general idea of using cascades wherever possible as an inspiration.
Limitations
- No translucency or other kinds of blending.
 - Anti-aliasing as a post-process only; no baked anti-aliasing.
 - There is a high baseline cost of GPU resources.