高解像度画像レンダリング開発ガイド
LCC Unity SDK は高解像度画像レンダリング、つまり表示解像度を超えるシーン画像のレンダリングに対応しています。たとえば表示解像度が 1920×1080 の場合でも、LCC Unity SDK は 3840×2160(4K)、2560×1440(2K)、1920×1080(1080p)、1280×720(720P)などの解像度の画像をレンダリングして生成できます。さまざまな解像度の画像をレンダリングすれば、高精細な画像や高精細なビデオを生成できます。以下では、4K 画像をレンダリングして JPG として保存する例を使って、高解像度画像レンダリングを実装する完全な手順を説明します。
手順 1:シーンと GameObject を作成する
Unity で新しいシーンを作成します。Unity はデフォルトで Main Camera と Directional Light を作成します。
Main Camera をセットアップする
Hierarchy ウィンドウで Main Camera を選択し、Inspector ウィンドウでそのプロパティを以下のとおり設定します。

Main Camera のプロパティを設定
LCCManager を作成する
Hierarchy ウィンドウの空の領域を右クリックし、ポップアップメニューから Create Empty を選択して空の GameObject を作成し、LCCManager と名前を付け、その Transform を正規化し、Add Component で LCCManager スクリプトを追加します。

LCCManager GameObject を作成し LCCManager スクリプトを追加
LCCRenderer を作成する
Hierarchy ウィンドウの空の領域を右クリックし、Create Empty を選択して空の GameObject を作成し、LCCRenderer と名前を付け、その Transform を Rotation.x = -90、Scale.x = -1 に設定します。

LCCRenderer を作成し Transform(Rotation.x = -90、Scale.x = -1)を設定
注:
LCCRenderer GameObject の Transform 設定(Rotation.x = -90、Scale.x = -1)は、LCC データ座標系にアライメントするためのものです。座標系アライメントの詳細は Unity SDK の概要 の「LCC データの座標系」を参照してください。
手順 2:高解像度レンダリングスクリプトを書く
HDRecord.cs という名前の新しい C# スクリプトを以下のコードで作成します。
using System.IO;
using System.Collections;
using LCCCore;
using UnityEngine;
public class HDRecord : MonoBehaviour
{
public LCCManager m_manager;
public string m_FilePath;
public Camera m_camera;
private LCCCore.Renderer m_renderer;
private const int HD_WIDTH = 3840;
private const int HD_HEIGHT = 2160;
private const string OUTPUT_DIR = @"G:\output";
void Start()
{
m_manager.SetPlatformType(PlatformType.PC);
m_manager.SwitchRenderPass(ActiveRenderMode.SingleRender);
if (m_camera == null)
m_camera = Camera.main;
m_manager.SetMainCamera(m_camera);
Debug.Log("[HDRecord] 開始、データを読み込み中...");
m_renderer = m_manager.GetRender(this.transform);
m_renderer.Load(m_FilePath, onProgress, onComplete);
}
private void onProgress(float _progress)
{
Debug.Log($"[HDRecord] 読み込み進捗: {_progress:P1}");
}
private void onComplete()
{
Debug.Log("[HDRecord] 読み込み完了、4K 録画モードを有効化...");
float verticalFov = m_camera.fieldOfView;
m_manager.SetRecordMode(true, new Vector2(HD_WIDTH, HD_HEIGHT), verticalFov);
StartCoroutine(CaptureFrame());
}
private IEnumerator CaptureFrame()
{
// カメラが 4K 解像度でシーンのレンダリングを完了するのを待つために少し時間を置く
yield return new WaitForSeconds(10);
RenderTexture tempRT = RenderTexture.GetTemporary(HD_WIDTH, HD_HEIGHT, 24);
RenderTexture preTarget = m_camera.targetTexture;
Rect preRect = m_camera.rect;
m_camera.targetTexture = tempRT;
m_camera.rect = new Rect(0, 0, 1, 1);
yield return new WaitForEndOfFrame();
yield return new WaitForEndOfFrame();
yield return new WaitForEndOfFrame();
RenderTexture.active = tempRT;
Texture2D tex = new Texture2D(HD_WIDTH, HD_HEIGHT, TextureFormat.RGB24, false);
tex.ReadPixels(new Rect(0, 0, HD_WIDTH, HD_HEIGHT), 0, 0);
tex.Apply();
RenderTexture.active = null;
m_camera.rect = preRect;
m_camera.targetTexture = preTarget;
RenderTexture.ReleaseTemporary(tempRT);
byte[] jpgData = tex.EncodeToJPG(95);
Destroy(tex);
if (!Directory.Exists(OUTPUT_DIR))
Directory.CreateDirectory(OUTPUT_DIR);
string timestamp = System.DateTime.Now.ToString("yyyyMMdd_HHmmss");
string filePath = Path.Combine(OUTPUT_DIR, $"HD4K_{timestamp}.jpg");
File.WriteAllBytes(filePath, jpgData);
Debug.Log($"[HDRecord] 4K 画像を保存しました: {filePath} ({jpgData.Length / 1024}KB)");
m_manager.SetRecordMode(false, new Vector2(Screen.width, Screen.height), m_camera.fieldOfView);
Debug.Log("[HDRecord] 録画モードを無効化し、通常のレンダリングを復元しました。");
}
}
注:
- 録画モードは LCC シーンの読み込み完了後 に有効化する必要があるため、
SetRecordMode(true, ...)はonCompleteコールバックで呼び出します。- 録画モードに入ると、SDK は固定解像度と垂直 FOV でレンダリングします。フレームキャプチャ前に数フレーム/数秒待って、シーンが目標解像度でレンダリングを完了していることを確認することを推奨します。
- キャプチャ後、
SetRecordMode(false, ...)を呼び出して通常のレンダリングを復元します。- スクリプトファイル名はクラス名と一致させる必要があります(
HDRecord.csはclass HDRecordに対応)。一致しないと GameObject にアタッチできません。- 例の
HD_WIDTHとHD_HEIGHTは出力解像度を決定し、必要に応じて 2K(2560×1440)、1080p(1920×1080)、720P(1280×720)などに変更できます。OUTPUT_DIRは出力ディレクトリで、書き込み権限のあるパスに変更してください。
手順 3:スクリプトをアタッチしてプロパティを設定する
HDRecord.csスクリプトを Hierarchy ウィンドウの LCCManager GameObject にアタッチします。- Inspector ウィンドウで LCCManager GameObject をスクリプトの Manager プロパティへドラッグします。
- スクリプトの File Path プロパティに LCC ファイルパスを入力します。
- その他のプロパティ(Camera など)は自由に設定できます。空のままにすると、スクリプトは自動的に
Camera.mainを使用します。

