# Render Output

*Render Output produces rendered images of the solution directly from the solver, so you get presentation-ready pictures without loading the results into an external post-processor. You describe what to draw as a set of render groups, choose how each group is coloured, and set the camera the images are taken from.*

---

## Available Options

| *Option* | *Description* | *Applicable* |
|----------|---------------|--------------|
| **Name** | Name of the render output | always |
| **Frequency** | How often images are rendered | always |
| **Frequency offset** | Time step at which rendering begins | always |
| **Surface render** | Render groups drawing assigned surfaces or boundaries | always |
| **Slice render** | Render groups drawing assigned slices | always |
| **Isosurface render** | Render groups drawing isosurfaces defined in the group | always |
| **Volume render** | Render groups drawing a volume region as a voxel grid | always |
| **Material** | How a render group is coloured: by output field or with a fixed material | per render group |
| **Colormap** | Colour scale applied to the selected field | when **Material** is `Output fields` |
| **Range** | Lower and upper limits of the colour scale | when **Material** is `Output fields` |
| **Camera** | Viewpoint the images are rendered from | always |

```{seealso}
For the underlying physics and configuration of outputs, see the {doc}`/user_guide/OutputConfiguration/OutputConfiguration` user guide.
```

---

## Detailed Descriptions

### Name

*Name of the render output, used to identify it among the configured outputs.*

- **Default:** `Render output`

### Frequency

*Number of time steps between rendered images.*

- **Default:** `-1` (render only at the end of the simulation)
- **Example:** `10` (render every 10th step)

### Frequency offset

*Time step at which rendering begins.*

- **Default:** `0`

### Render groups

*A render output is built from render groups, each drawing one kind of entity. Add as many groups of each kind as you need; every group carries its own entity assignment and its own material.*

The panel provides four kinds, each in its own collapsible section showing how many groups it currently holds:

- **Surface render**, added with `+ Add surface output`. The assignment control follows the asset the case starts from: it is labelled `Assigned surfaces` for a geometry, and `Assigned boundaries` for a surface mesh or volume mesh.
- **Slice render**, added with `+ Add slice output`. Draws slices through `Assigned slices`.
- **Isosurface render**, added with `+ Add isosurface output`. The isosurfaces are defined inside the group rather than assigned from elsewhere: each entry takes a **Name**, a **Field**, and the **Value** the field is held at.
- **Volume render**, added with `+ Add volume output`. Draws a box-shaped region sampled onto a voxel grid, defined by **Center**, **Size**, and **Resolution**. Resolution is the number of voxels along each axis and accepts up to `1024`.

### Material

*Controls how a render group is coloured.*

- **Options:**
  - `Output fields` colours the group by a solution field, using a colormap and range.
  - `PBR material` gives the group a fixed physically based appearance instead of field colouring, with a subtype of `metal` or `plastic`.
>**Notes:**
> - Volume render groups are always coloured by output fields, so they do not offer the `PBR material` option.
> - The fields available differ by group kind: surface groups offer the surface fields, and the other kinds offer the common fields. See [Available Output Fields](../output-fields.md).

### Colormap

*Colour scale applied when the group is coloured by an output field.*

- **Options:**
  - `Rainbow`
  - `Orizon`
  - `Viridis`
  - `Magma`
  - `Airflow`

### Range

*Lower and upper limits of the colour scale.*

>**Notes:** 
> - Values outside the range are clamped to the end colours, so a range chosen around the region of interest gives more usable contrast than one spanning the full field.

### Camera

*Viewpoint the images are rendered from, given as a position and a target.*

>**Notes:** 
> - Use **Set as current perspective** to capture the viewport's current orientation into the camera instead of entering the vectors by hand.
> - The section shows a preview image of the resulting view once one is available.

---

Python API reference: {py:class}`~flow360.RenderOutput`, {py:class}`~flow360.RenderOutputGroup`, {py:class}`~flow360.render_config.FieldMaterial`, {py:class}`~flow360.render_config.PBRMaterial`.
