リアルタイムレンダリング向けのモデルデータでは Direct3D や OpenGL で扱う頂点情報に近い(できるだけ変換のためのオーバーヘッドが少ない)形式が用いられると思うんだけど、MikuMikuDance 等で使用される PMX 形式でも同様の仕様があるわ。
で、Yuzu Pmx Export Tools で出力する際も C4D の頂点情報から PMX の頂点情報に変換してるんだけども、変換の過程でほぼ確実に頂点数が増えるのよ。
今回はそこらへんに関する技術情報的なやつをご紹介。
CINEMA 4D 上の頂点情報について
今回は下図のようなプリミティブから作成したシンプルな立方体を使用して解説するわ。
C4D 上では、頂点を移動させる際とかの感覚通り、ポリゴンを構成する頂点は素直に8個になるわね。
そして、頂点は基本的に座標のみを持っているわ。
UVや法線は別途任意で追加するタグが保持するんだけど、これはポリゴン毎に全ての頂点に対して保持しているのね。
※「UVWタグ」および「スムーズタグ」の場合
四角ポリゴンが6枚の場合、保持されるUVの個数は
6×4=24
ということになるわね。
つまり、UVや法線はモデルデータの見かけ上の8頂点ではなく、実際は24頂点分保持されている事になるわ。
補足:
ここらへんの詳しい情報は C4D のプラグイン SDK ドキュメント(英語)を見るとわかるヨー
ちなみに、ジョイント(ボーン)のウェイトは1頂点につき1個(1セット)だから、頂点数には影響ないわ。
PMX 上の頂点情報について
PMX ファイル内の頂点情報は Direct3D でレンダリング用に使う頂点形式に近い形になっているわ。
保持している情報は、座標、UV、法線、ウェイト、その他追加情報ね。
C4D では座標とUVその他が別々に保持されていたけど、 PMX では1頂点に関する情報は全てまとまっているわ。
PmxEditor の頂点タブの内容そのまんまね。
上図は例に出した立方体をそのまま PMX 化したものだけど、先の計算通り24頂点になっているわ。
補足:
実際は四角ポリゴンから三角ポリゴンへの変換とか色々あって、他の形状でも計算通りにいくとは限らないので注意。
C4D と PMX で頂点数に差が出る理由
C4D 上では8頂点、PMX 上では24頂点。
この差はUVと法線の違いから出てくるわ。
というか、C4D 上でも内部的には24頂点分の情報を持っていて、見かけ上8頂点になっていると言えるわね。
で、Yuzu Pmx Export Tools では、その頂点情報を出力する際にUVや法線を考慮して、できるだけ頂点情報をまとめて少なくするようにしているという次第。
だから、法線が変化するスムーズタグの設定によって PMX 上の頂点数が変動したりするわ。
例えば、エッジにスムーズがかからないようになっている場合、下図のように1頂点内の法線(赤い線)は3方向存在する事になるわね。
結果、ポリゴンの頂点はそれぞれ別の法線を持つことになって、頂点数が増える事になるわ。
エッジにスムーズがかかるようにすると、1頂点内の法線は1つになるから、ポリゴンの頂点は1つの法線だけになって、全てのポリゴンは同じ頂点を参照すればいいことになるわね。
UVに関しても同様ね。
ポリゴン上の頂点は1つでもUVでは2つになる場合は、ポリゴンに対して別々のUVを持つ頂点を割り当てなければならなくなるわ。
全てのポリゴンで同じUVの場合は、1つのUVだけで済むから、同じ頂点情報を参照できる事になるわ。
という感じで、頂点のUVと法線が同じなら結合、UVと法線どちらかでも異なればそのままというカタチで C4D 内の頂点情報が出力されるという次第。
実際の処理では、四角ポリゴンや n-gon を三角ポリゴンに分割してから頂点情報のアレコレをするから、四角ポリゴンで考えるよりもうちょっと頂点が増える感じね。
長々とかいてしまったけど、こんな感じで頂点の数が変わるということを理解してもらえたら嬉しいわ。
今回はこれにて。