0

この nVidia CG チュートリアル(および私自身の経験)によると、非定数インデックスを使用して CG シェーダーの均一な配列にアクセスすることは、非効率的であるかサポートされていません (多くの場合、サポートされていないようです)。

私の質問は; どうすればこの問題を回避できますか?

現在、頂点属性に格納されているインデックスを使用してアクセスする必要があるボーンの配列 (4x4 マトリックス) を渡す GPU スキニング シェーダーを作成しています (具体的には、コンポーネントが int にキャストされる float4 ベクトル)。明らかに、上記の制限のため、これは機能しません...おそらくこれを行うためのより良い方法がありませんか?

4

1 に答える 1

1

それは確かにそれを行う一般的な方法です。たとえば、(これは HLSL ですが、本質的に同じです。グローバルな均一な「boneArray」に注意してください)。

float4x3 CalcBoneTransform(float4 blendWeights, float4 boneIndices)
{
  // Calculate normalized fourth bone weight2
  float4 weights = float4(blendWeights.x, blendWeights.y, blendWeights.z , 1.0f - blendWeights.x - blendWeights.y - blendWeights.z);
  // Calculate bone transform
  float4x3 boneTransform;
  int4 indices = boneIndices;
  boneTransform =  weights.x * boneArray[indices.x];
  boneTransform += weights.y * boneArray[indices.y];
  boneTransform += weights.z * boneArray[indices.z];
  boneTransform += weights.w * boneArray[indices.w];
  return boneTransform;
}
于 2012-12-04T22:32:30.297 に答える