Unity を検索

アーティストワークフローをスピードアップ

2021年9月1日 カテゴリ: Engine & platform | 12 分 で読めます
Puzzle project
Puzzle project
取り上げているトピック
シェア

Is this article helpful for you?

Thank you for your feedback!

私たちの新しい e ブック「70+ tips to increase productivity with Unity 2020 LTS」が公開されました。無料で読めるこの e ブックの公開にあわせて、このガイドから時間節約のためのヒントとコツをいくつか紹介するブログシリーズをお届けしています。

第 1 回のブログ記事では、エディターでのワークフローを高速化する方法を紹介しましたが、第 2 回となる本記事では、アーティスト向けの素晴らしいヒントを紹介します。経験豊富な Unity アーティストであっても、Unity 2020 LTS で利用できる生産性向上のための改善点を見逃しているかもしれません。アーティストが時間を節約し、重要なクリエイティブの仕事にもっと集中できるようになります。

この記事では、プレハブとアニメーションのワークフロー、ギズモとアイコンの操作、プログレッシブライトマッパーなどについてご紹介します。 

プレハブワークフローで柔軟にシーンを構築

ネストされたプレハブやバリアントにより、柔軟かつ効率的にシーンを構築することができるので、ワークフローを十分に活用してください。  

入れ子状のプレハブを使えば、プレハブをプレハブの親にすることができます。建物のような大きなプレハブに、部屋や家具などの小さなプレハブを組み合わせて作ることができるようになりました。これにより、アセットの開発を複数のアーティストや開発者のチームに分け、それぞれがコンテンツの別の部分を同時に作業して、効率を上げることができます。

プレハブバリアントは、オブジェクト指向プログラミングの継承のように、他のプレハブからプレハブを派生させることができます。特定の部分を上書きしてバリアントを変更しても、オリジナルには影響を与えることはありません。また、いつでも変更した部分をすべて削除して、ベースのプレハブに戻すことができます。

また、ベースとなるプレハブ自体に直接変更すれば、すべてのバリアントを一度に変更することができます。

Prefab variants
Unity の新しい 2D デモ「Dragon Crashers」のプレハブバリアント。それぞれ異なる武器と能力を持たせている。

Apply All to Base を使ってベースのオブジェクトに変更を反映させたり、Revert All を使ってオーバーライドを元に戻すことができます。

Unity でのプレハブの扱いについては、ネスト上のプレハブとプレハブワークフローの改善のページをご覧ください。

TextMeshPro を使用して、より多くのスタイルとテクスチャ設定のオプションを提供する

TextMeshPro は Unity の UI Text と従来の Text Mesh を置き換えるものです。カスタムシェーダーと高度なテキストレンダリング技術を用いて、柔軟なテキストスタイリングとテクスチャリングを実現しています。

TextMeshPro を使用すると、文字、単語、行、段落のスペーシング、カーニング、テキストの両端揃え、リンク、30 種類以上のリッチテキストタグ、マルチフォントとスプライトのサポート、カスタムスタイルなどの機能を利用できます。

TextMeshPro example from Dragon Crashers

スナップを使って素早くトランスフォームを設定

グリッドを使って作業することで、プレハブを当て推量ではなく、より一貫性を持ってプレハブを組み立てることができます。レベルデザインの時に、ピースがグリッドの目盛りに合わせてつながるようにすると、並べ替えや再構築が容易になります。 

モジュール式のアセットからシーンを構築する場合は、グリッド面を使用してゲームオブジェクトの位置を調整してください。インスペクターに丸めた数値を手動で入力するよりも、グリッドスナップツールでより素早く正確にトランスフォームを設定することをお勧めします。 

Grid and Snap settings
グリッドとスナップの設定

Unity には 3 種類のスナップが用意されており、シーンを素早く組み立てることができます。

  • ワールド空間のグリッドへのスナップ:移動ツールのハンドルの向きが Global に設定されていることを確認してください。Ctrl(Windows) キーまたは Cmd(macOS)キーを押したままにすると、Edit > Grid and Snap Settings で設定したワールド空間のグリッドの増分だけずらしながらオブジェクトをスナップできます。 
  • 表面スナップ:Shift キーと CtrlWindows)キーまたは CmdmacOS)キーを押したまますると、オブジェクトを任意のコライダーと交わる場所にスナップできます。
  • 頂点スナップ: 移動ツールをアクティブにして、V キーを押したままにします。これは、選択中のゲームオブジェクトを別のメッシュの頂点位置に移動させるものです。移動する前に、アクティブなゲームオブジェクトの 1 つの頂点の上にマウスを置くと、その頂点がピボットとして機能します。Shift + V キーで頂点スナップモードのオン・オフを切り替えます。

