Billboard

Overview

billboard renderer node
billboard renderer node

This is the most used particle renderer. It displays the particles as textured sprites.
It has various options to control how the particles are displayed, rotated, scaled, which texture is mapped on them, etc…​
This renderer is supported in all of our public engine integrations.
Billboards are displayed onscreen based on an input position, size, color and additional per particle or static properties.

billboard renderer

Geometry generation

Billboard renderers support various billboarding modes (alignments):
billboarding modes

Screen aligned

4 vertices / 2 triangles per particle
A screen-aligned billboard has its plane parallel to the screen plane.
Looking around and rotating the view camera changes the billboard orientation, while only changing the camera position doesn’t.

billboard renderer: screen

billboard renderer: screen

Viewpos aligned

4 vertices / 2 triangles per particle
A viewpos-aligned quad has its plane normal pointing towards the camera position.
Unlike screen-aligned quads, looking around does not change the billboard geometry.

billboard renderer: viewpos

billboard renderer: viewpos

Axis aligned

4 vertices / 2 triangles per particle
This billboard mode stretches the billboard geometry along the user-provided axis.
The billboard rotates around the specified axis to try facing the camera

billboard renderer: axis

billboard renderer: axis

Axis aligned spheroid

4 vertices / 2 triangles per particle
Unlike the AxisAligned billboarding mode, this one doesn’t suffer from the grazing-angle problem, where the particle appears to vanish when the billboarding axis becomes near-perpendicular with the screen plane.
Instead, this billboarder emulates a spheroid, and binds the screenspace projection of the spheroid with a quad. This fixes the artifacts of the AxisAligned mode

billboard renderer: spheroid

billboard renderer: spheroid

Axis aligned capsule

6 vertices / 4 triangles per particle
Particles rendered using this billboarder, like the AxisAlignedSpheroid, won’t seem to disappear at grazing angles.
Builds a 6-vertex geometry around the particle. Stretches the texture on its diagonal.

billboard renderer: capsule

billboard renderer: capsule

Plane aligned

4 vertices / 2 triangles per particle
Planar aligned billboarders use two axes for billboarding: like the axial billboarder, a main axis, lying on the plane, and the plane normal vector.

billboard renderer: planar,width=103,height=155

billboard renderer: planar

billboard renderer: planar

Geometry inputs

Property

Type

Description

BillboardingMode

enum

Specifies how the billboard geometry should be build & aligned.
Unless mentioned otherwise, the generated geometry will be a quad: 2 triangles, 4 vertices.

  • ScreenAligned: Oriented to always face the camera screen plane

  • ViewposAligned: Oriented to always face the camera position

  • AxisAligned: Constrained along the Axis vector, tries facing the screen by rotating around the axis

  • AxisAlignedSpheroid: Same as AxisAligned, but vertices will always enclose a spheroid, preventing the billboard from looking like a thin slice when looking along the direction of Axis

  • AxisAlignedCapsule: Similar to AxisAlignedSpheroid, but the geometry has 4 triangles and 6 vertices, resembling a stretched cylinder instead of a spheroid

  • PlaneAligned: Constrained on two axes, does not depend on the camera, will appear as a 3D plane

EnableSize2D

bool

When enabled, the billboard size is specified as a float2 value, through the Size2 property, instead of the Size property.

Position

float3

Billboard center in world coordinates

Size

float

Radius of the billboard in world units

Size2

float2

2D side/up radius of the billboard in world units.
Only available when EnableSize2D is enabled.

Rotation

float

Billboard rotation angle in degrees

Axis

float3

Principal axis of the billboard when BillboardingMode is set to AxisAligned*
Side axis of the billboard when BillboardingMode is set to PlaneAligned

NormalAxis

float3

Normal of the billboard when BillboardingMode is set to PlaneAligned

+ all common renderer properties

Editor Materials:

  • Billboard_Transparent/Legacy_Default_Billboard: Regular transparent billboard (additive, alpha-blended, or premultiplied-alpha)

  • Billboard_Opaque/Legacy_Opaque_Billboard: Opaque billboard, depth tested. Alpha-testing can be used for cutouts

  • Billboard_Distortion/Legacy_Distortion_Billboard: Billboard drawing in the distortion pass, useful for heat-shimmering effects

  • Billboard_AnimatedMasked: Extented transparent billboard with animated textures

Render-features

Lit

Lights the particle with the scene lights.

Property

Type

Description

CastShadows

bool

Can cast shadows

Roughness

float

Material roughness (PBR). A roughness of 0.0 represents a mirror, a roughness of 1.0 represents a purely diffuse surface.

Metalness

float

Material metalness (PBR). A metalness of 0.0 represents a pure nonmetal, a metalness of 1.0 represents a pure metal.
Affects the color of the reflections.

Type

enum

  • Solid

  • Transparent

Input pins

