頂点シェーダの頂点位置を補間して、2つのモーフィングターゲット間でアニメーションをモーフィングするにはシェーダに2つの頂点位置を送ります。今では約600個のモーフィングターゲットを持つメッシュを持っており、頂点シェーダ600頂点の位置に送るのは良い考えではないという気持ちがあります。誰かが、あまりにも多くのモーフターゲットでオブジェクトをアニメーション化する正しい方法は何か教えてください。頂点シェーダでのモーフィングアニメーション
P.S.私は3次元プログラミングにはまったく初心者です。
頂点シェーダの頂点位置を補間して、2つのモーフィングターゲット間でアニメーションをモーフィングするにはシェーダに2つの頂点位置を送ります。今では約600個のモーフィングターゲットを持つメッシュを持っており、頂点シェーダ600頂点の位置に送るのは良い考えではないという気持ちがあります。誰かが、あまりにも多くのモーフターゲットでオブジェクトをアニメーション化する正しい方法は何か教えてください。頂点シェーダでのモーフィングアニメーション
P.S.私は3次元プログラミングにはまったく初心者です。
このアイデアは単純です。実際に使用すると思われるモーフターゲットデータのみを送信します。
すべてのモーフターゲットデータを1つのバッファに入れます。レンダリングする時間が来たら、間にモーフィングしている2つの位置属性のそれぞれにglVertexAttribPointer
を使用してください。この関数を使用して、特定のモーフターゲットのバイトオフセットを指定します。 K
とL
がバッファにモーフターゲットのオフセットです
|----Morph Target 0----|----Morph Target 1----|----...----|----Morph Target N----|
K L M Z
ターゲット0と1の間のブレンドに、あなたはglVertexAttribPointer(0, ..., (void*)K)
とglVertexAttribPointer(1, ..., (void*)L)
を呼び出し、:例として
、次のバッファメモリレイアウトを想像します。
明らかに、2つのモーフターゲット間のブレンドしかできません。しかし、あなたはどんな2つのものを混ぜることができます
私は、頂点シェーダ600頂点の位置に送信しようとするのは良い考えではないと感じています。
それ以上は可能ではありません。属性の数は実装によって制限され、その数は通常小さい(16〜32)。