# bands (shader module)
`sbl_bands(light, bands, soft, lift)`: steps an amount of light into a few bands with soft edges, keeping `lift` of the light in the darkest band and none where no light arrives. The Stepped light block uses it over the whole frame and the `bandedToon` shader uses it inside a material, so a chosen set of objects can be banded in their own material and the rest of the frame by the block. Include it with `#include "~starterBlocks.blocks.lightBands.bands"`.
# starterBlocks
Ten small, generic style blocks for styleKit so every slot of a look stack has something to play with; installed beside styleKit, they stack and swap exactly like styleKit's own blocks.
Version 1.0.12. Depends on styleKit 1.2.3 and nothing else.
## Install and use
Install **starterBlocks** from ZeroMind (search "starterBlocks" or "starter style blocks"); it brings styleKit along. Installs with several dependencies can be slow (#21420), so give an install time to finish and check `/zero/source` for the package folder. Then:
```luau
local StyleKit = require("~styleKit.StyleKit")
StyleKit.load({
{ block = "flatWash" }, -- Fill
{ id = "ink", block = "depthLine" }, -- Line (from styleKit)
{ id = "paper", block = "plainPaper" }, -- Ground
{ block = "lineBoil" }, -- Time: the wash edge and the ink boil together
})
StyleKit.swap("ink", "sketchLine") -- pencil instead of ink, nothing else touched
StyleKit.swap("paper", "darkBoard") -- chalk on a dark board
```
No material is edited. The package adds its blocks the moment it is installed: `StyleKit.blocks({ package = "starterBlocks" })` lists them.
## The blocks
| Block | Slot | What it does |
|---|---|---|
| `cardSurface` | Surface | Every surface reads as matte coloured card: shine off, light softened, faint fibre on surfaces. |
| `lightBands` | Light | Steps the light into a few flat bands. Whole frame, or inside a material through the `bandedToon` shader. |
| `flatWash` | Fill | Each area of colour as one flat transparent wash with pooled edges, settling into the paper grain. |
| `surfaceDots` | Tone | A halftone dot screen printed on the surfaces, bigger dots in darker places; dots stay on things. |
| `plainPaper` | Ground | Warm white paper with a fine tooth under everything; publishes the shared ground. |
| `darkBoard` | Ground | Chalk on a dark board; publishes the shared ground. |
| `lineBoil` | Time | Lines and wash edges tremble together on the held clock; publishes the shared wobble. |
| `chunkyPixels` | Raster | A coarse grid of big square pixels. |
| `softGrain` | Medium | Soft mid-tone print grain, renewed on the held clock. |
| `vignette` | Medium | Soft dark corners. |
With styleKit's posterize, duotone, depth line and sketch line that is 14 blocks across all ten slots, two or more in Colour, Line, Ground and Medium.
## The gallery
`Gallery.scene` stands every installed block in its own bay: the same props (sphere, box, column, thin rail, checker tile, back wall) and a sign naming the block, its slot and what it does. One StyleStack drives them all, each entry limited to its bay by a world sphere mask, so every block is driven the same way; the Line boil bay adds a depth line so the boil shows. Blocks from packages installed later get a bay when the scene is built again.
## Light bands inside a material
`lightBands` ships the `bands` shader module (`sbl_bands(light, bands, softness, lift)`) and a `bandedToon` surface shader and material built on it. Give chosen objects the `bandedToon` material and they are banded by their own lighting, the same rule the full-frame block uses; put them in a mask group and give the full-frame block `mask = { kind = "group", group = 1, invert = true }` so it leaves them to their material.
## Notes on every block
Each block's README (in its `.styleBlock` folder) says what it gives up in motion and how it treats opaque things, transparent things, particles, sky, fog, skinned characters, foliage and world text. In short:
- Marks on surfaces (paper tooth, card fibre, dots, boil) come from the stack's shared surface coordinates, so they stay on still things under any camera move and slide on moving characters.
- Grain, chunky pixels and the vignette belong to the medium and stay on the screen by design.
- Every block keeps black black and leaves the UI alone; none flashes, and the grain and boil renew at the stack's hold rate (8 per second by default).
- Surface and Light need the deferred renderer's base colour; on the forward path they fall back to brightness alone.
## Version history
**1.0.12 (2026-11-02)**: needs styleKit 1.2.3, which keeps the scene's sun on a block after its shader compiles (a fresh install could draw sun-lit blocks without their sun); no block changed.
**1.0.11 (2026-11-01)**: built on styleKit 1.2.2 (the scene's sun is read every 4 frames and at once when the stack changes, so a raking light follows a moving sun smoothly); no block changed.
**1.0.10 (2026-11-01)**: documentation only: install notes describe how installing works (install from ZeroMind search; installs with several dependencies can be slow) without naming internal ticket numbers.
**1.0.9 (2026-11-01)**: documentation only: the install note says how installing works today (install from ZeroMind search; installs with several dependencies can be slow).
**1.0.8 (2026-11-01)**: Line boil fades its wobble where one cell of its pattern would cover fewer than about 8 drawn pixels (the far ground at the horizon, any surface on the half-resolution low tier): a wobble that changes from pixel to pixel broke lines into dashes and pool edges into rings. Near things, a sphere's rim included, boil as before. Needs styleKit 1.1.4.
**1.0.7 (2026-10-31)**: republished with the engine library upgraded to 9b189b9; no change to the blocks.
**1.0.6 (2026-10-31)**: store listing rewritten for creators; built on styleKit 1.0.8.
**1.0.5 (2026-10-31)**: every block lists its tags in the block list (`zero styleKit list --tag watercolor`); built on styleKit 1.0.7.
**1.0.4 (2026-10-31)**: the dark board keeps an unlit frame black (it laid its board colour over a frame with every light off); the gallery and test leftovers are gone from the world.
**1.0.3 (2026-10-31)**: the dark board keeps the board showing in bright scenes (new `coverage` setting); gallery signs face the visitors and the gallery scene loads standalone.
**1.0.2 (2026-10-31)**: the paper grain fades detail finer than two pixels so it does not shimmer in motion; the matte card softens light without lifting black.
**1.0.1 (2026-10-31)**: the gallery scene, the `bands` module name and this README.
**1.0.0 (2026-10-31)**: first release, ten blocks, the `bands` module, the `bandedToon` shader and material, and the gallery scene.