Non-realtime (=static) screen blur for Unity. Easy to use background for dialogs.
<< Description | WebGL Demo | Download | Usage | Change log >>
静的なブラースクリーンを表示します. ポストエフェクト等によるリアルタイムブラーとは異なり、ある時点でのレンダリング結果に対するブラーのみを提供します.
カメラに対し以下のコマンドバッファを1フレームだけ割り当てています.
縮小バッファを利用してブラーを適用し、出力先RTにコピーしているだけです.
その後、出力先RTをRawImage等で表示させると、ブラーが画面に適用されているように見えます.
ブラーが適用されるのはあくまで縮小バッファであり、レンダリング負荷がほとんどかからないことに注意してください.
// テンポラリRTに対するIDを生成.
int copyId = Shader.PropertyToID("_ScreenCopy");
int blurId = Shader.PropertyToID("_StaticBlur");
// ブラーシェーダを割り当てたマテリアルを生成.
Material materialBlur = new Material(shaderBlur);
// 出力先RTを生成.
RenderTexture rt = new RenderTexture(w, h);
// カメラのレンダリング結果をRTにコピー.
buffer = new CommandBuffer();
buffer.GetTemporaryRT(copyId, -1, -1, 0, FilterMode.Bilinear);
buffer.Blit(BuiltinRenderTextureType.CurrentActive, copyId);
// 縮小バッファを利用して、ブラーシェーダを適用.
buffer.GetTemporaryRT(blurId, w/4, h/4, 0, FilterMode.Bilinear);
buffer.Blit(copyId, blurId, materialBlur);
// 縮小バッファから出力先RTにコピー.
buffer.Blit(blurId, rtId);
// テンポラリRTを解放.
buffer.ReleaseTemporaryRT(blurId);
buffer.ReleaseTemporaryRT(copyId);
// コマンドバッファをカメラに追加.
_camera.AddCommandBuffer(CameraEvent.AfterImageEffects, buffer);
StaticBluredScreen
component to GameObject.StaticBluredScreen.UpdateTexture
.ダイアログを開くタイミングで静的なスクリーンブラーを生成し、アニメーションでフェードイン/アウトするデモです.
シーン内にカメラは1つしかありません.
ダイアログが2つ重なったとき、更にブラーを生成しています.
MIT
© UTJ/UCL