Tips/3DMOD関連/モデル操作(4)


■概要
2009.8.8
 モデル操作一般に関する小ネタ集その4です。テクスチャとUV関係のトピックをここに書きます。GmaxのUV設定機能は決して高機能と呼べるものではありませんが、簡易な面構造であればかえって操作は楽なのかもしれません。ご参考まで。


.
■テクスチャ設定
2009.8.8
 テクスチャは、乗り物やキャラスキンを問わずSA全ての3Dモデルで設定できる着色方法です。下の図は、SAの3Dモデルにテクスチャで着色する場合のイメージ図です。設定箇所は、大きく分けて次の3箇所になります。



(a) メッシュオブジェクトUV設定(UVW Mapping , Unwrap UVW)
(b) マテリアル貼り付けるテクスチャ名などの設定
(c) txdファイルテクスチャ画像


 下のTipsでは(a)のUV設定方法と(b)のマテリアル設定例を紹介します。GmaxのUV設定機能は決して高機能と呼べるものではありませんが、簡易な面構造であればかえって操作は楽なのかもしれません。(c)は機会があれば。

 なお、既存のdffファイルのUV展開図を表示させるだけであれば、それほどややこしい操作は必要ありません。Tips「Unwrap UVW」「モデファイア集約」をご参照ください。



.
■UV設定
2009.8.8
 UV設定は、3次元のメッシュ頂点座標を2次元のテクスチャ平面座標に変換する操作になります。実際にはUV座標のほかにW座標も持つUVW3次元座標系への変換として定義されるようですが、テクスチャではそのうちUVしか使わないので、平面(=UV平面への投影)と思っておいて良いと思います。本サイト内では最終的にW座標を使わないことを前提にUVWギズモ=「UV座標への"投影面"」として説明しています。専門家の方には違和感があるかもしれませんが、ご了承願います。

 余談になりますが、UVマッピングに関しては、3dsMaxやメタセコイアなどのモデラで高機能な「アジの開き」ツールが実装されているのに対して、Gmaxはまさに「置いてけぼり」状態です。良いプラグインをご存知の方がおられましたら是非ご紹介願います。

 Gmaxでは、"UVW Mapping""Unwrap UVW"という二つのモデファイアによってメッシュ頂点座標をテクスチャ平面座標に変換します。私の頭の中では下図のようなイメージです。なんとなくピンときて頂ければ幸いです。

"UVW Mapping"と"Unwrap UVW"


"UVW Mapping"
メッシュの選択面を既定の投影面テンプレート(UVW Mapping Gizmo)に投影する操作。


"Unwrap UVW"
投影面テンプレート上のUV軸を直交平面軸に変換し、投影された面をテクスチャUV平面で表示/編集する操作。




 UV未マッピングのオブジェクト選択面にUV設定とマテリアル設定を行う場合の流れは下図のようになります。下のTips(UV設定チュートリアル(1)〜(4))でチュートリアルっぽく紹介してみましたので、ご参照ください。



 インポートしたモデルなどで、UVマッピング済みメッシュのテクスチャUV平面上の面配置を確認/編集する場合、操作は(2)の"Unwrap UVW"と(3)の"モデファイア集約"だけで良いです。



.
■UV設定チュートリアル(1)"UVW Mapping"
2009.8.8
Latest : 2009.8.9
 UV設定からマテリアル設定までの操作の流れを、単純な形状の面を例に説明します。サンプルはまたもや拙作パンダ1号です。キャラスキンなどメッシュ形状が複雑なモデルの場合、うまく複数部分に分けてUV設定を行ってください。

(1)"UVW Mapping"
 UV設定を行う面を選択(オブジェクト全体も選択可)し、コマンドパネル"Modify"タブ(A1)内の"Modifier List"プルダウン(A2)から"UVW Map"(A3)を選択。


 モデファイアをかけると、画面上に"UVW Mapping Gizmo"(UV座標を持った投影面)が表示される。詳細は図中に書き入れましたのでそちらをご参照ください。"Parameters"パネルの説明は別Tipsに記載しました(別窓で開きます)
