Unity を検索

ユニバーサルレンダーパイプラインのパッケージに収録された最新のサンプルを見てみよう

2021年12月8日 カテゴリ: Engine & platform | 10 分 で読めます
Package Samples header
Package Samples header
シェア

Is this article helpful for you?

Thank you for your feedback!

カメラスタッキング、デカール、Renderer Feature を強化した新しいパッケージサンプルに触れて、ユニバーサルレンダーパイプライン(URP)がどのようにレベルアップしたか実感してください。

このコンテンツはサードパーティのプロバイダーによってホストされており、Targeting Cookiesを使用することに同意しない限り動画の視聴が許可されません。これらのプロバイダーの動画の視聴を希望する場合は、Targeting Cookiesのクッキーの設定をオンにしてください。

これらのサンプルを自分のプロジェクトにインポートするには、パッケージマネージャーウィンドウを開き、Universal RP パッケージを選択し、Samples セクションを展開して、Import をクリックします。Assets フォルダーの中に、新しく Samples フォルダーが作成され、URP の機能を紹介するシーンが追加されます。

シーンには、スクリーン空間アンビエントオクルージョンをプロジェクトに追加するなど、基本的な機能が含まれています。また、複数のカメラとカスタムの Renderer Feature を使って砂の道のようなエフェクトを実現するなど、より高度な例も紹介しています。Unity 2021.2 にその一部が含まれていますので、ぜひサンプルをロードしてその内容をご覧ください。

カメラスタッキング

今回ご紹介するサンプルのコレクションには、カメラスタッキングシステムのさまざまな使用例を示したものが含まれています。たとえば、高度な 3D Skybox の例では、オーバーレイカメラを使って、遠くのビルや惑星など、バルコニーからは手が届かない 3D 世界の一部を描くことができることを示しています。

直感的には、ベースのカメラで街並みを描き、その上にオーバーレイカメラでバルコニーを描きたいと思うかもしれませんが、オーバードローを引き起こす可能性があります。代わりに、バルコニーのカメラがベースのカメラとして使用され、Pipeline Asset のステンシル設定は、オーバーレイカメラが、ベースのカメラによってまだ書き込まれていないピクセルにのみ街並みを描くように設定されていることがわかります。

具体的には、バルコニーのカメラはステンシルバッファに 1 という値を指定し、オーバーレイカメラはステンシルバッファの値が異なる部分にのみ描画を行います。この機能を利用するには、オーバーレイカメラの Don't Clear オプションをオフにする必要があります。ステンシルバッファはデプスバッファに埋め込まれているため、デプスバッファと一緒にクリアされてしまうからです。

デカール

デカールプロジェクターは、不必要に高い解像度のテクスチャーを使わずに表面データを作成するのに便利です。これにより、弾痕や塗料を撒いた痕など、よりダイナミックな表現が可能になります。シェーダーグラフの力を借りれば、デカールシステムを活用して多様で複雑な効果を生み出すことができます。

Paint Splat サンプルでは、デカールとシェーダーグラフを組み合わせてプロシージャルなエフェクトを作る方法を紹介しています。デカールのアルファは、デカールのワールド空間での位置に応じた UV 座標を持つノイズテクスチャーをサンプリングして決定されます。

これを実現する最も簡単な方法は、位置ノードの x と y の座標(ワールド空間)を取り、それを UV に使用することです。しかしこの方法では、デカールは Z 平面上でしか適切に投影できないため、かなり制限があります。

そのため、軸がデカールプロジェクターと一致するワールド空間の UV を提供するサブグラフを定義します。これにより、U 軸と V 軸は常にプロジェクターの Transform の X 軸と Y 軸に一致します。

Screenshot

この方法のよくある副作用は、UV がスライドしてしまうことです。特に、プロジェクターが原点から遠く離れたところで回転している場合は、そのようになります。しかしこの塗料を撒いた表現は発生させた後に動き回るものではないので、問題にはなりません。

