[3DCoat] 乗合馬車(Omnibus)のUV Setの指定

  • by

乗合馬車(Omnibus)の馬車のモデリングについて、いくつか順番に追いかけていきます。
3DCoat 2021.40で確認しました。

前回でモデリングルームの作業が終わったので、今回からUVの割り当てを行っていきます。
ワークフローをおさらいしておきます。
最終的にテクスチャの描いてNVIDIA Omniverseに持ってくるのが目標になります。
(fbx経由で渡すため、DCCツールでもゲームエンジンでも出力先はなんでもよいです)

乗合馬車のワークフロー

改めて、3DCoat内で行う乗合馬車のモデリングからfbx出力までのワークフローを記載します。
今まではモデリングルームでメッシュのモデリングだけをしていました。

今回はリトポルームでの作業に入ります。
ここでは、UVの割り当てを行います。「UV Set」が最終的にfbxに出力する際のマテリアルと1対1に対応することになります。
それが終わった後にペイントルームに入ります。
このときに頂点法線の焼き付け(Bake)を行い、ペイント作業に入ることになります。
ペイント作業が終わったらfbxにエクスポートします。
リトポルームからペイントルームに入るときは、ベイク作業が必要となりますがこれについてはリトポルームの作業が完了してからめとめることにします。

モデリングルームからfbxを出力するとどうなる ?

ところで、モデリングルームでモデリングした形状をfbx出力したらどうなるでしょうか?
少し試してみます。

3DCoat : fbxエクスポートを行う前に

fbxエクスポートを行う前に、メインメニューの「Edit」-「Preference」を選択し、
「In/Out」タブで「FBX export units」で「Millimeters」を選択しておくようにしてください。

デフォルトは「Meters」が選択されていましたが、この場合は出力後のサイズが正しくありません。

3DCoat : fbxファイルをエクスポート

モデリングルームで、メインメニューの「File」-「Export Poly Object」を選択。
ファイルダイアログボックスでfbx形式を選択することで、fbxファイルが出力されます。

Omniverse : fbxファイルをOmniverseに読み込み

Omniverse Create(2021.3.2)を開きます。
Contentウィンドウで対象のfbxファイルを探し、右クリックで「Convert to USD」を選択します。

Import OptionsウィンドウでImportボタンを押してImportボタンを押します。

デフォルトでfbxファイル名と同じ名前のフォルダが生成され、その中にコンバートされたusdファイルが出力されます。
コンバートされたusdファイルをシーンに読み込みます。

分かりにくいですが、いくつか不正な箇所がある状態で読み込まれます。
これは、3DCoatまたはOmniverseで問題があるというわけではありません。

赤丸の箇所は、シェーディングが不正になっています。
この段階では3DCoat側のfbxエクスポート時に頂点法線が存在しないために起きています。
これは、隣り合う面同士の頂点法線が丸まってしまっている(スムーズシェーディングされた状態)のが原因です。
分かりやすいように、直方体をfbxエクスポートしてみました。

頂点法線は、3DCoat側ではペイント時にベイクされる段階で初めて出てくる情報になります。

3DCoatのモデリングルームの作業の段階ではまだ形状のエクスポートは早い、ということになります。
なお、Omniverse側で読み込んだ形状の階層構造を見ると
3DCoatでのPoly GroupsのMeshは、それぞれ分かれて出力されています。
マテリアルは1つだけ「Default」の名前で出力されています。

次の3DCoat側の作業で、Meshに対してマテリアルを1つずつ割り当てていきます。

リトポルーム

それでは、モデリングした3DモデルにUVを割り当てていきます。
UVは最終工程のペイントでテクスチャを与えていく場合に必要な情報になります。
モデリングルームからリトポルームに切り替えます。

この段階では、モデリングルームと同じでPoly GroupsパネルにMeshが列挙されている状態です。

UV Set

