Unity を検索

HDRP と URP に対応した新しい Unity Terrain Demo シーンを体験しよう

2022年2月18日 カテゴリ: ゲーム | 18 分 で読めます
Unity Terrain Glade
Unity Terrain Glade
取り上げているトピック
シェア

ゲームを裏方として支えるテクニカルアーティストの話や、有機的なゲーム環境を作り出すためのベストプラクティスを聞いてみましょう。

ゲームのために現実感あふれる環境を作るのは、大変な作業です。 そのため、Unity 2021.2 TECH ストリームリリースでは、新しい地形スタンプブラシ、洗練されたマテリアルペインティングコントロール、地形のディテールの GPU インスタンス化機能、SpeedTree の統合など、数多くのアップデートを導入し、地形制作時の体験を向上させました。さらに開発にスムーズに入っていけるように、無料の Terrain Sample Asset Pack をアップデートしました。 その裏側では、テクニカルアーティストのチームが、PC やハイエンドゲーム機向けの Unity の HD レンダーパイプライン(HDRP)を使って、まるで現実の世界のように見える環境シーンの制作と最適化を行い、クロスプラットフォームに対応するために Unity のユニバーサルレンダーパイプライン(URP)に移行する作業を行っていたのです。今回は、新しい Unity Terrain URP Demo sceneHDRP Demo scene に合わせて、ヒントやコツ、ベストプラクティスをまとめてお届けします。

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

テクニカルアーティストの紹介

Xiaoxi Liu

皆さん、こんにちは。私の名前は Xiaoxi Liu です。2018 年に Unity に入社し、地形システムからシェーダーグラフまで、Unity の機能やアーティストのワークフローの改善に注力するテクニカルアーティストとして働いています。余暇には、とても活発な 4 歳の息子とアウトドア活動を楽しんでいます。

Barrington Campbell

こんにちは、私の名前は Barrington Campbell です。私は 2019 年にインターンとして Unity に入社し、2020 年にフルタイムのテクニカルアーティストになりました。Unity では、ツールの開発やユーザーのワークフローに特化して、地形システムの強化を目指してきました。仕事以外では、タイムアタック用の車を組み、週末にレースに出るのが趣味です。

有機的な環境シーンを作り出すためのヒントとコツ

最新の地形ツールを使った世界観の構築

Terrain Tools パッケージは、当初 Unity 2021.2 TECH リリースで検証済みとなっていましたが、現在はパッケージマネージャーとワールドビルディング関連の機能セットからプロジェクトにインストールできるようになっています。このパッケージには、アート志向の地形ペイントブラシやユーティリティーツールが追加で搭載されており、世界観構築のプロセスを加速してくれます。

Unity Terrain Satellite

DCC からのラウンドトリップ

Terrain Demo プロジェクトのプリプロダクション段階で、Unity のテクニカルアートチームは、ハイライトすべきいくつかの重要な要素を絞り込み、最終的に地形の詳細なハイトマップと密集した葉のカバーを優先しました。

Gaea というプロシージャルな地形生成ツールを使って、高解像度のハイトマップとスプラットマップを生成し、続いて Toolbox でこれらのマップをエディターにインポートしました。地形のハイトマップについては、Import Heightmap ツールを、Unity の 4x4 タイルの地形に 4,000 単位のスケールで適用しました。Import Splatmap ツールを使って、タイル状になった地形にスプラットマップを適用しました。このプロセスは、Gaea から Unity 地形ツールへの基本的なラウンドトリップのワークフローを提供する私たちのプロジェクトを作成するときに決定されました。 

Unity にインポートした初期段階で、すでに非常にしっかりとした地形の表面ができあがりましたが、手動でペイントしたい部分も残っていました。

ハイトマップスタンプで描く

Stamp Terrain ブラシは、地形の高さ情報を素早く適用し、リアルな外観を生み出すための素晴らしいツールです。Terrain Sample Asset Pack にすぐに使えるハイトマップが収録されていますが、DCC から独自のハイトマップを生成することもできます。

Terrain Layer マテリアルを使ったペイント

すでにご存じかもしれませんが、Unity の地形マテリアルは、Terrain Layer アセットによって構築されています。Paint Texture ブラシを使えば、シーンビューでマテリアルを選択して切り替えることができます。一方、Terrain Tools パッケージの Brush Mask Filters や最近改良されたユーザーインターフェースを使えば、より少ない労力で素晴らしい結果を生み出すことができます。  

たとえば、Slope フィルターを追加することで、描画領域を制限することができます。まず、草のマテリアルレイヤーを地形の側面に適用し、Concavity フィルターを使って土壌のレイヤーを曲面に拘束します。他のフィルターを無効にして 1 つのフィルターを分離したり、必要に応じてフィルターを組み合わせることもできます。

