見出し画像

【b3d_mkn】blender素体流用システムに関する概念解説【CISA】

別の記事書きまくってたけど本題に入ります
CISAはNISAのもじりで キャラクター積み立て貯蓄システムという事

CISA、これは2020年から2022年までの自分の時間を吸収したツールです、別に大掛かりな事はしてないけど、どうすりゃいいのかなーって考えたり、自分のpython力とモデリング力が足りて無かった事もあり完成に時間が掛かってしまったのです、とはいえ自分の為を考えた最低なツールには変わりないです

しかし、この考え方が誰かの助けになればこれ幸い

※長々読ませといて配布してるアドオンじゃねーのかよ!って突っ込みが来るかもなので先に書いておきます、個人のツール開発記録です……すみません……

作った理由!

3Dはそもそも作るのが大変!
 
3D触ってる人なら分かると思いますが大変なんすよ……、一体作るのにいったいぜんたい何日かけれるんだって、俺は一杯キャラクターを作りたいしそのキャラクター達が生きる世界を作りてぇ……!でも絵を描く根性がねぇ……1体に20日かけてちゃ仕事と両立ができねぇ……!!
……流用してぇ!

以上!

まず考えた仕様

①自前のコントロールリグにシームレスに割り当て出来るように
 モデリングからリギングを一貫して流用するのは根幹思想
②素体のアップデートや差し替えに耐えれる設計にする事
 胴体というか体って絶対アップデートしたくなりますよね
③顔のバリエーションの追加を考慮する事
 顔も作れば作る程継承出来る設計が理想的です
④身長や体型変化の可変/顔のパーツ毎の調整を考慮した設計
 簡単に言えばゲームのキャラクリと一緒(概念的にも)
⑤顔のパーツの調整用骨はアニメーション流用が出来るように
 骨数がただでさえ多くなる顔骨の事を考えると、一々微調整骨と顔コントロール骨はまとめないといけない

大体この5つの仕様を立てて実際に作りました

経過

①自前のコントロールリグにシームレスに割り当て出来るように

まず2020年前半から2021年にかけて仕事が終わった後に
1ボタン切り替えリグを作りながらキャラデザの変更、ああでもないこうでもないをやっていた
【b3d_mkn】自分で作ったblenderリグの概念まとめ【blender】|makeInuFilm (note.com)
それで作ったリグは上の記事で概念を書いてます

実際のとこ骨の名前見て勝手にコントロールリグ付く仕様が出来た時は自分天才だなって思いましたまる、でもbpy簡単なんで誰でも出来るし誰かの役に立つツールじゃないので自宅の中の天才止まりです
その後改修と実践を繰り返して地獄みたいなコードがこの世に生み出されました、でも自分しか見ないから大体どこに何が書いてあるかは把握できるのでヨシ!

②素体のアップデートや差し替えに耐えれる設計にする事

CGモデラ―って毎年素体アップデートしてるよね
気持ちは凄く分かる、しかしまず素体を7種以上用意する事を考えると、調整や差し替えが出来るようにするのはマストでした

しかしblenderはとても素晴らしい仕様があるのです(mayaとかでも出来ない事は無いけど)それは
オブジェクトデータとメッシュデータは別で、メッシュデータの差し替えが容易という事

図解

つまり、オブジェクトデータは どういうメッシュデータを紐づけても良いし他のオブジェクトデータに紐づいてるメッシュデータを複数に紐づけさせても良いのです


オブジェクトデータは違うがメッシュデータは共通のものをみている

大体のCGソフトは一応こういう機能を持ってるんですが、blenderはここら辺の処理が柔軟であんまバグらない印象があります、書き方もシンプルになるので助かってます

これが何に効くかというと、
①別で使用した改変素体を編集調整
②元の素体.blendデータを開く
のシーンデータにをアペンド
①の最新メッシュデータ②の旧メッシュデータから差し替えて保存

という事をやると最新の情報に切り替えが出来ます、後は↑の工程を自動化すれば手間なく更新が出来ます
骨の場合も、骨の座標値やロールを変えた場合は都度スクリプトで①のデータから取得して②のデータに与えてあげる事で常に最新の状態にする事が出来ます
最低条件として頂点数自体は変動させてはいけない(頂点番号が変わるので)位で結構柔軟に出来るのです

また、構築してく中で顔のバリエーションを18種用意して、柔軟に更新出来る素体の上に頭を乗っける構造にしたかったんですが
blenderは一つのアーマチュアオブジェクト内に各メッシュを格納させる設計の方が自動化する上で非常に都合が良かったので

