はじめに

確認済のバージョン: 2017.3

-

難易度: 中級

Unity におけるレンダリングの学習を始めるにあたっては、まず、アセットを目的に適した形式にする必要があります。デジタルコンテンツ制作(DCC)ツールから Unity へのワークフローを適切に設定することが非常に重要です。使用可能な DCC ツールは数多くありますので、それぞれにおけるエクスポート手順の説明は省きますが、以下に挙げるいくつかの点を考慮する必要があります。

尺度(スケール)と単位(ユニット)

尺度(スケール)と測定単位(ユニット)は、現実のようなシーンを作る上で非常に重要な役割を果たします。 リアリスティックなビジュアルを目指す作品の場合、一般的には 1 Unity ユニット = 1m(100cm)と想定することが推奨されます。多くの物理システムの単位のサイズがこの想定になっているからです。

DCC 3D ソフトウェア から Unity へインポートする際の単位の変換

DCC 3D ソフトウェアと Unity との間で整合性を維持するには、インポートされたオブジェクトのスケールとサイズの検証を必ず行うことが推奨されます。3ds Max、Maya、Blender、Houdini などの DCC 3D ソフトウェアでは、FBX エクスポート設定の中でユニットとスケールの設定を行えます(各ソフトウェアのマニュアルを参照してください)。 一般的には、ツールの設定は「作業は cm で行って自動スケールで FBX をエクスポートする」という形にすれば、Unity インポートのスケールと適合します。 ただし、より確実にするには、プロジェクトの開始時に毎回、適合しているかどうか確認することをお勧めします。

エクスポートの設定をテストするには、DCC 3D ソフトウェア内で 1x1x1m の単純なキューブを作成し、それを Unity にインポートします。 Unity の初期設定のキューブ(GameObject > 3D Object > Cube)は 1x1x1m ですので、インポート済モデルとの比較が行いやすく、簡単にスケール検証ができます。

Unity インスペクターの Transform コンポーネント内でスケールが 1,1,1 に設定されていれば、これらのキューブは全く同じように表示されるはずです。

注意 - Maya と 3DsMax は、デフォルトの単位を前回開いたファイルによってオーバーライドすることができます。 - 3D ソフトウェアでは、内部的に設定された単位とは別の単位をワークスペース上で表示することが可能です。これにより多少の混乱が生じることがあります。 こちらの画像は 3ds Max の例です。

スケール基準モデル

プレースホルダーや仮のジオメトリを使ってざっくりシーンを組み上げる時に、スケールの基準として使用できるモデルがあると役立ちます。作成するシーンに合った(関連した)何かの要素を、スケール基準モデルに選んでください。サンプルシーン『Spotlight Tunnel』の場合、汎用のベンチがスケール基準モデルとして選択されています。これは、シーン内の要素を完全に現実世界と同じサイズ比率にしなければならないということではありません。独特のサイズ比率を持つシーンであっても、オブジェクト間の相対的なスケールに一貫性を持たせるために基準モデルを設定すると良いです。

テクスチャの出力とチャンネル

3D ソフトウェアと Unity との間における単位の変換に一貫性が求められるだけでなく、テクスチャ内部の情報も正確でなければ、それがマテリアルに追加された時に正しい結果が得られません。

下の画像は、Substance Painter の(Unity 標準の不透明マテリアルに使用される)テクスチャ出力のプリセット設定の一例です。

Unity 標準マテリアル内におけるテクスチャの割り当て

  • $textureSet_Albedo ― Albedo スロットにアサインされます。
  • $textureSet_MetallicAOGloss ― Metallic と Occlusion にアサインされます。 Smoothness Source は Metallic Alpha に設定されます。
  • $textureSet_Normal ― Normal Map スロットにアサインされます。

(注)複数のチャンネルを Metallic、AO、Gloss などの単一のテクスチャに含めると、アンビエントオクルージョン(AO)を別のテクスチャとしてエクスポートした場合よりもテクスチャメモリを節約できます。Unity の標準マテリアルを扱う場合、これが一般的な方法です。

Photoshop や Substance Painter などのテクスチャ作成ソフトウェアは、一貫性のあるテクスチャを適切な設定で出力します。ただし場合によっては、(主にアルファチャンネルを扱う場合に)コンテンツ制作者にとって紛らわしい状況になる場合もあります。

以下の画像は、PNG の「透過性(Transparency)」が Photoshop を使っている人にとって混乱を招きやすいことを示す例です。これは Photoshop で外部プラグインなしで PNG 画像のアルファを扱うときに使われるネイティブの処理方式に起因しています。 この場合、(ソースのテクスチャファイルのサイズに問題がなければ)専用アルファチャンネルを持つ非圧縮の 32 Bits TGA の方が適しているかもしれません。

上の画像の中で、Photoshop で作成された「透明な」 PNG では、アルファが黒として表示されていますが、専用のアルファチャンネルを持つ TGA は期待通りの値を表示します。アルファチャンネルをスムースネスとして読み出す標準マテリアルに各テクスチャをアサインした場合、PNG テクスチャを持つマテリアルのスムースネスは反転してしまい、TGA テクスチャを持つマテリアルは期待通りに表示されます。

法線マップの方向

Unity は接線の法線マップを以下の解釈で読み出します。 赤チャンネル X+ は「右」、緑チャンネル Y+ は「上」(OpenGL 方式)

例えば 3ds Max の「Render to Texture」法線マップは、デフォルトでは緑チャンネルの Y+ を「下」として出力します。これはサーフェスの方向を Y 軸上で反転させ、光を当てた時に不正確な結果を生じさせます。 法線マップの方向を検証するには、傾斜状のくぼみのある単純な面(上の中央の画像)を 1 つ作成し、それを平らな面にベイクします。次に Unity で、確認しやすい方向のライトを付けて、そのベイクされた法線マップを平面にアサインし、軸のどれかが反転していないかどうか確認してください。軸の適切な設定方法に関しては、デジタルコンテンツ制作ソフトウェアのマニュアルをご参照ください。