Gaffer — Changelog
v0.1.0 — Initial Release
Added
Core Architecture
- Two-module structure:
Gaffer(editor data model) andGafferEditor(Slate UI and sequencer bridge) GafferTypes.hwith enumsEGafferKeyMode,EGafferInterpMode, andEGafferTrackTargetGafferKeyframeStateshared state object carrying key mode, interpolation mode, track target, and auto-key flagFGafferActorRegistrysingleton for registering actor classes and property setsGafferPropertySetbase class withAddProperty,RemoveProperty, andGetPropertiesGafferTagRegistrykeyed by actor GUID with add, remove, query, and enumerate operationsGafferBulkActionsstatic class with batch key, reset, group assign, tag, and Sequencer select operations
Actor Tree
- Filterable and searchable actor tree listing cameras, lights, and environment actors by category
- Group filter dropdown to show only actors belonging to a named group
- Tag filter dropdown to show only actors carrying a specific tag
- Context menu on actor rows: Groups submenu (Add to / Remove from), Tags submenu (Add Tag / Remove Tag), Working Set actions
- Multi-selection with Property Matrix activation
Camera Inspector
- Eight keyframeable properties: Focal Length, Aperture, ISO, Shutter Speed, Exposure Compensation, Focus Distance, Sensor Width, Sensor Height
- Collapsible Advanced section with Blade Count
- Status row displaying 24×24 class icon, actor label, and green Bound pill when actor is in an active sequence
Light Inspector
- Base properties for all light types: Intensity, Attenuation Radius, Color (interactive HSV picker), Use Temperature toggle, Temperature
- Conditional Shape section adapting to light type: Spot (Inner / Outer Cone Angle), Point (Source Radius), Rect (Source Width / Source Height), Directional (Light Source Angle)
- Collapsible Advanced section with Indirect Lighting Intensity, Volumetric Scattering Intensity, and Casts Shadows toggle
Keyframing
SGafferKeyframePropertyRowper-row widget with left circle indicator and right diamond key buttonGafferSequencerBridge::KeyPropertyintegrating with the Sequencer / MovieScene APICurrentFramemode: keys at the Sequencer playheadFirstFrameOnlymode: keys at frame 0 regardless of playheadMatchingValuemode: updates existing keys whose value matches the current property valueAllSelectedmode: keys all tree-selected actors in a single operationCubicinterpolation via auto-spline tangentsLinearinterpolation via straight-line tangentsConstant(step/hold) interpolationFirst,Last, andSelectedtrack targeting strategies- Auto-key toggle: keys every
OnValueChangedevent automatically without a button press - Keyframe settings bar above the inspector with dropdowns for key mode, interpolation, track target, and auto-key toggle
SGafferInspector::BuildStatusRowandBuildKeyframeSettingsBarshared across camera and light inspectorsSGafferInspector::AutoKeyPropertycheckingbAutoKeyEnabledbefore delegating to the bridge
Groups
- Named actor groups stored in
GafferGroupRegistry - Group color swatch for visual identification in the tree
- Per-group Intensity Scale multiplier applied to all lights in the group
- Per-group Temperature Offset (Kelvin) applied to all lights in the group
- Per-group Color Tint multiplier applied to all lights in the group
- Inline group editor in the inspector panel when a group row is selected
- Context menu Add to Group / Remove from Group submenus
Tags
- Floating tag input dialog (
SWindowwith a single text input field) replacing hardcoded tag names - Per-actor tag assignment stored in
GafferTagRegistrykeyed by actor GUID - Tree filtering by tag via the Tag filter dropdown
Working Sets
- Named saved selections of actors
- Save current tree selection as a named Working Set
- Recall a Working Set to restore the selection
- Delete Working Sets from the Working Sets bar
Smart Filters
- Filter actor tree by class, tag, group, or custom criteria
- Filters compose: class + tag + group filters apply simultaneously
Property Matrix
- Multi-actor property editing activated when two or more actors are selected in the tree
- Shared editing across heterogeneous actor types (common properties shown, type-specific properties hidden)
Coverage Map
- Visual overview of which actors in the tree have at least one keyframe in the currently open sequence
- Per-actor coverage row showing keyframed properties as colored spans across the sequence timeline
Environment Presets
- Save current environment lighting configuration (sky light, atmospheric, fog settings) as a named preset
- Load a saved preset to restore all environment settings at once
- Delete and rename presets
Light Rigs
- Named grouped light setups with stored actor transforms
- Apply a rig to snap all grouped lights back to their stored transform positions
- Store current transforms into an existing rig
Custom Class Registration
FGafferActorRegistry::RegisterClassto add anyAActorsubclass to the tree with a category label and iconFGafferActorRegistry::RegisterPropertySetto associate aUGafferPropertySetsubclass with a registered actor classUGafferPropertySetbase class withGetPropertiesvirtual override for declaring custom keyframeable properties
Code Quality
- All event bindings use
AddSP(shared pointer safe delegates) — no rawthiscaptures FScopedTransactionplaced outside loops for correct undo batching- Context menus built via static
BuildContextMenufunction with full actor selection to avoid unsafe casts GafferPropertySet::AddPropertycallsModify()to correctly dirty the owning object