Creating User Interfaces for Vertex Shader Inputs(頂点シェーダを入力するためのユーザ インタフェースを作成する)

 
 
 

頂点シェーダへの入力として宣言された変数は、事前定義された名前(POSITION、COLOR0、COLOR1、TEXCOORD0 など)にバインドされることがあります(これらを[バインディング セマンティック](binding semantics)と呼びます)。これらの事前定義された名前は、特定のハードウェア レジスタへの入力のマッピングを暗黙的に示しています。使用するセマンティックに応じて、Softimage または頂点プログラムのいずれかでこれらの各変数のデータを提供する必要があります。

[頂点属性コントロール](A vertex attribute control)は、COLOR[n]、TEXCOORD[n]、TANGENT、およびBINORMALなどのセマンティックにバインドされる各頂点シェーダ変数のプロパティ エディタで作成されます。頂点属性コントロールは、すべてのバインディング セマンティックで作成されるわけではありません。たとえば、変数が POSITION または NORMAL セマンティックにバインドされている場合、頂点属性ウィジットは生成されません。これは、これらのセマンティックが Softimage によって自動的にバインドされるからです。サポートされているセマンティックのリストについては、「頂点シェーダの入力セマンティック」を参照してください。

頂点ごとの変数データは、テクスチャ座標でない場合でも TEXCOORD セマンティックにバインドできます。これによって、必要に応じて COLOR レジスタのテクスチャ プロジェクションや TEXCOORD レジスタの頂点カラーを自由に接続することができるようになります。

[構造](struct)のメンバには、シェーダ コードの変数が基になるグラフィック システム(OpenGL/DirectX)に接続される、指定のセマンティックが含まれます。入力構造は、シェーダ入力を提供する頂点バッファからデータを識別します。

CgFX コードの次の部分は、頂点バッファの位置、法線、タンジェント、従法線、およびテクスチャ座標データを頂点シェーダ レジスタにマップします。

struct VS_Input {
 float3 Position	: POSITION;
 float4 UV	: TEXCOORD0;
 float4 Tangent	: TEXCOORD1;
 float4 Binormal	: TEXCOORD2;
 float4 Normal	: NORMAL;
};

バインディング セマンティックは、この CgFx シェーダのプロパティ エディタに説明されているように、頂点属性ウィジットを動的に生成します。

HLSL コードの次の部分は、頂点バッファの位置、法線、タンジェント、従法線、およびテクスチャ座標データを頂点シェーダ レジスタにマップします。

struct VS_Input
{
	float4 Position : POSITION;
	float3 Normal : NORMAL;
	float3 Tangent : TANGENT;
	float3 Binormal : BINORMAL;
	float2 TexCoords : TEXCOORD0;
};

バインディング セマンティックは、この HLSL シェーダのプロパティ エディタに説明されているように、頂点属性ウィジットを動的に生成します。HLSL では、シェーダ コードで頂点属性を使用する必要があります。シェーダ コードで使用しない場合、この属性はコンパイラによって取り除かれ、プロパティ エディタで使用できなくなります。

頂点属性コントロール

A

[CgFX](CgFX): 頂点属性ウィジットには、[_IN_VariableName](_IN_VariableName.)というラベルが付いています。

[HLSL](HLSL): 頂点属性ウィジットには、バインドされるセマンティックに応じてラベルが付いています。たとえば、TEXCOORDというセマンティックは、[texcoord](texcoord.)というラベルのウィジットを生成します。

詳細については、「頂点シェーダの入力セマンティック」を参照してください。

B

頂点属性ウィジットにあるドロップダウン リストでは、ICE 属性を含む 0D コンポーネントを選択できます。0D コンポーネントは、メッシュまたはポイント クラウドにあり(または作成でき)、特定の頂点入力レジスタに渡すことができます。

C

[編集](Edit)ボタンをクリックすると、関連属性のプロパティ エディタが表示され、ここでパラメータを編集できます。たとえば、タンジェント データが入力レジスタに渡されるように設定している場合に、[編集]を押すと、[TangentOp2 Operator]プロパティ エディタが表示されます。

D

[新規](New)ボタンをクリックすると、選択したオブジェクトに新しいテクスチャ プロジェクション、頂点カラー、またはウェイト マップ クラスタ プロパティが作成され、指定した頂点入力レジスタにデータが渡されるように設定されます。

自動タンジェントおよび従法線

