[UE5] Minimaps and Security Cameras with Render Targets: Putting Camera Footage on UI

Created: 2026-07-25Last updated: 2026-09-07

Display footage from another camera on a corner-of-screen minimap and an in-game monitor. Illustrates Render Target's role, capture range, displaying on UI, and updating on a timer, rearranging the same mechanism as you go.

A minimap in the screen corner shows the surrounding paths. A security monitor on a room's wall shows somewhere distant. They look different, but thinking of both as "pasting footage shot by another camera" means the same mechanism builds them.

What holds that footage is a Render Target . Here we add a minimap viewing the player from directly above to the Third Person template. Once the footage displays, we tune the update frequency and finally apply it to an in-game monitor.

The finished result: a minimap viewing the player's surroundings from above and a security monitor showing a distant place

What You'll Learn

  • The roles of Scene Capture, which captures, and Render Target, which receives
  • Building a minimap that follows the player while keeping the facing fixed
  • What changes when you vary capture range, resolution, and update frequency
  • Displaying footage on an in-game monitor with the same mechanism

This assumes you can add components and connect nodes in Blueprint. UI and material settings are shown step by step. To review the basics, see UMG fundamentals and material fundamentals. The exercise targets single player.

A Render Target is a receptacle for footage

An ordinary texture loads a prepared image. A Render Target is a texture you can write images into while the game runs . Here it receives new scenery on every capture.

The Render Target does not capture by itself. A Scene Capture Component 2D , which plays the camera's role, captures the scene and hands the result to the Render Target. Scene Capture can capture from a viewpoint separate from what the player normally sees.

Scene Capture capturing, Render Target receiving the footage, and UI or an in-game screen displaying it

The roles are "capture, store, display". Stopping capture leaves the last image in the Render Target, so the display becomes a still. Conversely, displaying the same Render Target on several monitors needs no extra capture camera per monitor.

Remembering that division lets you separate "capture is failing" from "the display setting is wrong" when nothing appears.

Sponsored

Attach a capture camera above the player

Build this in a Third Person test level with no roof overhead. Placing a few marker boxes on the ground makes the visible range and orientation easier to confirm later.

Prepare the footage's destination

Right-click in the Content Browser and create "Materials & Textures → Render Target". Name it RT_Minimap , open it, set "Size X" and "Size Y" to 512 , and save.

That gives you a place receiving a 512 by 512 pixel image. Nothing captures into it yet, so no scenery appearing is fine.

Add a Scene Capture to the character

Open the character Blueprint you control ( BP_ThirdPersonCharacter in the standard template). Select "Capsule Component" in "Components", add Scene Capture Component 2D via "Add", and name it MinimapCapture .

Put it under the Capsule Component and not under the Mesh or Camera Boom. We want it to follow the player's position while not following body animation or the control camera's rotation.

MinimapCapture as a child of the Capsule Component, capturing straight down from above the player, with its position and rotation settings

Select MinimapCapture and set the following in "Details". The English names also work in the Details search.

SettingValueIts role here
LocationRelative, X=0, Y=0, Z=1500Puts it about 15 m above the character
RotationWorld, X=0, Y=-90, Z=0Fixes the facing against the world, looking straight down
Projection TypeOrthographicCaptures without perspective
Ortho Width3000Shows a 30 m wide range
Texture TargetRT_MinimapWhere capture results are stored
Capture SourceFinal Color (LDR) in RGBOutputs color footage
Capture Every FrameOnUpdate every frame first to confirm behavior

Choose "World" in the menu beside the "Rotation" label before entering angles. X, Y, and Z are Roll, Pitch, and Yaw, and here we set Y (Pitch) to -90 degrees . Leave "Location" as Relative.

Relative is measured against the parent and World against the world. Only the position follows the parent while rotation stays fixed to the world, so the whole map does not rotate when the player turns.

Capture Source selects "what part of the capture is written into the image". We use Final Color, which bundles brightness and color for display. Rather than memorizing the LDR abbreviation, it is enough to note that it receives the scene's color rather than data such as depth.

