Unityでポストエフェクトをゲーム要素と連動

WRITER: t.otake
2022/01/24

はじめに:

ポストエフェクトとは、レンダリング結果に効果をかけるエフェクトです
Unityではカメラのオブジェクトを対象にする形で実装が可能で、
デフォルトでも様々な効果が用意されていますが、自作することもできます。

また現在は新しい方法としてPost Processing Stackというパッケージがあり、こちらを利用するとの高品質なエフェクトをオブジェクトの位置やレイヤーで判断して処理することも可能です。
今回は旧来の方法を扱います。

Unity公式:ポストプロセス

今回のサンプルとして
・設定変更で色合い、鮮やかさ、明るさの変更(HSV)
・動作するノイズエフェクト
・二つのエフェクトを重ねる
以上のテストを行います。

環境:

Unity(2018.4.3f1)で実装していきます。
デフォルトとして実装されている Image effect shader の改変をする形で進めていきます。

実装:

プロジェクトを作成して、shaderの効果が視覚的に実感できるようにオブジェクトを配置します。
この時使用するマテリアルは今回あまり関係はないので、Project Create/Material (standard shader) で作成し、ある程度極端な色に調整しておきます。


色相などを変化させるShaderを用意します。
今回はこちらを参考にさせていただきました、ImageEffect用に対応します。
Projectウィンドウから Create/Shader/Image Effect Shader でデフォルトのシェーダを作成して、名前をHsvColorに変更、その中身を以下に書き換えます。
(デフォルトは色反転シェーダが入っています)


作製したShaderを右クリックしてそこから直接Materialを作成します。
Assets/HsvColor.shader という形でファイルが作成されます。

次にカメラを対象に、作成したシェーダを作用させるコードを用意します。

こちらをカメラにAddComponentして作成したマテリアルを設定します。

こちらで設定は完了です、作成したHidden_HsvColorのパラメータを変えることで
マテリアルの値変化による色相・鮮やかさ・明るさの変化テストが行えます

 

同じようにShaderファイルを作成してノイズ用コードも用意します。
こちらの記事を参考にさせていただきました、更新用の_Sizeもパラメータに追加しています。

同じようにCameraFilterにマテリアルを設定しますが、
今度は_Sizeでパラメータを渡して更新する必要があるのでその部分だけ別実装します。
以下のコードを実装し、Cameraのcomponentとして追加してMaterialを設定します。

ノイズ処理用にCameraにComponentを追加していきます。
CamearFilterとNoiseUpdateを追加してNoiseのマテリアルを設定します。

こちらで設定は完了です。
Unityで実行すれば、HsvColorシェーダの値変更も合わせて、
横縞のノイズが走っている画面が作れたと思います。

 

まとめ:

Unityでのポストエフェクトは比較的低コストの実装で画面の見た目を大きく変えることが出来ますが処理負荷は画素数に比例して大きくなるので、多重に処理する場合には注意が必要です。
今回はGraphics.blitを使用する実装方法でしたが、Processingでも様々な画面効果を付与できるので、また試してみたいと思います。


参考・リンク一覧

【Unity】Unityでポストエフェクト入門!二つの実装方法とメリット・デメリットを紹介

ShaderでSpriteの色相をシフトする

【Unity・CG・Shader】通信環境が悪くてノイズが入って乱れまくってる映像風のポストエフェクトシェーダー

t.otake

t.otake

クライアントUnityエンジニア 最近は3Dモデルを動かして遊んでいます。