# rk_concrete
Material for the launch pad in the `fx_launch` scene, where the `launch_fx` Generator runs
`proc/launch.procGraph`, a looping heavy-lift rocket liftoff. Six built-in cubes wear it: the
`apron` slab (64 x 64 m), the two piers (`pier_east`, `pier_west`), the two roofs over them
(`roof_north`, `roof_south`) and the 145 m long `crawlerway` strip.
Shader: the built-in `pbr` shader, the engine's standard physically based material: the glTF
metallic-roughness workflow lit by the shared `pbr_shading` model.
Render state: the defaults (opaque blend, back faces culled, depth write on); mat.yaml sets only the
shader and its values.
## Properties
- `base_color: { r: 0.46, g: 0.45, b: 0.43, a: 1.0 }`: albedo, a light warm grey.
- `roughness: 0.92`: perceptual roughness.
- `metallic: 0.0`: dielectric.
# launch
A heavy-lift rocket's liftoff on one 36 s loop that drives the vehicle, the exhaust, the ground
clouds, the sparks, the heat haze and the light together:
| Graph time (mod 36) | What happens |
|---|---|
| 0 to 3 s | Quiet: the vehicle stands on the mount |
| 3 to 8 s | Countdown: deluge steam bleeds from the trench mouths |
| 10 s | Ignition: a flash, and the engines spool up to full thrust |
| 12 s | The hold-downs release and the vehicle climbs on a pillar of fire |
| 31.5 s | Engine cutoff, with the vehicle 1.3 km up, then the loop starts over |
```lua
-- `graph` is this graph's reference: the AssetRef `asset.resolve` or a search returns for it.
local e = entity.spawn("launch", { position = { 0, 0, 0 } })
e.component.add("Generator", { graph = graph, playOn = "load", ending = "loop" })
```
Its outputs are the vehicle in three materials (`hullWhite` its white body, `hullFoam` its orange
foam-covered core, `hullDark` its dark bands and engines), the exhaust flame (`flameCards`), smoke
and steam clouds (`smokeCards`, `steamCards`), spray off the deluge (`splashCards`), sparks
(`sparkStreaks`), heat haze (`hazeCards`) and two lights (`lightFloor`, `lightPlume`). The timeline has no end and plays at 60 fps. In the Procgen Effects Showcase world, the `fx_launch` scene frames
it with the `LaunchView` component.
# rk_tower
Material for the launch pad in the `fx_launch` scene, where the `launch_fx` Generator runs
`proc/launch.procGraph`, a looping heavy-lift rocket liftoff. 71 entities wear it: the four 96 m
tall tower columns (`tower_col`), the 64 cross members between them (`tower_ring_x`,
`tower_ring_z`), all built-in cubes, and the three `water_tank_band` cylinders around the water
tanks.
Shader: the built-in `pbr` shader, the engine's standard physically based material: the glTF
metallic-roughness workflow lit by the shared `pbr_shading` model.
Render state: the defaults (opaque blend, back faces culled, depth write on); mat.yaml sets only the
shader and its values.
## Properties
- `base_color: { r: 0.55, g: 0.10, b: 0.06, a: 1.0 }`: albedo, a red.
- `roughness: 0.55`: perceptual roughness.
- `metallic: 0.3`: partly metallic.
# rk_steel
Material for the launch pad in the `fx_launch` scene, where the `launch_fx` Generator runs
`proc/launch.procGraph`, a looping heavy-lift rocket liftoff. 20 entities wear it: the four `arm`
beams and the `mast` on the tower, the four mount beams (`mount_n`, `mount_s`, `mount_e`,
`mount_w`), the four frame beams and four legs of the `table`, all built-in cubes, and the three
`water_tank` cylinders (8 m wide, 18 m tall).
Shader: the built-in `pbr` shader, the engine's standard physically based material: the glTF
metallic-roughness workflow lit by the shared `pbr_shading` model.
Render state: the defaults (opaque blend, back faces culled, depth write on); mat.yaml sets only the
shader and its values.
## Properties
- `base_color: { r: 0.32, g: 0.33, b: 0.35, a: 1.0 }`: albedo, a mid grey.
- `roughness: 0.5`: perceptual roughness.
- `metallic: 0.85`: mostly metallic.
# LaunchView
LaunchView frames the launch for every player who joins. The orbit rig normally aims at the player's
head, which keeps the horizon in the middle of the frame. LaunchView raises the rig's aim point a few
metres above the player, so the camera looks up at the plume, the vehicle and the sky.
It is written to sit on the PlayerPrototype's camera rig, so every joining player's own camera gets
it. It works on the `@builtin::controller.orbital_follow` component on its own entity, which the
Camera component attaches. That orbit component can appear after LaunchView's own `start`, so the
value is applied again every frame until the orbit component exists and holds it.
It runs at `executionOrder = -80`, after the orbit rig (-90) has set itself up.
## Fields
| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `aimHeight` | number | 3.8 | How far above the player the orbit rig aims, in metres. |
`aimHeight` is `Sync`.
## Lifecycle
- `start()`: applies `aimHeight` to the orbit component.
- `update(dt)`: applies it again each frame, writing only when the orbit component's `aimHeight`
differs.
- `onPropertyChanged(key, value, oldValue)`: applies it at once when `aimHeight` changes.
# rk_ground
Material for the launch pad in the `fx_launch` scene, where the `launch_fx` Generator runs
`proc/launch.procGraph`, a looping heavy-lift rocket liftoff. Two built-in cubes wear it: the
scene's `ground` (90 x 0.2 x 90 m at (0, -0.1, 260)) and the `viewing_berm` (26 x 5 x 26 m at (132,
2.5, 306)).
Shader: the built-in `pbr` shader, the engine's standard physically based material: the glTF
metallic-roughness workflow lit by the shared `pbr_shading` model.
Render state: the defaults (opaque blend, back faces culled, depth write on); mat.yaml sets only the
shader and its values.
## Properties
- `base_color: { r: 0.10, g: 0.095, b: 0.085, a: 1.0 }`: albedo, a dark brown-grey.
- `roughness: 0.96`: perceptual roughness.
- `metallic: 0.0`: dielectric.
# effectShowcase
The procedural effects of the Procgen Effects Showcase world. Each one is a `.procGraph` that plays
through a `Generator`, and every shader, material and module a graph draws with sits beside it in
this package, so the package carries everything its graphs need. Each graph's README says what it
makes, how to place it and what each of its inputs changes.
## Contents
| Folder | Graphs | What they make |
|---|---|---|
| `combat/` | `impact`, `muzzleFlash`, `tracer` | A round striking a hard surface, the bloom at a barrel as a weapon fires, and the glowing streak of a round in flight. They draw with `fxFlash`, `fxSmoke` and `fxSpark` in `combat/shaders/`. |
| `blast/` | `wall_blast` | A charge blowing a breach through a stone block wall, on a 9.6 s loop. |
| `storm/` | `storm`, `tower` | A thunderstorm around a lone tower: wind-driven rain, lightning striking on the schedule `schedule.module` keeps, and sparks and smoke where strikes land. `tower` is the stone keep it stands around. |
| `rift/` | `arcane_rift` | A rift tearing open in the ground, its motes and rubble moved by the compute shaders in `rift/compute/`. |
| `dragon/` | `dragon_breath` | A dragon's fire breath sweeping a courtyard: a flame jet, rolling smoke and drifting embers. |
| `launch/` | `launch` | A heavy-lift rocket liftoff on one looping timeline, with the heat-haze material `rk_haze_mat`. |
| `waterfall/` | `wf_env`, `wf_water`, `wf_spray`, `wf_foam`, `wf_mist` | A waterfall built in parts: the cliff, basin and boulders, the falling and still water, the droplets, the foam where the falls land, and the mist with its rainbow. Its water materials are in `waterfall/materials/`. |
| `shaders/` | | `fx_noise`, the noise functions the waterfall and wall blast shaders include. |
## Playing one
A graph plays on a `Generator` component bound to it:
```lua
-- `graph` is the graph's reference: the AssetRef `asset.resolve` or a search returns for it.
local e = entity.spawn("impact", { position = { 0, 1, 0 } })
e.component.add("Generator", { graph = graph, playOn = "load" })
```
Set a graph's inputs with the Generator's `params`, e.g. `params = { size = 3 }`.