慣れないうちはgizmoの縦横比は変えないようにしたほうが良いです。理由はここでは省略します(別Tipsで書くかもしれません)。



 gizmoの配置が済んだら、gizmo形状に応じて"Parameters"パネル(上図B1)の"Length"〜"Height"、"U Tile"〜"W Tile"の項を下記のように以下の設定をしておくことをお勧めします(変換後の面の縦横比を維持するためのおまじないです)。

Planarの場合
Length:Width="1 : 1" の比にする
(縦横比をいじっていなければそのままでOK)

Cylindaricalの場合
Length:Width:Height="1 : 1 : 3.14" の比にする

Length:Width:Height="2 : 2 : 3.14" の比にする

(2009.08.09修正)

Sphericalの場合
U Tile = '1'、V Tile = '0.5' にする




 この設定についての説明は機会があれば別Tipsで。ここでは省きます。興味のある方はこれらの数字をいろいろいじった状態で次へ進んでみてください。





.
■UV設定チュートリアル(2)"Unwrap UVW"
2009.8.8
(2)"Unwrap UVW"
 続いて"Unwrap UVW"操作です。まずコマンドパネル"Modify"タブ内の"Modifier List"プルダウン(C1)から"Unwrap UVW"(C2)を選択(*1)。"Parameter"欄の"Edit"ボタン(C3)を押すとテクスチャ平面のエディット画面が開きます。
(*1)古い"Unwrap UVW"が残っている場合は、集約または削除してからモデファイアをかけなおします。



 下がテクスチャ平面のエディット画面。(1)でマッピングした面が平面座標系で表示されています。おかしなところがあれば、"UVW Mapping"に戻って修正。問題なければ、(D2)あたりのアイコンを駆使してテクスチャ面内の配置を決めていきますエディット画面の操作方法は別Tipsに記載しました(別窓で開きます)。既存dffのUVを開いた場合などで複数IDのUVが重なっているようであれば、操作方法のTipsを参照してマテリアルIDフィルタをかけてみてください。


 以上がUnwrap UVWの基本操作です。テクスチャを描く時にはここで決めた面配置を参考にすることになると思いますが、UV展開図をエクスポートする機能はGmaxには無いようです。ちなみに私は下の図のような原始的なやり方でUV展開図を作っています。






.
■UV設定チュートリアル(3)モデファイアの集約と削除
2009.8.8
(3)モデファイアの"Collapse"(集約)と削除
 "Unwrap UVW"の作業が終わったら、かけたモデファイアを集約します。操作手順は下図に書き込みました。特に難しいところはありませんが、「モデファイアの順序」は必ず確認するようにしてください。

 特にキャラスキンの場合には、「スキンモデファイア」を一緒に集約してしまうと大変なことになります。細心のご注意を。詳細はTips「モデル操作(2)」の「モデファイアと集約」をご参照ください。

 モデファイアを集約せず、キャンセルする場合は"Delete"を選択して削除します。







.
■UV設定チュートリアル(4)マテリアル設定と適用
2009.8.8
(4)マテリアル設定と適用
 最後にマテリアルを設定&適用して、テクスチャを貼るための設定は完了です。

 下図は新規マテリアルを作成して選択面に適用する手順例です。詳細は図に書き込みましたのでご参照ください。マテリアル設定一般に関しては、Tips「モデル操作(3)」でも説明していますので、併せてご参照ください。





 なお、今回の例のようにテクスチャ不要部分をアルファで透過する場合には、ゲーム内で「アルファチャネルを用いた面」が「後ろにある面」より遅い順で描画されなければなりませんのでご注意ください(詳細は割愛します)。

 ゲーム内で描画される順は「マテリアルID」の順と同じです。今回のようにマテリアルを新規作成した場合は自動的に一番最後の順になっています。マテリアルIDの確認と変更については、Tips「モデル操作(3)」の「マテリアルID」をご参照ください。





.
■UVW Mapping補記 "Parameters"パネル
2009.8.8
UVW Mappingの"Parameters"パネル設定項目を簡単に説明しておきます。詳細はHelpをご参照ください。
■Mappingグループ
Planer平面へ投影(推奨)
Cylindarical円筒へ投影(推奨)
(Cap)円筒に上底面も加える
Spherical球面へ投影(推奨)
Shrinkよくわかりません
Box直方体へ投影
Face面ごとにUV作成
XYZ to UVWよくわかりません
Length 他gizmoのサイズ
U Tile 他タイリングのパラメータ