Compile and Play, then check RT_Minimap 's preview. To operate the editor during Play, Shift + F1 returns mouse control. Ground and boxes seen from above appearing means capture and destination connect. If it is black, check the Texture Target specification, the capture direction, whether a roof or wall blocks it, and whether the level has lighting.

Separate capture range from image detail

Orthographic is a capture style where object size does not change with distance from the camera. It suits a minimap where you read the layout of paths and buildings from above.

Perspective , common in normal game views, makes distant things smaller. Use it for a security camera and similar, where you want the sense of viewing a place.

To widen the minimap, change MinimapCapture 's Ortho Width rather than the Render Target's size. That is the real-world width fitted into the image. In UE's standard units, 3000 is 30 m and 6000 is 60 m.

Comparing the same 512 by 512 pixels showing 30 m at Ortho Width 3000 versus 60 m at 6000, with the same box appearing smaller

Stop Play, set Ortho Width to 6000 , and try again. Distant boxes become visible and the same box appears smaller on the minimap.

Meanwhile, leaving Ortho Width alone and setting RT_Minimap 's Size X and Size Y to 256 keeps the same visible range while making outlines coarser. Ortho Width is "how far it shows" and the Render Target's size is "how finely it draws". After checking, return to 3000 and 512×512 .

Put the captured footage in the screen corner

Footage now reaches the Render Target. Next we build a material passing its color to UI and set it on a Widget's Image. A Widget is a bundle of UI placed on screen , and an Image is the part within it that displays a picture.

Build a UI material

  1. Create and open a material M_MinimapUI .
  2. In Details, set "Material Domain" to User Interface and "Blend Mode" to Opaque .
  3. Drag RT_Minimap from the Content Browser into the graph to place a Texture Sample node.
  4. Connect Texture Sample's RGB output into the material's Final Color input , then apply and save.
A material graph connecting a Texture Sample reading RT_Minimap's RGB into the User Interface, Opaque M_MinimapUI's Final Color

RGB is the image's color. Opaque means "display without transparency", so we get a square minimap using color alone. We do not connect A (alpha), which represents transparency.

Place an Image in a Widget

Create WBP_Minimap from "User Interface → Widget Blueprint" in the Content Browser with User Widget as the parent. In "Designer", place a Canvas Panel at the root and add one Image as its child.

A 220 by 220 Image placed at the Canvas Panel's top right with M_MinimapUI set as its Brush Image

Select the Image and set the following in Details.

LocationSetting
Slot (Canvas Panel Slot) → AnchorsThe preset pinning to the top right
AlignmentX=1, Y=0
PositionX=-20, Y=20
SizeX=220, Y=220
Brush → ImageM_MinimapUI
Color and OpacityWhite, A=1

Anchors is where on screen it is positioned from and Alignment is which part of the Image aligns to that reference. With this combination, the Image's top right sits 20 left and 20 down from the screen's top right. Compile and save once set.

Display it at Play

Return to the character Blueprint and connect these four nodes in the Event Graph. If Event BeginPlay already exists, continue from that same event. BeginPlay fires when that character's game begins.

Wiring Event BeginPlay into Create Widget and Add to Viewport, passing the Player Controller into Owning Player and the created Widget into Target
  • Exec line: Event BeginPlayCreate WidgetAdd to Viewport
  • Create Widget 's Class: WBP_Minimap
  • Get Player Controller (Player Index=0)'s Return Value → Create Widget 's Owning Player
  • Create Widget 's Return Value → Add to Viewport 's Target

Owning Player specifies which player this UI belongs to. Here we retrieve the first player (Index=0) with Get Player Controller and pass it in.

Create Widget builds the actual thing to display and Add to Viewport puts it on the game screen. Return Value is the reference specifying the created Widget for the next node. The blueprint with an Image placed does not appear on screen by itself during Play.

Playing shows footage at the top right. Walking near a box brings that box toward the minimap's center. The boxes' orientation does not change when the player turns, and rotating the main view with the camera does not rotate the minimap.