Softimage で直接、タンジェントと従法線が自動作成されるようにすることもできます。これにより、オペレータベースのタンジェントおよび従法線プロパティを使用するよりも、Realtime Shader 表示モードですばやく再生したり操作することができます。タンジェントと従法線の自動作成を使用するには、エフェクト シェーダのプロパティ エディタ内の頂点属性の入力にタンジェントまたは従法線プロパティを指定しないようにしてください(空白のままにしておきます)。「自動タンジェントおよび従法線」(「テクスチャリング」)を参照してください。

ただし、すでに法線およびタンジェントのデータがある場合は、従法線の自動作成は最適な方法ではありません。代わりに、頂点シェーダで直接、従法線を計算します。

頂点シェーダの入力セマンティック

入力レジスタは、頂点シェーダのセマンティックによって頂点データにバインドされます。頂点シェーダの入力セマンティックは、頂点ごとのデータ(位置、法線、テクスチャ座標、カラー、タンジェント、従法線など)が、頂点バッファから頂点シェーダによって消費可能なフォームにロードされることを示します。

入力レジスタは、(0 から 15 の番号が付いた)16 の 4 コンポーネント浮動小数ベクトルから構成されます。

特定の入力セマンティックにバインドされた頂点シェーダの変数は、ユーザ インタフェースを動的に生成します。頂点属性ウィジットを使用して、エフェクトに渡される頂点ごとの属性をカスタマイズできます。

次の表に、エフェクト ファイルで定義された頂点シェーダ用にサポートされている入力セマンティックを示します。[n]は、オプションのインデックスを示します。

Render Tree でエフェクト シェーダを使用する方法については、「Setting Up Effects Shaders in the Render Tree(Render Treeでのエフェクトシェーダの設定)」を参照してください。

入力

説明

タイプ

BINORMAL[n]

従法線。

このセマンティックは、頂点シェーダに渡すデータの指定および編集が可能な頂点属性ウィジットを生成します。

ウィジットには、次のラベルが付きます。

_IN_VariableName(CgFX)

従法線(HLSL)

float4

BLENDINDICES[n]

スケルトン ブレンディングのブレンド インデックス。

Softimage では、このセマンティックにバインドされる変数のデータは提供されません。必要な値の計算および入力としての値の提供は、頂点シェーダ プログラムが行います。

float4

BLENDWEIGHT[n]

スケルトン ブレンディングのブレンディング ウェイト。

Softimage では、このセマンティックにバインドされる変数のデータは提供されません。必要な値の計算および入力としての値の提供は、頂点シェーダ プログラムが行います。

float4

COLOR[n]

カラー。

このセマンティックは、頂点シェーダに渡すデータの指定および編集が可能な頂点属性ウィジットを生成します。

ウィジットには、次のラベルが付きます。

_IN_VariableName(CgFX)

Vertex_Color(HLSL)

float4

DIFFUSE0

ディフューズ カラー。

このセマンティックは、頂点シェーダに渡すデータの指定および編集が可能な頂点属性ウィジットを生成します。

float4

NORMAL[n]

法線ベクトル。

このセマンティックは、Softimage によって自動的にバインドされます。

float4

POSITION[n]

オブジェクト空間内の頂点の位置

位置変数(POSITION セマンティックにバインドされる)は、ラスタライズに使用されるため必須です。これは、入力として頂点プログラムで必要になる唯一の変数です。

このセマンティックは、Softimage によって自動的にバインドされます。

float4

POSITIONT[n]

変換された頂点位置。

このセマンティックは、Softimage によって自動的にバインドされます。

float4

PSIZE[n]

ポイント サイズ。

このセマンティックは、頂点シェーダに渡すデータの指定および編集が可能な頂点属性ウィジットを生成します。

float4

SPECULAR0

スペキュラ カラー。

このセマンティックは、頂点シェーダに渡すデータの指定および編集が可能な頂点属性ウィジットを生成します。

float4

TANGENT[n]

タンジェント。

このセマンティックは、頂点シェーダに渡すデータの指定および編集が可能な頂点属性ウィジットを生成します。

ウィジットには、次のラベルが付きます。

_IN_VariableName(CgFX)

タンジェント(HLSL)

float4

TESSFACTOR[n]

テッセレーション係数。

このセマンティックは、頂点シェーダに渡すデータの指定および編集が可能な頂点属性ウィジットを生成します。

float4

TEXCOORD[n]

テクスチャ座標

このセマンティックは、頂点シェーダに渡すデータの指定および編集が可能な頂点属性ウィジットを生成します。

ウィジットには、次のラベルが付きます。

_IN_VariableName(CgFX)

Texcoord(HLSL)

float4