ReadonlynameStable identifier used for lookup, signature hashing, and pass-name keying.
When false, the feature is skipped each frame. Toggling triggers a cached-graph invalidation.
OptionalearlyRuns once per frame across every feature before any feature's update.
Use for things that must mutate camera/uniform state before downstream
features sample it — e.g. TAA's sub-pixel jitter, which has to land on
the camera before geometry-fill passes read jitteredViewProjectionMatrix.
Plain per-frame uniform updates belong in update, not here.
OptionalupdateOptionaldestroyRelease GPU resources.
A unit of rendering work — one or more passes plus the per-frame update and graph-wiring logic that owns them. Features are registered with the Engine at startup (typically via a preset) and drive everything the engine does each frame.
Lifecycle:
setup(engine)— runs once when the feature is added (or when the engine fully initializes if added beforeEngine.createcompletes). Construct persistentPassinstances and stash them onthis.update(frame)— once per frame, after Engine has populatedframewith bucketed draws and updated the camera. Push uniforms to the owned passes via theirupdateXmethods.addPasses(frame)— once per fresh graph build (skipped when the Engine reuses the cached graph). Callpass.addToGraph(frame.graph, ...)to declare resource flow. Most features read from and write back toframe.hdr/frame.gbuffer/frame.shadowMap/frame.aoso other features see the latest output.destroy()— release owned GPU resources.Features should respect
enabled; when false, the engine skips bothupdateandaddPasses.