ScreenPocket - 画面の隙間

Unityエンジニアの日々の雑記。たまにpython3とDirectXも触ります

OnRenderImage()を定義するコストについて

ふと、OnRenderImageの第1引数をデバッガで参照した時にこんな記述が、

f:id:ScreenPocket:20160526022220p:plain

「ImageEffects Temp」…? ふむ、定義した覚えのないRenderTextureですが、Unityちゃんが自動で定義してくれたんだろう。

 

ん?ということは、OnRenderImage()を定義しただけで負荷が増すということか??

 

ということで調べてみました。

☆OnRenderImage()を定義していない場合
FrameDebug
f:id:ScreenPocket:20160630001103p:plain
プレーンなプロジェクトなので画面クリアだけ

Profiler-Memory-Detailed
f:id:ScreenPocket:20160630001218p:plain
RenderTextureは1枚

☆OnRenderImageを定義した場合

FrameDebug
f:id:ScreenPocket:20160630001220p:plain
なんか描画パス増えてる。

Profiler-Memory-Detailed
f:id:ScreenPocket:20160630001219p:plain
RenderTextureに ImageEffects Temp が2つ増えてる。 2つ!?(AA用?)

という事で、OnRenderImage()を定義しただけで、
・描画パスが増える
・RenderTextureが2つ増える(多分大きさは画面サイズに依存)
ようです。これってモバイル系だと結構無視できない負荷に思えます。

これがモバイルでも同じように動いているなら、特に必要ないようであればOnRenderImage()は定義しないほうが良さそう。

『そんなこと言われたって、スクリーンをキャプチャしなきゃ、色々なスクリーンエフェクトをかけられないじゃないか!』

 …という方はOnRenderImage()ではなく、OnPostRender()でScreen(フレームバッファ)の画像をRenderTextureにコピーすれば良いかと。