Proxy Lighting シーンでは、円錐形の表面からの放出の色を変更するためにもデカールが使用されています。このサンプルではリアルタイムの照明は使用していませんが、デカールが使われていることで、表面がスポットライトで照らされているように見えます。

同様に、カプセルの下にデカールを使って影のように見せています。このような「ブロブシャドウ」は、ビデオゲームでよく使われる手法で、リアルタイムのライトやシャドウではコストがかかりすぎる場合に使われます。

これらのエフェクトを実現するうえで、位置ノード (Object モード内)が重要になります。このノードは、デカールプロジェクターのバウンディングボックスの範囲内におけるフラグメントの 3D 位置を返します。

Renderer Feature

カスタムの Renderer Feature が URP のカスタマイズ機能をさらに際立たせています。Renderer Feature サンプルでは、URP がすでに提供している Renderer Feature の使い方や、API を使って独自のエフェクトを実装する方法を紹介しています。

特に Keep Frame サンプルでは、カスタムの Renderer Feature を使用してパイプラインを変更しています。この Renderer Feature は、フレームの終わりに色をコピーし、次のフレームの始まりに再描画します。Camera Clear Flags は URP ではサポートされていないので、この Renderer Feature を使って、ビルトインレンダリングパイプラインの Don't Clear フラグに依存したエフェクトを再現することができます。

Renderer Feature の大きなメリットは、すべてのプラットフォームで動作することです。また、シェーダーグラフと組み合わせて、描画時にフレームの色を変更することもできます。サンプルのシーンでは、フレームの再描画に使われたマテリアルが UV を修正することで、フレームが回転したり縮小したりして、画面上のパーティクルを実質的に旋回させています。

また、Trail Effect という、Keep Frame の Renderer Feature を利用したサンプルもあります。このサンプルでは、メインカメラとは別のカメラで使用するレンダラーに Renderer Feature を追加しています。この「トレイルカメラ」は平行投影で、シーンの下側に上を向いた状態で配置されています。オフスクリーンのレンダーテクスチャにレンダリングされます。

Keep Frame の Renderer Feature では色のデータが失われないようにしていますが、この機能のシェーダーでは、選択したオブジェクトの深度と法線方向を色にエンコードして、レンダーテクスチャに描画しています。赤のチャンネルには深度が、緑と青のチャンネルには法線の情報が格納されています。

これは、雪や砂の面で物体が動いたときの雪や砂の変位をシミュレーションするように、物体に属している頂点を変位させるためにシェーダー上で使用できる「トレイルマップ」です。砂のシェーダーグラフでは、トレイルマップをサンプリングしてぼかし、頂点をずらして法線を再現しています。

今後の予定

この記事で紹介しているサンプルは、Unity 2021.2 リリースで利用できるサンプルのほんの一部です。URP に新機能が追加されていくのに合わせて、今後のリリースでもこれらのサンプルを最新のものにしていきます。

また、これらのサンプルがお客様にとって最も重要なユースケースをカバーしていることを確認したいと思いますので、ご意見やソリューションに対するご要望をフォーラムスレッドで遠慮なくお聞かせください。

Unity 2021.2 のアーティスト向けの新機能については、当社のアーティストによるブログをご覧ください。

著者について

Jonas Mortensen

テクニカルアーティストの Jonas Mortensen は、コペンハーゲン IT 大学で高度なアルゴリズムに関する論文を執筆し、コンピュータサイエンスの修士号を取得した後、最近 Unity に入社しました。彼の技術的なバックグラウンドとアートへの情熱は、現在の Unity での仕事につながっています。現在、彼はユニバーサルレンダーパイプラインの機能とワークフローの改善に注力しています。

Jonas は、スクリプタブルレンダーパイプライン(SRP)の機能をカスタマイズして十分に活用する方法をユーザーに教えることで、知識を習得し、共有することに特に興味を持っています。

 

2021年12月8日 カテゴリ: Engine & platform | 10 分 で読めます

Is this article helpful for you?

Thank you for your feedback!