■Channelグループ
いじったことがありません。デフォルトで良いと思います。
(KAMSは多チャンネルUV非サポート?)

■Alignmentグループ
基本的にgizmo編集モードの操作の補助です。Fit系はgizmoの縦横比が変化するので要注意。

X〜Z投影面の基本軸変更
Fit投影面を選択面にFitさせる
Center投影面中心を選択面中心にあわせる
Bitmap Fitよくわかりません
Normal Alignビューポートで「なぞった面」に法線をあわせる
View Alignビューポートの座標軸で軸選択
Region Fitマウスでドラッグした範囲に投影面をFitさせる
Reset初期状態に戻す
Aquire他の面からマップをコピー?使ったことがありません






.
■Unwrap UVW補記 "EDIT UVWs"操作方法
2009.8.8
テクスチャ平面エディット画面("EDIT UVWs")の操作方法を簡単に説明しておきます。記号を振っていないものについては、機能が良くわかりません。詳細はHelpをご参照ください。
■メイン画面


■マウス操作
モデラの基本操作とほぼ同じ。頂点選択状態での'Shift'+ドラッグ操作が「u軸またはv軸方向の移動/スケール」になる点が異なります。

■アイコン説明
(G1)選択頂点の移動/回転/スケール/反転
(G2)辺で繋がった頂点へ選択拡大/縮小
(G3)頂点分割
(G4)頂点結合(ターゲットモード/選択モード)(*1)
(G5)テクスチャ更新
(G6)テクスチャ表示on/off
(G7)設定パネル起動(主な設定項目は下記)
(G8)テクスチャ選択
(G9)座標数値入力
(G10)選択頂点のロック/ハイド/フリーズ
(G11)マテリアルIDフィルタ
(G12)表示のパン/ズーム/範囲ズーム/選択ズーム
(G13)スナップ(*2)

(*1)
ターゲットモード:頂点を別の頂点へドラッグして結合させるモード
選択モード:選択した頂点のうち重複しているものを結合させるモード

(*2)
頂点位置は合わせたいけれど結合したくない、そんなときに使えたら結構便利だと思うのですが、機能させる方法がわかりません。。




■設定パネル
図は割愛。線や頂点が見難い場合に色を変えたりできます。"Show Selected..."は使えたらとても便利だと思うのですが、機能させる方法がわかりません。。
Line Color頂点/線の色
Selection Color選択頂点の色
Weld Threshold頂点結合の閾値






.
■未使用UVの削除
2009.11.22
 UV設定済みの面に対して削除やデタッチの操作を行うと、消したはずの頂点がUVマップ上に未使用UV頂点として残ります。この未使用UV頂点はエクスポート時に実頂点として出力されるため、残したままだと出力dffサイズの増加を招いてしまいます。

 未使用UV頂点は"Unwrap UVW"をかければ調べることが出来ますが、これを手動で消すのはけっこう手間です。そこで本Tipsでは、未使用UV頂点を一括削除してくれるスクリプト"Clear Dead UVW's"を紹介します(参考URL(1))。作者はskintoolsのsteve johnsonさんです。

 下の画像は私がこのスクリプト導入するきっかけとなった、大変ひどい例です。左が未使用UVを放っておいたUVマップです(バイクMODのフロントフォークの全UVマップを重ねて表示しています)。線で繋がれていない頂点が未使用UVです。実UV1049に対して2291個の未使用頂点があります。デタッチやアタッチ操作を多用しているとこういう状態になります。

 これらの未使用頂点を消してくれるのが"Clear Dead UVW's"ですが、オリジナルスクリプトには条件によってGmaxが落ちてしまうバグ?があったため、改造版を作成しました。本サイト"Download" > "Clear Dead UVW's fix版"からDLしてご使用ください。



 上のバイクMODの例で、未使用UV削除前後のエクスポート時間とファイルサイズを比較しました。ひどい例ではありますがご参考まで。実行マシン環境は本サイトトップページをご参照ください。

UV頂点数出力時間ファイルサイズ
削除前17,077403.0 sec609 KB
削除後4,08768.4 sec203 KB