頂点スナップと表面スナップを組み合わせると素早くオブジェクトを配置することができます。

  • 頂点スナップを使って、V キーまたは Shift + V キーを組み合わせて、ゲームオブジェクトを移動します。ピボットとなる頂点の上にカーソルを置きます。通常通り、別の頂点にスナップします。
  • Shift キーと CtrlWindows)キーまたは CmdmacOS)キーの組み合わせを押したまま、対象となるメッシュのサーフェスに沿ってドラッグします。
  • オブジェクトが目的の位置に来たら、マウスボタンと V キーを離します。

Grid and Snap ウィンドウEdit > Grid and Snap Settings メニューまたは Grid Visibility ドロップダウンメニューのいずれかから開くことができます。

もっと細かく制御する必要がありますか。ProGrids パッケージを使えば、スナップ平面やグリッド平面をさらに細かく制御できます。

ProGrids
ProGrids

アニメーションのワークフローに関するその他のヒント

アニメーションウィンドウWindow > Animation > Animation)を使えば、コードを 1 行も書かずに、Unity のあらゆるプロパティをアニメーション化することができます。動きの変更だけでなく、カスタムスクリプトで定義したパラメーターを変更することもできます。

このウィンドウでアニメーションクリップを作ることもできますし、お好みのサードパーティ製 DCC パッケージ(Autodesk® Maya® やBlender など)で作業することもできます。1 つのクリップを 1 つの動きの単位として考えます。

Animation window
Animation window
アニメーションウィンドウは、カーブやドープシートと同じアニメーションデータを表現することができます。

ウィンドウ内の AnimationClip アセットを、Dopesheet または Curve のいずれかのモードで編集します。K キーまたは C キーのショートカットをそれぞれ使用して、この 2 つを切り替えます。標準のショートカットを使って、すべてのキーフレームをフレーム化(A キー)、または選択したキーフレームをフレーム化(F キー)することができます。

ゲームオブジェクトに複数のアニメーションクリップを持たせると、AnimatorController はステートマシンの役割を果たし、アニメーションクリップの間にフローチャートのようなグラフを作成できます。

これにより、アーティストはプログラマーの手を借りずに高度なアニメーションを制作することができます。2D または 3D のリグを使用している場合、そのボディパーツをそれぞれ異なるロジックでアニメーションさせることができます。レイヤー機能やマスク機能を活用すると、より制御しやすくなります。ビジュアルプログラミングツールでモーションを試作し、クリップ間のトランジションやインタラクションを微調整します。 

Animation Rigging パッケージを使えばさらに拡張することができます。本パッケージは、プロシージャルモーションの作成に使えるリグおよびインバースキネマティック制約のライブラリを提供します。アニメーション化されたスケルトンは、「実行時のリギング」によって環境と相互作用することができ、また、物理ベースの制約によってダイナミックなセカンダリモーションを追加することができます。

最適化のヒント

AnimatorController は便利ですが、いくつかの注意点があります。

  • アニメーターを、特に UI 要素と組み合わせて使いすぎないようにしましょう。アニメーターは、アニメーションが再生されていなくても、フレームごとに UI Canvas を再構築します。UI やシンプルなアニメーションには、可能な限り従来の Animation コンポーネントを使用してください。また、トゥイーン関数を作成したり、サードパーティ製のライブラリ(例:DOTween)を使用することも検討してください。 
  • デフォルトでは、Unity はアニメーション化されたモデルを Generic リグで インポートしますが、開発者がキャラクターをアニメーション化するときは Humanoid リグに切り替えることがよくあります。ヒューマノイドリグは、使用していない時でも、フレームごとにインバースキネマティクスとアニメーションのリターゲティングの計算を行います。これらの特定の機能を必要としない場合は、Generic リグを使用して CPU 時間を節約するようにします。

これらのコンポーネントの使い方については、AnimationClipsAnimationController のマニュアルページをご参照ください。アニメーションコンポーネントの最適化については、Unity のベストプラクティスをお読みください。こちらのプラクティスは随時更新されております。

カスタムギズモとアイコンを使って、エディターの機能を拡張する

ギズモは、ゲームオブジェクトに関連付けられた小さなオーバーレイグラフィックです。ビューポートをナビゲートしたり、特定のオブジェクトを探したりするのに使用します。

Select Icon メニューを使って、ゲームオブジェクトのアイコンを変更します。Other を選ぶと、独自のアイコンを定義できます。

インスペクターのドロップダウンを使って、ギズモを切り替えます。

Other... オプションを使って、カスタムギズモを選択します。

また、スクリプト付きのギズモを作り、インタラクティブにすることもできます。たとえば、ギズモは、カスタムコンポーネントが影響する体積や面積を定義する時に役立ちます。

この例では、スクリプトが選択内容に応じてギズモを変化させます。

シーンコントロールバーの Gizmos ダイアログを使って、特定のギズモのオン・オフを切り替えたり、すべてのギズモのオン・オフをグローバルで切り替えることができます。

