この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:5
ページ更新者:T
更新日時:2026-06-11 07:29:05

タイトル: SceneCapture2Dを使用して画像を保存・取得する方法
SEOタイトル: Unreal Engine SceneCapture2D 画像取得完全ガイド(Render Target / ExportRenderTarget / Capture Source)

この記事の要点
  • SceneCapture2D Actor + Render Target アセットで別カメラからの画像をテクスチャ化
  • ファイル保存は UKismetRenderingLibrary::ExportRenderTarget で .png / .hdr / .exr
  • 一回限りの撮影なら Capture Every Frame = false + CaptureScene() 手動呼び出し
  • Capture Source で Final Color (LDR/HDR) / Scene Depth / Custom Depth など出力内容を選択
  • 実行時 1 フレームのスクショなら HighResShot コンソールコマンドが最速

SceneCapture2D とは

SceneCapture2D はワールド内の任意の位置に仮想カメラを置き、その映像を Texture2D として取得するための Actor です。プレイヤーから見える映像 (PlayerController のカメラ) とは別経路で画を作るため、以下のような用途で使われます:

  • ミニマップ(真上から見下ろした画像を UI に表示)
  • 監視カメラ / セキュリティモニタ(別の場所のカメラ映像を画面内 TV に映す)
  • ポートレート / プロフィール画像生成
  • Screen Shot 保存(プレイヤーカメラとは独立の高解像度撮影)
  • Reflection 用テクスチャ(簡易な鏡)

基本セットアップ

手順1: Render Target を作る

コンテンツブラウザを右クリック → Materials & Textures > Render Target を作成(例: RT_Camera)。Inspector で解像度(512 / 1024 / 2048 など)と RTFormat を指定:

RTFormat用途
RTF_RGBA8通常用途、8bit / channel
RTF_RGBA16fHDR、16bit float
RTF_RGBA32f科学計算用、32bit float
RTF_R8 / R16f単色用途(マスク等)

手順2: SceneCapture2D Actor を配置

Place Actors パネル → SceneCapture2D をシーンにドラッグ。Detail パネルから:

  • Texture Target = 作成した RT_Camera をセット
  • Capture Source = 用途に応じて選択(後述)
  • Capture Every Frame = 常時更新するか
  • Capture On Movement = 動いた時のみ更新

Capture Source の選択肢

Capture Source内容
Final Color (LDR) in RGB最終ポストプロセス込みの通常画像
Final Color (HDR) in LinearHDR、ガンマ補正前
Scene Depth in R深度値のみ
Device Depth in R非線形デプス
Normal in RGB (DWorld Space)ワールド法線
BaseColor in RGBマテリアルベースカラーだけ
Custom Depth in RCustom Depth 設定済オブジェクト
Custom Stencil in RCustom Stencil 値

Material で Render Target を表示

取得した画像を画面内 TV や UI に映すには、Render Target をテクスチャとして参照する Material を作ります:

[Material - M_MonitorScreen]
Texture Sample
  Texture = RT_Camera
  → BaseColor or Emissive Color

UI で使う場合:
  UMG の Image > Brush > Image = RT_Camera を直接指定

1 回限りの撮影とファイル保存

常時キャプチャは負荷が高いので、写真撮影のように1 フレームだけ撮ってファイル保存する例:

#include "Kismet/KismetRenderingLibrary.h"
#include "Components/SceneCaptureComponent2D.h"
#include "Engine/TextureRenderTarget2D.h"

void AMyActor::TakeScreenshot()
{
    // 1. SceneCapture2D 取得
    if (!CaptureActor || !RenderTarget) return;

    USceneCaptureComponent2D* CaptureComp =
        CaptureActor->GetCaptureComponent2D();

    // 2. キャプチャ
    CaptureComp->bCaptureEveryFrame = false;
    CaptureComp->TextureTarget = RenderTarget;
    CaptureComp->CaptureScene();

    // 3. ファイル保存 (.png)
    FString FilePath = FPaths::ProjectSavedDir() / TEXT("Screenshots");
    FString FileName = TEXT("Capture.png");
    UKismetRenderingLibrary::ExportRenderTarget(
        GetWorld(), RenderTarget, FilePath, FileName);
}

Blueprint 版

[Event Take Screenshot]
1. Set bCaptureEveryFrame (false) → SceneCapture2D
2. Capture Scene                  → SceneCapture2D の関数呼び出し
3. Export Render Target           → Render Target, FilePath, FileName を指定

用途別ベストプラクティス

ミニマップ

  • Capture Every Frame = true(プレイヤー移動に追従)
  • Projection Type = Orthographic(透視ではなく平行投影)
  • Ortho Width で表示範囲調整
  • Show Only Actor List で UI に出したいオブジェクトだけに限定
  • Post Process でアウトライン強調

監視カメラ TV

  • Capture Every Frame = true
  • 低解像度(256x256 程度)で性能確保
  • カメラに小さなノイズマテリアルを重ねるとリアル

キャラ立ち絵 / プロフィール

  • Capture Every Frame = false(一度だけ)
  • 専用シーンに置いたキャラのみキャプチャ
  • 背景は黒一色 or 透過用マスク

高解像度スクショ: HighResShot コマンド

ゲーム内で SceneCapture2D を使わずにプレイヤーカメラ視点の高解像度スクリーンショットを撮りたい場合は、コンソールコマンドが手軽です:

// プレイ中にチルダキー (~) でコンソール
HighResShot 4
// → 4 倍解像度 (4K 等)

HighResShot 3840x2160
// → 解像度直接指定

// 保存先: ProjectSaved/Screenshots/[Platform]/

透過 PNG として保存

背景透過の PNG が欲しい場合は、Capture Source を Final Color (LDR) with Alpha 等にしつつ、Render Target を RTF_RGBA8 + Clear Color にアルファ 0 を指定します:

// 背景透過設定
CaptureComp->bUseCustomProjectionMatrix = false;
CaptureComp->CaptureSource =
    ESceneCaptureSource::SCS_FinalColorLDR;
CaptureComp->bAlwaysPersistRenderingState = true;

RenderTarget->ClearColor = FLinearColor(0, 0, 0, 0);
RenderTarget->bForceLinearGamma = false;

パフォーマンスとコスト

  • SceneCapture2D は事実上もう一個カメラを増やすに等しい → GPU 負荷大
  • 不要な間は Capture Every Frame OFF
  • 解像度を必要最小限に
  • Capture Source = Final Color は最も重い(全ポストプロセス計算)
  • Scene Depth 等の単純出力は比較的軽い
  • Show Only Actor List で対象を絞ると軽くなる

Stereo Capture(VR)

VR 用に左右眼を別個にキャプチャしたい場合は SceneCaptureCube 系か StereoLayer + 2 つの SceneCapture2D。HDR 360 度キャプチャなら SceneCaptureCube

FAQ

Q: Render Target が真っ黒
A: ① Texture Target が未セット、② Capture Every Frame が false で CaptureScene() を呼んでいない、③ Show Only Actors リストに何も入っていない、④ シーン側の Show Flag が無効 を確認。

Q: 保存ファイルが上書きされる
A: ExportRenderTarget の FileName にタイムスタンプを加える。FDateTime::Now().ToString() を使うと良いです。

Q: PNG ではなく JPG で保存したい
A: FImageUtils::CompressImageArrayIImageWrapperModule 経由で JPEG エンコードします。SaveImage 系プラグインを使うのが簡単です。