00:00 / 00:00

Persona

Effects

Post-processing over the finished frame. Every effect is a row in the layer list: added from the Inventory's Effects category, switched with its eye, and opening its own parameters below the list when you click it. An effect you never added takes no room in the list, so a scene saved before any of this existed renders exactly as it did

The few things that apply to the whole frame and belong to no single effect — tone mapping, exposure and the LUT — stay in the Stage detail's Look section

Each effect belongs to the scene, so two scenes can put the same avatar through completely different looks

When the Chain Appears

The chain runs on the 3D stage, so effects can be added — and Look shows — once a scene contains a VRM avatar or a 3D object layer

A Live2D-only scene qualifies by default too, because the WebGPU engine composites the Live2D layer into the same chain. Turning on Use Legacy WebGL Engine disables the Inventory's Effects category, with a line saying why, and removes the Look section — unless the scene also contains something three-dimensional. See Rendering Engines

The Chain

Momentary Gimmicks

Stages of the same chain, used differently: switched on for a moment rather than dialled in and left

Look

The Look section holds what cannot be added as a layer or switched off — these are the display pipeline itself, not optional stages on it:

ItemWhat it does
Tone MappingThe display transform — see Tone Mapping and Exposure
ExposureOverall brightness ahead of that transform
Choose LUT…Pick a grading lookup table; an intensity slider follows it
Trigger ShockwaveFire one shockwave — a command, not a state

Order

The chain is fixed — an effect's position in it is not a setting. It matters when two effects interact, which is why bloom haloes a graded frame rather than the other way round:

  1. Depth of Field — first, because it is the only built-in stage that reads scene depth
  2. The Live2D layer, on the WebGPU engine — after depth of field, since flat art carries none, but before every colour stage, so both kinds of avatar are graded as one image
  3. Rim LightOutlineDrop Shadow — the silhouette stages, in that order, so the rim stays inside the band and the shadow casts from both
  4. Chromatic Aberration
  5. BloomDiffusionLUTColor Grading
  6. Pixelate and Subspace Glitch™, which warp where the frame is sampled from
  7. Shockwave, then Droplets — the glass pane sits in front of every screen-space warp
  8. Custom effects, as one group in scene order
  9. Film Grain and Vignette, which stay camera-side of the glass
  10. The selection outline, and the editor chrome above it

Tone mapping and exposure are not stages in this list — they are the display transform, applied to the finished frame on the way out

Rain and snow are missing too, for a different reason: they are not post stages at all but real geometry in the scene. They are already drawn before the chain begins, so every stage above grades them along with everything else

Cost

Post-processing runs a full-screen pass per enabled effect, so the stack is not free. Three settings in Settings trade quality for frame rate:

  • Render Scale sets how large a canvas the whole 3D stage draws into — drop a step and every stage in the chain gets cheaper with it
  • Effects Quality sets the antialiasing these passes and the selection outline use
  • Selection Outline turns off the highlight around a selected 3D model

With every effect off, Persona skips the post chain entirely and renders straight to the canvas — so the cost is only paid by scenes that ask for it

Over the Plugin API

Every value here is one field of SceneEffects, patched with scene.patch and read back on scene.changed. The shape is deliberately flat — one key per effect, no grouping — so a client can walk the whole registry generically. See the SDK reference

Which effects hold a row in the layer list is tracked separately, in environment.effectLayers — a list of built-in effect keys. The two are distinct: enabled is whether the effect is on right now, effectLayers is whether it has a row. Patching an effect on lands its row automatically, so a plugin never has to write both. However the switch arrives — the panel, a hotkey or a patch — the frame ramps over 0.4 s rather than cutting

Custom effects are the exception to the flat shape: they live in environment.customEffects beside effects, as a list rather than a fixed set of keys, because what is installed is only known at runtime

stage.shockwave is the other exception: a one-shot command rather than a stored value

Last updated on September 4, 2026

Tech otakus destroy the world