リアルタイムレンダリング向けのモデルデータでは Direct3D や OpenGL で扱う頂点情報に近い(できるだけ変換のためのオーバーヘッドが少ない)形式が用いられると思うんだけど、MikuMikuDance 等で使用される PMX 形式でも同様の仕様があるわ。

 

で、Yuzu Pmx Export Tools で出力する際も C4D の頂点情報から PMX の頂点情報に変換してるんだけども、変換の過程でほぼ確実に頂点数が増えるのよ。

今回はそこらへんに関する技術情報的なやつをご紹介。

 

 

CINEMA 4D 上の頂点情報について

今回は下図のようなプリミティブから作成したシンプルな立方体を使用して解説するわ。

a03_013_001

C4D 上では、頂点を移動させる際とかの感覚通り、ポリゴンを構成する頂点は素直に8個になるわね。

そして、頂点は基本的に座標のみを持っているわ。

a03_013_002

 

UV法線は別途任意で追加するタグが保持するんだけど、これはポリゴン毎に全ての頂点に対して保持しているのね。
※「UVWタグ」および「スムーズタグ」の場合

四角ポリゴン6枚の場合、保持されるUVの個数は

6×4=24

ということになるわね。

つまり、UVや法線はモデルデータの見かけ上の8頂点ではなく、実際は24頂点分保持されている事になるわ。

補足:
ここらへんの詳しい情報は C4D のプラグイン SDK ドキュメント(英語)を見るとわかるヨー

ちなみに、ジョイント(ボーン)のウェイトは1頂点につき1個(1セット)だから、頂点数には影響ないわ。

 

 

PMX 上の頂点情報について

PMX ファイル内の頂点情報は Direct3D でレンダリング用に使う頂点形式に近い形になっているわ。

保持している情報は、座標UV法線ウェイト、その他追加情報ね。

C4D では座標とUVその他が別々に保持されていたけど、 PMX では1頂点に関する情報は全てまとまっているわ。

a03_013_003

PmxEditor の頂点タブの内容そのまんまね。

上図は例に出した立方体をそのまま PMX 化したものだけど、先の計算通り24頂点になっているわ。

補足:
実際は四角ポリゴンから三角ポリゴンへの変換とか色々あって、他の形状でも計算通りにいくとは限らないので注意。

 

 

C4D と PMX で頂点数に差が出る理由

 

C4D 上では8頂点、PMX 上では24頂点

この差はUVと法線の違いから出てくるわ。

 

というか、C4D 上でも内部的には24頂点分の情報を持っていて、見かけ上8頂点になっていると言えるわね。

 

で、Yuzu Pmx Export Tools では、その頂点情報を出力する際にUVや法線を考慮して、できるだけ頂点情報をまとめて少なくするようにしているという次第。

だから、法線が変化するスムーズタグの設定によって PMX 上の頂点数が変動したりするわ。

a03_013_005

 

例えば、エッジにスムーズがかからないようになっている場合、下図のように1頂点内の法線(赤い線)は3方向存在する事になるわね。

結果、ポリゴンの頂点はそれぞれ別の法線を持つことになって、頂点数が増える事になるわ。

a03_013_004

a03_013_003

 

エッジにスムーズがかかるようにすると、1頂点内の法線は1つになるから、ポリゴンの頂点は1つの法線だけになって、全てのポリゴンは同じ頂点を参照すればいいことになるわね。

a03_013_007

a03_013_006

 

UVに関しても同様ね。

ポリゴン上の頂点は1つでもUVでは2つになる場合は、ポリゴンに対して別々のUVを持つ頂点を割り当てなければならなくなるわ。

a03_013_009

 

全てのポリゴンで同じUVの場合は、1つのUVだけで済むから、同じ頂点情報を参照できる事になるわ。

a03_013_008

 

という感じで、頂点のUVと法線が同じなら結合、UVと法線どちらかでも異なればそのままというカタチで C4D 内の頂点情報が出力されるという次第。

実際の処理では、四角ポリゴンや n-gon を三角ポリゴンに分割してから頂点情報のアレコレをするから、四角ポリゴンで考えるよりもうちょっと頂点が増える感じね。

 

 

長々とかいてしまったけど、こんな感じで頂点の数が変わるということを理解してもらえたら嬉しいわ。

今回はこれにて。

 

 


↓ランキングに参加してます↓
ブログランキング・にほんブログ村へ
人気ブログランキングへ