"Clear Dead UVW's Fixed"スクリプト使用方法
■導入方法
 導入方法は"skintools"と同じです。詳細はskintools導入編動画またはskintools_gmaxのhtmlマニュアルをご参照ください。

(1)
解凍した"chugg_cleardeaduvws.mcr""ui\macroscripts"フォルダにコピー。

(2)
Gmaxメニューの"Customize">"Customize User Interface"からメニュー登録。カテゴリーは「Chugg's Tools」、登録するActionは「cleardeaduvs」です。


■使用方法
(1)
未使用UVを削除したいオブジェクトを選択(複数可)して、登録した"Clear Dead UVW's"を起動(A1)。ダミー等が含まれていてもskipしますので、基本的に全選択で問題ありません。下の画像は、スクリプトを"Tools"メニューに登録した例です。

(2)
下画像のようなメッセージ窓(A2)が表示されたら削除完了。選択オブジェクトに含まれていた未使用UV数、全UV頂点数、チェックしたマップ数、メッシュオブジェクト数が表示されます。







<参考URL>





.
■半透明処理の注意点
2010.2.11
 ポリゴンの半透明処理に関する注意点を書いておきます。内容は以下の2点です。

(1)
半透明処理とポリゴン描画順

(2)
アルファマップとDXT圧縮


 なお、本Tipsの内容は以前2ch掲示板で質疑されていた内容をもとに、テストモデルで検証を行った結果をまとめたものになります。貴重な情報を投稿いただいた方々に感謝致します。

 透過設定方法の詳細は割愛しますが、テクスチャのアルファマップを用いる方法は本Tipsの(2)で、マテリアルのパラメータで設定する方法はTips「マテリアル設定」でそれぞれ簡単に触れていますので、適宜ご参照ください。

(1)半透明処理とポリゴン描画順
ポリゴン描画順の影響

 SAでの透過部描画結果(*1)は、ポリゴンの描画順(=マテリアルIDの順)(*2)に大きく影響されます。この仕組みを覚えておくと透過処理のトラブルが少なくなると思います。

 (*1)描画順の影響を受けるのは「半透明」の透過処理のみです。
 (*2)正確には「サブマテリアルのマテリアルID順」になります。異なるマテリアル間の描画順については未検証です。


 下のようなテストモデルを使って、マテリアルIDと透過処理の関係を確認してみました。wuziのdffに、透過ポリゴンと、結果をわかりやすくするためのテスト用ポリゴンを追加しています。



 このテストモデルのマテリアルID順を変えてSA内で表示させた時の表示結果が下図になります。それぞれのポリゴンのマテリアルIDを「wuzi=1、テストポリゴン=2、透過ポリゴン=3に設定したものが左の画像、「wuzi=1、透過ポリゴン=2、テストポリゴン=3」に設定したものが右の画像になります。なお、透過ポリゴンの透過度は50%に設定しています。



 左の画像では透過ポリゴン描画時に既にwuziポリゴンとテストポリゴンが描画されており両方のポリゴンを対象とした透過処理が行われています。

 一方右の画像では、透過ポリゴン描画の時点でwuziポリゴンしか描画されておらずテスト用ポリゴンを無視してwuziポリゴンのみが透けて見えるように処理されています。その後に描画されるテスト用ポリゴンは透過処理の対象にならず、普通に手前のポリゴンに隠れて描画されてしまいます

 ちなみに透過ポリゴンと背後の非透過ポリゴンに同一のマテリアルIDが適用されている場合は、ポリゴン描画順が別の要因(おそらく頂点格納順など)で決まるため、うまく透過する部分としない部分の両方があらわれる可能性があります。曖昧さを無くすためには、透過部と非透過部で「明示的に」マテリアルIDを分けることをお勧めします。


まとめると、
透過ポリゴンのマテリアルIDは背後のポリゴンより大きくなるよう設定する。

としておけばトラブルが少なくなるかと思います。




マテリアルIDの設定
 基本的には、一枚のテクスチャはひとつのマテリアルIDで管理することになりますので、透過させる部分は、背後のテクスチャとは別のテクスチャに描くことをお勧めします

 透過ポリゴンと背後ポリゴンに同じテクスチャが割り当てられている場合には、透過ポリゴンに新しくマテリアルを適用してテクスチャを指定しなおします。