HDRecord スクリプトをアタッチして Inspector でプロパティを設定
手順 4:実行する
Game ウィンドウの Play ボタンをクリックします。データ読み込み完了後、スクリプトは 4K 録画モードに入り、1 フレームをキャプチャして出力ディレクトリに JPG 画像として保存します。
この例では、画像を 4K でレンダリングして直接 JPG 画像として保存します。高精細ビデオとして保存したい場合は、連続してキャプチャした高解像度画像をビデオエンコードで高精細ビデオにエンコードできます。
重要な手順
高解像度画像レンダリングを実装するための重要な手順は以下のとおりです。
SetMainCameraでメインレンダリングカメラを設定し、Renderer.Load()で LCC データを読み込みます。- シーンの読み込み完了後(
onCompleteコールバック内)に、SetRecordMode(true, renderSize, verticalFov)で録画モードに入り、目標解像度と垂直 FOV を指定します。 RenderTextureでカメラを目標解像度にレンダリングし、Texture2D.ReadPixelsでピクセルを読み戻し、画像にエンコードして保存します。- キャプチャ後、
SetRecordMode(false, ...)で通常のレンダリングを復元します。
高解像度画像レンダリングの注意事項
- PC/Mac のみ対応。
SetRecordModeは PC/Mac プラットフォームでのみ有効です。 - 録画モードではカメラ焦点距離が固定されます。 録画モードに入ると、SDK は渡された固定解像度と垂直 FOV でレンダリングし、Camera コンポーネントに追従しなくなります。
- 通常レンダリングを適時に復元する。 キャプチャまたは録画の終了後、
SetRecordMode(false, ...)を呼び出して通常の解像度を復元します。さもないと、以降のレンダリングが録画解像度を使い続けます。 - ビデオメモリとメモリのオーバーヘッドに注意。 解像度が高いほど、
RenderTextureとTexture2Dが占めるビデオメモリ/メモリが大きくなります。高解像度レンダリングは高性能な PC デバイスで推奨します。
録画関連 API
LCC Unity SDK は、LCCManager を通じて録画モード API を提供します。LCC シーンの読み込み完了後(つまり onComplete コールバック内)に呼び出す必要があります。
SetRecordMode
// 戻り値: void
public void SetRecordMode(bool isRecord, Vector2 renderSize, float verticalFov)
録画モードを設定します。録画モードでは固定解像度と FOV でレンダリングされ、高精細な画像・ビデオの録画に適しています。
| パラメータ | 型 | 説明 |
|---|---|---|
isRecord | bool | 録画モードに入るかどうか |
renderSize | Vector2 | 録画解像度(幅 × 高さ)。例:(3840, 2160) |
verticalFov | float | 垂直 FOV(視野角) |
使用例:
// 4K 録画モードに入る
m_manager.SetRecordMode(true, new Vector2(3840, 2160), 60f);
// 録画を終了して通常のレンダリングを復元
m_manager.SetRecordMode(false, new Vector2(Screen.width, Screen.height), m_camera.fieldOfView);
注:
- PC/Mac のみ対応。
- 録画モードではカメラ焦点距離が固定され、Camera コンポーネントに追従しません。
- 録画終了後、
SetRecordMode(false, ...)を呼び出して通常のレンダリングを復元します。 - LCC シーンの読み込み完了後に呼び出す必要があります。