こんにちは、Unityエンジニアのオオバです。

RenderTexture(レンダーテクスチャ)を使ってますか?

RenderTextureを使いこなすと、
Unityでの表現方法が爆上がるため
ぜひ覚えておきたい機能のひとつです。

👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

RenderTextureとは?

そもそもRenderTextureとは何でしょうか?
RenderTextureを簡単にまとめると。

カメラに写っている画像を、
そのままテクスチャとして使うことができる
特殊なテクスチャです。

では、RenderTextureは
どういう場面で使われるのでしょうか?

RenderTextureの用途

このようにカメラの映像に対し何かをするとき、
映像の後加工(ポストエフェクト)にRenderTextureを使います。

RenderTextureはメモリを消費しがち

RenderTextureはランタイムで、
テクスチャを確保します。

画面全体を覆う表現をする場合、
その端末解像度分のメモリを使用します。

最近のスマホは解像度が高く、
画面全体を覆うRenderTextureを生成すると、
メモリを多く使用することになります。

RenderTextureのメモリ解放方法は、
正しく知っておきましょう。

2種のRenderTextureのメモリ解放

この2種類どちらを使った方が良のでしょうか?
メモリを解放する

DestroyせずReleaseを使って、
再利用可能にしておくのが
良いのではないかという予測が立ちます。

実機iPhone6sと接続したUnity Profilerで、
CPU負荷を計測してみます。

上記のRenderTextureを1枚。

上の4種のメソッドをプロファイリングした結果がコチラ。

処理GC Alloc処理時間
生成(new)4.9KB6.82ms
Blit0B0.122ms
Release0B0.04ms
Destroy0B0.03ms

ヒープメモリを確保するため、
生成には5KBほどGC Allocが計上されています。
処理時間も6msと負荷は高めですね。

Release、Destroyの負荷はほぼかかりません。

結論 RenderTextureは使い回す

この数値から考えると、
生成回数は最小限にとどめてReleaseとBlitを
繰り返すというのが良いです。

具体的にはコチラです。

未解決な部分

試しにRenderTextureを2枚目の生成をした結果がコチラです。

処理GC Alloc処理時間
RenderTexture生成(Destroy後2回目)64KB0.09ms

処理時間、メモリ使用量ともに激減しています。
この理由を知っている方、教えてください。わかりません。

以上

オススメ記事
検証環境