教育事業部の事業内容 演劇、音楽のタレント並びに作詞家、作曲家、編曲家等アーティストの育成及びマネージメント、コンピュータ教室の経営等を行っています。
ゲームエンジン Unity オンラインマニュアル
教育事業 パルテア

〜Unity Graphics Mesh メッシュ データ〜

メッシュ データ
このページには、メッシュに含まれるデータと、Unity がそのデータを Mesh クラスに格納する方法に関する情報が含まれています。

概要

メッシュは、次のプロパティによって定義されます:

・ 頂点: 3D 空間内の位置のコレクションで、オプションで追加の属性があります。
・ トポロジ: 表面の各面を定義する構造のタイプ。
・ インデックス: トポロジに基づいて、頂点がどのように組み合わされて表面を作成するかを表す整数のコレクション。

これに加えて、変形可能なメッシュには以下のいずれかが含まれます:

・ ブレンド シェイプ: アニメーションで使用するために、メッシュのさまざまな変形バージョンを表すデータ。
・ バインド ポーズ: スキン メッシュ内のスケルトンの「基本」ポーズを表すデータ。

頂点データ

頂点データの要素は、頂点属性と呼ばれます。
各頂点には、次の属性を設定できます:

・ 位置
・ 法線
・ 接線
・ 色
・ 最大 8 つのテクスチャ座標
・ ボーンの重みとブレンド インデックス (スキン メッシュのみ)

内部的には、すべての頂点データは同じサイズの別々の配列に格納されます。メッシュに 10 個の頂点位置を持つ配列が含まれている場合、メッシュが使用する他の各頂点属性の 10 個の要素を持つ配列も存在します。
C# では、Unity は VertexAttribute 列挙型を使用して、使用可能な頂点属性を記述します。 Mesh.HasVertexAttribute 関数を使用して、Mesh クラスのインスタンスに特定の頂点属性があるかどうかを確認できます。

位置

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

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

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

Mesh クラスでは、このデータにアクセスする最も簡単な方法は、Mesh.GetVertices と Mesh.SetVertices を使用することです。 Unity はこのデータを Mesh.vertices にも保存しますが、この古いプロパティは効率が悪く、ユーザー フレンドリではありません。

法線

頂点法線は、頂点の位置で表面から直接「外」を指す方向を表します。
Unity はこの値を使用して、光がメッシュの表面で反射する方法を計算します。
この頂点属性はオプションです。
Mesh クラスでは、このデータにアクセスする最も簡単な方法は、Mesh.GetNormals と Mesh.SetNormals を使用することです。Unity はこのデータを Mesh.normals にも保存しますが、この古いプロパティは効率が悪く、ユーザー フレンドリではありません。

接線

頂点接線は、頂点の位置で表面の「u」(水平テクスチャ) 軸に沿って指す方向を表します。
Unity は、頂点接線を追加データと共に 4 成分ベクトルに保存します。ベクトルの x、y、z 成分は接線を記述し、ベクトルの w 成分はその方向を記述します。 Unity は w 値を使用して従法線を計算します。従法線は接線と法線の積です。
Unity は法線マッピングで接線と従法線の値を使用します。
この頂点属性はオプションです。
Mesh クラスでは、このデータにアクセスする最も簡単な方法は Mesh.GetTangents と Mesh.SetTangents を使用することです。Unity はこのデータを Mesh.tangents にも保存しますが、この古いプロパティは効率が悪く、ユーザーフレンドリーではありません。

テクスチャ座標 (UV)