Note that this is footage of the scene captured from above . A triangular player icon or markers highlighting enemies do not appear automatically. Characters visible from above are shown, but a mechanism overlaying readable symbols is added separately.

Sponsored

Switch to capturing every 0.1 seconds

With footage displaying, try the update frequency too. Scene Capture renders another viewpoint, so each capture adds processing. Cost varies with how much is shown and the resolution, though, so "two cameras means the whole game is twice as heavy" is not a rule.

A small minimap can meet its purpose without capturing every frame. Here we change to every 0.1 seconds, roughly ten times a second , and compare how motion reads.

Turn both automatic capture settings off

Turn both of these off in MinimapCapture 's Details.

SettingWhat happens when on
Capture Every FrameCaptures every frame
Capture on MovementUpdates when the capture component moves
Stopping both per-frame and movement-based updates and capturing every 0.1 seconds from a timer

Our Scene Capture moves with the player. Turning off Capture Every Frame alone leaves movement-driven updates if Capture on Movement is on. To decide the interval with a timer, turn both off.

Build an event the timer calls

In the character's Event Graph, add a Custom Event UpdateMinimap you can invoke yourself. Drag MinimapCapture from Components into the graph and create Capture Scene from it.

Connect UpdateMinimap 's white exec output into Capture Scene and pass the MinimapCapture reference into Target. Capture Scene tells the specified Scene Capture to "capture once, now".

Then connect Set Timer by Event to the earlier Add to Viewport 's exec output with Time 0.1 and Looping on. Connect UpdateMinimap 's red delegate output into the red Event input.

Starting the timer from the same Add to Viewport and registering UpdateMinimap's red output into the Event input, with UpdateMinimap capturing MinimapCapture

A delegate here is "the specification of an event to call later". White lines carry execution order and red lines register the event for the timer to call — different roles.

Connecting Set Timer by Event 's white exec output into Capture Scene would only capture once, right after setting the timer. Put the repeating logic on UpdateMinimap's white output side as in the diagram. The Add to Viewport in the figure is the same node as in the previous section; there is no need to make another.

Looping specifies repetition. On, it calls UpdateMinimap every 0.1 seconds thereafter. Play, walk, and confirm the minimap keeps updating.

Tune speed, detail, and range separately

Setting the timer's Time to 0.5 once shows the footage following in visible steps. Returning to 0.1 and comparing conveys how update frequency affects the look.

Adjusting capture range with Ortho Width, detail by comparing 512 and 256 resolutions, and smoothness along a 0.1 versus 0.5 second timeline

Fewer updates increase the lag before the latest position appears and make fast motion look stepped. Lowering resolution makes small markers blur together. Rather than deciding "lowering it looks the same", confirm whether you can read what you need at the actual 220 by 220 display size .

When comparing cost, test per-frame capture and timer capture at the same place and viewpoint. Also look at how long one frame takes to draw, such as GPU in stat unit . Halving the resolution quarters the pixel count, but it does not quarter the whole game's processing time. How to read the numbers is covered in performance measurement basics.

Hands-On: display on an in-game security monitor

With the minimap working, the same idea builds a security monitor. What changes is mainly where you capture, how you capture, and what you paste it onto . First capture a corridor in the same test level so you can watch it through a monitor.

A fixed camera capturing a blue character in a corridor and an in-game square monitor elsewhere showing that corridor

Place a fixed capture Actor

  1. Create a Render Target RT_Security with Size X and Size Y at 256 . It is separate footage, so the destination is separate too.
  2. Create a Blueprint BP_SecurityCapture with Actor as the parent, add a Scene Capture Component 2D, and name it SecurityCapture .
  3. Set Texture Target to RT_Security , Capture Source to Final Color (LDR) in RGB , and Projection Type to Perspective .
  4. Set FOV Angle to 90 and turn Capture Every Frame on. We start with a smoothly updating state.
  5. Place one BP_SecurityCapture in the level and adjust its position and angle to look down at the corridor. Play and confirm the corridor appears in RT_Security 's preview.

