オフスクリーン描画用RenderTextureの扱い方

最終更新: 2025年10月14日

このページにはベータ版に関する記述が含まれます。

Cubism 5 SDK for Unity R5 beta2およびCubism 5 SDK for Web R5 beta2以降では、オフスクリーン描画に利用するRenderTexture(RenderTarget)を使いまわすことでメモリの圧迫を抑える構造を採用しています。

オフスクリーン描画の流れ

Cubism SDK for Unity および Cubism SDK for Web におけるオフスクリーン描画は以下のような流れです。

RenderTextureの使いまわしの構造

RenderTextureが使いまわしできるモデル構造パターンについて

RenderTextureが使いまわし出来るモデル構造・使いまわし出来ないモデル構造

親のオフスクリーン描画のRenderTextureは子の階層にある全ての描画オブジェクト(Drawable・オフスクリーン描画)の描画が完了するまでRenderTextureを保持し続けます。
このため、オフスクリーン描画が親子階層になっている場合は最大で親子階層にあるオフスクリーン描画の数だけRenderTextureが確保されます。

例えば、下記のような構造のモデルは最大で3つのRenderTextureを確保します。

同一階層にオフスクリーン描画が並列で存在する場合は、その階層で利用されるRenderTextureは1つです。
例えば、下記のような構造のモデルは4つのオフスクリーン描画を持ちますが親子階層になっているオフスクリーン描画が存在しないため、生成及び利用されるRenderTextureは1つです。

これらのオフスクリーン描画が組み合わさった下記のような構造のモデルの場合、親子階層になっているオフスクリーン描画の最大数は3つ(PartA〜PartDの箇所)のため、生成されるRenderTextureの数及び利用される最大のRenderTextureの枚数は3枚になります。

前のフレームで使用されなかった数のRenderTextureを解放する

Unityの場合は、既に作成済みのRenderTextureの中から不要になったRenderTextureのみを解放したい場合は、前のフレームで使用されなかった数のRenderTextureを解放する関数 CubismOffscreenRenderTextureManager.ReleaseStaleRenderTextures() を呼び出すことで行えます。

CubismOffscreenRenderTextureManager.GetInstance().ReleaseStaleRenderTextures();

シーン切り替え時に解放する場合(Unity)

SceneManager.sceneLoaded += OnSceneLoaded();

~~~
private void OnSceneLoaded()
{
    CubismOffscreenRenderTextureManager.GetInstance().ReleaseStaleRenderTextures();
}

この記事はお役に立ちましたか?
はいいいえ
この記事に関するご意見・
ご要望をお聞かせください。