PhantomCam Change Log

GS_PhantomCam version changelog.

Logs


PhantomCam 1.0.0

Major refactor. The “pick one of N subclass cams” model is replaced by a single GS_PhantomCameraComponent that hosts a composable Body → Aim → Reposition additives → Noise additives stage pipeline. A new channel system scales projects from single-cam through 4-player split-screen co-op without changing the per-cam authoring surface.

Stage pipeline (replaces subclass cams)

  • New IBodyStage / IAimStage / IAdditiveStage interfaces — stages are reflected polymorphic types picked from the editor’s type-picker.
  • Body variants: DefaultFollowBody, OrbitBody, DynamicOrbitBody, LeadingFollowBody, TrackBody.
  • Aim variants: DefaultLookAtAim, ClampedLookAim (plus extensions from gs_performer).
  • Additive variants: CollisionReposition, OcclusionReposition (stub), TugAimListener, TugBodyListener, PerlinNoise, ImpulseNoise.
  • Three staged pose snapshots — m_desiredPose (pre-Reposition), m_stablePose (post-Reposition pre-Noise), m_finalPose (committed).

Retired components

  • ClampedLook_PhantomCamComponent → replaced by ClampedLookAim aim stage variant.
  • StaticOrbit_PhantomCamComponent → replaced by OrbitBody body stage variant.
  • Track_PhantomCamComponent → replaced by TrackBody body stage variant.
  • Their legacy doc URLs redirect to the new stage variant pages via Hugo aliases.
  • AlwaysFaceCameraComponent is unchanged.

Channels and instancing

  • m_enableInstancedChannels master gate on GS_CamManagerComponent. Three authoring tiers (single cam → single-player rig → multi-channel).
  • New CamChannelScope enum (Local / AllChannels / TrueUnique) authored per phantom cam.
  • ChannelStampComponent — runtime plumbing for stamp-walk channel resolution. Author never sees it.
  • Per-channel rig spawning, per-channel target binding via SetChannelTarget(channelId, entity).
  • Cross-channel cinematic dispatch via DispatchCamToCamCore / ReleaseCamCoreDispatch.
  • Active main-view selection via SetActiveChannel / SetActiveCamCore.
  • Channel-aware SettingNewCamOnChannel notification replaces legacy SettingNewCam when instancing is on.

Blend Profiles

  • New asset extension .camblendprofile (registered through PhantomCamDataAssetsSystemComponent).
  • Three new fields on PhantomBlend entries:
    • BlendShapeLinear / Cylindrical / Spherical (powered by the new Orbital Solver).
    • PivotSourceSource / Destination / Shared for cross-cam blend pivot resolution.
    • InheritState — opt-in cam-to-cam pose handoff.
  • PhantomBlend reflected at Version 4 with version converter for pre-v3 and pre-v4 assets.

State Inheritance

  • Universal CamPoseSnapshot pose-handoff struct.
  • Per-body Get / Adopt implementations — Orbit Get-only, DynamicOrbit full ANGULAR+POSITION, LeadingFollow facing-seeded standoff, Track path-project with rejection threshold.
  • Handoff runs before StartBlend so the destination’s body adopts the seed pose before the blend captures source / destination poses.

Mid-blend Interrupt Correction

  • New m_interruptCorrection field on Cam Core (default 0.03).
  • Y-blend correction window between the cam’s snapshot-at-interrupt and the new blend’s natural pose at the velocity-matched curve point.
  • Replaces the legacy BlendFromCore hard-anchor approach.

Group Targets

  • New GroupTargetComponent — weighted-centroid focal entity. Cams point at it like any other target.
  • Centroid modes: WeightedMean / BoundingBoxCenter / BoundingSphereCenter with m_weightBias blend.
  • Orientation modes: Identity / SpreadAxis / WeightedAverageForward.
  • Registered globally via Cam Manager (RegisterGroupTarget / FindGroupTargetByName).
  • Pair with shared TrueUnique cams to trigger OnAllChannelsActivatedSharedCam on collapse.

Tug Fields

  • Three-component decoupled spatial reposition system — CameraTugVolumeComponent, CameraTugSourceComponent, TugFieldProxyComponent.
  • PhysX layer-gated (TugProxyTugField collision-group pair). No central registry.
  • Listener stages TugAimListener and TugBodyListener consume engagements in the Reposition phase.

Noise & Impulse

  • New asset extension .camnoiseprofile — six-axis layered Perlin noise stacks. Starter Telephoto_Mild and Telephoto_Intense profiles ship in gs_phantomcam/Assets/Noise Profiles/.
  • PerlinNoise additive — continuous handheld feel.
  • ImpulseNoise additive — event-triggered burst, ADSR-gated. Fire via TriggerCameraImpulse(strength) on the cam.

Orbit Profiles

  • New asset extension .camorbitCameraOrbitShape with three bands (low / mid / high) and a Roundness power-bulge family slider (diamond → sphere → cube). Arc-length reparameterization for constant spatial speed.
  • Consumed by DynamicOrbitBody.

Camera Input Reader

  • New GS_CameraInputReaderComponent implementing the OrbitInputProvider bus.
  • Per-axis Axis vs Delta style for joystick / mouse handling.
  • ResetPendingInput invariant prevents accumulated mouse delta “bursts” after dormancy.

Influence Fields

  • AddCameraInfluence signature changed — now (sourceEntity, targetEntity, camName, influence). Influences are routed to the channel that owns the target entity; influences whose target isn’t channel-bound are silently dropped.

Orbital Solver (GS_Core)

  • New GS_Core::Math utility — BlendPositionAroundPivot, BlendPoseAroundPivot, ResolveCrossCamPivot. Powers the new blend shapes, DynamicOrbitBody damping, and LeadingFollowBody band response. See Orbital Solver.

PhantomCam 0.5.0

First official base release of GS_PhantomCam.

Cam Manager

  • GS_CamManagerComponent — camera system lifecycle, active camera tracking
  • CamManagerRequestBus / CamManagerNotificationBus
  • GS_PhantomCamSystemComponent — system-level registration

Phantom Cameras

  • GS_PhantomCameraComponent — virtual camera with follow target, look-at, FOV, and priority
  • PhantomCameraRequestBus
  • PhantomCamData — camera configuration data structure
  • Priority-based switching: highest priority active phantom camera drives the real camera

Cam Core

  • GS_CamCoreComponent — reads from the active phantom camera each frame and applies to the engine camera
  • CamCoreRequestBus / CamCoreNotificationBus

Camera Behaviors

  • ClampedLook_PhantomCamComponent — look-at with clamped angle limits
  • StaticOrbitPhantomCamComponent — fixed-distance orbit around a target
  • Track_PhantomCamComponent — follows a spline or path track
  • AlwaysFaceCameraComponent — keeps an entity billboard-facing the active camera

Blend Profiles

  • GS_PhantomCamBlendProfile — asset defining camera transition easing and duration
  • Smooth interpolation between camera positions on priority switch

Influence Fields

  • GlobalCameraInfluenceComponent — global persistent camera modifier
  • CameraInfluenceFieldComponent — spatial zone that modifies camera behavior on entry
  • CamInfluenceData — influence configuration data (offset, FOV shift, tilt)