メッシュには、最大 8 セットのテクスチャ座標を含めることができます。テクスチャ座標は一般に UV と呼ばれ、セットはチャネルと呼ばれます。
Unity は、テクスチャをメッシュの周りに「ラップ」するときにテクスチャ座標を使用します。UV は、テクスチャのどの部分が頂点位置でメッシュ サーフェスと揃うかを示します。
UV チャネルは一般に、最初のチャネルの場合は「UV0」、2 番目のチャネルの場合は「UV1」、以下同様に「UV7」まで呼ばれます。チャネルはそれぞれ、シェーダー セマンティクス TEXCOORD0、TEXCOORD1、以下同様に TEXCOORD7 までマッピングされます。
デフォルトでは、Unity は最初のチャネル (UV0) を使用して、拡散マップやスペキュラ マップなどの通常のテクスチャの UV を保存します。Unity は、2 番目のチャネル (UV1) を使用してベイクされたライトマップ UV を保存し、3 番目のチャネル (UV2) を使用してリアルタイム ライトマップ UV の入力データを保存できます。ライトマップ UV と Unity がこれらのチャネルを使用する方法の詳細については、「ライトマップ UV」を参照してください。
8 つのテクスチャ座標属性はすべてオプションです。
Mesh クラスでは、このデータにアクセスする最も簡単な方法は Mesh.GetUVs と Mesh.SetUVs を使用することです。Unity では、このデータを Mesh.uv、Mesh.uv2、Mesh.uv3 など、Mesh.uv8 までのプロパティに保存します。これらの古いプロパティは、効率が悪く、ユーザー フレンドリではないことに注意してください。



頂点の色は、頂点がある場合、その基本色を表します。
この色は、メッシュが使用するテクスチャとは無関係に存在します。
この頂点属性はオプションです。
Mesh クラスでは、このデータにアクセスする最も簡単な方法は Mesh.GetColors と Mesh.SetColors を使用することです。Unity では、このデータを Mesh.colors に保存しますが、この古いプロパティは効率が悪く、ユーザー フレンドリではありません。

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

スキン メッシュでは、ブレンド インデックスはどのボーンが頂点に影響を与えるかを示し、ボーン ウェイトはそれらのボーンが頂点にどの程度影響を与えるかを示します。
Unity では、これらの頂点属性は一緒に保存されます。
Unity はブレンド インデックスとボーン ウェイトを使用して、スケルトンの動きに基づいてスキン メッシュを変形します。詳細については、「スキン メッシュ レンダラー」を参照してください。
これらの頂点属性は、スキン メッシュに必要です。
以前は、Unity では頂点に影響を与えるボーンは最大 4 つまででした。このデータは Mesh.boneWeights 配列の BoneWeight 構造体に保存されていました。現在、Unity では頂点に影響を与えるボーンは最大 256 個までです。このデータは BoneWeight1 構造体に保存され、Mesh.GetAllBoneWeights および Mesh.SetBoneWeights を使用してアクセスできます。詳細については、リンクされた API ドキュメントをお読みください。

トポロジー

トポロジーはメッシュの面のタイプを表します。
メッシュのトポロジーはインデックス バッファーの構造を定義します。インデックス バッファーは頂点の位置が面にどのように組み合わされるかを表します。トポロジーの種類ごとに、インデックス配列内の異なる数の要素を使用して 1 つの面を定義します。

Unity は次のメッシュ トポロジーをサポートしています:

・ 三角形
・ 四角形
・ 線
・ ラインストリップ
・ ポイント

注: ポイント トポロジーは面を作成しません。代わりに、Unity は各位置に 1 つのポイントをレンダリングします。その他のメッシュ トポロジーはすべて、面またはエッジを作成するために複数のインデックスを使用します。
Mesh クラスでは、Mesh.GetTopology を使用してトポロジーを取得し、Mesh.SetIndices のパラメーターとして設定できます。
サポートされているメッシュ トポロジーの詳細については、MeshTopology 列挙型のドキュメントを参照してください。
注意: 他のモデリング手法 (NURBS や NURMS/サブディビジョン サーフェス モデリングなど) を使用するメッシュは、Unity で使用する前に、モデリング ソフトウェアでサポートされている形式に変換する必要があります。

インデックス データ

インデックス配列には、頂点位置配列の要素を参照する整数が含まれます。これらの整数はインデックスと呼ばれます。
Unity は、インデックスを使用して頂点位置を面に接続します。各面を構成するインデックスの数は、メッシュのトポロジによって異なります。
Mesh クラスでは、Mesh.GetIndices を使用してこのデータを取得し、Mesh.SetIndices を使用して設定できます。Unity はこのデータを Mesh.triangles にも保存しますが、この古いプロパティは効率が悪く、ユーザー フレンドリではありません。