GmaxでのマテリアルID変更
 「マテリアル」と「オブジェクト」の両方でマテリアルIDを設定する必要があります。詳細は本サイトTips「マテリアルID」をご参照ください。

別モデラでテクスチャを設定している方へ
 元モデラのほうでもテクスチャのIDが変更できるかと思います。慣れたほうで作業されると良いと思います。





(2)アルファマップとDXT圧縮
 続いてアルファマップを設定したテクスチャをDXT圧縮した場合の表示結果についてまとめます。

DXT圧縮の影響
 上の記事と同じモデルに下図のようなグラデーションアルファマップを適用し、圧縮フォーマットによるSAでの表示結果の違いを確認しました。DXT圧縮によりアルファ値のbit数が変化するため、画像のような差異が生じる点にご注意ください。



 DXT圧縮のアルファチャンネルのビット数は、DXT1で1bit、DXT3で4bitとされており(参考URL(1)参照)、DXT1ではグラデーションさせたアルファ値が1bit(透過または非透過のどちらか)に丸められているのがわかります。つまり、DXT1ではポリゴンを半透明に設定することはできません

 DXT3では、かなりなめらかに透過度が変化しますが、よーく見ると下図のように4bit(16階調)の不連続があることがわかります(下の画像は端が切れていますので16段全ては見えていません)。



 このレベルの不連続が気になるケースは少ないかもしれませんが、圧縮によりこのような影響が出ることは覚えておくと良いと思います。



txd workshopとDXT圧縮フォーマット
 txd workshopでのアルファマップの設定手順は下図のとおりです。"compressed"(A4)にチェックを入れるとDXT圧縮をかけることができます。DXT圧縮のフォーマットは以下のように自動的に選択されますが、(3)のように操作手順によって結果が異なる場合があるようですので、圧縮後にフォーマットを確認しておくことをお勧めします。

 ・(1)非圧縮のアルファ無しテクスチャを圧縮
  →"DXT1圧縮"がかかる

 ・(2)非圧縮のアルファ付きテクスチャを圧縮
  →"DXT3圧縮"がかかる

 ・(3)DXT1圧縮済テクスチャにアルファマップを追加
  →"DXT1圧縮"のまま



 稀に"alpha used"や"compressed"に入れたチェックが反映されなかったり、メモリエラーで設定ができなかったりする場合があります。その場合は一操作ごとにセーブ→開きなおすなどするとうまくいくかもしれません。






<参考URL>
(1)






.
■陰影ベイク(Blender)
2011.7.24
 GTASAでは、普通のシーンで3Dメッシュにシェーディングがかからず、ベタ塗りのテクスチャでは、下図左上画像のように、まったく立体感が表現されません。そのためテクスチャに陰影を書き込むことで立体感を表現することになるのですが、色塗りに苦心する身には、この陰影書き込みはとても困難な作業の一つです。

 私は最近になって知ったのですが、3DCG総合ソフトのBlenderにはベイクという機能があり、下図右上/右下の画像のように光源下のシェーディング結果をテクスチャに書き出すことができます。あとはベイクした陰影テクスチャの明るさなどを調整したうえで、レイヤ機能のあるペイントソフトなどで本テクスチャと合成すると便利かと思います。

 Gmaxと無関係のネタではありますが、個人的にとても便利な機能と思いましたので本稿で簡単に操作方法を紹介しておきます。他のモデラでも搭載されている機能かもしれませんので、ご興味のある方は調べてみて下さい。





 なお、出力するのはあくまでテクスチャですので、モデルをdffとしてイン/エクスポートする必要はありません。UV設定とテクスチャ指定さえしてあれば、メタセコイアなどからインポートしたモデルでも処理は可能と思います。

 また、ここで紹介する手順、画像はBlender2.58のものですが、バージョンが2.5xであればおそらく同様の操作でベイクできると思います。また2.4xにも同様の機能があると思いますので、似た名前の機能を探せば同様の処理ができるかと思います。

 Blenderの導入方法や基本的な操作方法の説明は割愛します。参考URLは、ちょうどよさそうなものが見つからなかったため今のところは無しですが、よさげなものが見つかったら更新しようと思います。

