Construct rendering

The frame pipeline after each engine, tone mapping and post-effect parameters in the Construct viewport

Status: Complete Last Updated: 2026-10-19

The pages in this section describe how the Construct viewport colors a surface, and the post-processing stage: what happens to a frame after the surface is shaded and before it reaches the screen or an export file.

  • Mesh and tet volume items - The two tones, the edges, the fields and colormaps, and two items in one place.
  • Field kernels - The derived values of a solve, such as the von Mises stress and the factor of safety, and how to add one.
  • Tone mapping - The fifteen built-in tone mappers, with a rendered sample of each.
  • Post-effect parameters - Why every post effect presents its parameters the same way, and how those values are stored.

For the shading modes themselves, see Rendering Modes.

How a frame is made

A frame is made in two halves:

  1. The engine decides the color of each pixel. The raster engine shades the surfaces in one pass, which is what the PBR and Environment-lit PBR engines show. The path tracer adds samples over time, which is what the Path Traced engine shows. Each engine hands on the same set of images: the light of each pixel, and the depth, the item, the normal and the color of the surface that the pixel sees. Each frame also carries the version of the view it was made for, its sample count and its noise level.
  2. The frame pipeline runs after the engine, the same for every engine and in every host: the viewport, the export and an OPAL capture.

The frame pipeline has these stages, in this order:

Stage What it does Which frames
1. Staleness gate Compares the frame's view version with the current view. A traced frame shows the last complete sample, and after a camera move that sample still belongs to the old view until the first sample of the new view completes. The frame keeps the old version, so neither the viewport nor OPAL takes it as the current image Path-traced
2. Denoiser Removes the grain of the samples. It reads the light, the albedo, the normal and the depth of the frame. The viewport runs the Viewport denoiser on each frame it shows, and an export runs the Final denoiser once, at the end of each frame. See Path-traced quality Path-traced
3. Navigation frame While the view moves, the tracer traces at a fraction of the resolution, and the frame shows its pixels as blocks (nearest-neighbor filtering) rather than blur. A full-size frame keeps the linear filter Path-traced, while the view moves
4. Composite Draws the traced image into the frame with the depth of each pixel, so meshes, proxies and the bounds of items sit in front of it or behind it as they do in the other modes Path-traced
5. Exposure and tone mapping Maps the linear light to the display. See Tone mapping All
6. Post effects Bloom, dither, FXAA and the other effects of the post chain. See Post-effect parameters All
7. Overlays The selection and hover highlights All
8. Target The copy to the screen, the export file or the OPAL image All

A raster frame is always made for the view of its own tick, and it has no noise. So it goes straight from the engine to stage 5.

So a post effect, a tone mapper or a highlight works the same in every mode, and an export applies the same chain as the viewport. With the same denoiser, an export and the viewport at the same sample count give the same image.

In the code, RenderPipeline::renderScenePass() is the raster engine's half, and RenderPipeline::runFramePipeline() runs the post chain and the overlays on its result. The viewport host and the exporter run stages 1 to 3 on the tracer's frame, and the scene pass then composites it (stage 4). The libconstruct path tracer reference names the classes.

Topics
reference construct rendering tone-mapping post-processing