Skip to content

nfCore Renderer

Michał Witanowski edited this page Nov 19, 2015 · 2 revisions

High-level renderer modules

DebugRenderer

Rendering simple 3D shapes (boxes, lines, etc.) and non-shaded meshes.

GuiRenderer

Rendering simple 2D shapes (quads, lines, etc.) and text. It also implements ImGui rendering.

GeometryRenderer

Rendering geometry of 3D shapes for other passes:

  • GBuffer for Deferred Shading,
  • shadows maps.

LightsRenderer

Performs lighting (rendering ambient, omni, spot, directional lights) using objects from previous module (GBuffer and shadow maps).

PostProcessRenderer

Applies post processing effects on image generated with LightRenderer. It can use information from GBuffer (for example for DoF).

Rendering process

Rendering is performed with a help of View class, which contains:

  • scene pointer that we want to render,
  • camera entity that will be used during rendering,
  • rendering resources:
  • GBuffer,
  • low-level Render Target object (can be texture or a backbuffer),
  • immediate textures used for posprocessing (downsampled rendertarget, etc.).
  • view parameters:
  • rendering settings (quality, debug layer, etc.),
  • post-processing parameters.

A View rendering is divided into multiple stages (Not implemented fully):

  • 3D rendering - normal view of a scene,
  • pre GUI rendering (affected by the post-processing),
  • postprocess rendering,
  • post GUI rendering (not affected by the post-processing.

Using of all the stages is not obligatory. Examples:

  • Minimalist: 3D rendering only.
  • Traditional scenario: 3D rendering + postprocess rendering + GUI rendering,
  • Fancy GUI: GUI rendering + postprocess rendering.