1.ベイク操作

 陰影を焼き込むには、対象となるメッシュと、陰影を作るための光源が必要です。また、焼きこむメッシュはUV設定とテクスチャ指定を済ませている必要があります。そのほか注意事項を稿末の「■諸注意」に記載しましたので併せてご参照下さい。

 Blenderではプリセットの画面レイアウトを切り替えて使うことができ、それぞれ表示されるウィンドウが大きく異なりますのでご注意下さい。ここでは"Default"のレイアウトで説明します。

 光源に関しては、陰影を焼きこむぶんにはデフォルトの点光源設定のままで問題ないと思います。ただそのままでは多少陰影が濃く感じるかもしれませんので、ベイク後画像処理ソフト等で明るさ/コントラスト等調整すると良いと思います。Blenderでのレンダリングに馴染みのある方は、望みの陰影が得られるよう光源の種類や数を工夫してみてください。個人的には、回り込みのある"Hemi"光源が焼きこみ用途としては無難かなと思います。

 ベイクはレンダリングパネルから実行します。

(1)
ベイク対象のメッシュを選択する(A1)

(2)
プロパティウィンドウのカメラのアイコン(A2)をクリックして、レンダリング設定パネルを開きます。

(3)
ずらりと並んだ設定パネルから"Shading"パネル(A3)を開き、テクスチャに反映させる項目を設定します。私は下図の様に設定していますが、とりあえずはこれで問題ないかと思います。詳細はわかる範囲で下に補記します。

(4)
"Bake"パネル(A4)を開いて"Bake"ボタンをクリックすると、Blenderにロードされているテクスチャに陰影が書き込まれます。テクスチャファイルに反映させるには次の「■2.テクスチャの保存」の手順で保存します。




Shading設定補記
Textures陰影ベイク時はoff推奨。陰影付けには無関係ですし、理由はわかりませんがエッジの線が焼きこまれたりします。
Shadows:メッシュに「投影される影」を反映させる。ベイクに関しては、髪の毛が顔に作る影などを焼きこみたい場合に使うと良いかもしれません。ただしその場合は、光源のほうでも影を投影する設定にする必要があります。
RayTrace:レイトレース処理結果を反映させる。具体的には反射設定による映り込み、レイトレース設定の影など。
Color Management:なにをしているのか良くわかりませんが、レンダリング時に色を調整してくれるっぽいです。陰影に関してはコントラストを押さえ気味に仕上げてくれるので、私はonにしています。

上記以外の設定は私は普通のレンダリングでもいじったことがないので割愛します。




2.テクスチャの保存

 「■1.ベイク操作」でベイクしたテクスチャをファイルに保存します。

(1)
プリセットレイアウトから"UV Editing"を選択(B1)する。

(2)
画面下のイメージアイコン(B2)をクリックして、表示するテクスチャを選択する。

(3)
画面下のイメージメニュー(C1)をクリックして、"Save As Image"を選択し、名前をつけて保存する。

(4)
出力するテクスチャについて手順(2)-(3)を繰り返す。








諸注意

 陰影のベイクはテクスチャを自動生成する操作になります。ふとした条件で意図しない結果に繋がることもありますのでご注意下さい。

■UVの重なり
 左右対称モデルでUVを折り返して重ねている場合や、コピーして作ったメッシュで同じUV座標を参照している場合など、つまり同じテクスチャ位置に複数のUV面が重なっている場合には、ベイク結果が同じ箇所に書き込まれるために、陰影がまだらになるなどの問題が発生することがあります
 この場合、Editモードで面を選択してベイクする、もしくは重なったメッシュを削除しておくと問題を回避できるかと思います。

■ベイク後のテクスチャサイズ変更
 ベイク結果はUV座標に対してある程度のマージン(*)を持って書き込まれますが、出力後のテクスチャを画像ソフトなどで縮小すると、補間によりUVの境界付近で背景色がはみ出してくる場合があります
 このようなトラブルを避けるため、ベイク時のテクスチャには最終的に使用するサイズのものを指定しておくことをお勧めします。

(*) デフォルトでは2pix。レンダリング設定の"Bake"パネルで設定できます。









inserted by FC2 system