パッケージには侵食やノイズエフェクトなどの表現ができるスカルプトブラシが追加されており、地形構築のフローに統合することで最適な結果を得ることができます。

密集した植生で地形を覆う

Unity 2021.2 以降、Unity の地形ツールは GPU のパワーを活用して、インスタンス化されたディテールをサポートする植生を大量にレンダリングできるようになりました。これは、草や茂みなど、葉が密集している部分の表現に有効です。

Unity Terrain Lake

ほとんどの PC プラットフォームでは、何百万ものインスタンス化されたディテールを 60fps をはるかに超える速度でレンダリングすることができます。たとえば Demo シーンでは、視角によっては 5,000 万個以上の三角形がレンダリングされることがあります。インスタンシングを有効にするには、Edit Details Mesh で、Use GPU Instancing のボックスをチェックします。

インスタンス化されたディテールを使った高度なシェーディング

インスタンス化されたディテールでは、カスタムのマテリアルを使用することができます。これは HDRP や URP を使用する際の大きなメリットとなります。最高の制作体験を得るために、シェーダーグラフを使って草のマテリアルを作ることをお勧めします。TerrainGrass.shadergraph を詳しく見てみましょう。 

シェーダーグラフに最近追加されたカスタムインターポレーターのサポートにより、頂点ステージでの頂点計算をより高いパフォーマンスで実行できるようになりました。今回のプロジェクトでは、頂点ステージを利用して風のアニメーションを行ったり、カメラからの距離に応じて色やアンビエントオクルージョンを変え、草が薄くなっていく様子などを表現したりしています。ランダム化のための高いインスタンス数に加えて、個別の草のオブジェクトを把握して配置する機能を考慮すると、風が作る波紋や地形の下にある色のブレンドなど、位置に基づく素敵なエフェクトをシェーダーで作成することができます。

LOD Group コンポーネントは地形のディテールには対応していませんが、ディテールにプレハブを使用し、シェーダーグラフで作ったシェーダーまたは地形の Detail Distance 設定でカリング距離を調整することは可能であることは覚えておくとよいでしょう。

SpeedTree でより力のこもった表現を

Unity Terrain Forest

やはりリアルな環境には樹木が不可欠です。Demo シーンには、SpeedTree で作ったさまざまなカスタムの樹が含まれています。SpeedTree は規模を問わず、あらゆるプロジェクトでプロシージャルジェネレーターを使用して高性能な植生を作成することができるモデラ―です。 シェーダーグラフの統合をサポートすることで、風、色相変化、ビルボードレンダリングなど、SpeedTree のすべての機能を使ったシェーダーを Unity ですぐに使用することができます。編集可能なマテリアルインスタンスと同様に、シェーダーグラフのシェーダーもカスタマイズ可能なので、プロジェクト内に新しいシェーダーを保存して、自由に編集を始めることができます。Import Settings の下にある Extract Materials をクリックして、カスタマイズを開始してください。

樹木とディテールは、それぞれ Paint Trees Paint Details ブラシを使って描くのが一般的で、これは皆さんがよく知っている既存のペイントワークフローと同じです。地形ツールで利用できるブラシ API を使って、カスタムブラシをオーサリングすることができます。そして自分のプロジェクトで TerrainModule を参照します。

インスタンス化されたディテールのサポートと SpeedTree の統合により、シェーダーグラフによる高度なカスタマイズを適用して地形の植生を作ることができます。これについては、昨年のシーグラフでも講演を行いましたが、さらに気になる部分のディテールが強化されています。

HDRP で現実のような光の表現に到達する

Unity Terrain Hillside

Unity 2021.2 の HDRPでは、新しい Volumetric Clouds システムを使って、説得力のあるダイナミックな空を作ることができます。特に、HDRP の Physical Sky システムは、物理的に正しい空のライティングを生成するための標準的なパラメーターを提供しています。 

シーンで実現しようとしている昼間の環境を考慮すると、太陽光の強さは大気の減衰効果を考慮しない値である 13 万ルクスに設定され、色温度は 5,800K の黒体を近似した値に設定されています 。ポストプロセッシングを使えば、Physical Camera のように、光の温度を補正することができます。

カーペットのように配置したとき、短い草が影を落とすような状態にはしたくないでしょう。これはレンダリングスレッドにコストがかかるだけでなく、現実でもそんな影のでき方はしないし、視覚的にも魅力的ではありません。そのため、Contact Shadows など、Terrain Detail オブジェクトに適切なライティングとシャドウを施すためのいくつかのテクニックを採用し、より少ないコストではるかに優れたビジュアルを生成しました。

草や低めの植生などの Terrain Detail オブジェクトは、レンダリングのパフォーマンスを向上させるために、すべてシーンのアンビエントプローブを共有します。このような被写体は、空からの光を遮るものがないため、結果的に明るい色になりすぎることがあります。そこで、「baking sky」という別のボリュームを使うことにしました。これにより、アンビエントプローブの生成に使われている空の露出を減らし、シーン内の空の見た目を変えることなく、草に当たる光の強度を下げることができました。

