私たちの新しい e ブック「70+ tips to increase productivity with Unity 2020 LTS」が公開されました。無料で読めるこの e ブックの公開にあわせて、このガイドから時間節約のためのヒントとコツをいくつか紹介するブログシリーズをお届けしています。
第 1 回のブログ記事では、エディターでのワークフローを高速化する方法を紹介しましたが、第 2 回となる本記事では、アーティスト向けの素晴らしいヒントを紹介します。経験豊富な Unity アーティストであっても、Unity 2020 LTS で利用できる生産性向上のための改善点を見逃しているかもしれません。アーティストが時間を節約し、重要なクリエイティブの仕事にもっと集中できるようになります。
この記事では、プレハブとアニメーションのワークフロー、ギズモとアイコンの操作、プログレッシブライトマッパーなどについてご紹介します。
ネストされたプレハブやバリアントにより、柔軟かつ効率的にシーンを構築することができるので、ワークフローを十分に活用してください。
入れ子状のプレハブを使えば、プレハブをプレハブの親にすることができます。建物のような大きなプレハブに、部屋や家具などの小さなプレハブを組み合わせて作ることができるようになりました。これにより、アセットの開発を複数のアーティストや開発者のチームに分け、それぞれがコンテンツの別の部分を同時に作業して、効率を上げることができます。
プレハブバリアントは、オブジェクト指向プログラミングの継承のように、他のプレハブからプレハブを派生させることができます。特定の部分を上書きしてバリアントを変更しても、オリジナルには影響を与えることはありません。また、いつでも変更した部分をすべて削除して、ベースのプレハブに戻すことができます。
また、ベースとなるプレハブ自体に直接変更すれば、すべてのバリアントを一度に変更することができます。
Apply All to Base を使ってベースのオブジェクトに変更を反映させたり、Revert All を使ってオーバーライドを元に戻すことができます。
Unity でのプレハブの扱いについては、ネスト上のプレハブとプレハブワークフローの改善のページをご覧ください。
TextMeshPro は Unity の UI Text と従来の Text Mesh を置き換えるものです。カスタムシェーダーと高度なテキストレンダリング技術を用いて、柔軟なテキストスタイリングとテクスチャリングを実現しています。
TextMeshPro を使用すると、文字、単語、行、段落のスペーシング、カーニング、テキストの両端揃え、リンク、30 種類以上のリッチテキストタグ、マルチフォントとスプライトのサポート、カスタムスタイルなどの機能を利用できます。
グリッドを使って作業することで、プレハブを当て推量ではなく、より一貫性を持ってプレハブを組み立てることができます。レベルデザインの時に、ピースがグリッドの目盛りに合わせてつながるようにすると、並べ替えや再構築が容易になります。
モジュール式のアセットからシーンを構築する場合は、グリッド面を使用してゲームオブジェクトの位置を調整してください。インスペクターに丸めた数値を手動で入力するよりも、グリッドスナップツールでより素早く正確にトランスフォームを設定することをお勧めします。
Unity には 3 種類のスナップが用意されており、シーンを素早く組み立てることができます。
頂点スナップと表面スナップを組み合わせると素早くオブジェクトを配置することができます。
Grid and Snap ウィンドウは Edit > Grid and Snap Settings メニューまたは Grid Visibility ドロップダウンメニューのいずれかから開くことができます。
もっと細かく制御する必要がありますか。ProGrids パッケージを使えば、スナップ平面やグリッド平面をさらに細かく制御できます。
アニメーションウィンドウ(Window > Animation > Animation)を使えば、コードを 1 行も書かずに、Unity のあらゆるプロパティをアニメーション化することができます。動きの変更だけでなく、カスタムスクリプトで定義したパラメーターを変更することもできます。
このウィンドウでアニメーションクリップを作ることもできますし、お好みのサードパーティ製 DCC パッケージ(Autodesk® Maya® やBlender など)で作業することもできます。1 つのクリップを 1 つの動きの単位として考えます。
ウィンドウ内の AnimationClip アセットを、Dopesheet または Curve のいずれかのモードで編集します。K キーまたは C キーのショートカットをそれぞれ使用して、この 2 つを切り替えます。標準のショートカットを使って、すべてのキーフレームをフレーム化(A キー)、または選択したキーフレームをフレーム化(F キー)することができます。
ゲームオブジェクトに複数のアニメーションクリップを持たせると、AnimatorController はステートマシンの役割を果たし、アニメーションクリップの間にフローチャートのようなグラフを作成できます。
これにより、アーティストはプログラマーの手を借りずに高度なアニメーションを制作することができます。2D または 3D のリグを使用している場合、そのボディパーツをそれぞれ異なるロジックでアニメーションさせることができます。レイヤー機能やマスク機能を活用すると、より制御しやすくなります。ビジュアルプログラミングツールでモーションを試作し、クリップ間のトランジションやインタラクションを微調整します。
Animation Rigging パッケージを使えばさらに拡張することができます。本パッケージは、プロシージャルモーションの作成に使えるリグおよびインバースキネマティック制約のライブラリを提供します。アニメーション化されたスケルトンは、「実行時のリギング」によって環境と相互作用することができ、また、物理ベースの制約によってダイナミックなセカンダリモーションを追加することができます。
AnimatorController は便利ですが、いくつかの注意点があります。
これらのコンポーネントの使い方については、AnimationClips、AnimationController のマニュアルページをご参照ください。アニメーションコンポーネントの最適化については、Unity のベストプラクティスをお読みください。こちらのプラクティスは随時更新されております。
ギズモは、ゲームオブジェクトに関連付けられた小さなオーバーレイグラフィックです。ビューポートをナビゲートしたり、特定のオブジェクトを探したりするのに使用します。
Select Icon メニューを使って、ゲームオブジェクトのアイコンを変更します。Other を選ぶと、独自のアイコンを定義できます。
インスペクターのドロップダウンを使って、ギズモを切り替えます。
Other... オプションを使って、カスタムギズモを選択します。
また、スクリプト付きのギズモを作り、インタラクティブにすることもできます。たとえば、ギズモは、カスタムコンポーネントが影響する体積や面積を定義する時に役立ちます。
この例では、スクリプトが選択内容に応じてギズモを変化させます。
シーンコントロールバーの Gizmos ダイアログを使って、特定のギズモのオン・オフを切り替えたり、すべてのギズモのオン・オフをグローバルで切り替えることができます。
使用例については、「Creating Custom Gizmos for Development」チュートリアルを参照してください。また、ギズモとハンドル の API もご確認ください。
ライトマップでは、直接ライティングと間接ライティングの両方を事前に計算し、その結果をライトマップと呼ばれるテクスチャに保存して、後で使用することができます。Unity には、高品質なライティングとシャドウを生成するためのグローバルイルミネーション(GI)技術が多数用意されています。ライトマップに保存されたジオメトリは実行時のパフォーマンスが高いものの、ライトマップのベイクにはこれまでコストがかかっていました。
プログレッシブライトマッパーは、計算結果を早めに出力し、時間経過とともにレンダリングを洗練させていく高速パストレーサーです。このように、最終的なベイク結果を待たずに、プロセスを中断して変更を加えることができるので、より迅速に反復修正を加えることができます。
ここでは、ライトマップを高速化するためのヒントをご紹介します。
現在のプログレッシブ CPU ライトマッパーは、実行するマシンの CPU と RAM を使用します。新しいプログレッシブ GPU ライトマッパー(プレビュー版) は、GPU と VRAM を使用するため、ベイクが大幅に高速化する可能性があります。使用するコンピューターがハードウェアおよびソフトウェアの要件を満たしていれば、ライティングのワークフローを劇的に加速させることができます(場合によっては 10 倍になります)。
グローバルイルミネーションは、美しい間接照明を作り出しますが、これを計算してディスクに保存するにはコストがかかります。ライトマップを必要としないセットの装飾やその他の静的メッシュがある場合は、ライトマップのベイクからそれらを削除し、代わりにライトプローブを使うことを検討してください。
この例では、ライトプローブは小さなオブジェクトに対して直接光と反射光の両方を近似することができ、より高品質なライトマッピングをより目立つ場所に使えるようになります。Viking Village プロジェクトに適用されたライトマップの設定は以下のようになっています。
以前はダイナミックなオブジェクトのためのものでしたが、ライトプローブはスタティックなメッシュにも適用できます。MeshRenderer コンポーネントで、Receive Global Illumination のドロップダウンを探し、Lightmaps から Light Probes に切り替えます。
ライトプローブのイルミネーションは正確な UV を必要としないため、メッシュをアンラップする余分なステップを省くことができます。プローブによるライティングで使用されている球面調和基底関数は、ライトマップに比べて計算速度が速いのが特徴です。 ライトプローブとライトプローブのグループをシーン内に空間的に配置します。プローブライトは、一般的にライトマップよりも高速にベイクが行えます。下の画像はレベル全体にライトプローブを配置したライトプローブグループの例です。
ライトプローブを使用してシーンオブジェクトを選択的に照明する方法については、「ライトプローブを使用した静的ライティング」を参照してください。
Unity のライティングワークフローについては、「Unity で現実のようなビジュアルを作成する」をご覧ください。
今すぐすべてのヒントが欲しい?無料のガイド「70+ tips to increase productivity with Unity 2020 LTS 」をぜひダウンロードしてください。e ブックをお届けするためには、簡単なフォームにご記入いただく必要があります。今回ご紹介したヒントと共に、他にも e ブックにさまざまなヒントが収録されているのでそちらもぜひご覧ください。また、これらのヒントが役に立ったかどうか、次は何を取り上げてほしいかなど、コメント欄で教えてください。