使用例については、「Creating Custom Gizmos for Development」チュートリアルを参照してください。また、ギズモハンドル の API もご確認ください。 

ライトマップの高速化

ライトマップでは、直接ライティングと間接ライティングの両方を事前に計算し、その結果をライトマップと呼ばれるテクスチャに保存して、後で使用することができます。Unity には、高品質なライティングとシャドウを生成するためのグローバルイルミネーション(GI)技術が多数用意されています。ライトマップに保存されたジオメトリは実行時のパフォーマンスが高いものの、ライトマップのベイクにはこれまでコストがかかっていました。

The final scene with lightmaps applied
ライトマップを適用した最終シーン
The same scene without lightmapping
ライトマップを使用していない同じシーン

プログレッシブライトマッパーは、計算結果を早めに出力し、時間経過とともにレンダリングを洗練させていく高速パストレーサーです。このように、最終的なベイク結果を待たずに、プロセスを中断して変更を加えることができるので、より迅速に反復修正を加えることができます。 

ここでは、ライトマップを高速化するためのヒントをご紹介します。

  • Prioritize View を有効にすると、プログレッシブライトマッパーが、シーンビューに表示されているテクセルを、ビュー外のものを変更する前に処理するようにします。
  • 不必要な Samples(Direct Samples と Indirect Samples)と Bounces(通常は 2 で十分です。必要な場合のみ増やしてください)を減らします。
  • ライトマップの解像度とテクセル数を、ライティングに合わせて最適化します。テクセル数は、ライトマッパーがどれだけの作業をしなければならないかを表しています。ライトマップは 2D のテクスチャなので、ライトマップの解像度を 2 倍にすると処理量が 4 倍になります。
  • 隠れた表面や小さくて薄い物体など、ライトマップの効果があまり期待できないものについてはテクセルを減らします。グローバルイルミネーションに貢献する各 MeshRenderer には、ライトマップでの相対的な UV サイズを小さくする Scale in Lightmap オプションがあります。 
  • Baked IndirectSubtractiveShadowMask から、適切な Lighting Mode を選択します。アートディレクションに必要でなければ、シャドウのベイクを行う必要はありません。     

現在のプログレッシブ CPU ライトマッパーは、実行するマシンの CPU と RAM を使用します。新しいプログレッシブ GPU ライトマッパー(プレビュー版) は、GPU と VRAM を使用するため、ベイクが大幅に高速化する可能性があります。使用するコンピューターがハードウェアおよびソフトウェアの要件を満たしていれば、ライティングのワークフローを劇的に加速させることができます(場合によっては 10 倍になります)。

Preview of a baked lightmap
ベイクされたライトマップのプレビュー

ライトプローブでライティングを最適化する

グローバルイルミネーションは、美しい間接照明を作り出しますが、これを計算してディスクに保存するにはコストがかかります。ライトマップを必要としないセットの装飾やその他の静的メッシュがある場合は、ライトマップのベイクからそれらを削除し、代わりにライトプローブを使うことを検討してください。 

この例では、ライトプローブは小さなオブジェクトに対して直接光と反射光の両方を近似することができ、より高品質なライトマッピングをより目立つ場所に使えるようになります。Viking Village プロジェクトに適用されたライトマップの設定は以下のようになっています。

以前はダイナミックなオブジェクトのためのものでしたが、ライトプローブはスタティックなメッシュにも適用できます。MeshRenderer コンポーネントで、Receive Global Illumination のドロップダウンを探し、Lightmaps から Light Probes に切り替えます。

ライトプローブのイルミネーションは正確な UV を必要としないため、メッシュをアンラップする余分なステップを省くことができます。プローブによるライティングで使用されている球面調和基底関数は、ライトマップに比べて計算速度が速いのが特徴です。 ライトプローブとライトプローブのグループをシーン内に空間的に配置します。プローブライトは、一般的にライトマップよりも高速にベイクが行えます。下の画像はレベル全体にライトプローブを配置したライトプローブグループの例です。

ライトプローブを使用してシーンオブジェクトを選択的に照明する方法については、「ライトプローブを使用した静的ライティング」を参照してください。

Unity のライティングワークフローについては、「Unity で現実のようなビジュアルを作成する」をご覧ください。

さらに生産性を向上させる e ブックを入手しよう

今すぐすべてのヒントが欲しい?無料のガイド「70+ tips to increase productivity with Unity 2020 LTS 」をぜひダウンロードしてください。e ブックをお届けするためには、簡単なフォームにご記入いただく必要があります。今回ご紹介したヒントと共に、他にも e ブックにさまざまなヒントが収録されているのでそちらもぜひご覧ください。また、これらのヒントが役に立ったかどうか、次は何を取り上げてほしいかなど、コメント欄で教えてください。

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

Is this article helpful for you?

Thank you for your feedback!

取り上げているトピック
関連する投稿