地形を HDRP から URP に移行させる

2 つのスクリプタブルレンダーパイプラインで地形のデモを作ることが目標でしたが、これはチーム全体にとって素晴らしい学習の機会となりました。 

これまで紹介したように、TerrainData アセットは、HDRP と URP のプロジェクト間で共有可能です。まず HDRP プロジェクトで地形を構築し、マテリアルや植生のマスアウト段階を経て、TerrainData アセットを URP プロジェクトに取り込みました。地形のタイルをプレハブにすることで、URP への統合プロセスをさらにスムーズにしました。

地形のスケールと解像度は両プロジェクトで同じ設定を共有していますが、見た目の現実感を最適なものにするために、HDRP では高さベースのマテリアルブレンドモードを、URP ではデフォルトのアルファブレンドモードを選択しました。なお、HDRP では最大 8 つの地形レイヤーをブレンドすることができます。 

この 2 つのプロジェクトでは、最新のレンダリング機能を最大限に活用するために、ライティングやポストプロセッシングを工夫しました。HDRP プロジェクトでは、前述のように Volumetric Clouds とプロシージャルスカイを設定しました。そして、そのプロシージャルスカイをテクスチャにベイクし、URP プロジェクトの HDRI スカイとして使用しました。

フォグはそれぞれのケースで対応が異なります。湖の周りの低いところにある霧について、HDRP ではボリューメトリックフォグを利用しましたが、URP では Visual Effect Graph からカスタムのパーティクルエフェクトを作りました。

ここでは、比較のために使用した機能の概要をご紹介します。

Unity Terrain comparison table

Unity Terrain プロジェクトのパフォーマンスの最大化

リアルタイム 3D インタラクティブ体験においてパフォーマンスは非常に重要です。このプロジェクトでは、パフォーマンスを改善するためにいくつかのアプローチを取っています。HDRPURP で利用できる Render Pipeline アセットでは、複数のプラットフォームを対象とするためのカスタマイズされた設定を作成することができます。URP の Terrain シーンを例に挙げると、高品質と低品質のアセットを作成し、高解像度のシャドウマップや HDR 機能は高品質バージョンにのみ採用しました。これにより、Project Settings ウィンドウQuality settings で、各ターゲットプラットフォームの設定を簡単に行うことができます。実際、エディター内で作業シーンの様々な設定を切り替えてプレビューすることができます。Graphics settings から Render Pipeline アセットを入れ替えるだけです。

パフォーマンス向上のための Project Level 設定に加えて、Terrain プロジェクトではいくつかのコンテンツの最適化を行いました。例えば HDRP の Terrain シーンでは、地形の外側のタイルは距離に応じて解像度を下げています。ただしこうした解像度の変更は、地形のペイント処理が完了してから行うようにしてください。そうしないと、隣り合ったタイルをまたいでペイントすると、解像度の違いから不整合が生じることがあります。

ローエンドのプラットフォームを使う場合、緻密なディテールがパフォーマンス低下の原因になっていることが非常に多いです。これに対処するには、メッシュの頂点数を少なくすることが重要です。HDRP シーンでは、ディテール密度を 0.75 に設定し、中央の地形タイルのカリング距離をより短い、145m に設定しました。濃度とカリング距離のパラメーターを増減させて、しっくりくるものを探してみてください。あるいは、樹木の LOD 距離を調整して、LOD とビルボードレンダリングを早くすることにもそれなりの効果が見込めるでしょう。

URP を使用し、GPU インスタンス化に対応していないプラットフォーム向けに開発している場合や、ハードウェアの帯域幅が非常に限られている場合には、地形のディテールをレンダリングするために、Vertex Lit モードを選択することができます。しかし、インスタンス化されたディテールとは異なり、このモードはシャドウ、両面レンダリング、アルファクリッピングには対応していません。

もっと詳しく知りたい方向けの資料も示しておきます。パフォーマンスの最適化に関するその他のヒントについては、こちらのブログ記事や、Unite Now の動画をご覧ください。

使用を開始する

HDRPURP の両方の新しい Unity Terrain Demo シーンを使うには、アセットストアにアクセスし、Unity 2021.2 で作ったプロジェクトに直接インポートしてください。シーンを十分に堪能された後は、Worldbuilding フォーラムで感想をお聞かせください。 

今後の予定については、Unity ロードマップをご覧ください。

最後に、Unity のテクニカルアートチームが人材を募集していることをお伝えしておきます。公開されているポジションは、Unity のウェブサイトで確認できます。 ご質問やご意見をお待ちしております。

2022年2月18日 カテゴリ: ゲーム | 18 分 で読めます
取り上げているトピック