乗合馬車(Omnibus)の馬車のモデリングについて、いくつか順番に追いかけていきます。
3DCoat 2021.43で確認しました。
前回はリトポルームでUV割り当てまでを行いました。
今回は、今までで作成した形状(3Dモデル+UV)を使ってペイントを行っていきます。
fbxでの形状エクスポートを行う目的の最終工程になります。
ベイク処理
ペイントルームに移行する前に、いくつかのベイク処理を行います。
「ベイク」(焼き付け)は、ペイントを行う際、最終的に3Dモデルとして出力する際(他ツールで扱う際)に固定の情報を与えるための処理になります。
もしペイントルームでの作業後に、一部修正のため3Dモデルを編集/調整された場合は、再度ベイク処理を行う必要があります。
ベイクできるものは以下のようなものがあります。
- 面の頂点法線
- 法線マップ(Normal Map : スカルプトしたものをリトポした場合に必要)
- アンビエントオクルージョンマップ(Ambient Occlusion(AO) Map : 遮蔽による暗がり表現用)
- 曲率マップ (CurvatureMap : 金属などの一部にのテクスチャをペイントする時に使用される)
「面の頂点法線」は3Dモデル(Mesh)の各面の頂点ごとに与えられる情報です。これはリアルタイム描画時のシェーディングで使用される要素です。
「法線マップ」「AOマップ」「曲率マップ」はマテリアルごとのテクスチャに与えられる情報です。
それぞれのベイクについて、流れを追いかけながら説明を入れていきます。
リトポルーム : リトポルームからペイントルームに渡す前処理
リトポルームからペイントルームに行く前に、リトポルーム内でペイントルーム側に情報を渡します。
これはペイント用のオブジェクトを作成する作業になります。
UNDOできない操作のため、実行は注意してください。
リトポルームのメインメニューで「Bake」-「Update Paint Mesh with Retpo Mesh」を選択します。
重要な注意点として、この処理を行うとペイントルームのPaintObjectの置き換えが行われます。
実行時に以下のメッセージが表示されます。
「Cancel」を選択した場合は何も行いません。
それ以外を選択した場合は、ペイントルームでの「Paint Object」「Surface Material」は一度クリアされます。
極力同じペイント情報は保たれますが、少しの変更(面の追加や削除、UVの変更など)でクリアされてしまうことが多いように思いました。
そのため、一度「Save」してからこの処理を実行したほうが安全です。
次にImport Object for Per Pixel Paintingウィンドウが表示されます。
リトポメッシュの情報を元にして、「ペイントメッシュ(Paint Mesh/Paint Object)」と「マテリアル(Surface Material)」が作成されます。
このウィンドウで、「Cancel」を選択するとペイントルームでの「Paint Object」「Surface Material」はクリアされたままになります。
そのため、この段階で「やっぱりやめて作業を1つ前に戻そう」というのはしないほうがいいかもしれません。
いったんキャンセルすることを想定して直前にSaveしておき、
もしキャンセルしたい場合はそのファイルを再読み込みするほうがいいかと思います。
Import Object for Per Pixel Paintingウィンドウでは、以下の点に注目するようにしました。
それ以外はデフォルトのまま使用し、どのような効果があるかは追ってません、、。
- 法線マップの種類のプリセット
- スムージング角度指定
- テクスチャの解像度
「Normal Map Software Preset」は、法線マップの種類を指定します。
出力先のツールに合わせるのがよさそうです。
DirectX系とOpenGL系では法線マップの向きで一部異なる部分があり、これらはDCCツールによって性格が違います。
選択が異なると凸凹が反転することになります。
この差異を吸収するためのプリセット指定になります。
Omniverseに渡す場合は、「3D-Max」を選択しておきます。
Unityを選択した場合は凸凹が反転しました。ただ、Omniverse側のマテリアルのパラメータ指定で変更できるため、
どの形式で出力したというのだけ覚えておけばOKかと思います。
「Auto Smoothing Groups」チェックボックスをOnにすることで、隣接する面が作る頂点法線のスムージングを手動で調整します。
Offの場合は、直方体の場合でも角にスムージングがかかってしまいます。
Onにした場合は、「Max Angle」を指定できます。
30と指定した場合は、隣接面が作る角度が30度以内の場合はスムージングをかけます。
もし、フラットシェーディングする(面をカクカクにする)場合は0を指定します。
一番下に、UV Set名とテクスチャサイズのリストが表示されています。
初めにペイントルームに情報を渡す場合は、ここでテクスチャサイズを指定することになります(後で変更可能です)。
ここで「Default」名のUV Setが存在した場合、かつ、DefaultのUV SetでUV面はカラにしたはず、
という場合はUV面を対象のUV Setに渡し忘れていると思われます。
この場合は一度リトポルームに戻って、個々のUV Setに面が格納されているか確認したほうがいいかもしれません。
なお、すでにペイントルームでペイント済みの場合にいったんリトポルームに戻り、
再度ベイクした際、UV Setが追加または削除される場合はペイントもずれてしまいます。
ペイントルームからリトポルームに戻って再調整時の手順についてはいくつか注意点があるため、別途説明を入れる予定です。
安全に行くには、ペイントルームに入る段階ではMeshとUV Setは名前含めて確定しておく方が無難かと思われます。
後から追加したら、ペイントのテクスチャが全部消えてしまったということもありました。
モデリングルームでのモデリングを行った際は、法線マップはベイクする必要がないためここでは飛ばします。
スカルプトの時に別途説明を入れる予定です。
さて、これでリトポルームの作業が完了しました。
ペイントルームに切り替えます。
ペイントルーム
ペイントルームでは以下のようになっています。
よく使うパネル
よく使うパネルは常に表示しておくようにしました。
右にドッキングしています。
「Texture Editor」で各マテリアル(UV Setごと)のテクスチャ要素を表示します。
マテリアルごとにテクスチャに割り当てることになります。
マテリアルとして使用されるテクスチャとして以下のようなものがあります。
- Color : ベースカラー、アルベドに相当
- Normals : 法線マップ
- Roughness : ラフネス
- TexMetal : メタリック
これらは、PBRマテリアルでの基本要素と同じです。
「Layers」パネルでは、ペイント時の要素を列挙します。
レイヤごとにペイントを分けて管理することができ、階層構造にすることもできます。
「Paint Objects」パネルでは、リトポルームでのMeshに1対1で対応する「Paint Object」が列挙されます。
それぞれの表示/非表示の切り替え、削除を行うことができます。
これは、ペイント用のMeshという理解でよさそうです(リトポ時までのMeshとは分けて考える)。
「Surface Materials」パネルでは、リトポルームでのUV Setに1対1で対応するマテリアルが列挙されます。
それぞれの表示/非表示の切り替え、削除を行うことができます。
今回は、1Meshに対して1UV Setを割り当てているため、「Paint Object」と「マテリアル」も1対1で対応していることになります。
ペイントルーム : アンビエントオクルージョンマップのベイク
アンビエントオクルージョン(AO)のベイク処理は、このペイントルームで行います。
AOとは何か?というのはこの結果を見るとすぐわかるかと思います。
特にリアルタイム環境で、リアルに見せるには必要な要素になります。
メインメニューの「Textures」-「Calculate Occlusion」を選択。
Occlusion Parametersウィンドウが表示されます。
「Lighting Render Target」で「Into New Layer」を選択すると、新しくレイヤが追加されて、そこにAOの情報が格納されます。
「Into the Current Layer」を選択すると、現在Layersパネルで選択されているレイヤに対してAO情報が焼き込まれます。
「Into New Layer」を選択した状態でOKボタンを押すと計算が開始されます。
これは少し時間がかかります。
Layersパネルでは「AmbientOcclusion」という名前のレイヤが追加されました。
このレイヤはカギアイコンが有効になっており、編集不可のレイヤとなります。
AmbientOcclusionレイヤの表示/非表示を切り替えると以下のようになりました。
効果は一目瞭然ですね。
なお、表示時はベースカラーにAOが乗算された状態になります。
この状態でfbxエクスポートした場合は、ベースカラーのテクスチャに対してAOが反映されてしまうことになります。
ベースカラーとAOマップを分けてエクスポートする場合は、
いったんLayersパネルのAmbientOcclusionレイヤを非表示にしてからエクスポートする必要があります。
ペイントルーム : 曲率マップのベイク
マテリアルを割り当てる際は、AOマップのほか「曲率マップ」も要素として使用されます。
これもベイクしてしまいます。
メインメニューの「Textures」-「Calculate Curvature」を選択。
Curvature Baking Parametersウィンドウが表示されます。
これも計算に時間がかかります。
Layersパネルでは「CurvatureMap」という名前のレイヤが追加されました。
このレイヤは非表示で、かつ、カギアイコンが有効になっており、編集不可のレイヤとなります。
マテリアルの割り当てのために使われる情報のため、ビューでは表示しないレイヤになります。
ペイントルーム : ペイントする
これで前準備が整ったため、ペイントを行っていきます。
新しいレイヤを追加してから描画を行うほうが安心できそうです。
Layersパネルの左下の一番左の「+」アイコンをクリックすると、新規レイヤが追加されます。
ペイント対象のMeshのみ表示
まずは指定のMeshを指定のマテリアルで塗りつぶします(Fill)。
このとき、Paint Objectsパネルで対象のMeshだけを表示するようにします。
Paint Objectsパネルは、左側の目玉のアイコンをクリックすると表示/非表示を切り替えます。
このときに[Alt]キーを押しながらクリックすると、選択したMesh以外は非表示にすることができます。
塗りつぶし(Fill)
左のコマンド一覧部より「Fill」を選択します。
なお、コマンド選択はビュー上で[Space]キーを押すと表示されます。
こっちのほうがアクセス効率はよいかと思います。
ビュー上には、Tool Optionsと「Smart Material Preview」という緑枠のウィンドウが表示されます。
この緑枠内にマテリアルでペイントした結果がプレビューされます。
緑枠内のみが塗りつぶし対象になっているわけではなく、表示されているMeshすべてが対象です。
緑枠が縦方向に縮んでいる場合は、「Smart Material Preview」の右上のアイコンをクリックします。
単色指定の場合、以下の操作で塗りつぶしを確認できます。
色はコマンド部の上の矩形で指定。
ツールバーでRoughnessとMetalnessを変更します。
Tool Optionsの「Layer」ボタンを押すと、Layersパネルの選択レイヤに対して塗りつぶしが確定されます。
以下のように、表示Mesh全体が指定のマテリアルで塗りつぶされました。
次に、プリセットのマテリアルで塗りつぶします。
いったんUNDOして単色で塗りつぶす前の状態に戻しました。
「Smart Materials」パネルを表示します。
Metal(金属)、Fabric(布地)、Plastic(プラスチック)、Wood(木)などの素材があらかじめ用意されています。
手すりは金属であるため、Metalのbrassを選択しました。
Tool Optionsの「Layer」ボタンを押すと、Layersパネルの選択されたMeshが塗りつぶされます。
詳細さはペイントでのテクスチャの解像度に依存します。
この金属に錆を追加してみましょう。
Layersパネルで新しいレイヤを追加し、「tesuri_sabi」と名前を変更しました。
「tesuri_sabi」を選択した状態にします。
そのままFillのモードで「Smart Materials」パネルのRustのrust_1を選択しました。
以下のように錆が追加されました。
Tool Optionsの「Layer」ボタンを押して確定します。
この「スマートマテリアル」を抜ける場合は、Material/stencil control panelの一番右の「×」をクリックします。
これで、単色のペイントモードに戻りました。
一度すべてのMeshを表示
Paint ObjectsパネルですべてのMeshを表示します。
手すり部分がいい感じに金属になっているのを確認できました。
このような感じで、単色またはスマートマテリアルで対処できる部分はFillで対応していけそうです。
レイヤごとの合成を調整
ハシゴ部も同様に金属と錆を与えました。
2レイヤ追加しています。
錆の合成を薄めにするには、Layersパネルの「Opacity」を50などにします。
100で100%になり、0に近づくほど薄くなります。
以下のように変化しました。
ブラシ (Brush)
Fillは、表示メッシュすべてを指定の色もしくは指定のマテリアル(スマートマテリアル)で塗りつぶせるのを確認しました。
Brushを選択した場合は、ドラッグしたところを指定のサイズのペンで3Dペイントします。
新しいレイヤを追加し、表示されているMeshの表面をドラッグすると3Dペイントできます。
このとき、色/Roughness/Metalnessのほかに、Depthも反映されます。
Depthは出っ張りを法線マップとして反映します。
ツールバーにDepth/Roughness/Metalnessがあります。
Depthを0にすると凸凹は反映されません。
値が大きくなると凸になります。
Brushのペンサイズは、マウスの右ボタンを押して左右ドラッグで変更。
Depthは、マウスの右ボタンを押して上下ドラッグで変更。
Meshの表面上をドラッグすると凸としてペイント。[Ctrl]を押しながらドラッグすると凹としてペイントとなります。
[Shift]を押しながらドラッグすると、ペイントした部分をぼかします。
レイヤごとにDepthを調整
Layersパネルで、「Depth Opacity」を0に近づけることで、Depthを薄くしていくことができます。
純粋に色だけでペイントしたいレイヤ(Depthで凸凹を付けない)は、レイヤ側の「Depth Opacity」を0にするほうがシンプルかもしれません。
後はFillとBrushの作業で、この乗合馬車のペイント処理はある程度進めることができると思います。
ペイントルーム : テクスチャの解像度の確認と変更
テクスチャの解像度を確認したい場合、後からテクスチャの解像度を変えたい場合は、
メインメニューの「Textures」-「Mesh & Texture Resolution」を選択します。
ここでテクスチャの解像度の確認と変更を行うことができます。
この操作はUNDOできないため、実行は注意してください。
処理中にチェック模様になってしまった (バグ ?)
3DCoat 2021.43で確認しました。
2021の初期から発生することを確認済み。
なんらかの拍子に、ペイント時に限らずチェック模様になってそのチェック模様がスクロールアニメーションすることがありました。
原因は分かりません。
この場合はいったんファイル保存し、3DCoatを終了して再起動したら問題ないようです。
今回はここまででいったん区切ります。
その他、ペイントの削除やテキストの指定などまだ説明しきれていないのがありますので、
次回補足を入れます。