NormalMap

String

Texture map representing tangent-space normals to be used for lighting.

RoughMetalMap

String

Roughness ® and Metalness (G) packed in an RGBA texture

LitMaskMap

String

LegacyLit

Lights the particle with the scene lights. (legacy shader)

Property

Type

Description

NormalWrapFactor

float

Used to fake sub-surface scattering on the particles.
Remaps the N dot L of the lighting equation from [-1,1] to [-1+factor,1]

LightExponent

float

Exponentiation of the lighting term

LightScale

float3

RGB Multiplier applied to the incoming light

AmbientLight

float3

Additional uniform light

CastShadows

bool

Can cast shadows (not implemented in editor)

Input pins

NormalMap

String

Texture map representing tangent-space normals to be used for lighting.

SpecularMap

String

Source map used in specular lighting computation

NormalBend

Bends the vertex normals of the billboard to mimic a spherical surface when lighting is enabled.

Property

Type

Description

NormalBendingFactor

float

Bending factor to apply to the billboard normals.
0.0 means no bending, the normals will be perpendicular to the billboard quad plane.
1.0 means fully bent, the normals will be tangent to the billboard quad plane, pointing outwards.

NormalWrap

Remaps the N dot L value in the lighting equation to move back the unlit area of the billboard, and mimic subsurface scattering / partial backlighting.

Property

Type

Description

WrapFactor

float

Used to fake sub-surface scattering on the particles.
Remaps the N dot L of the lighting equation from [-1,1] to [-1+factor,1]

SoftParticles

Particles fade away when becoming too close to solid scene geometry, preventing a hard clipping effect where they intersect the scene.

Property

Type

Description

SoftnessDistance

float

Fade distance of particles in world units

AlphaRemap

Allows remapping the alpha using a 2D grayscale texture looked up with the particle alpha along its U coordinate, and a custom per-particle Cursor along its V coordinate.

Property

Type

Description

Input pins

AlphaMap

String

Texture map used as the alpha remap lookup.
The X lookup coordinate is the diffuse texture alpha.
The Y lookup coordinate is the Cursor value.

Cursor

float

Y coordinate used to sample the AlphaMap texture.

TransformUVs

Exposes more control on the UV coordinates of the billboard corners.

Property

Type

Description

RGBOnly

bool

When enabled, does not transform the UVs used to sample the alpha channel.

Input pins

UVOffset

float2

UV offset

UVRotate

float2

UV rotation angle

UVScale

float2

UV scale

Atlas

Allows to use a sprite-sheet as the diffuse texture, and control which subset of the texture is used using a per-particle TextureID input.

Property

Type

Description

Source

enum

  • External: Atlas tiles are defined in an external .pkat atlas file. Their topology can be arbitrary.

  • Procedural: The number of tiles along the U and V axes are specified by the SubDiv property.

SubDiv

int2

Subdivision count

Blending

enum

Frame blending type

  • None: No interpolation between frames

  • Linear: Linear blending

  • MotionVectors: Use the MotionVectorsMap texture as the interpolation vectors to blend between frames

DistortionStrength

float

Multiplier over the uv distortion
Distortion strength to apply for Houdini exported maps is: -(1.0 / FPS / ColRow).

Input pins

Definition

String

Atlas definition (.pkat)

MotionVectorsMap

String

Motion vectors texture, used to blend between frames when Blending is set to MotionVectors

TextureID

float

Index of the sub-rect to use inside the atlas

Diffuse

Draws the particle as a regular diffuse surface in addition to distortion.

Property

Type

Description

Input pins

DiffuseMap

String

Texture map used for the diffuse lighting component

Color

float4

Diffuse color, multiplied with the diffuse map color.

DiffuseRamp

Uses the red channel of the diffuse texture (can be grayscale) to lookup a 1D color ramp to get the final RGB diffuse color.

Property

Type

Description

Input pins

RampMap

String

1D texture map used tor for diffuse color remap.
Sampled with the Red channel of the DiffuseMap texture.

Emissive

Exposes an emissive map to use as a purely emissive color in addition to the regular diffuse component.

Property

Type

Description

Input pins

EmissiveMap

String

Texture map used for the emissive lighting component.

EmissiveColor

float3

Emissive color, multiplied with the emissive texture

EmissiveRamp

Uses the red channel of the emissive texture (can be grayscale) to lookup a 1D color ramp to get the final RGB emissive color.

Property

Type

Description

Input pins

EmissiveRamp

String

1D texture map used tor for emissive color remap.
Sampled with the Red channel of the EmissiveMap` texture.`

Tint

Applies a multiplicative RGB tint on the framebuffer. Useful to simulate stained glass.

Property

Type

Description

Input pins

TintMap

String

Texture map used for the tint.

Color

float3

Tint color, multiplied with the tint texture. The resulting color will be multiplied with the backbuffer values.