忘年会
今年も無事に忘年会が開かれないことを知ってホッと胸を撫でおろしている皆さんこんにちは。感染者数が激減し、様々な規制や制限が解除されている中、今年はどうなることかと冷や冷やしていましたが良識ある社長で良かったです。できればこのまま来年の飲み会行事も一気に廃止してほしい。
前回の続き
前回の記事でアセットストアで購入した動的にテクスチャを編集できるアセット(Texture Adjustments)を紹介しましたが、今回はその続きになります。
このアセットはアセット名の通り3Dモデルで使用するマテリアルのテクスチャに色々なエフェクトを掛けて編集できるアセットなのですが、実は公開されているAPIを使用すればカメラエフェクトとして利用することもできます。
OnRenderImage
UnityでMonoBehaviourを継承したクラスでは、すべてのレンダリングが RenderImageへの描き出しが完了したときにOnRenderImageがコールバックされます。
このコールバックはカメラにアタッチされているすべてのスクリプトに送られます。
void OnRenderImage(RenderTexture source, RenderTexture destination)
引数のsourceに入力となる画像、destinationに出力先の画像が渡されてきます。
このsource画像をもとにエフェクト加工した画像をGraphics.Blitというメソッドを使ってdestinationに描画して、それが上位へ返却されることでエフェクト加工された映像となります。
public static void Blit(Texture source, RenderTexture dest, Material mat)
つまり、この関数内でsource画像をTexture AdjustmentsのAPIを使って加工すればカメラの映像にエフェクトを付与することが出来るというわけです。
実装してみよう
例えば下の画像に対して、"ぼかし"のエフェクトを加えたい場合
Texture AdjustmentsのAdjust_BlurGaussianクラスをOnRenderImageで使用します。
上のコードのように引数のsourceに対してAdjust_BlurGaussianクラスのApply関数で加工、加工後の映像(adjustTexture)をGraphics.Blitに渡しします。すると・・・
こんな感じ、簡単にカメラエフェクトを実装することができます。
同様にして、
白黒エフェクト
ノイズエフェクト
等々のエフェクトを付与することができます。
また、これらのエフェクトについて
上記のコードのように各エフェクト効果のクラスを生成して、Texture AdjustmentsのRenderAllメソッドに引き渡せば、一度に複数のエフェクトを付与することもできます。
ぼかし+白黒+ノイズのエフェクト
ちなみに各エフェクトのパラメータはInspector上で変更することができます。