Skip to content
This repository was archived by the owner on Sep 23, 2025. It is now read-only.

Latest commit

 

History

History
110 lines (67 loc) · 5.05 KB

File metadata and controls

110 lines (67 loc) · 5.05 KB

Unity Cluster Display Graphics (package concepts)

This package is used in conjunction with the main cluster-display package to control how your scene is rendered across multiple displays.

See the Cluster Display documentation for general information, installation, and use of Cluster Display.

Requirements

Cluster Display Graphics depends on URP or HDRP 14.0.3 (Unity 2022.2 and above). Install either "Universal RP" or "High Definition RP" from the package manager.

Using Unity.ClusterDisplay.Graphics

Cluster Display Graphics features are enabled by adding an instance of the ClusterRenderer component to your scene. This component allows you to define a Projection Policy.

Cluster Rendering Projection Policies

Tiled

The camera frustum is divided into a rectangular grid. Learn more about Tiled Projections

Mesh Warp

The camera frustum is projected onto the specified geometry. Use this projection to generate a perspective-correct view on a curved display surface (e.g. LED wall).

Mesh warp projection can be used for doing in-camera VFX on LED walls

Tracked Perspective

Same as Mesh Warp, above, but provides better image quality if your displays are flat.

Tiled Projection Concepts

We call the pixel surface subsection rendered by each machine a tile. We describe the target pixel surface as a grid of displays, with the size expressed in tiles. For example, a 3x3 grid size would output to 9 displays. Note that for the time being, we assume displays all have the same dimensions and are arranged as a regular 2D grid without any gap.

Asymmetric Projection

We subdivide the viewport into tiles, based on the grid size. We index those tiles row by row, starting at the top left corner of the grid (tile index 0). The tile index is inferred from the Cluster Display state. Note that it is possible to manually take control of the tile index and the viewport subsection for debugging purposes.

In the figure below, we visualize a camera frustum sliced as a 2x2 grid; the frustum of the tileIndex = 0 slice is highlighted in blue.

Asymmetric Projection Figure

Overscan

Many effects compute a pixel's value based on its neighbors (think of blur for example). To allow for seamless tiling, we slightly expand the frustum/viewport, so that each pixel of the original viewport has access to its neighbors. Those additional pixels are cropped out of the final output after effects have been computed.

Overscan Figure

Cluster Display Space

Some screen space computations need to happen at the scale of the global cluster output rather than in each machine's local screen space. We therefore introduce the notion of Cluster Space.

In the illustration below, we imagine a cloud is to be placed in screen space on a 2x2 grid. On the left, each machine places the cloud with respect to its local screen space coordinates. On the right, all machines place the cloud at the same place as the computation occurs in Cluster Space.

Global Screen Space Figure

Above figure uses an icon from FreePik

Physical Screen Size And Bezel

In case the displays being used have bezels, those need to be taken into account to adjust the projection. Both values represent physical units (mm) and should not be confused with screen size (expressed in pixels).

Physical Screen Size And Bezel Figure

Supported Effects

The following effects do not require any adaptation to be Cluster Display compatible:

  • Channel Mixer
  • Film Grain (provided a tileable texture is used)
  • Lift, Gamma, Gain
  • Split Toning
  • White Balance
  • Tonemapping
  • Color Curves
  • Color Adjustments
  • Shadows, Midtones, Highlights
  • Fast Approximate Anti Aliasing (FXAA)
  • Enhanced Subpixel Morphological Antialiasing (SMAA)
  • MSAA
  • Subsurface Scattering

The following effects rely on this package for Cluster Display support:

Effect Uses Overscan Uses Cluster Display
Bloom yes -
Vignette - yes
Motion Blur yes -
Chromatic Aberration - yes
Depth of Field yes -
Lens Distortion yes yes
Temporal Anti Aliasing yes -
Ambient Occlusion yes -

Note that for effects relying on overscan, there is a correlation between the amount of overscan and the maximal intensity of the effect before noticeable artefacts appear. A balance is to be found between the amount of overscan (which increases rendering cost) and the intensity of an effect according to an artistic intent.

Let's consider Bloom for example, in the capture below, bloom works with overscan:

Bloom

However, if we use a high scatter value, artefacts become apparent despite overscan:

Bloom