コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
最近の更新
未作成ページ
おまかせ表示
ヘルプ
MonoBook
検索
検索
ログイン
個人用ツール
ログイン
ログアウトした編集者のページ
もっと詳しく
投稿記録
トーク
「
スケルタルアニメーション
」を編集中
ページ
議論
日本語
閲覧
編集
ソースを編集
履歴表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
編集
ソースを編集
履歴表示
全般
リンク元
関連ページの更新状況
特別ページ
ページ情報
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。
スパム攻撃防止用のチェックです。 けっして、ここには、値の入力は
しない
でください!
'''スケルタルアニメーション'''(英語:skeletal animation)とは、[[3DCG]]における[[アニメーション]]の手法のひとつで、キャラクターの内部に「骨(ボーン)」を持たせ、その移動や回転にあわせて表面の[[ポリゴン]]([[メッシュ]])を変化させるというものです。 いわゆる[[スキンメッシュ]]の技法のひとつですが、世間一般ではおおよそ「スキンメッシュ≒スケルタルアニメーション」となっています。 スケルタルアニメーションでは「時間ごとのボーンの移動量や回転量」というデータだけを記録しておき、再生時にメッシュの変化を計算してやります。ボーンは階層構造になっており、親ボーンからの変化の相対値だけを保持するのが一般的です。 なお、ボーンというと人間や動物の「骨」というイメージですが、この技法は決して実際の解剖学や物理的なプロセスを模倣するものではありません。人体であれば本来なら曲がらない方向にも普通に曲がります。実のところ[[ノートパソコン]]の[[液晶]]の繋ぎ目やドアと壁を繋ぐ「ラッチ」みたいなものです。そのため「ドアの開閉」などにも応用できます。 == 主な用語 == === Bone Transform === ボーンの位置や回転の情報を格納した[[行列]]です。複数ボーンの配列となっているのが一般的です。 === Bone Index === メッシュが保持する「ボーンとの繋がり」を表すBone Transform配列のインデックスです。関節付近を適切に処理するため複数のボーンとの繋がりを配列として保持し、その影響度合いをBone Weightに格納します。 === Bone Weight === メッシュが保持する「ボーンとの繋がり」が複数に渡る場合の影響度を表します。一般的にBone Weight配列の合計は「1」になります。この値を使うことで関節付近のメッシュを変形する際におかしくなる現象を軽減できます。関節付近ではないメッシュでは特定のボーンにパラメーター全振りです。 == 実装例 == [[バーテックスシェーダー]]ではだいたいこんな感じです。 シェーダーで処理する場合は「ボーンとの繋がり」をvec4に収めたいので最大4個が定番です。別に4個でなくてもいいです。人体のボーンの場合は3分岐から4分岐くらいなのでまず問題になることはありません。 <source lang=c> // 定数バッファでボーン配列を渡す layout(set = 0, binding = 3) uniform BonesBuffer { mat4 BoneTransformations[32];//各ボーンの位置や回転などを格納した行列の配列 }; // 頂点バッファに「ボーンとの繋がり」と「ボーンの影響度」を持つ layout(location = 0) in vec3 Position; layout(location = 1) in vec2 UV; layout(location = 2) in vec4 BoneWeights;// ボーンの影響度 layout(location = 3) in uvec4 BoneIndices;// ボーンとの繋がり void main() { mat4 skin = BoneTransforms[BoneIndices[0]] * BoneWeights[0] + BoneTransforms[BoneIndices[1]] * BoneWeights[1] + BoneTransforms[BoneIndices[2]] * BoneWeights[2] + BoneTransforms[BoneIndices[3]] * BoneWeights[3]; gl_Position = Projection * View * World * skin * vec4(Position, 1); } </source> == 関連項目 == * [[スキンメッシュ]] [[category: 3DCG]]
編集内容の要約:
MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MonoBook:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の確認用の質問に回答してください (
詳細
):
1たす1は?(全角で入力してください)
キャンセル
編集の仕方
(新しいウィンドウで開きます)
本文の横幅制限を有効化/無効化