StaticBluredScreen
UIEffect, so we are NOT continuing development in this repository.
NOTE: This project has been integrated into<< Description | WebGL Demo | Download | Usage | Change log >>
Overview
静的なブラースクリーンを表示します. ポストエフェクト等によるリアルタイムブラーとは異なり、ある時点でのレンダリング結果に対するブラーのみを提供します.
- ブラー処理用のCameraが不要です.
- ブラーは常時実行されません. テクスチャ更新を実行したあと1度だけ実行されます.
- 縮小バッファを利用することで、メモリサイズを小さく抑えます.
- スクリーン | ブラー | ダイアログ1 | ブラー | ダイアログ2 ... のように、重ねて表示できます.
- 激しい動きのあるオブジェクトがスクリーン上にある場合、ブラーテクスチャにズレが発生し得ます.
How To Work?
カメラに対し以下のコマンドバッファを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);
Requirement
- Unity5.5+ (included Unity 2017.x)
- No other SDK
Usage
- Download StaticBluredScreen.unitypackage and install to your project.
- Attach
StaticBluredScreen
component to GameObject. - In playmode, call
StaticBluredScreen.UpdateTexture
. - Enjoy!
Demo
ダイアログを開くタイミングで静的なスクリーンブラーを生成し、アニメーションでフェードイン/アウトするデモです.
シーン内にカメラは1つしかありません.
ダイアログが2つ重なったとき、更にブラーを生成しています.
License
MIT
© UTJ/UCL
Author
See Also
- GitHub Page : https://github.com/mob-sakai/StaticBluredScreen
- Issue tracker : https://github.com/mob-sakai/StaticBluredScreen/issues