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