日本語版はこちら → README.ja.md
TransitionFX is a lightweight and advanced procedural screen transition system for Unreal Engine 5. It renders high-quality transitions based on SDF (Signed Distance Field) math without using textures, and can be implemented from Blueprints with just a single node.
TransitionFX is designed with the top priority of enabling indie and small-team developers to easily add transition effects to their games after the fact. The goal is to incorporate high-quality transitions into games without requiring a dedicated tech artist and with minimal additional code.
All transition settings — effect type, duration, easing, audio — are consolidated into Transition Preset (Data Asset). From Blueprints, simply pass the preset to the Play Transition And Wait node. Designers can swap presets to change effects without programmers modifying any calling code.
TransitionFX uses Latent Actions for Blueprint nodes, eliminating the need for manual callback functions or flag management. Simply connect logic after the Completed pin for sequential execution. Combined with bHoldAtMax and ReleaseHold, loading screen patterns are also achievable.
The manager runs as a GameInstance Subsystem, persisting state across level transitions. The sequence of Fade Out → Level Transition → Fade In is managed automatically by the plugin. Input blocking and effect pool management are also handled automatically, minimizing interference with existing game code.
- UE 5.5+ Native: Optimized for the latest Unreal Engine features.
- Procedural Rendering: Texture-less SDF-based rendering ensures no degradation at any resolution and automatically corrects aspect ratio distortion.
- Design-First Workflow:
- Data Asset Driven: Manage transition patterns, duration, and curves as reusable "Presets".
- Auto Input Blocking: Automatically handles player input blocking during transitions.
- Pause Support: Works smoothly even when the game is paused.
- Versatile Control:
- Forward / Reverse: Control "Fade Out" and "Fade In" with a single preset using Transition Modes.
- Speed Control: Dynamic playback speed adjustment via
SetPlaySpeed.
- Audio Integration: Synchronize Sound Effects (SFX) with your transitions. The system manages the audio lifecycle, ensuring sounds play on start and stop automatically if the transition is cancelled.
- Event System: Access
OnTransitionStarted,OnTransitionCompleted, andOnTransitionHoldStarteddelegates for precise gameplay logic timing. - Blueprint Support: Includes a Latent Action node (
PlayTransitionAndWait) for clean and easy scripting.
- Engine Version: Unreal Engine 5.5 or later. Earlier versions (5.3, 5.4) are not officially supported.
- Project Type: Works with both C++ and Blueprint-only projects. No C++ coding is required for standard use.
- Rendering: Requires a PostProcess-capable rendering pipeline (Deferred or Forward with PostProcess enabled).
- Platforms: Windows (DX12 SM6). Console and mobile platforms have not been officially tested — SDF-based effects are GPU-bound, so performance on low-end devices may vary.
A ready-to-use sample project is available on the Releases page. It includes the full plugin source and a showcase level demonstrating all 22+ transition effects.
▶ Watch the sample video on YouTube
Requirements: Unreal Engine 5.5, Windows, DirectX 12 / SM6, Visual Studio 2022 (Game Development with C++ workload)
- Download
TransitionFX_SampleProject_vX.X.X.zipfrom the Releases page. - Extract the zip to a folder (avoid paths with spaces or non-ASCII characters).
- Right-click
TransitionFX_Dev.uprojectand select "Generate Visual Studio project files". - Open
TransitionFX_Dev.uproject. When prompted to rebuild missing modules, click Yes. - Once the editor opens, press Play in the
L_ShowCaselevel to explore all effects.
Note: The first launch will compile shaders, which may take several minutes.
- Download the plugin from the release page.
- Place the
TransitionFXfolder into your project'sPluginsdirectory. - Enable
TransitionFXin the editor plugins window.
Right-click in Content Browser > Miscellaneous > Data Asset.
Select the TransitionPreset class and name it (e.g., DA_FadeBlack).
- Effect Class: Select
PostProcessTransitionEffect. - Transition Material: Select
M_Transition_Master(orM_Transition_Iris,M_Transition_Diamond, etc.). - Default Duration: Set duration in seconds (e.g.,
1.0). - Progress Curve: (Optional) Set a float curve to control the ease-in/out of the transition.
- bAutoBlockInput: Set to
Trueto automatically disable player input during the transition. - bTickWhenPaused: Set to
Trueto allow the transition to play even when the game is paused. - Priority: Set the rendering priority (default: 1000).
- Audio: (Optional) Assign a Sound asset to play. Includes Volume and Pitch controls.
Use the Play Transition And Wait node in your Level Blueprint or GameInstance.
-
Fade Out (Forward):
Play Transition And Wait(Preset:DA_FadeBlack, Mode:Forward, Speed:1.0) (Screen stays black after completion) -
Fade In (Reverse):
Play Transition And Wait(Preset:DA_FadeBlack, Mode:Reverse, Speed:1.0) (Effect is removed automatically upon completion) -
Random Play: Use the
Play Random Transition And Waitnode to play a random transition from an array of presets.
You can bind to the following events in the TransitionManagerSubsystem:
- OnTransitionStarted: Fired when the transition begins.
- OnTransitionCompleted: Fired when the transition finishes.
- OnTransitionHoldStarted: Fired when the transition holds at max progress (1.0) (if
bHoldAtMaxis true).
For a detailed guide including loading screen patterns, debug tips, and event usage, see the Quick Start Guide.
The Invert flag flips which area of the screen is covered — it is not the same as Reverse (which reverses playback direction).
All previews below use the Iris effect with
Mode: Forwardto isolate the effect of the Invert flag.
| Invert | Behavior | Preview |
|---|---|---|
| Off (default) | The effect shape covers the screen (closes inward). Standard Fade Out. | ![]() |
| On | The effect shape reveals the screen (opens outward). Inverts the mask. | ![]() |
Tip: To achieve a Fade In without using
Reversemode, setMode: Forward+Invert: True.
The TransitionManagerSubsystem provides several callable functions for advanced control:
- StopTransition(): Instantly stops the current transition.
- ReverseTransition(bool bAutoStop): Reverses the playback direction (e.g., from Fade Out to Fade In).
- SetPlaySpeed(float NewSpeed): Changes the playback speed multiplier dynamically.
- GetCurrentProgress(): Returns the current progress (0.0 to 1.0).
- IsTransitionPlaying(): Returns true if a transition is currently active.
- IsCurrentTransitionFinished(): Returns true if the transition has reached its end state (useful for polling).
Tip for Texture Masks: When importing your mask textures, ensure you uncheck sRGB and set Compression Settings to Masks (no sRGB) or Grayscale for accurate value reading.
Control how the transition progresses over time using the EasingType property in your Transition Preset.
All previews below use the Iris effect to isolate the difference in easing behavior.
Note: The Transition Curve slot will only appear when Custom is selected.
See easings.net for visualization of these curves.
To prevent frame drops (hitching) when a transition plays for the first time, you can pre-compile the shaders using the Preload API.
Problem: Unreal Engine compiles shaders on-demand, which can cause a slight stutter (hitch) the first time a transition effect plays.
Solution: The PreloadTransitionPresets function creates a temporary dynamic material instance to force the engine to prepare the shaders before gameplay starts.
How to use:
Call PreloadTransitionPresets in a safe place like GameInstance Init or Level BeginPlay.
Pass an array of your most commonly used Transition Presets to this function.
// C++ Example
TArray<UTransitionPreset*> MyPresets = { FadePreset, WipePreset };
TransitionSubsystem->PreloadTransitionPresets(MyPresets);This creates dummy materials for a single frame to ensure the GPU is ready.
API Reference:
- Function:
TransitionManagerSubsystem->PreloadTransitionPresets(TArray<UTransitionPreset*> Presets)
If you want to load transition assets on-demand (e.g., during a loading screen) to save memory, use the Async API. It loads the assets in the background, then automatically runs the shader warmup, and finally fires a callback event.
How to use:
- Pass an array of Soft Object References to
AsyncLoadTransitionPresets. - The system will load them in the background and warm up the shaders.
- The
OnCompleteevent fires when everything is ready.
Blueprint Usage: Pass an array of Soft Object References. Connect your logic (e.g., Open Level) to the 'On Complete' delegate pin.
// C++ Example
TArray<TSoftObjectPtr<UTransitionPreset>> SoftPresets = { ... };
TransitionSubsystem->AsyncLoadTransitionPresets(SoftPresets, FTransitionPreloadCompleteDelegate::CreateLambda([]()
{
UE_LOG(LogTransitionFX, Log, TEXT("Assets loaded and shaders ready!"));
}));API Reference:
- Function:
AsyncLoadTransitionPresets(TArray<TSoftObjectPtr<UTransitionPreset>> Presets, FTransitionPreloadCompleteDelegate OnComplete)
- Single transition at a time: Only one transition can play at a time. Starting a new transition will replace the currently active one.
- PostProcess-based rendering: Transitions are rendered as a PostProcess effect. This means:
- The effect is drawn on top of the entire viewport, including debug UI rendered to the viewport.
- UMG/Slate widgets rendered above the viewport are not covered by the transition.
- If you need to hide UI during transitions, use the
OnTransitionStarteddelegate to manually set widget visibility.
- Multiplayer: TransitionFX operates locally on each client. The subsystem runs per GameInstance, so it is inherently client-side. There is no built-in replication or server-side transition control.
- Packaging: The plugin is included in packaged builds automatically when enabled in the Plugins window. Ensure
TransitionFXis listed in your.uprojectfile underPluginsif you manage plugin references manually.
Planned features for future releases. Priorities may shift based on community feedback.
- New transition effects are planned — specific effects are to be determined based on user feedback and creative exploration
- Transition Color per Preset
High— Expose a default transition color property on presets (e.g., fade-to-white) without requiring parameter overrides at every call - UMG Widget-Layer Transitions
High— An alternative rendering path using a full-screen UMG widget, allowing the transition to cover Slate/UMG UI layers - Origin Point Override
Medium— Allow center-based transitions (Iris, Diamond, Tiles, etc.) to expand from a custom screen-space coordinate - Transition Chaining / Sequencing
Medium— A node or data asset that plays a sequence of presets back-to-back - OnTransitionProgress Delegate
Medium— A delegate that broadcasts progress each tick, removing the need to pollGetCurrentProgress() - Simultaneous Transitions
Low— Support for layering multiple independent transitions with a multi-slot manager
- Preset Validation in Editor
High— Warn if a preset has no material or is missing the requiredProgressparameter - Editor Preset Thumbnails
Medium— Auto-generate static thumbnails for TransitionPreset assets in the Content Browser - Blueprint Preset Picker Widget
Medium— A visual dropdown showing available presets with mini-previews - Configurable Pool Size
Low— Expose the effect pool cap (currently hardcoded at 3) via project settings - Shader Complexity Tiers
Low— Simplified material variants for performance-sensitive platforms
- Material Parameter Reference
High— Dedicated doc listing every built-in material's adjustable parameters - Video Tutorial: Getting Started
Medium— Installation, preset creation, and first transition walkthrough - Video Tutorial: Level Transition Workflow
Medium— DemonstratingOpenLevelWithTransitionand the hold-at-max loading screen pattern - Custom Effect Authoring Guide
Medium— Step-by-step guide for creating new SDF materials and wiring them viaITransitionEffect - Example Project / Sample Maps
Medium— Downloadable sample with pre-configured presets and Blueprint examples for common patterns
TransitionFX supports creating your own custom transition effects by implementing the ITransitionEffect interface.
- Create a new C++ class that inherits from
UObjectand implementsITransitionEffect. - Implement the required methods:
Initialize,UpdateProgress,Cleanup,SetInvert, andSetParameters. - In your
TransitionPreset, setEffect Classto your custom class and assign your custom material.
See ITransitionEffect.h and PostProcessTransitionEffect for a reference implementation.
For common questions and troubleshooting, see the FAQ.
MIT License







































