引き続きにゃらん
調![]()
前回の記事で、
3dsmaxでリグドメッシュを作る際、カルシウム不足問題でSecondlife(SL)へのアップロード時に骨組み情報が無視される問題と、
一応、3dsmax上でそれを回避する方法について書きました。
その回避方法は簡単に言うと、
未使用ボーンにも0ウエイトを無理やりつける![]()
という、バグ技なんだか仕様なんだかわかんない方法で、しかも超めんどう・・![]()
![]()
基本リグの26ボーン構成だって、スキニングの度に毎回やるの面倒ですし、フィットメッシュの50ボーン構成になってくるともうやる気なんておきません。
あたしは顔面だけアップしたいの~![]()
に、なんで足のボーン設定せにゃならんのね。![]()
・・・
と、ちょっと脱線しまして、
3dsmaxでスキンを扱う場合のワークフローっていうかあたしのやり方なんですが、
まず基本のリグに対して、ある程度完成したメッシュでスキニングをします。
で、その後メッシュを作りこんでいったら、スキンラップモディファイヤとかスキンユーティリティーでウェイト情報をコピーするやり方が多いです。
この辺のやり方は、3dsmaxでスキンを扱う場合の基本的な操作方法(?)なので詳細は省略しますけども、
このスキンラップとかでオリジナルのメッシュからウエイト情報をコピーする際に、新たにスキンモディファイヤが割り当てられます。
そーすると、またカルシウム不足問題が発生するので全ボーンにウエイト付けする作業をしないとならなくなります・・・
非効率![]()
![]()
効率よくできないかしら・・
あ、こういうのMAXスクリプト作ればいいじゃん![]()
という事で、簡単なMAXスクリプト組んでみました![]()
---------------------
--スキンモディファイヤで選択された頂点一個だけにちょこっと全ボーンのウェイトつける
(
local mfSkin =$.skin
local boneNum = skinOps.GetNumberBones mfSkin
local vNum=skinOps.GetNumberVertices mfSkin
local vIndex = 0
format "Vertices:%\n" vNum
--強制的にボーン上限を設定
mfSkin.bone_Limit = boneNum
format "Max bones:%\n" boneNum
--使用されていないボーンをリストアップする
local barry=#()
for i=1 to boneNum do(
barry[i] = 0
)
for i=1 to vNum do(
local wc=skinOps.GetVertexWeightCount mfSkin i
--ついでに選択頂点のIDを一個だけ確保
if (skinOps.IsVertexSelected mfSkin i )==1 then(
vIndex = i
format "Selected:#%\n" vIndex
)
for j=1 to wc do(
local bID = skinOps.GetVertexWeightBoneID mfSkin i j
if barry[bID]==0 then(
local nm = skinOps.GetBoneName mfSkin bID 1
format "Bone used: % by #%\n" nm i
)
barry[bID]=1
)
)
for i=1 to boneNum do(
if barry[i]==0 then(
local nm = skinOps.GetBoneName mfSkin i 1
format "Unused: %\n" nm
)
)
--リストアップされた未使用ボーン
if vIndex!=0 then(
for i=1 to boneNum do(
if barry[i] ==0 then(
--選択された頂点に強制的にちょこっとウエイト設定してやる
skinOps.SetVertexWeights mfSkin vIndex i 0.001
)
)
)
)
---------------------
ウエイトが1になってる頂点を1個選択して、その頂点に対して未割り当てボーンのウエイトをちょこっと設定するという乱暴なスクリプトですw
(なんでかって話は前回の記事をごらんください)
あ、スクリプトに関する質問とか一切お答えできませんのであしからず![]()
(そんな詳しくないので
)
前回の基本26ボーン構成のでやってみますね。
「絶対mHeadだろ~、ここは!」」的な頂点1個選んで
ウエイトテーブルで確認
スクリプト実行![]()
実行後、選択頂点のウエイトを1に戻せば終了~![]()
楽ちん![]()
まー、
MAXスクリプト詳しくないので、もっと良い処理の仕方があるかもしれませんけど、とりあえずはこれでよしとしてますw
これ、使えるならフィットメッシュの50ボーン構成でもめっちゃ楽できるじゃん![]()
でも、フィットメッシュ全ボーンの基本ウエイト設定を1からするのも大変ですので、
ここはテンプレート的なものが欲しいです。
http://wiki.secondlife.com/wiki/Mesh/Rigging_Fitted_Mesh#Download_links
このリンクから入手できるフィットメッシュのサンプル"Skeleton.Female(Male).dae"は予め基本的なウエイトが設定されているようですので、これをベースにします。
とりあえず、
顔面というか頭部部分だけの部分フィットメッシュを3dsmaxで作ってみます
めっちゃ、しっかり50個のボーンw
自作の顔面部分をボーンの位置にあわせます
で、スキンラップモディファイヤ適用してオリジナルのウェイト情報をコピーします
で、[スキンに変換]ぼちっとして
新たにスキンモディファイヤが割り当てられます。
そーすると、形状に合わせてある程度ちゃんとウエイト情報がコピーされてるのが確認できます。
この状態でdaeを出力してもカルシウム不足でフィットメッシュとして認識してくれません。
dae見てみますと、
<source id="CompositHead009Controller-Joints">
<Name_array id="CompositHead009Controller-Joints-array" count="12">
HEAD NECK mHead CHEST UPPER_BACK mChest L_CLAVICLE R_CLAVICLE BELLY L_UPPER_ARM
mSkull R_UPPER_ARM</Name_array>
12個だけ割り当たってます。 なんかフィット用のボーンで意味不明なのも割り当たってますけど気にしないw
したっけ、エンベロープ編集から良さ気な頂点1個選んで
さっきのMAXスクリプト実行
で、ウエイト1にもどします。
daeみてみますと、ちゃんとリンクが50個出力されてます。
<source id="CompositHead009Controller-Joints">
<Name_array id="CompositHead009Controller-Joints-array" count="50">
HEAD NECK mHead CHEST UPPER_BACK mChest L_CLAVICLE R_CLAVICLE BELLY L_UPPER_ARM
mSkull R_UPPER_ARM mPelvis mTorso mNeck mEyeRight mEyeLeft mCollarLeft mShoulderLeft
mElbowLeft mWristLeft L_HAND L_LOWER_ARM mCollarRight mShoulderRight mElbowRight
mWristRight R_HAND R_LOWER_ARM LEFT_PEC RIGHT_PEC LOWER_BACK mHipRight mKneeRight
mAnkleRight mFootRight mToeRight R_FOOT R_LOWER_LEG R_UPPER_LEG mHipLeft mKneeLeft
mAnkleLeft mFootLeft mToeLeft L_FOOT L_LOWER_LEG L_UPPER_LEG PELVIS BUTT</Name_array>
SLにアップするときって、この骨情報のリンク個数とボーン名で判断してるのかしら・・・![]()
![]()
だとすると、別の回避方法も考えられますけど、まーいいやw
で、SLにアップしますと
お、カルシウム認識されてる( ´艸`)
部分フィットメッシュとしてちゃんとアップできます![]()
顔面びょ~ん![]()
ちゃんと頭部のスケールとかに追従しますね![]()
最終的な調整とかフィニッシングはBlender先輩とAvaster使ってもいいんですけど、
モデリング作業途中でBlenderへ持ち込まずとも、3dsmaxで出力して形状確認できるので、
とても効率が良くなりました![]()
必要なとこだけじっくり調整すればいいんですからね![]()
ということで、
フィットメッシュの50ボーン構成でとりあえず作業方針っていうか、やり方の目処が立ちましたので、
じゃあ~、いよいよ
Project弁当の160ボーンやってみましょかね![]()
ってなりません
( ´艸`)
フェイスアニメーションとかやってみたいな~
ま~でも、
(部分)リグドメッシュ&フィットメッシュを3dsmaxで作ってSLへアップするにょだ
という目的で、
だいたいの作業目処が立ちました。
自分用のアバのシェイプとかも3dsmaxに取り込めましたし、
あとは、衣装でもヅラでもいいし、
作りこめばいいですね
(←ここが一番難しいしw
そんなこんなで、
現行SLの仕様向けの、とりあえず的備忘録はここで一旦終了で~す♪
















