見出し画像

【unity】自作ポストエフェクト導入に四苦八苦する日記【shader graph,Renderer Feature,fullscreen】

前提として私はC#の基礎的な部分しか分からないので、シェーダー関連はなるべくシェーダーグラフに頼って学習コストを抑えたい+一度作ったら使いまわせるようにしたいという方向性で進めていきます。
本noteは解説ではなく、書き進めながら実践しているものなので読みにくかったらごめん。

※ややこしいのでここではポストエフェクト=画面全体にかけるエフェクト全般、ポストプロセス=unityで使えるポストエフェクト機能を指すものとします

ポストエフェクトについて学習

ポストプロセスを使ってエフェクトをかける方法は知っていたが、調整の幅とできる表現を増やしたいと思っていたので学習開始。

〇ポストエフェクトの自作
・カメラにスクリプトをアタッチ、スクリプトで自作したシェーダーを参照する
※全てスクリプトで作成するもの

・Universal Renderer Assetに作ったシェーダーグラフをつける
※シェーダーグラフを使用してノードベースの制作、部分的にスクリプト書く必要があるが直感的に扱える
→unity2022.2以降はFullscreenエフェクトをサポートしてるので手順少なくて済む
→2022.2以前のunityであればRenderer Featureのスクリプトを書く


2022.02以降(fullscreenで手軽に適用)


2022.2以前(別途Renderer Featureを書いて用意しなければならない)


・ポストプロセスの自作(カスタムエフェクトの追加)
→シェーダー+PostProcessEffectSettings+PostProcessEffectRenderer
※unityのポストプロセス機能にカスタムエフェクトを追加する方法、まとまるので管理がしやすいとか一括調整しやすいなどのメリットがあるのかな?


バージョンと出来る事と相談しながら最終的にどの方法を使うか選ぼうと思います。


ポストエフェクト実践

では順番に実践、たまたま2022もインストールしていたのでまずは手軽そうなFullScreenを使うものから。
普段使っているUTSがインストールしているunity2022.3.6にまだ対応していないっぽいので適当にスフィアを置いています。

来たわね~~。グレースケールがかかりました。


同じ要領でグラデ―ジョンをかけてみる、成功!

シェーダーグラフは触り方しか覚えてなくて複雑なものはまだ組めないけどUV座標の調整などで効果のかかる範囲も細かく調整できるんだろうな。


続いてFullScreenが使えない2020版で実践。
Renderer Featureを用意する必要があるのでひと手間増えます。


さて深度情報を取得して色々やってみようとしましたが上手く行かない。
ちょっと詰まってしまったので一旦切り分けて取り組みます。

・2020版で先ほど試したようなグラデなどを実装できるか
・2022版のシェーダーグラフで深度の取得が問題無く出来るか


〇2020年版でシェーダーグラフをポストエフェクトとして適用してみようとしたが上手く行かず。

調べながらなんとか適用できた

とりあえず2020版でもシェーダーグラフを使ったポストエフェクトは使えそう。
ただ一つ気になる点があって動作を確認した後UnityToonShaderを追加しモデル配置を行ってみた所、モデルにマテリアルは反映されているもののUTSのコンパイルがエラーになっていて新しくToonマテリアルを作成できなくなってしまいました。
どうにも噛み合いが悪いみたいで不安要素なのでここはおいおい考えます

色々調べていたのですがUTSのバージョン関係の問題っぽいです。
詳しくは文末の「unity toon shader最新バージョンについて」を参照してください。


上記のシェーダーグラフのアルファをintensityとしてプロパティに出しました。
はじめグラデーションが強すぎて世界飲み込んでてどうしようって感じでしたが透明度弄ればいけるか→インスペクターで触れるようにするかみたいな雰囲気でやってみたら良い感触。
Graph Inspectorからsliderで調整できるように変更したり色々できるね!

後は色のアルファ値を反映させるようにするとかグラデ強度、位置、角度の制御とかマスクとか使えたら必要十分かな!

ついでなので2020で再度深度取ってアウトライン出せないかチャレンジ。

とりあえず深度情報が取れているっぽい?何度か上手く行かなかったのですが原因が分からん!
後はこの深度情報やオブジェクトの法線情報をなんやかんやしてアウトラインにすれば…
…なんやかんやすれば…


ちょっとそろそろ限界かも……休憩します

……


とりあえず撮影処理の土台作りと知識固めは良い進捗。
早くディフュージョンとかブラーとか色々やりたい!


2022年版のfullscreenを使う手法はとても簡単に出来た為、開発環境を2022版に移すか検討。
基本的に問題無さそうなのですが唯一unity toon shaderが2022のLTSに対応していなさそうなことが懸念されます。
ぶっちゃけ一度Renderer Featureを書いてしまえば後はマテリアルの差し替えでエフェクト制御は容易そうなのでFullScreenが使えないとダメって感じでもないのですよね。


リアルタイムでnote書くのめちゃ良いな、情報がごちゃごちゃになって萎えて止めるのを大分防いでくれる。第三者視点読みづらいかもしれないけど。


気付いたら丸3日モデリングしてないし丸10日アニメーション触ってないし丸2ヵ月システムのスクリプト触ってないしやばいわね。


参考



ポストエフェクト式?

法線押し出し式


unity向けのAnime Toolboxではノードでコンポジットできる機能が備わっているのですがアウトラインの生成もできるので参考になりそう、再度プロジェクト開いてチェックしてみます。


unity toon shader最新バージョンについて

最新版のUnity Toon Shaderは下のリンクを参照してください、package managerからgit URL経由で最新バージョンをインストールできます(2024.04現在)

UTSのインストールでエラーが起こっていた理由について端的に言うとバージョン違いでした。
どうやら「unity toon shader URP」などの検索で上位にヒットするUTS/Universalを最新のものと勘違いしておりまあ悩まされていたわけです。

上記リンクのUnity Toon Shader (UTS3)が最新のものになっており、2023.1までのバージョンの中でそれぞれ部分的に対応しているようです。
ドキュメント的には2022のLTSはまだ対応してないのかな?
バージョン周りの話はもはや自信を持ってこれと言えないのであくまで参考程度に…

割と精神的ダメージがでかい…
※この記事も2024.4時点の内容なので未来から閲覧する方は気を付けて

あばばばばばば

この記事が気に入ったらサポートをしてみませんか?