Unity は地形作成システムの専門チームを立ち上げました。初めての努力の成果が近日中に公開されます!Unity 2018.3 には、地形作成システムのアップデートが搭載される予定です。このアップデートの特徴は、GPU をもっとうまく利用することでツールやパフォーマンスが改善される点です。また、従来の組み込みのレンダーパイプラインや既存の Unity 地形作成システムとの後方互換性を確保しつつ、HD レンダーパイプライン(HDRP)とライトウェイトレンダーパイプライン(LWRP)というレンダーパイプラインのサポートも追加されます。
今すぐ Unity 2018.3 ベータ版を入手してアップデートを先取りしましょう!ベータ版はまだ開発中のため、ユーザーインターフェースも API も変更される可能性があることにご注意ください。
パフォーマンスの面では、GPU インスタンシングが実装されたレンダリングパスを地形作成システム用に追加しました。ほとんどの場合は、インスタンシングにより、発行されるドローコールの数が劇的に減少します。Unity が行ったテストの多くでは、CPU コストが 50% 以上削減されることがわかりました(ただし、当然ながら実際の数値はプラットフォームやユースケースに応じて異なります)。この新しいレンダリングパスを選択するには、「Terrain Settings」で「Draw Instanced」を有効にします。
有効にすると、Unity では、ハイトマップやスプラットマップなどの重たい地形データがすべて、GPU のテクスチャに変換されます。CPU 上の地形のパッチごとにカスタムメッシュを作成する代わりに、GPU インスタンシングを使用すると、1 つのメッシュを複製してハイトマップのテクスチャをサンプリングし、適切なジオメトリを生成できます。これにより、数千ものカスタムメッシュの描画がインスタンス化された少数のドローコールに置き換えられるため、地形作成の CPU 負荷は大幅に低減します。
良い副作用として、ロード時間も改善されます!このようなカスタムメッシュすべての作成をスキップするだけでなく、GPU を使ってベースマップ(あらかじめブレンドされた LOD テクスチャ)を作成することもできます。そのようにした場合は GPU の処理速度がさらに速くなります。これは、自作のテレインシェーダーがあれば、「ベースマップの作成」用シェーダーをオーバーライドし、対応するベースマップ LOD テクスチャを生成できることも意味します。
インスタンシングにより、地形の法線の現れ方も改善されます。地形のメッシュの法線は、ハイトマップから生成されてピクセルシェーダーでサンプリングされる法線マップテクスチャに格納されることで、ジオメトリから切り離されました。つまり、法線はメッシュの LOD レベルとは関係ありません。その結果、「ピクセルエラーの発生率」が上がる代わりに、アーティファクトの発生を抑えつつ、頂点コストを削減することができます。
また、HDRP と LWRP 両方用にテレインシェーダーを開発しました。これらは、バージョン 4.0.0 以降のパッケージで提供されており、インスタンストレンダリングとピクセルごとの法線をサポートしています。HD シェーダーは、高さと密度のブレンドモード、法線のスケーリング、テクスチャで制御されるサーフェスのメタルネスとスムースネスなどの新機能をサポートするようさらに強化されました。HD テレインシェーダーは、シングルパスレンダリングに限定されていますが、地形レイヤーを 1 つのパスで最大 8 個までブレンドできます。
エディター側では、独自の地形作成ツールを作成するためのスクリプト API を公開しました。一連のユーティリティー関数とともに使用すると、GPU 上でタイルをまたいだシームレスなスカルプティング操作やペイント操作を簡単に実装できます。新しい TerrainAPI には、TerrainPaintTool
このような変更を適用することで、既存の地形作成ツールをすべて、GPU で動作するように変換しました。その結果、これらのツールの処理速度が速くなったほか、より大きなサイズのブラシ、ブラシのプレビューの改善、継ぎ目の自動スティッチングによる地形タイルをまたいだペイント操作も実現しました。
また、ブラシの回転やランダム化などのブラシ機能、ハイトマップやメッシュスタンプのようなより高度なペインティングツール、クローンブラシなどを使っていろいろ試すようにもなりました。こうしたペインティングツールの機能は、現時点では 2018.3 に含まれていませんが、GitHub の Terrain Tools プロジェクトから入手できるようになっています。
複数の地形タイルを使った作業が簡単になりました。地形をまたいだシームレスなペイント操作に加えて、隣接する地形との接続の自動管理が可能になりました。以前は、隣接する地形を接続するためのスクリプトを手動で作成する必要がありました。
「Terrain Settings」の「Auto connect」を有効にすると、その地形は、同じグループ ID を持つ隣接する地形と自動的に接続されます。
既存の地形を拡張する場合は、新しい「Create Neighbor Terrain」ツールを使って、隣接するタイルがない境界線に沿ってマッチする地形タイルを簡単に追加することができます。
また、サイズ変更や解像度の変更があまり破壊的な変更にならないように取り組んでいます。2018.3 では、ハイトマップとスプラットマップは、データを消去して作業内容をすべて失うという以前の動作ではなく、その解像度を変更したときにリサンプリングされます。近い将来、あらゆるサイズ変更操作を改善することを目標に日々取り組んでいます。
ワークフローを簡素化するために、TerrainLayer アセットと Brush アセットという、地形に関連した 2 つのアセットタイプも新しく作成しました。
R16 テクスチャ形式(単一チャンネルの 16 ビット形式)のサポートも追加しました。これにより、ハイトマップのスタンプとして使った場合にエフェクトが望ましくない「階段状」になる原因である 8 ビットの量子化をブラシシェイプで回避できるようになります。
Unity の地形作成システムのチームはまだ始動したばかりのため、開発は今後も続きます。ぜひ World Building フォーラムからフィードバックをお寄せください!