オブジェクトデータとメッシュデータの数が普通にやろうとすると
躰メッシュ18*顔メッシュ(各パーツ省略)+18 で36オブジェクトデータと36メッシュデータが必要になってしまう(実際は目とか睫毛とか全部分けてるのでもっと莫大)

しかしメッシュデータを共有する事で躰メッシュデータは1シーン18バリエーションでも1メッシュデータで抑えられるので18+1で36オブジェクトデータと19メッシュデータ という形でメモリ節約も同時に可能と出来るわけです

何か書いててめっちゃ複雑になりましたな

端的に描くと .blendデータ1個の中に18体の素体キャラが同封されていて、それら全部の素体をボタン一発で最新状態に同時更新出来るようになってるって事です

自動化しなければ18体全てのメッシュを調整するなりアーマチュアモディファイヤを適用するなりで、二週間はかかる作業を1hに短縮したという事になります

③顔のバリエーションの追加を考慮する事

これは上にも書いた通り、最初にまず18種の顔素体の用意

とりあえず1例の3種 目以外のバリエーションは微調整すればよいというざっくり設計

18種というのはまず体裁を整える為の前提であり、男キャラとかお爺ちゃんキャラとか色々考えるとどう考えても極限無く増えていく、そして男キャラ系のバリエーションを増やすのは23年以降の課題である

である為、バリエーションが増えるよ、と言うのを前提に設計しているこれに関しては頭いい設計作ってもあんまコスパ良くないと思ったので脳みそ筋肉で突破した

コレクションシステム!そういうのもあるのか!!

要するに、同じ階層構造を持つ、顔のバリエーション違いがあるアーマチュアオブジェクトをコレクションにぶっこんで積んでいく

頭を差し替えるというリソース的にも頭も良いやり方も考えた、考えたけど追加したりする度for文のrange可変とか命名のルールがごちゃごちゃしてく手間考えたら、コレクションで積んでいって、要らない素体をblendシーン内から都度削除してく方が簡単だった、なのでそうした
blendシーンは重くなったけど、私の手間は軽くなりました、それで良いのデス

④身長や体型変化の可変/顔のパーツ毎の調整を考慮した設計

これに関してはblenderちょっと慣れてる人だったら、レストポーズの適用と
アーマチュアの適用とか、後はシェイプキーを抱えてる場合はモディファイヤの適用が出来ないとか、多分知ってると思います

どうやったの? という答えに対して、実は個人で開発してるツールを社内紹介用にプレゼンしたことがあって、ここだけ画像で解説します

自動化した手順

要はblendshapeの形状メッシュを生成させて一旦シェイプ情報を空にしてから形状変更を適用して転送、そして生成した形状メッシュを全部掃除して終わり
結構簡単(実装は地獄)な仕組みでしたまる
素体流用システムのコアは2つあって
1つは1ボタンで切り替え割り当て可能なコントロールリグ(素体スキニング作業からの解放)
もう一つはこれシェイプキーを維持したまま体系変更を可能にするシステム(blendshapeを維持したままキャラクターを継承複製できる)

実際のとここの2つが出来れば誰でも素体流用というかキャラクタークリエイトシステムは出来る(ゲームで組まれてる奴はもうちょっと賢いけど)

⑤顔のパーツの調整用骨はアニメーション流用が出来るように

これはnoteのサムネの骨配置

骨が何処に仕込まれてるかの図

【b3d_mkn】自分で作ったblenderリグの概念まとめ。その2 顔の配置【blender】|makeInuFilm (note.com)

とか上の記事で記載してる通りで、顔の配置骨は微調整とアニメーション両方で使う事を目指して配置されているというだけで、仕様といえば仕様だがまぁあっさりと記述して飛ばす事にする

本来顔に骨を仕込むキャラを生成するのはとても手間で
予算があるプロジェクトでしかやらない 
けれど、素体の中に仕込んでしまえば全ての生成したキャラが顔骨制御の恩恵を受けれるという事になる

まとめ

長々と書いたけど書いて見ると案外そんなすごい事してないなという印象
未来の自分が改修とか改変する時のメモ書きとして残すつもりで書きました
でもCGとキャラの量産てのは中々考えないといけない問題で
いつまでも一人のキャラと遊んでても世界観は広がらない

でも……こんなツール作ってもキャラ量産するには結局本人の体力勝負なんですけどね!!!!あぁあーーーー

この記事が気に入ったらサポートをしてみませんか?