Follow Photo Cameras - Documentation

Version: 1.0.0

Engine: Unreal Engine 5.7

1) Overview

Follow Photo Cameras is a Runtime plugin that spawns one or more cameras to follow a target actor, move around it from dynamic angles, and save PNG screenshots.

It supports:

- Automatic interval capture

- Manual trigger capture

- Smart collision-aware movement

- Performance-friendly capture scheduling

- Exposure/post-process controls

- Cinematic resolution presets

==================================================

2) Requirements and Platform

==================================================

- Unreal Engine 5.7

- Win64 target platform

- Runtime only module

Important: The folder picker uses Windows APIs, so current runtime support is Win64.

==================================================

3) Installation and Setup

==================================================

1. Enable Plugin

2. Restart editor.

3. In a Blueprint graph, search for the nodes:

- Start Cameras

- Stop Cameras

- Take Photo

==================================================

4) Blueprint Node Reference

==================================================

A) Start Cameras

Signature:

Start Cameras(WorldContextObject, ActorToFollow, Settings) -> bool

Behavior:

- Opens folder picker (Windows) to select save location.

- Spawns and initializes runtime camera manager.

- Starts automatic capture if manual mode is disabled.

Returns:

- true if start succeeded.

- false on cancel/failure/invalid actor/world.

B) Stop Cameras

Signature:

Stop Cameras(WorldContextObject) -> int32

Behavior:

- Stops all active FollowPhotoCameras managers in the current world.

Returns:

- Number of managers stopped.

C) Take Photo

Signature:

Take Photo(WorldContextObject) -> int32

Behavior:

- Triggers one capture pass for managers running in manual mode.

Returns:

- Number of photos captured in that trigger.

==================================================

5) Quick Start Workflow

==================================================

Automatic mode:

1. Set bManualTriggerPhotos = false.

2. Call Start Cameras once.

3. Cameras capture every CaptureIntervalSeconds.

4. Optional: call Stop Cameras to stop early.

Manual mode:

1. Set bManualTriggerPhotos = true.

2. Call Start Cameras once.

3. Call Take Photo whenever needed (e.g. key press/event).

4. Call Stop Cameras to finish.

==================================================

6) Settings Reference (Every Setting)

==================================================

--- Cameras ---

CameraCount (default: 1)

- Number of runtime follow cameras to spawn.

- Higher count = more coverage + higher CPU/GPU cost.

bShowCameraActors (default: true)

- If true, camera actors are visible in the world.

- They are excluded from saved photos by plugin logic.

--- Capture ---

ResolutionPreset (default: R2K)

- Select preset output size:

- R1K = 1024x540

- R2K = 2048x1080

- R4K = 4096x2160

- R8K = 8192x4320

- R12K = 12288x6480

- Custom = use ResolutionX/ResolutionY

ResolutionX (default: 1920, used only when preset=Custom)

- Custom width in pixels.

ResolutionY (default: 1080, used only when preset=Custom)

- Custom height in pixels.

CaptureIntervalSeconds (default: 1.0)

- Time between automatic captures.

- Ignored in manual mode.

bManualTriggerPhotos (default: false)

- false: automatic interval capture.

- true: capture only when Take Photo is called.

ShotsPerCamera (default: 25)

- Max number of shots each camera can save.

- Capture manager self-stops when all cameras reach this limit.

--- Capture | Performance ---

bEnablePerformanceMode (default: true)

- Enables spike-reduction behavior.

- Spreads capture workload and supports async compression/write.

MaxCamerasCapturedPerPass (default: 2)

- Max cameras captured in a single pass while performance mode is enabled.

- Lower value = smoother frame time, slower total throughput.

bAsyncPngCompressionAndSave (default: true)

- Compresses and writes PNG files in background worker threads.

MaxPendingAsyncSaveJobs (default: 12)

- Limits queued async save jobs.

- Prevents excessive RAM growth under heavy capture workloads.

--- Capture | Quality ---

bEnableCaptureExposureCompensation (default: true)

- Enables exposure bias for captured output.

CaptureExposureCompensation (default: 0.1)

- Positive values brighten, negative values darken.

- Useful for deep shadows.

bUseLinearToGammaConversion (default: true)

- Applies linear->gamma conversion before PNG encoding.

CaptureOutputGamma (default: 2.2)

- Render target output gamma (typical monitor value).

--- Movement | Smart ---

bEnableSmartCollisionAvoidance (default: true)

- Collision-aware camera placement.

- Helps avoid going inside walls/interior spaces.

- In tight space can move camera closer than MinDistance.

- Teleport recovery is used only for stuck/far abnormal cases.

--- Movement ---

MovementPreset (default: Balanced)

- Preset style for orbit/follow behavior:

- Cinematic

- Balanced

- Aggressive

MovementSmoothness (default: 0.7)

- Higher = smoother movement, softer retargeting.

bEnableCameraLag (default: true)

- Enables lagged follow behavior.

CameraLagStrength (default: 0.35)

- Higher = more lag/trailing.

bAdaptLagToTargetSpeed (default: true)

- Dynamically adapts lag follow rate based on target velocity.

--- Orbit ---

MinDistance (default: 150.0)

- Preferred minimum orbit distance from target.

MaxDistance (default: 1000.0)

- Preferred maximum orbit distance from target.

MinHeightOffset (default: 1.0)

- Minimum vertical offset (Z) from target.

MaxHeightOffset (default: 1000.0)

- Maximum vertical offset (Z) from target.

MinPitchDegrees (default: -10.0)

- Lower bound pitch for orbit placement.

MaxPitchDegrees (default: 25.0)

- Upper bound pitch for orbit placement.

--- Camera ---

FieldOfView (default: 90.0)

- Capture camera FOV in degrees.

--- Effects ---

bApplyPostProcess (default: false)

- Enables custom post process settings for capture.

PostProcessSettings (default: engine struct defaults)

- Custom capture post-process values.

- Important: enable override flags for each field you want applied.

- Level PostProcessVolumes can still blend with the result.

==================================================

7) Performance Recommendations

==================================================

For smooth gameplay while capturing:

- Keep Performance Mode enabled.

- Lower MaxCamerasCapturedPerPass if frame spikes appear.

- Keep async PNG save enabled.

- Use 1K/2K for live gameplay capture; use 4K+ mainly for offline data generation.

==================================================

8) Image Naming and Output

==================================================

- Output folder is chosen at runtime via folder picker.

- Filenames are generated with unique IDs.

- Existing files are not overwritten.

- Suitable for very large image datasets.

==================================================

9) Troubleshooting

==================================================

Issue: I cannot see post-process effect.

- Ensure bApplyPostProcess = true.

- In PostProcessSettings, enable override checkboxes for changed fields.

- Reduce/adjust conflicting level PostProcessVolume intensity.

Issue: FPS spikes during captures.

- Keep Performance Mode on.

- Reduce MaxCamerasCapturedPerPass.

- Reduce resolution or camera count.

Issue: Camera clips into walls.

- Ensure bEnableSmartCollisionAvoidance = true.

Issue: No photos saved in manual mode.

- Ensure bManualTriggerPhotos = true and call Take Photo node.

==================================================

10) Links

==================================================

This Documentation:

https://celestiadominance.com/followphotocameras-documentation

Support:

https://discord.gg/eKPP75a9

Fab Listing:

https://www.fab.com/listings/2bd72128-c47d-4672-a027-2ebbb3940ea3