Version: Unity 6.0 (6000.0)
言語 : 日本語
メッシュデータ
メッシュトポロジーデータ

メッシュの頂点データ

頂点データの要素は、頂点属性と呼ばれます。

各頂点は以下の属性を持つことが可能です。

内部的には、すべての頂点データは同じ大きさの別々の配列に格納されます。メッシュに 10 個の頂点位置を持つ 1 つの配列が含まれているとすると、これは使用する他の頂点属性ごとに 10 個の要素を持つ配列も持っています。

C# では、Unity は VertexAttribute enum で利用可能な頂点属性を表します。Mesh クラスのインスタンスが指定された頂点属性を持つかどうかは、Mesh.HasVertexAttribute 関数で確認することができます。

Position

頂点の位置は、オブジェクト空間における頂点の位置を表します。

Unityはこの値を使って、メッシュの表面を決定します。

この頂点属性はすべてのメッシュに必要である。

Mesh クラスで、このデータにアクセスする最も簡単な方法は、Mesh.GetVerticesMesh.SetVertices を使用することです。また、Unity はこのデータを Mesh.vertices に保存しますが、この古いプロパティは効率と使い勝手があまり良くありません。

Normal

頂点法線は、頂点位置でサーフェスから直接 “外” を指す方向を表します。

Unity はこの値を使って、メッシュサーフェスのライトの反射を計算します。

この頂点属性は必須ではありません。

Mesh クラスで、このデータにアクセスする最も簡単な方法は、Mesh.GetNormalsMesh.SetNormals を使用することです。また、Unity はこのデータを Mesh.normals に保存しますが、この古いプロパティは効率と使い勝手があまり良くありません。

Tangent

頂点接線は、頂点位置でサーフェスの “u” (水平テクスチャ) 軸に沿った方向を表します。

Unity では、頂点接線は、追加のデータとともに 4 成分のベクトルとして保存されます。ベクトルの x,y,z 成分は接線を表し、ベクトルの w 成分はその 向き を表します。Unity では、w の値を使用して、接線と法線のクロス積である従法線を計算します。

Unity は、法線マッピングに接線値と従法線値を使用します。

この頂点属性は必須ではありません。

Mesh クラスで、このデータにアクセスする最も簡単な方法は、Mesh.GetTangentsMesh.SetTangents を使用することです。また、Unity はこのデータを Mesh.tangents に保存しますが、この古いプロパティは効率と使い勝手があまり良くありません。

テクスチャ座標 (UV)

メッシュは最大 8 つのテクスチャ座標を持つことができます。テクスチャ座標は一般に UV と呼ばれ、ひとまとまりになったものはチャンネルと呼ばれます。

Unity は、テクスチャをメッシュに “巻き付ける” ときにテクスチャ座標を使用します。UV は、テクスチャのどの部分がメッシュサーフェスに揃うのかを頂点位置で示します。

UV チャンネルは一般に、最初のチャンネルを “UV0”、2 番目のチャンネルを “UV1”、以降 “UV7” まで同じ要領で呼ばれます。チャンネルはそれぞれ、シェーダーセマンティクス TEXCOORD0TEXCOORD1、以降 TEXCOORD7 までにマップされます。

デフォルトでは、Unity は最初のチャンネル (UV0) を使用して、ディフューズマップやスペキュラーマップなどの通常テクスチャの UV を保存します。2 番目のチャンネル (UV1) にはベイクしたライトマップ UV を保存し、3 番目のチャンネル (UV2) にはリアルタイムのライトマップ UV の入力データを保存できます。ライトマップ UV と Unity がこれらのチャンネルをどのように使用するかの詳細については、ライトマップ UV を参照してください。

8 つのテクスチャ座標属性はすべて任意です。

Mesh クラスで、このデータにアクセスする最も簡単な方法は、Mesh.GetUVsMesh.SetUVs を使用することです。また、Unity はこのデータを次のプロパティに保存します。Mesh.uvMesh.uv2Mesh.uv3、以降同様に Mesh.uv8 まで。この古いプロパティは効率と使い勝手があまり良くありません。

Color

頂点色は、頂点の通常色を表します (存在する場合)。

この色は、メッシュが使用するテクスチャとは無関係に存在します。

この頂点属性は必須ではありません。

Mesh クラスで、このデータにアクセスする最も簡単な方法は、Mesh.GetColorsMesh.SetColors を使用することです。また、Unity はこのデータを Mesh.colors に保存しますが、この古いプロパティは効率と使い勝手があまり良くありません。

ブレンドインデックスとボーンウェイト

スキンメッシュでは、ブレンドインデックスによってどのボーンが頂点に影響を与えるかを示し、ボーンウェイトによってそれらのボーンが頂点に与える影響の強さを表します。

Unity では、これらの頂点属性は一緒に保存されます。

Unity はブレンドインデックスとボーンウェイトを使用して、スケルトンの動きに基づいてスキンメッシュを変形させます。詳細は、Skinned Mesh Renderer を参照してください。

これらの頂点属性は、スキンされたメッシュに必須です。

以前は、Unity では 1 つの頂点に影響を与えるボーンを最大 4 つまでしか使用できませんでした。このデータは Mesh.boneWeights 配列の BoneWeight 構造体に格納されていました。現在、Unity では 1 つの頂点に影響を与えるボーンを最大 256 個まで使用できます。このデータは BoneWeight1 構造体に格納され、Mesh.GetAllBoneWeightsMesh.SetBoneWeights を使用してアクセスすることができます。詳細は、リンク先の API ドキュメントを参照してください。

メッシュデータ
メッシュトポロジーデータ