scenario-unreal-vfx

Installation
SKILL.md

Unreal VFX (Niagara, Chaos destruction, VFX critique)

Expert level means an effect that tells the player the truth (where it hurts, when it is over), costs what its gameplay class allows across the whole world, and is proven by per-thread numbers on the target core count plus captures scored against a written rubric. Python cannot author Niagara emitters or modules (5.8 API): the agent works through templates with a User parameter contract, Material Instances, Effect Types and Dataflow recipes, and escalates the few graph edits as precise GUI requests. If a sibling skill named here is missing from your available skills, ask the user to install it (npx skills add scenario-labs/skills --skill <name>); unattended, proceed from tool schemas and flag the gap.

REQUIRED BACKGROUND: scenario-unreal-expert (channels, review loop, 5.8 traps).

Status (2026-09-24): Unreal is not installed. Offline checks pass (python3 tests/code/unreal-vfx/run_all.py --offline); every in-editor snippet is not yet run in Unreal; job_00_vfx_probe.py answers the [verify] names.

Stance (the expert delta)

  • Gameplay truth first. The boldest edge sits on the collision boundary (missile head, AoE rim) and reads the gameplay number (User.Radius = damage radius), never a hand-matched constant; lingering says "still dangerous" (Keyser #1 [00:09:44], [00:15:21]).
  • Contrast is a screen budget. Near-white core, never pure white; saturation in the fringe; dark saturated halo; contrast highest at the head; a weak projectile gets a hotter core and dark wisps, not a brighter trail (Keyser #3 [00:08:13], [00:12:03]; #4 [00:19:55]). Unexpected white is usually stacked additive duplicates: count spawns before touching color, then back the additive core with an alpha-blended saturated layer (Shishido [00:17:42]-[00:18:14]).
  • Timing is a story. Anticipation rides the character's cast animation (no window: put the interest in the falloff); build-up stops spawning exactly at the hit; the flash peaks on the hit frame ("intensity is not size"); consequences follow causes (flash, then debris and sparks, then smoke); dissipation is shorter than build-up and ends inside the gameplay window. A fast round head strobes: stretch it along velocity and bake motion blur into its texture (Keyser #5 [00:08:13]-[00:09:54], [00:14:34], [00:18:07]; #2 [00:03:31]; Shishido [00:30:00], [00:37:02]).
  • Optimize the world, not the effect. An Effect Type on every system first: Lyra went from 227 to 103 active systems, RT 5.07 to 1.51 ms, same look (Kiraly [00:20:48]). The Effect Type is set per system, never per emitter; secondary emitters get Scalability Mode Self. Read GT, GT Concurrent and RT separately at the target core count [00:05:15], then pick a lever that saves that thread: distance culling stops ticking, not rendering, and the scalability manager pays for the check; cull proxies save the tick, not the RT [00:16:57], [00:18:02]; every GPU system pays an RT dispatch even unseen [00:05:47]. FX budgets only on non-critical types, with fx.Budget.AdjustedUsageDecayRate against oscillation [00:36:50]-[00:37:21].
  • Spawn architecture by class and rate (Kiraly's table [00:45:57]): pool moderate one-shots (Manual Release means Release to Pool), a Data Channel listener for spam, stateless emitters with system state off for simple bursts (footsteps GT 1,387 to 271 us [00:39:24]); NDC and stateless are exclusive; small counts stay on CPU.
  • Destruction cost is active bodies and contacts. Fix in order: rendering (Nanite on the GC, root proxy with the ISM renderer), body count and lifetime (clusters, Remove on Break with random timers and Cluster Crumbling, a per-platform removal multiplier, Tiny Geo), collision (one-way debris, one convex per cluster, boxes under 0.3 relative size), throttles last (Caillaud wPgd1J1Tf70 [00:03:47]-[00:16:18]; Xiao Yue zFiHDRREv7E [00:29:27]).
  • Weapons break walls with strain, not fields. Apply External Strain plus Apply Breaking Linear Velocity scaled by projectile speed, no strain falloff; fields are "heavy and slow" (Van Allen [00:29:29]). Pick one damage model: Material Strength and Connectivity (tune tensile strength on the physical material) or per-level thresholds (tune the array); size-specific is a flag, not a model (Xiao Yue [00:19:54]-[00:20:27]). Heft comes from friction (combine Max) and low restitution; stone density is 2 g/cm3, 2000 is a unit error (Van Allen [00:26:11]).
  • Recipes, not clicks. Templates with exposed parameters and Dataflow graphs with per-asset variables survive art changes and are what an agent reaches reliably (Caillaud t_jyTILDYo8 [00:02:46]).
Installs
80
GitHub Stars
940
First Seen
14 days ago