Overview
Adds fixed-image obstacles to FxState2D. It creates deterministic, lightweight effects
such as rain sliding over a roof, sparks bouncing from the floor, or smoke stopping at a
wall without introducing a fluid or general-purpose physics engine.
Usage tips
- A common chain is
fx_domain_2d → fx_emitter_2d → fx_force → fx_boundary_response → fx_rasterize. Put the boundary response after forces. - Match the mask dimensions to the FX canvas. Preview
debug_maskto see the exact pixels used by collision tests. - For sparks, start with Bounce, restitution 0.6–0.8, and surface friction 0.1–0.3. For rain, start with Slide and friction 0–0.2.
- Enable Keep Inside Mask for effects contained inside a vessel or cave.
- Chain multiple boundary nodes when different obstacles need different responses, such as sliding on a roof and disappearing on the ground.
Common mistakes
- Particles pass through: per-frame speed may exceed mask thickness. Reduce speed or thicken the mask; this version uses per-frame pixel tests rather than continuous collision.
- Particles react too early at a translucent edge: raise Mask Threshold to 0.7–0.9.
- Stamps are clipped at canvas edges: enable horizontal or vertical wrapping in
fx_domain_2don the required axes. - Particles cannot leave the mask: verify that Keep Inside Mask matches the intended use.
Related nodes
fx_domain_2d— define canvas dimensions and periodic boundariesfx_emitter_2d— emit particlesfx_force— add gravity, wind, and turbulencefx_rasterize— render the post-collision particle state