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

前回に続いてイメージエフェクト記事です。

無限スクロールイメージエフェクト

今回は前回のスクロール処理にアルファブレンドを加えたら面白い表現になりましたという内容です。

まずは成果物から

スクロールをアルファブレンドしたイメージエフェクト_0

スクロールするUnityちゃんの残像が残るちょっとおもしろい表現ができました。

VerticalScrollBlend.shader · GitHub

スクロールは前回の処理そのままなのですが、今回変更したのは以下のアルファブレンドの設定1行です。

Blend SrcAlpha OneMinusSrcAlpha  

イメージエフェクトをアルファブレンドしたらどうなるのか?という疑問から生まれたものでしたが、個人的には意外な結果となりました。

アルファブレンドしたピクセルがフレームをまたいで残っているように見えるからです(実際に残っているっぽい)。

ただ、この状態はEditor > Project Settings > Qualityから、Anti AliasingDisabledにすると起こります。

スクロールをアルファブレンドしたイメージエフェクト_1

このようにデフォルト状態の2x Multi Samplingにすると、

スクロールをアルファブレンドしたイメージエフェクト_2

スクロールをアルファブレンドしたイメージエフェクト_3

アルファブレンドされる前にフレームバッファがクリアされ、先の残像のような表現にはなりません。おそらくアンチエイリアス処理時に何かしているのだと思われます。

FrameDebuggerで確認

描画周りで困ったときはとりあえずWindow > FrameDebuggerです。

Disabled時

スクロールをアルファブレンドしたイメージエフェクト_4

2x Multi Sampling時

スクロールをアルファブレンドしたイメージエフェクト_5

Grab RenderTextureという処理がアンチエイリアス時には実行されています。これは現在表示されているピクセルをRenderTextureへのコピーすることです。

この処理を堺にバッファがクリアされているのだと推測しました。

まとめ

最近は時間があればイメージエフェクトをいじっています。
最終的なプロダクトにするには負荷との戦いは避けれませんが、今は戦うまでの武器集めをしています。

オススメ記事
検証環境