注: Points トポロジでは面は作成されません。代わりに、Unity は各位置に 1 つのポイントをレンダリングします。他のすべてのメッシュ トポロジでは、面またはエッジを作成するために複数のインデックスが使用されます。
たとえば、次の値を含むインデックス配列を持つメッシュの場合:
0,1,2,3,4,5
メッシュが三角形のトポロジを持つ場合、最初の 3 つの要素 (0,1,2) は 1 つの三角形を識別し、次の 3 つの要素 (3, 4, 5) は別の三角形を識別します。頂点が寄与できる面の数に制限はありません。つまり、同じ頂点がインデックス配列に複数回出現する可能性があります。たとえば、インデックス配列には次の値を含めることができます:
0,1,2,1,2,3
メッシュが三角形のトポロジを持つ場合、最初の 3 つの要素 (0,1,2) は 1 つの三角形を識別し、次の 3 つの要素 (1,2,3) は最初の三角形と頂点を共有する別の三角形を識別します。

巻き順序

インデックス配列内の各グループの頂点の順序は、巻き順序と呼ばれます。 Unity は、面が正面を向いているか背面を向いているかを判断し、その結果、面をレンダリングするか、それともカリング (レンダリングから除外) するかを決定します。デフォルトでは、Unity は正面を向いているポリゴンをレンダリングし、背面を向いているポリゴンをカリングします。Unity は時計回りの巻き上げ順序を使用します。つまり、Unity はインデックスが時計回り方向に接続されている面を正面を向いていると見なします。

プリズムで視覚化された Unity の巻き上げ順序

プリズムで視覚化された Unity の巻き上げ順序
上の図は、Unity が巻き上げ順序を使用する方法を示しています。各面の頂点の順序によって、その面の法線の方向が決定され、Unity はこれを現在のカメラの視点の前方方向と比較します。法線が現在のカメラの前方方向から外れている場合は、背面を向いています。近い三角形は (1、2、3) の順序で並べられており、これは現在の視点に対して時計回りの方向であるため、三角形は正面を向いています。それ以降の三角形は (4, 5, 6) の順序で並べられており、この観点からは反時計回りの方向なので、三角形は後ろ向きです。

ブレンド シェイプ

ブレンド シェイプは、さまざまなシェイプに変形されるメッシュのバージョンを表します。Unity はこれらのシェイプの間を補間します。ブレンド シェイプは、顔のアニメーションでよく使われる手法であるモーフ ターゲット アニメーションに使用します。
ブレンド シェイプ データは、ブレンド シェイプ頂点として保存されます。ブレンド シェイプ データは「スパース」です。つまり、すべてのメッシュ頂点にブレンド シェイプ頂点があるわけではなく、メッシュ頂点が変形する場合にのみ、対応するブレンド シェイプ頂点があります。
ブレンド シェイプ頂点には、位置、法線、接線のデルタとインデックス値が含まれます。インデックス値の意味は、データの要求方法によって異なります。
Mesh クラスでは、Mesh.GetBlendShapeBuffer を使用してブレンド シェイプ頂点データにアクセスできます。これにより、GPU 上のブレンド シェイプ頂点データへのアクセスを提供する GraphicsBuffer が返されます。このメソッドを使用すると、2 つの異なるバッファーを選択できます。1 つはブレンド シェイプでデータを順序付けるバッファー、もう 1 つはメッシュ頂点でデータを順序付けるバッファーです。バッファーの選択によって、インデックス値の意味とバッファー内のデータのレイアウトが決まります。バッファー レイアウトの詳細については、「BlendShapeBufferLayout」を参照してください。
アニメーションでのブレンド シェイプの使用については、「ブレンド シェイプの操作」を参照してください。
このデータはオプションです。

バインド ポーズ

スキン メッシュでは、ボーンのバインド ポーズは、スケルトンがデフォルトの位置にあるときの位置 (バインド ポーズまたはレスト ポーズとも呼ばれます) を表します。
Mesh クラスでは、Mesh.bindposes を使用してこのデータを取得および設定できます。各要素には、同じインデックスを持つボーンのデータが含まれます。
このデータは、スキン メッシュに必須です。

    unity

  • 日時:// ~ //
  • 名称:
  • 場所:
  • 料金:¥0 (消費税込)