3ds Max では、テクスチャ座標と頂点カラーに関する情報は、いわゆるテクスチャ頂点およびカラー頂点にそれぞれ保存されています。これらによってメッシュが構築され、それぞれテクスチャ面および colorPreVertex 面も保存されます。この問題は、誤って理解されることが多いので、詳しく説明する必要があります。
メッシュ頂点は、3 次元空間におけるポイントを表す Point3 値で、X、Y、Z のラベルが付いています。メッシュ面はこれら 3 つのポイントを参照し、空間内のサーフェスを定義します。任意の数のテクスチャ面が同じテクスチャ頂点を参照できます。たとえば、球面上の極を多数の面で共有することができます。
テクスチャ頂点 は、テクスチャ空間内のポイントを表す Point3 値、U、V および W です。ビットマップ テクスチャが 2 次元なので、多くの場合 W 値は使用されませんが、常に保存されています。U 値と V 値は、ビットマップ平面内の位置、言い換えればビットマップ内のピクセルに対応しています。つまり、座標によって、実際のメッシュの特定のポイントにおいて表示するイメージのピクセルをメッシュに指示します。
3D 手続き型テクスチャの場合、テクスチャ空間内部のポイントを定義するために 3 つの値がすべて使用されます。テクスチャ面はこれらの頂点を接続して、テクスチャ空間内のオブジェクトをあらわす単独のメッシュを構築します。各テクスチャ面は 3 つの頂点を参照します。任意の数のテクスチャ面が同じテクスチャ頂点を参照できます。
カラー頂点 は、カラー スペース内のポイントを表す Point3 値、R、G および B です。1 単位の側面で赤がローカルの X 軸に、緑が Y 軸に、青が Z 軸に沿っている立方体を想像した場合、左下隅は 0.0,0.0,0.0 で真っ黒、反対側の隅は 1.0,1.0,1.0 で真っ白になり、立方体内部の各ポイントは、0.0 ~ 1..0 の間のコンポーネントを持つ Point3 値によって表すことのできるあらゆる色を表しています。
カラー頂点は基本的にテクスチャ頂点の変化したものです。従来、 3ds Max の初期のバージョンでは、テクスチャ チャネル 2 本を使用するか、またはテクスチャ チャネルとカラー チャネル 1 本ずつを使用することができました。(言い換えれば、1 つのテクスチャ チャネルが 2 つの異なる方法で使用できたのです。)したがって、テクスチャ座標の場合と同様に、ColorPerVertex faces を使用して、カラー頂点を単独のメッシュに接続することができます。
A - テクスチャおよびカラー頂点の数はメッシュ頂点の数と、異なる場合がある。
B - メッシュ面の数は、テクスチャおよびカラー面の数と 常にまったく同じである。
したがって、メッシュ頂点とテクスチャおよびカラー頂点との間には 1 対 1 の対応関係は存在しません。メッシュから頂点番号 10 を取得しても、テクスチャ頂点 10 にそのメッシュ頂点のテクスチャ情報が保存されていることや、カラー頂点 10 がそのメッシュ頂点の頂点カラーを定義していることは期待できません。
B で述べたように、面の数は常に同じです。これだけではなく、メッシュの頂点とカラー面およびメッシュの頂点とテクスチャ面の間には、xこれだけではなく、メッシュの頂点とカラー面およびメッシュの頂点とテクスチャ面の間には、それぞれ 1 対 1 の対応関係が存在します。面 5 に作業対象となる 3 つのメッシュ頂点がある場合、それらに対応するテクスチャ頂点は 5 番のテクスチャ面によって参照される 3 つの頂点になります。
メッシュ頂点に対応するテクスチャ頂点を見つけるには、次の手順を実行します。
歴史的に見て、DOS 用の Autodesk 3D Studio ではメッシュ頂点ごとにテクスチャ頂点が 1 つサポートされていただけであり、カラー頂点はサポートされていませんでした。つまり、メッシュ頂点とテクスチャ頂点の間には 1 対 1 の単純な対応関係が成立していましたが、これによって、現在も .3DS ファイル形式に見られる問題が発生したものです。
テクスチャ処理された球を見てみましょう。球状のマッピング座標では、マップされたイメージの中央を走る Texel の水平行は赤道に適用され、上部の Texel はすべて北極に集まり、下部の Texel は球の南極に集まります。極における頂点は 1 つだけですが、膨大な数の面がその頂点を使用しており、膨大な数の Texel がそこに集合しています。.3DS 形式のテクスチャ座標の場合、極で許可されるのはテクスチャ頂点 1 つだけです。これによって、極の周辺に激しい歪みが生じてしまいます。
3ds Max では、極の頂点にインデックス付けしている各面には対応するテクスチャ面があり、それが、別のテクスチャの Texel をポイントしている異なるテクスチャ頂点を参照しています。このイメージは周囲を正確にラップし、極の近くにアーティファクトは存在しません。
イメージの右側と左側の Texel が出会うところの継ぎ目に適用されるものもあります。基調となるメッシュ頂点は、2 つの異なる Texel を参照できます。これらは継ぎ目の両側にそれぞれ配置されているものです。.3DS には、値は 1 つしか保存できませんでした。3ds Max では、対応する各テクスチャ面を通して両方の値を参照できます。
このことは、テクスチャ座標によって球を作成し、テクスチャ座標を保持せずに .3DS へ書き出すことで視覚化できます。テクスチャ座標の数は、旧形式に合わせるために減らされます。.3DS を戻し、同じマテリアルを両方のオブジェクト(元の球と読み込まれたメッシュ)に適用し、マッピングを比較します。
[3DS ファイルにシーンを書き出し](3DS Exporter)にある[Max のテクスチャ座標を保存](Preserve Max Texure Coordinates)チェックボックスの役割は何でしょうか。ここでは、メッシュ頂点を複製して、.3DS 形式で必要とされる 1 対 1 の対応関係を成立させます。つまり、球の極の頂点が複数の頂点に分割され、この頂点を参照し異なるテクスチャ頂点を使用している各面に対して 1 つずつになります。これによって座標は保持されますが、共通の頂点またはエッジを共有しない要素間ではスムージングが行われないため、メッシュ スムージングはある部分が損なわれます。(イメージの左側の球を参照)
上記の考察は、.3DS にまったく書き出すことのできないものを除き、頂点カラーについても大方あてはまります。しかし、いくつか心得ておくことがあります。
もう一度球を取得して、頂点カラーを適用します。テクスチャ頂点と異なり、極の頂点はほとんどの場合カラーを 1 つだけ必要とします。複数の面が極の頂点を共有しているにもかかわらず、ライト調整の計算には頂点の法線が 1 つしか使用されません。つまり、すべての面が同じ値を再使用しているのです。
次に、同じことをボックスを使用して実行してみます。複数の面が各コーナーの頂点を共有しています。球との違いは、ボックスは形状がフラットなので、各側面には独自の法線が存在することです。つまりこれは、各側面によってライト調整の計算結果が異なるのに、同じ頂点に保存されるということです。テクスチャ頂点の場合とまったく同じように、フラットな外観にするためには複数のカラー頂点が必要になります。ボックスのすべての側面に対して単一のカラー頂点を再使用することで、シェーディングがスムーズになるのです。
多くのゲーム エンジンでは、まだ、メッシュ頂点ごとに 1 つのカラー頂点だけがサポートされた状態です。MAXScript を使用することで、数を減らし 1 対 1 の対応関係を成立させるためのユーティリティを開発することは可能ですが、フラット シェーディングがまったく行われないスムーズすぎる外観になってしまいます。
興味深い例が他にもあります。ティーポット全体を赤くペイントするとしましょう。各メッシュ頂点に 1 つのカラー頂点(またはそれ以上)を保存できる一方で、単一のカラー頂点を作成して、各カラー面の 3 つの頂点インデックスのそれぞれにおいてこのカラー頂点を参照することも可能です。この単一のカラー頂点の値を変更すると、完成オブジェクトの頂点カラーが即座に変更されます。
Unwrap_UVW モディファイヤを使用すると、テクスチャおよびカラー頂点の値を時間の経過に従ってアニメートすることが可能です。3 つの値は、赤、緑、青のチャネルに対応していることを憶えていれば、3 つ目の値のスピナーを使用して青の軸に沿って上下に移動させながら、Unwrap エディタ内の頂点を XY 平面内で動かして、その RG カラーをコントロールできるはずです。赤から緑のグラデーションをエディタのバックグラウンド イメージとして(左下隅を黒、右下隅を赤、左上隅を緑、右上隅を黄色にして)配置すれば、頂点カラーのアニメート用の視覚的なエディタになります。