最終更新:
rt_3dcg_tips 2019年05月04日(土) 14:08:02履歴
スキニングした後のモデルにエッジを足したり編集して「ヒストリが残ってる」と怒られたことは無いでしょうか。
メッシュを編集したらウェイトは付け直しだと思っている人もいます。
この問題、Softimageなど非破壊のツールでは気にしなくて良かったんですが、MAYAでは避けて通れない問題だと思います。
公式のコラムではウェイトマップテクスチャという現場では残念ながら見たことのない方法を使っていて釈然としません……。
そこで今回はこの問題の解決方法を解説します。
ってことで一例として私kmjのやり方を説明します。
現場でもこの方法か、この手順を内包したスクリプトを使ってる方が多い印象です。
(こういう方法でやってますというのがあれば是非教えてください!)
※頂点単位でのウェイトコピーについてはこちら
現場でもこの方法か、この手順を内包したスクリプトを使ってる方が多い印象です。
(こういう方法でやってますというのがあれば是非教えてください!)
※頂点単位でのウェイトコピーについてはこちら
先に手順について要約すると、
もうやってる、という方やノンデフォーマーヒストリーの削除で良いという方は以下飛ばして大丈夫です。
良かったらスクリプト化したものでも見てやってくださいませ。
【スキンオブジェクトを複製してウェイトコピー】
- ウェイトの付いたモデルをDuplicate
- 複製した新しいモデルをsmoothBind
- 古いモデルから新しいモデルにCopySkinWeights
もうやってる、という方やノンデフォーマーヒストリーの削除で良いという方は以下飛ばして大丈夫です。
良かったらスクリプト化したものでも見てやってくださいませ。
【スキンオブジェクトを複製してウェイトコピー】
この方法ではブレンドシェイプやラティス等のデフォーマーも全て消えてしまいます。
これらを残したい場合はEdit->Delete by Type->Non-Deformer Historyに思いを託すしかありません。
これらを残したい場合はEdit->Delete by Type->Non-Deformer Historyに思いを託すしかありません。
メッシュ、ジョイントの順に選択してSkin->Bind skinのオプションを開きます。
下図のように設定してBind Skin
![](https://image01.seesaawiki.jp/r/g/realtime3dcg/SmH5EJ830S.jpg)
オプションの細かい説明はヘルプを参照していただくとして、
ゲームグラフィックにおいては下記の注意が必要です。
下図のように設定してBind Skin
![](https://image01.seesaawiki.jp/r/g/realtime3dcg/SmH5EJ830S.jpg)
オプションの細かい説明はヘルプを参照していただくとして、
ゲームグラフィックにおいては下記の注意が必要です。
- インフルエンスにはジョイントを使う
- メッシュやロケーターを骨としてバインドすることも可能ですが機能が制限される事が多いのでおすすめしません。
- Skinning MethodはClassic Linearを選択
- DualQuaternion等は綺麗に変形してくれますがエンジン側でサポートされていないと意味がありません。
- Normalize WeightsをInteractive
- ウェイトの合計は1.0である必要があります。作業段階ではOFFにしても構いませんが原則として出力時には正規化する必要があります。
- Max Influences
- だいたいどのようなプロジェクトでも2〜4くらいが多いです。ゲームグラフィックではプロジェクトによって仕様が決まっているかと思います。
デフォルトのウェイトでも構いませんが、ゲームグラフィックではウェイトを入れない骨が存在したり、複数インフルエンスに分散したウェイトを減らしたかったりするので手入力することも多いです。
その場合、下記のツールを使用します。
基本的な手順としては、
こうすることで余計な所に分散するウェイトが無くなり、変形も一箇所ずつ確認しながらウェイトを付けることが可能です。
ポイントは、腕の階層でもまずは腰にウェイト100%付けておく、ということです。
ちょっとこの辺はオールドスクールな手法かもしれません。
ハイポリのキャラだったりするとウェイト付け用の簡易モデルを用意してウェイトコピーしたりもしますが、簡易モデルに付けるウェイトは上記の様な手順になるかと思います。
今回はシンプルなのでPaintSkinの塗りつぶし機能を使いました。
![](https://image01.seesaawiki.jp/r/g/realtime3dcg/HwbVrYgGeX.jpg)
頂点を選んでFlood、頂点を選び直してFloodという感じです。
Shift+<(選択領域の縮小)と組み合わせると選択し直さなくてよいので楽です。
![](https://image01.seesaawiki.jp/r/g/realtime3dcg/I2lxJJDeTv.jpg)
前腕のウェイトが入りました。
その場合、下記のツールを使用します。
- Paint Skin Weights Tool
- Component Editor
- Weight Editor(Bonus Tool内)
- その他MEL、内製ツール
基本的な手順としては、
- 全身のウェイトを根本(親)に100%付ける。
- ひとつ下の階層のジョイントにウェイトを付ける
- そのまたひとつ下の〜〜
こうすることで余計な所に分散するウェイトが無くなり、変形も一箇所ずつ確認しながらウェイトを付けることが可能です。
ポイントは、腕の階層でもまずは腰にウェイト100%付けておく、ということです。
ちょっとこの辺はオールドスクールな手法かもしれません。
ハイポリのキャラだったりするとウェイト付け用の簡易モデルを用意してウェイトコピーしたりもしますが、簡易モデルに付けるウェイトは上記の様な手順になるかと思います。
今回はシンプルなのでPaintSkinの塗りつぶし機能を使いました。
![](https://image01.seesaawiki.jp/r/g/realtime3dcg/HwbVrYgGeX.jpg)
頂点を選んでFlood、頂点を選び直してFloodという感じです。
Shift+<(選択領域の縮小)と組み合わせると選択し直さなくてよいので楽です。
![](https://image01.seesaawiki.jp/r/g/realtime3dcg/I2lxJJDeTv.jpg)
前腕のウェイトが入りました。
ヒストリの残ったメッシュは複製してウェイトをコピーしましょう。
まず、Skin->Go to Bind Poseでバインドポーズに戻します(重要)
メッシュを選択してEdit->Duplicate
複製ですね。
これで新しいメッシュの方はヒストリが整理されます。
ただウェイトも消えます。これが厄介なんですね。
メッシュ編集もウェイト情報もヒストリなんです。
まず、Skin->Go to Bind Poseでバインドポーズに戻します(重要)
メッシュを選択してEdit->Duplicate
複製ですね。
これで新しいメッシュの方はヒストリが整理されます。
ただウェイトも消えます。これが厄介なんですね。
メッシュ編集もウェイト情報もヒストリなんです。
Edit->Delete by Type->Non-Deformer Historyでウェイトを保ったままヒストリを整理することができます。 が、正直ウェイトの保持がイマイチです! 今回のようなシンプルなウェイトなら上手く行くかもしれません。
複製されたメッシュの方にはウェイトが付いていないためバインドします。
バインド方法は前述と同じです。
この時点ではデフォルトのウェイト値が入っているため元のメッシュからウェイトをコピーしてやる必要があります。
バインド方法は前述と同じです。
この時点ではデフォルトのウェイト値が入っているため元のメッシュからウェイトをコピーしてやる必要があります。
- 元のメッシュを選択
- 位置が同じで選択しづらいはずなのでOutlinerで選択すると確実です。
- 新しいメッシュを選択
- Ctrlキーを押しながらOutlinerで追加選択
- Skin->Copy Skin Weightsのオプション
- 頂点順が違うためSurface AssociationはCloset point on surface(サーフェス上の最近接ポイント)を選びます。
- 同じ骨構造のためInfluence Association 1はOne to one(1対1)
- 一般的なCloset jointの場合同じ位置にあるジョイントに対して上手くウェイトコピーが行なえません。ゲームの仕様では同じ位置に骨を置くことが結構あります。
厳密にはこのウェイトコピー機能は小数点以下の細かいウェイトが入っていると誤差が出ます。 細かいウェイトを嫌う仕様の場合は別途ウェイト丸めの処理を行う必要があります。 またスケールによっては頂点が近すぎたりするとコピーが上手くいかない頂点があります。
ウェイトコピーは行いましたが、追加された頂点には未調整のウェイトが入っているはずです。
ヒストリが整理されたことで新しい頂点もウェイト編集が可能になっていますのでこの段階で調整します。
最後に古い方のメッシュを削除すれば終了です。
ヒストリが整理されたことで新しい頂点もウェイト編集が可能になっていますのでこの段階で調整します。
最後に古い方のメッシュを削除すれば終了です。
タグ
コメントをかく