見出し画像

🎡WEBGL スキニングとリギングの違い

グラフィックスにおけるスキニング(Skinning)とは、複数のマトリックスの重み付けによる影響力をもとに、頂点の集合を移動させることを言います。
スキニング(一連の(閉)曲線をなめらかにつなぐ筒面を生成すること)と呼ばれるのは、3Dキャラクターがマトリックスの別名である「ボーン」からなる「骨格」を持っていて、骨格の頂点ごとに各ボーンの影響力を伝えることによって表面の動きが形成(筒面が形成/または皮を剥ぐ)されることから呼ばれています。

https://webglfundamentals.org/webgl/lessons/webgl-skinning.html

通常、頂点あたりのウェイトの数は制限されます。たとえばバーチャファイターのキャラクターは15ボーン(バーチャファイター1)持っていました。最近のゲームでは150~300ボーンほどです。だいたい1ボーンにつき300個のウェイトが必要になります。仮にキャラクターが1万個の頂点を持っていたとしたら、300万個ものウェイトが必要になります。
ほとんどのリアルタイムスキニングシステムでは、1頂点あたり4ウェイトに制限しています。通常これは、blender/maya/3dsmaxのような3Dパッケージからデータを取得し、各頂点について最も高いウェイトを持つ4つのボーンを見つけ、それらのウェイトを正規化するエクスポーター/コンバータで実現されます。

https://webglfundamentals.org/webgl/lessons/webgl-skinning.html
gl_Position = projection * view * model * position;

上記が通常の頂点計算式だとすると、スキニングを考慮した計算式は以下のようになります。

gl_Position = projection * view *(bone1Matrix * position * weight1 
+ bone2Matrix * position * weight2 
+ bone3Matrix * position * weight3 
+ bone4Matrix * position * weight4);
https://webglfundamentals.org/webgl/lessons/webgl-skinning.html
https://webglfundamentals.org/webgl/lessons/webgl-skinning.html

リギング(Rigging):

  • リギングは、3Dモデルに骨格や関節を追加するプロセスを指します。この骨格は「リグ(Rig)」とも呼ばれます。

  • この骨格にはコントローラーやハンドルが取り付けられ、アニメーターはこれを操作してキャラクターを動かすことができます。

  • リギングにより、キャラクターの動きやポーズを自然に、そして効率的に制御することが可能となります。

  1. スキニング(Skinning):

    • スキニングは、上述のリグ(骨格)と3Dモデルの表面(スキン)との関連付けを行うプロセスを指します。

    • これにより、骨が動くときにモデルの表面がどのように変形するかを制御することができます。

    • 一般的なスキニングの方法には、ウェイトペイント(Weight Painting)があります。これは、各頂点がどの骨にどれだけ影響を受けるかの「ウェイト」を手動または自動で設定する方法です。

つまり、リギングはモデルに動きを制御するための「骨格」を与えるプロセスであり、スキニングはその骨格の動きに応じてモデルの表面がどのように変形するかを定義するプロセスです。


お願い致します