アバターのFBXファイルの差し替え
ボーンの名称が同じFBXを別途読み込んでオブジェクトを元のアバターに入れた場合、オブジェクトは元のアバターのボーンに追従するか?
追従しない
元のアバターのCoatを消して、別途読み込んだアバターのCoatを追加し、着替えアニメーションを確認すると服の位置が追従していない
別途読み込んだアバターのHipsを元のアバターのHips以下に追加すると、服の位置のみ追従し、腕などが追従しない
つまり、ボーンの名前が同じでも別途読み込んだアバターのボーンは別物として扱われている
ボーンの命名規則は異なるアバターや衣装で同じになることが多いため、この仕様は妥当か?
この仕様のもとで、Body_allにシェイプキーを追加して入れ替えたい場合はどうすればいいか?
素直にBody_allを2つ用意して切り替える方がいいか?
ボーンの構造が変わっていなければFBXの差し替えは可能?
https://twitter.com/y_leaves/status/1390234297093685249
metadataが変更されないようにする必要がある?
https://twitter.com/nuruo789/status/1065155814460022785
https://twitter.com/Nagihara_h_m/status/1121467862214795264
https://twitter.com/kemomimi_oukoku/status/1094412330819977217
FBXの差し替えができるならボーンの入れ子作業をしなくてもいい
ボーン数を削減できる
metaデータを維持して差し替える必要がある場合、追加されたオブジェクトを参照できないので、服の追加はやはり別のFBXで書き出してボーンの入れ子作業をする必要があるのでは?
各FBXの名前に接尾辞をつけて保存し、使用するものをデフォルト名にして差し替える
差し替え成功のポイントはおそらく下記
Unityが同一のモデルとして認識するか否か
同一のモデルとして読み込んだ際に齟齬が生じるか否か
Unityがモデルのコンポーネントをすべて名前で参照していると仮定すると、FBXに含まれるすべてのコンポーネントの名前が変わっておらず、また、参照されているコンポーネントが削除されていなければ大丈夫なはず
コンポーネントの増加はたぶん大丈夫では?
ボーンのTransformが変更されているとRigがおかしくなるらしい
https://twitter.com/momoma_creative/status/1094413063661342720
https://twitter.com/pre387/status/1071390808857694208
ボーンの位置・姿勢・回転か?
モデルのボーンのデフォルト位置を基準にポーズが設定されているから?
とりあえず普通にblenderからFBXをエクスポートして差し替えたところ、アバターが表示されなくなった
元のFBXに差し替えたところ回復した
エクスポートの方法が悪かった?
元のFBXと揃える必要がある?
どのように揃えるのか?
モデル構造を変更してしまっていた?
オブジェクトを追加してしまうともうダメ?
どこまでの変更ならセーフ?
blenderのプロジェクト内にすでに同一のアバターが存在する状態で元のFBXをインポートし、そのままエクスポートして差し替えた場合、何も表示されなくなる
壊れたメッシュすら表示されない
この場合、blenderのプロジェクト上で名前が重複するので、オブジェクトの名前が変更される
おそらくオブジェクトの名前が変わっていると参照できない
blenderで空のプロジェクトを作成して元のFBXをインポートし、何もせずエクスポートして差し替えた場合、アバターが壊れる
何も変更していないはずなので、エクスポートの方法が悪い?
インポートの方法が悪い可能性もある
これが成功しない場合、よく言われているシェイプキー追加も成功しないはずなので、何か手順を間違えている可能性が高い
https://twitter.com/strustrust_VRC/status/1397154505305714696
元のFBXと比べて300KBほど容量が増えている
スケール100倍問題
https://atelier-aomi.hatenablog.com/entry/2020/04/27/175413
スケール適用とトランスフォーム適用以外は特記されていないが、そこを設定してもダメだった
blenderのバージョン違いという可能性はあるか?
狐雪に同梱のblendファイルを使用してエクスポートしたところ、同梱のfbxと同容量のfbxが作成された
デフォルト設定のエクスポートではうまく差し替えできなかったが、スケールやトランスフォームの設定を適切にしてエクスポートしたものを差し替えるとうまくいった
デフォルトから変更した設定は下記
Selected Objects: ON
Object Types
Empty
Armature
Mesh
Other
Apply Scalings: FBX All
上2つはオブジェクト選択の設定なので、実質スケールの設定のみ
ここの設定はテンプレートにできる
https://twitter.com/strustrust_VRC/status/1393807411488559105
FBXの出力時に毎回「すべてFBX」と「トランスフォームを適用」する手間が面倒な人はオペレータープリセットを作成するとよいよ。ところでプリセットを作ってもデフォルトのプリセット自体を変更する方法が見当たらないので毎回選択しているのだけど、どなたかご存知で?
つまり、インポートの仕方が悪かった可能性が高い
インポートの仕方が分からなくてもblendファイルを使用すればいいかもしれない
インポート時にリーフボーンを無視すると、エクスポート時の容量が元のFBXとほぼ同等になり、差し替えも正常に行うことができる
https://note.com/nanash_/n/na5b4a71caeed
https://twitter.com/UUUPACOM/status/1033953499489292288
https://twitter.com/kaziya21_VRC/status/1135459054325645312
アバターやblenderのバージョンによって適切な設定が違う?
「リーフボーン」でtwitterを検索すると、各種設定について有効にすべきという意見と無効にすべきという意見が混在している
リーフボーンを無視すると、指先の_endのボーンが作成されない
これは同梱のblendファイルも同様
同梱のprefabには_endが含まれている
FBX出力時に追加しているのか?
読み込み時にリーフボーンを無視せず出力時にリーフボーンを作成しない場合にUnityで破綻する理由が分からない
既存のリーフボーンを読み込んではいけない理由があるのか?
出力時にリーフボーンを作成する場合でもしない場合でも破綻はしていないように見えるが、作成した方がいい?
https://twitter.com/eijanhou/status/1356410341886808065
https://twitter.com/_iwashimizu_VRC/status/1348677632154497027
リーフボーンはダイナミックボーンのために必要だが、設定によってはリーフボーンがなくても問題ないらしい
https://twitter.com/SUNAO_VRC/status/1347354265002541056
https://twitter.com/makichan/status/1331881979009069063
https://twitter.com/mimyquality/status/1260478032487362568
https://twitter.com/kayonishino1/status/1081109074383523840
ダイナミックボーンでは末尾のボーンが揺れないので、リーフボーンを追加してやる必要がある?
FBXを差し替える場合、オブジェクトを追加することはできない?
メタデータに参照がないため
ただし、既存のオブジェクトと同じ名称でオブジェクトを作成することで入れ替えることはできる
Expression Menuで着替えたい場合は入れ替えではなく追加する必要があるが
やはりシェイプキーの追加ぐらいが無難か
元々のモチベーションはBody_allを追加せずに形状を変化させること
というか、FBX差し替えではなくBody_allの差し替えでいいのでは…?
シェイプキーを追加したBody_allのボーンを入れ子にしてアバターのボーンに追従させれば大丈夫そう
服を追加するたびに、シェイプキーを追加したBody_allを差し替えていく
FBXの差し替えで服もすべて追加できるならよかったが、それが無理そうならFBX差し替えのリスクを取る必要がない
着替え機能のないアバターを作るなら有効な手段ではある
当然ではあるが、Unity上で後から追加したオブジェクトと同名のオブジェクトをblenderで追加しても、FBX差し替えでそのオブジェクトが反映されることはない
オブジェクトの参照先がFBXではないため
シーンの参照は追加されないが、FBX内のメッシュは追加されるので、それを引っ張ってくれば何とかなるのでは…?
ボーンの追従設定はどこを参照しているのか?
FBXを差し替えてCoatのオブジェクトを複製し、メッシュとマテリアルをlacetopsのものに差し替えたところ、服が体に正しく追従した
つまりウェイトの情報はメッシュに付与されている
根拠となる文献は見つからないが、状況的にほぼ確実にそう
Coatのオブジェクトを複製して作成したlacetopsのshoesが、blender上と同様につま先以外が追従している状態であり、Coatとの差分がメッシュとマテリアルのみであったことから、ウェイトはメッシュに保存されているとみていい
この仕様を利用すれば、Body_allを複数アバターに格納したり、ボーンの入れ子作業をすることなく着替えができる