>[!info]
>Outline for implementing the Compositor / Compositor Effects for our [[../Digipen/GAM250|GAM250]] engine.
### CanvasLayer
RenderingServer managed object (with node counterpart) that contains:
- Global $z$-index for ordering other canvas layers
- Internal list of RenderObjects bound to this layer
- Internal [[#Compositor]] for rendering
- [[#Enviornment]] Resource
- Viewport Settings
- Pixel Perfect Y/N
- Parallax Offset / Scale
### WorldEnviornment
A Node with an [[#Enviornment]] resource that assigns the enviornment that the current [[#CanvasLayer]] should be using.
#### Enviornment
A Resource type for a collection of rendering parameters:
- List of CompositorEffect types
- Color grading options
### Compositor
The compositor is an internal list of [[#Compositor Effect|Compositor Effects]] and a [[#RenderSceneBuffers]]
#### RenderSceneBuffers
An object-derived class that stores the minimum deferred rendering buffers:
- Color GBuffer
- Normal Buffer
- Emissive Buffer
- Velocity Buffer (motion vectors)
- Mask GBuffer (the mask layers of each fragment)
- Render Target Texture
#### Compositor Effect
Object derived class with a single render callback that takes a gfx::CanvasLayer and RenderSceneBuffers.
Example builtin compositor effects:
- Blur Pass
- Velocity Blur Pass
- Lighting
- Tonemapping