2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
リンクをコピー
記事をブックマーク
大下岳志氏:続いては、「Custom Post Effect」を作成する方法です。
これは、Renderer Featureという機能と、Shader Graphを組み合わせて実現します。このRenderer Featureは何かというと、URPのレンダーパイプラインにオリジナルの描画パスを追加し、レンダリングの動作に変化を加えられるアセットです。
簡単に言うと、画面にポストエフェクトを加えたり、別のなにかを描画したりできる機能です。この機能も先ほどのCustom Functionのように、普通はコードによって制御するものですが、ひと手間加えることでShader Graphでも扱えるようになります。
Renderer Featureを設定する作業そのものは難しくないのですが、プロジェクトの中の各要素の関連がやや複雑なので、先にその構造をお伝えします。URPで描画パスを追加する時には、プロジェクト設定にあるスクリプタブルレンダーパイプライン設定で指定された、Render Pipeline Asset。さらに、そのRender Pipeline Assetのレンダラーリストに登録されているRenderer Dataというアセットに、具体的な処理が書かれたRender Featureというアセットを追加します。
そして今回は、このRender Featureに特定のマテリアルを参照するように記述して、そのマテリアルのシェーダーに、Shader Graphを使います。この構造を作ることで、Shader Graphによって画面の描画を変化させることができるようになります。
それでは、実際にやってみましょう。前半は、先ほどの構造を作る部分なので、意図がわからなくても、ひとまず手順だけ覚えてもらえればと思います。
最初に、作成、レンダリング、ユニバーサルレンダーパイプライン、レンダラー機能から、新規のRender Featureアセットを作成します。名前は自由ですが、今回はSGRenderFeatureとしました。
続けて、現在のシーンで使われているレンダラーアセットのインスペクターを開きます。レンダラーアセットの場所がわからない場合、プロジェクト設定の、グラフィックス、スクリプタブルレンダーパイプライン設定、レンダラーリストを辿ると見つけられます。レンダラーのインスペクタータブには、Add Renderer Featureというボタンがあり、ここから新たなレンダー機能を追加できます。
こちらに、先ほど作ったSGRenderFeatureを追加しますが、Render Featureには、まだなんの機能も持たせていないので、レンダリングの結果には変化がありません。
次は、Render Featureアセットをテキストエディタで開き、このように内容を書き換え、保存します。この書き換えたあとのファイルも、こちらからダウンロードできるので、直接これを使っても問題ありません。今回は、レンダーパスの順序や、RenderTargetなどの複雑な要素は省略して、レンダリングの一番最後にエフェクトのパスを追加しています。
このファイルを保存後、Unityに戻ると、先ほどのRender Featureにマテリアルをアサインするスロットが追加されました。ここに、Shader Graphを使った任意のマテリアルをセットします。これでやっとポストエフェクトを作る準備ができました。
ひとまず効果の確認のため、シンプルなシェーダーを1つ作ってみます。ポストエフェクトは通常、Unlit Graphで作成します。これは、インスペクターで指定したカラーをそのまま画面全体に出力するShader Graphです。シェーダーアセットのアイコンに、マウスカーソルが乗った状態で新規のマテリアルを作成すると、自動的にそのシェーダーを使ったマテリアルが作成されます。
これをRender Featureにセットすると、画面全体が指定した色に変わります。マテリアルのインスペクターで色を変えると、画面の色も変化することが確認できます。これで、Shader Graphによって、レンダリングの結果が変えられるようになりました。
引き続き、より実践的なポストエフェクトに挑戦してみましょう。そのために、Shader Graphで、この時点で表示されているシーンの映像を取得したいと思います。
まずは、先ほどのカラーを削除し、プロパティにTexture2Dを追加します。このテクスチャのセッティングをGraph inspectorで開き、Referenceに_CameraColorTextureと入力、Exposedをオフにします。
この_CameraColorTextureは、レンダーパイプラインの処理の中で一時的に保存されている「RenderTarget」という画像です。RenderTargetをReferenceに指定することで、Shader Graphの中でそれを扱えるようになります。
これを普通のテクスチャと同じように、Sampler Texture 2Dに接続して、Master StackのBaseColorにつなぎます。これで、シーンのカラーテクスチャを取得し、そのまま出力するという流れができました。
一見、元に戻っただけのようにも見えますが、レンダリングの結果を受け取り、出力しているので、この間にいろいろな処理を挟むことで、出力結果をアレンジできるようになっています。
例えば、このようにPosterizeノードを間に挟むと、画面全体の色を指定の数に減らせます。また、ノードの数は少し増えますが、取得した_CameraColorTextureのUVをわずかにずらしたものを作り、元のテクスチャとの色の差分を取り出すことで、輪郭を抽出することもできます。
もちろん、これに最初のカラーテクスチャを乗算して、アウトラインとして使うことも可能です。輪郭抽出にはいろいろ方法があるので、試し甲斐があると思います。
また、先ほど紹介したCustom Functionもポストエフェクトに使えるので、ブラーなど、標準機能にない効果を実装することもできます。
最後に、Sub Graphの機能を紹介します。Sub Graphは、複数のノードで作られたネットワークを、1つのノードにまとめられる機能です。先ほどのCustom Functionがコードを用いてゼロから新しいノードを作る機能であるのに対し、既存のノードを組み合わせて新しいノードを作る機能と捉えてもよいかもしれません。
Sub Graphは、Shader Graphと同じように、作成メニューから作ることもできますが、編集中のShader GraphからSub Graphにしたい箇所だけ選択し、コンバートすることでも作成できます。いずれの方法でも、Sub Graphは独立したアセットになるので、別のShader Graphや違うプロジェクトへの持ち込みも簡単です。
Sub Graphは、プロパティで入力を、Output Nodeの項目で出力する値をそれぞれ設定することで、このように普通のノードと同じような感覚で使えます。
また、プロジェクトにあるSub Graphは、標準のノードと同じようにメニューから呼び出せるので、スムーズに作業を進められます。
最初に作ったCustom Functionも、毎回設定を作り直すのは面倒ですが、このようにSub Graphにしてしまうと、その手間が省けます。Sub Graph自体は、従来からあった機能ですが、古いバージョンでは少し使いにくいものでした。
現在のSub Graphは、さまざまな改善が行われ、このように非常に使いやすいものになっています。特に、同じ工程をいろいろな箇所で使う場合に非常に便利なので、ぜひご活用ください。
Custom Function、Renderer Feature、そしてSub Graphを活用すると、個々のマテリアルから画面全体のアレンジまで、今まで難しかった描画表現のほとんどをアーティスト自身で簡単にカスタマイズできるようになります。今回紹介した機能と、サンプルコードを使って、ぜひ、いろいろな表現に挑戦してもらえればと思います。
(次回へつづく)
関連タグ:
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略