Sprites, impostors & billboards
Place baked content in 3D — the rich look of heavy geometry for the cost of a flat image.
Sometimes you want the appearance of a complicated 3D object — a detailed sphere, a forest of plants, a swarm of shapes — without paying to render all of it every frame. The trick is to bake the look into an image and place that image in the scene. The render.rasterize node does this, and it gives you two flavours: impostors and sprites.
Impostors: a baked image that keeps its place
Set Rasterize's mode to Raster and it bakes whatever you feed it into a flat image that lives natively in the scene. When the input is 3D geometry, you can wire a camera (the camera.viewport) to choose the viewpoint, or leave it unconnected and let DNA auto-frame the object.
The clever part is re-baking. With the Live option, the image re-captures as you orbit — the flat card keeps facing you and keeps showing the correct 3D look, so it reads as a real object even though it's just pixels. That's an impostor: it stays a raster, continuously refreshed, holding its position and 3D appearance. You get the impression of heavy geometry at the price of an image.
With Baked instead, the capture happens once and stays put — a frozen snapshot, cheapest of all, perfect when the look doesn't need to change with the camera.
Because the result is a real image, you can feed it straight into a feedback loop (think glowing trails), run it through filters, or move it with a content-space transform. See Rasters (images) and Loops & feedback.
Sprites: the bake as textured points
Switch Rasterize's mode to Sprite and the baked image is attached to a point and placed in the 3D scene as a textured sprite. Now you're working with Points — light, fast, and easy to multiply.
A single sprite carries one baked image. How that sprite is oriented is the next choice.
Billboard vs card
Sprite mode has a Face camera toggle:
On — billboard. The sprite always turns to face the camera. It's cheap, flat, softens nicely with depth, and scales to millions. Great for particles, sparks, distant crowds, foliage.
Off — card. The sprite holds a fixed orientation and can be tilted using its direction attributes (
@N/@orient). It sits correctly in depth and can take lighting. A little heavier, but it behaves like a real surface in the scene.
Reach for a billboard when you want many cheap, always-facing flecks. Reach for a card when the sprite needs to lie flat on the ground, lean against a wall, or otherwise stay put in 3D.
Many at once
Rasterize bakes exactly one sprite. To fill a scene with them, hand that single sprite to the utility.iterator, which multiplies it into as many instances as you like — each placed, scaled, and rotated however you drive it. A common pattern:
Object → Rasterize (Sprite) → Iterator → a field of instanced impostors
This is how you turn one expensive object into a whole crowd that still plays back in real time.
Billboards shine here: thousands or millions of camera-facing sprites stay smooth where the same count of full geometry would crawl.
Choosing between them
Want the look of 3D but it must sit in one place and refresh with the camera? Use an impostor (Raster + Live).
Want a frozen image you can filter or feed back? Use a Raster bake (Baked).
Want lots of placed, camera-facing flecks? Use a Sprite billboard.
Want a tiltable flat surface in the scene? Use a Sprite card.
| Parameter | Type | Default |
|---|---|---|
input | OneOf([FieldOf(Color), CollectionOf(Crc), Collection]) | — |
mode | String | "Raster" |
face_camera | Boolean | true |
camera | OneOf([Camera3D]) | — |
resolution_mode | String | "Canvas" |
res_width | Number | 1024 |
res_height | Number | 1024 |
res_scale | Number | 1 |
padding | Number | 0 |
fit_padding | Number | 0 |
supersample | String | "1×" |
format | String | "16-bit float" |
premultiply | Boolean | true |
color_space | String | "Linear" |
background | String | "Transparent" |
background_color | Color | rgba(0.00, 0.00, 0.00, 1.00) |
reproject | String | "Live" |
bake_frame | Number | 0 |
strength | Number | 1 |
See also
utility.iterator