Loading...
Loading...
Use when a UE5 task involves Niagara or Chaos destruction: a Niagara fireball, projectile trail, impact explosion, muzzle flash, spell, smoke, sparks, debris, Niagara fluids or flipbooks; "Niagara is too expensive", stat NiagaraOverview, Effect Types, pooling, Data Channels, lightweight emitters, VFX scalability; judging an effect's readability, value, color, timing, white blowout or strobing; or a wall that shatters, geometry collection fracture, Dataflow, damage thresholds, floating chunks, debris cost, Chaos Visual Debugger.
npx skill4agent add scenario-labs/skills scenario-unreal-vfxnpx skills add scenario-labs/skills --skill <name>python3 tests/code/unreal-vfx/run_all.py --offlinejob_00_vfx_probe.py[verify]User.Radiusfx.Budget.AdjustedUsageDecayRate| Input | Why it changes the plan | Default when silent |
|---|---|---|
| Platform, frame rate, min-spec cores | per-thread budgets, quality tables | PC 60 fps; cores from scenario-unreal-performance, 4 if unknown (Kiraly) |
| Gameplay numbers (scenario-unreal-gameplay) | radius, speed, damage window, fire rate, max simultaneous, cast animation timing | ask; never guess a radius |
| Camera and environment | read at gameplay distance over the real ground colors | the game's camera and level |
| Style pillars, importance tier | brightness budget: idle, basic, defensive, damaging, game changer, ultimate (Keyser #1 [00:13:08]) | three pillars from the art lead |
| Crowd and destruction scope | copies on screen; walls per level, must-break objects, low-end platforms | worst realistic fight; real time, Nanite on |
| Budgets | no source gives per-effect ms | [added] all Niagara at or under about 2 ms GT + GT Concurrent and 1.5 ms RT at min spec; confirm with scenario-unreal-performance |
job_00_vfx_probe.pyprobe.json[verify]classify_elementsystem_plan| System (examples) | Effect Type | Critical emitters | Secondary (Scalability Mode Self) |
|---|---|---|---|
| Projectile, beam, tracer | NET_OneShotCritical | head | trail, wisps, embers |
| Impact, hit, muzzle flash | NET_OneShotCritical | flash, damage ring | smoke, sparks (split if spammy or GPU) |
| Debris or impact listener (NDC) | NET_OneShot, budget only with decay damping | none | all |
| AoE, status, pickup | NET_PersistentCritical | rim | interior flavor |
| Ambient dust, leaves, rain | NET_Ambient | none | all |
system_planspawn_schedule_verdictstrobe_risk(speed, head length)duplicate_templateuser_parameterscontract_verdictfade_curve_verdictflipbook_playback_verdictTEXTUREGROUP_Effectspremultiplied_checkaudit_vfx_texturesflipbook_checkset_system_propertieseffect_typemax_pool_sizefixed_bounds_checkEFFECT_TYPE_PRESETScreate_effect_typeNO_EFFECT_TYPEaudit_niagaracaps_verdictbudget_verdictstrain_planmesh_watertight_checkenable_break_eventsharden_gcgc_recipe_verdictgc_verdictphysmat_checklive_capture_series.pycapture_agesscore_captures.pysg.EffectsQualityduplicate_spawn_checkreferences/critique.mdstat unitstat NiagaraOverview-statnamedeventsinit_for_performance_baseline()lever_checkbudget_oscillationt.OverrideFPS 60niagara_overview_verdictbefore_afterdestruction_run_verdict| Value | Relative to | Source |
|---|---|---|
| NET_OneShot: 15 per system, about 30 per type, Spawn Only, Kill and Clear, instant cull 0.0 | fire-and-forget, not critical | Kiraly [00:22:26] |
| NET_PickupPersistent: 5 (sight lines), Continuous, Asleep, cull delay 1.0 s | persistent critical | Kiraly [00:24:03] |
| Max Pool Size 32, Prime 0 (defaults); type cap = pool size | per system | Kiraly [00:32:18], [00:33:22] |
| Flipbook 8 x 8 on 1024 = 128 px tiles, end frame 63, bake at 30 fps | baker | Flipbook Baker doc |
| Thresholds 5000 / 500 / 50; strain 50000, radius 100, velocity 500 | quickstart wall | Chaos docs |
| Boxes below 0.3 relative size; 4,000 fragments in 4 levels, about 200 bodies hit | leaf proxies; clustering | Xiao Yue [00:25:51], [00:22:32] |
| Remove on sleep 3 s; removal 5 to 10 s, then a per-platform multiplier | debris | Caillaud [00:10:43], [00:11:24] |
audit_niagaraaudit_gcaudit_vfx_texturescaps_verdictsystem_plangc_recipe_verdictimage_checks| Mistake | What it looks like | Fix |
|---|---|---|
| Hand-matched radius | ring larger than the damage zone | |
| White blowout | flat white blob | count duplicates, then an alpha-blended saturated layer behind the additive core |
| Round head at speed | strobing dots | stretch along velocity, motion blur in the texture |
| Build-up after the hit; smoke before the flash | muddy payoff | spawn schedule: stop at the hit, causes first |
| Shrink-only fade | popcorning cards | opacity fade from mid-life, matched layer colors |
| Effect Type per emitter | embers get the uncullable type | one type per system, Scalability Mode Self |
| Distance culling to cut RT | RT unchanged | |
| Budget without decay | cull, respawn, cull | decay rate, non-critical types only |
| Fixed bounds smaller than the trail | trail vanishes on screen | |
| Destroying the projectile on impact | trail pops off | deactivate, let particles finish |
| Sleep to hold a wall | wakes on a bump | anchor or kinematic bones |
| Default connection graph | floating chunks, corner hinges | Proximity or Bounds Overlap Filtered |
| MSC with a tuned threshold array | tuning does nothing | tensile strength on the physical material |
| Field or strain falloff per bullet | physics spike | strain plus breaking velocity, no falloff |
| Debris profile on the whole GC | player walks through the intact wall | switch broken bones on the break event |
| Sleeping debris that never wakes | solver cost | disable |
| refused (read-only attribute) | |
r.HeterogeneousVolumes.Allowroot_proxy_datasize_specific_dataset_dataflow_assetreferences/expert-notes.mdreferences/procedures.mdreferences/critique.mdreferences/gui-paths.mdreferences/sources.mdscripts/ue_vfx.py