UVは「UV Set」ごとに分けて与えることになります。
「UV Set」とはUVをグループ化した情報で、このリトポルームで与えていきます。
ツールバーの「Default」と表示されているところはドロップダウンメニューになっており、
ここをクリックするとUV Setが列挙されます。
何も作業をしてない場合は、「Default」だけが表示されています。

UV Setとは何か ?

モデリングルームでモデリングした「Mesh」は、頂点を結んだ面で構成される3Dモデルです。
立方体の場合は、6頂点、8つの面で構成されます。

これに「マテリアル」を割り当てて「テクスチャ」を貼り付ける場合に、
3D空間の面ぞれぞれを1枚のテクスチャ画像上に並べていきます。
テクスチャ画像は2D座標になります。
この2D座標はUV座標とも呼ばれます。

このUVは、Meshに対して1つが対になっている必要はなく、複数のMeshにまたいだUVを割り当てることもできます。
また、1Meshに複数のUV Setを割り当てることもできます。
「UV Set」はUVを割り当てる際のグループに相当します。
3DCoatでは、1つのUV Setに対して1つのマテリアルを割り当てることになるようでした。

今回は、1つのMeshに対してUV Setを1つずつ割り当てていくことにしました。

UV Setの作成

モデリングが完了した直後は、1つのUV Set「Default」のみが存在します。
ここにすべてMeshの(UVとして使用するための)面情報が格納されています。

そこで、カラのUV SetをMesh名と同じにして作成しました。
この「UV Set」はfbxエクスポート時の「マテリアル名」になります。
3DCoatではマテリアルはこのUV Setごとに割り当てることができます。

ツールバーの「Default」の箇所をクリックして表示されるメニューで「Add New UV Set」を選択すると名前の入力フィールドが表示されます。
まずは、Mesh名と同じUV Setをすべて追加しました。
順番はPoly GroupsパネルのMeshの並びとは異なっていて問題ありません。
また、Mesh名と同じUV Set名にする必要もありません。

なお、一番先頭の「Default」は消さないようにしてください。
後でモデリングやリトポで面を新たに追加した場合、新しく追加した面のUV要素も自動で追加されます。
このとき、新しいUV面はUV Setの一番先頭(ここではDefault)に格納されます。
UVの割り当てを行った後で、既存Meshに新たに面を追加したくなることもあると思います。
そのときのために、UV Setの先頭は「Default」として置いておくほうが手間が省けます。

UV面の格納先を変更

現在は新しく追加したUV Setには何の面情報も持ちません。
モデリングした直後は、「Default」の名前のUV SetにすべてのMeshのUV面が入っている状態です。
後から面を新規追加した場合でも、UV Setの先頭の「Default」にUV面情報が入ります。
この「Default」のUV Setから、各UV SetにUV面を移していきます。

ツールバーでカレントのUV Setとして「Default」が選択されているのを確認します。

Selectを選択します。

Poly Groupsパネルで対象のMesh(ここではbody)を選択し、パネル下の左から3つ目のすべての面を選択するアイコンを押します。

これで、対象のMeshの面がすべて選択されました。

ツールバーの「Move Selected faces」と表示されている箇所をクリックしてメニューを表示。
「body」を選択します。

これで、選択された面を指定したUV Setに移動することができました。
これは3Dモデルとしての面が何かされたわけではなく、UVとしてのUV面情報が指定のUV Setに移動した、ということになります。

では、UV Set「body」にMeshの面が移動したか確認してみます。
Selectが選択されていることを確認し、
ツールバーでUV Setを「Default」に戻し、Poly Groupsパネルで「body」のMeshを選択。
すべての面を選択します。

UV Setは「body」に切り替わりました。
選択された面が属しているUV Setに、自動的に切り替わる挙動になります。

この選択面を指定のUV Setに移動させる操作を、すべてのUV Setに対して行います。
結果的に、UV Set「Default」にはUV面が存在しない状態になります。

今回はここまでです。
次回は、UV SetごとにUVを割り当てていく作業に入る予定です。