FOV is the horizontal angle the camera takes in. In Perspective, larger values show a wider area. The Ortho Width used for the minimap does not apply to this capture style.

Build a material for pasting the footage

Create a material M_SecurityScreen with Material Domain Surface , Blend Mode Opaque , and Shading Model Unlit . Turn "Two Sided" on too so the check plane is visible from both sides.

Drag RT_Security into the graph and connect Texture Sample's RGB into Emissive Color . Compared with the UI material, both the material's purpose and where color connects change.

A material graph connecting RT_Security's Texture Sample RGB into Emissive Color on the Surface, Unlit M_SecurityScreen

Unlit displays the specified color without shading from lights hitting the plane. Here we pass the captured color into Emissive Color and use it as the monitor's footage. The final appearance is also influenced by the game view's exposure, so it will not necessarily match the main view's brightness exactly.

Paste it on a plane and confirm

Add "Shapes → Plane" to the level and assign M_SecurityScreen . Set Rotation X to 90 with Y and Z at 0 to stand the plane up and move it to a comfortable height. Keeping it square at first prevents the 256 by 256 footage from stretching. Adjust the plane's size with Scale.

Playing and looking at the plane shows the captured corridor. To also see the player walking that corridor, test from somewhere you can see both the plane and the capture area. Keeping the display plane itself out of the security camera's capture range avoids nested screen-within-a-screen footage.

To reduce the security footage's update rate, build the timer approach from the previous section into BP_SecurityCapture . Start Set Timer by Event from BeginPlay with the Custom Event named UpdateSecurity and Capture Scene's Target set to SecurityCapture . Use Time 0.2 , for instance, with Looping on. Turn both Capture Every Frame and Capture on Movement off here too.

Moving the camera to another room turns it into a device for checking enemies beyond a door in advance. To add more planes showing the same footage, they can share M_SecurityScreen . To show different places, prepare a separate capture camera and Render Target for each.

Sponsored

Bonus: good to know up front

It appears in the Render Target but not on screen

If footage appears in RT_Minimap 's preview, check M_MinimapUI and the Widget side next. Trace, in order, whether Material Domain is User Interface, whether RGB connects to Final Color, whether you chose that material for the Image's Brush, and whether Create Widget and Add to Viewport ran.

If you changed the Image's color or opacity while designing, return them to white and A=1 to check. Our material does not use the image's alpha and displays RGB alone.

An indoor minimap shows only the roof

Scene Capture is a camera too and does not automatically see through ceilings. To exclude specific Actors such as a roof from capture, Scene Capture's Hidden Actors works. When roof and floor are one Actor, though, that hides both, so how you split things must match what you hide.

If all you want is an indoor floor plan and enemy markers, overlaying icons on a prepared map image is another approach. Choose from the information you want to show, based on whether capturing 3D scenery every time is necessary.

Part of the footage is cut off or looks dark

Even with the camera's position and rotation correct, the clipping range deciding how near and far it draws and exposure settings can matter. When ground is cut off in Orthographic, check settings around Near/Far Clip Plane; when brightness does not match, check exposure on both the capture and display sides. Getting basic footage in a lit, open place before moving to your actual stage narrows the cause.

Reduce what does not need capturing

Scene Capture's Show Flags adjust which rendering elements, such as shadows, are included. Disabling things changes the footage itself, though. As with resolution and update frequency, compare one at a time while keeping the markers you need readable.

Summary

A Render Target is a receptacle for footage you can rewrite during the game. Capture with Scene Capture and pass its color to UI or a material, and it serves both a minimap and a security monitor.

Confirm in order: "it appears in the Render Target", "it displays on screen", and "it updates as you walk". Then change capture range, resolution, and update frequency one at a time to choose settings fitting the information you want to show.

Reference: Scene Capture Component 2D, Transform coordinate spaces, Creating and displaying widgets, Capture Scene, Set Timer by Event

Unreal Engine Notes in this section98