あいかわらずblenderの不具合と格闘中

blenderの新たな不具合

 CG集を作成途中で新たな問題に直面し、その原因究明と問題解決に1日費やしました。おそらくですが、原因はデータの不具合(内部的に壊れているというのを含む)というよりもblenderのバグっぽいです。探れば探るほど再現性に疑問符がつくので、他の方で同様の問題に直面する確率は低いと思われますが、将来の自分が再び同様の問題に遭遇する可能性が高いので、今回は備忘録を兼ねて記事にしておきます。

シェイプキーの操作

 メッシュの変形に使う機能にシェイプキーというのがあります(MMDで言うところのモーフ)。頂点の変形をシェイプキーと呼ばれるスロットに覚えさせておきそれを切り替えることで、ボーンを使わずとも一発でメッシュの変形を行えるというものです。シェイプキーに変形を加えることで、オリジナルの頂点形状を破壊することがないので、アニメーションだけではなく比較のために複数形状を作っておきたい場合や、非破壊モデリングなど色々利用価値があります。

 また、シェイプキーはボーン変形の補助として使うことができます。ボーンの動きと連動したメッシュの変形をシェイプキーとして記録することで、肩などボーンだけでは再現が難しい筋肉表現を複雑な補助ボーンなしに実現可能になります。この時ボーンとシェイプキーの連動にはドライバという機能を使います。

 ボーンの動きをドライバを介してシェイプキーの動きに伝えらるので、この応用として非変形のスイッチとしての機能のみ持たせたボーンを作り、ドライバを介してシェイプキーと連動させることで、blenderの操作パネルを使わなくても3Dビュー内のボーン操作のみでシェイプキーを制御できます。例えば顔の表情などのパターンをシェイプキーに覚えさせておき、顔の横に並べた操作用ボーンを切り替えることで表情を変えることができます。

 私は基本的には補助ボーンを使って表情を変えていますが、唯一黒目の大きさを変える(アニメ的表現)部分のみシェイプキーを使用しています。そして今回不具合が発生した箇所がここなのです。

  • 正常な動作:コントロール用ボーンを使って黒目の大きさを変える

    背景データにキャラクターデータをリンク読み込み

     キャラクターデータに背景のデータを含めるとデータ量が膨大になってしまい、管理も複雑になるので、背景は背景、キャラクターはキャラクターでファイルを分けて作成しています。今現在、自作の背景セットには
    (1)浴室・脱衣所・トイレ


    (2)子供部屋

    (3)教室セット・エロ○問部屋セット

    の3ファイルがあります。これらの舞台セットにキャラクターデータをリンク読み込みしてCGを作っています。

 過去記事でも触れましたが、外部のデータをリンク機能を使って読み込むと、元のデータの変更が自動で反映されると言うメリットがあるのですが、一方でそのままでは全く動かすことができない(使い物にならない!)というのが今のblenderの仕様です。blenderではリンク読み込みしたデータに一手間加えることで、初めて読み込み先でそのデータが利用可能になります。その一手間が2.80以前ではプロキシと言う機能でしたが、2.81以降ではライブラリオーバーライドというプロキシの上位互換とも言える機能に置き換えられました。(移行期間として2.90.01現在もプロキシは削除されずに残されています)

 このライブラリオーバーライドが曲者で、遅くなる、不安定になるなどの問題があります。しかし一方でセッティングが簡単、自由度がプロキシよりも上、参照元のデータの変更をカバーできる範囲が広い、などの利点もあり。メリットとデメリットを天秤にかけた時に非常に悩ましい判断を要求されます。

ドライバ付きのシェイプキーが動かない!

 3つのステージファイルそれぞれに、純花(姉)と純人(弟)という二人のキャラクターモデル をリンク読み込みし、ライブラリオーバーライドを使って利用可能にし、販売用のCGを制作しています。ところが人物のポーズを変えている時に、黒目の大きさを変更するシェイプキーを動かすドライバが機能していないことが判明しました。詳しく確認してみると3つの舞台ファイル全てで、読み込ませた純花と純人の二人の黒目の大きさを変えることができませんでした。プロキシを使っていた時はこんな問題は発生しなかったので、疑うはライブラリオーバーライドの仕様。というわけで、新規データを作成して単純化したデータで同じような現象が起きるか試してみました。ところがテストの結果は問題なし。ライブラリオーバーライドを使っても本来ならドライバやシェイプキーの機能は失われません。(少なくとも動かない仕様ではないようです)

 となると次に疑うのはキャラクターデータの方なので、試しに新規ファイルからキャラクターモデル をリンク読み込みして、同様の問題が発生するか確認してみました。すると問題は発生しませんでした。ちゃんとボーンを使って黒目の大きさが変えられるのです。わけがわからないまま、改めて背景セットのファイルを作り直し、再度キャラクターデータを読み込み直しました。すると、今度は正しく黒目の大きさを変えられたのです。やった!問題はなくなった!

まだ終わりではなかった

 これで解決かと思われたのですが、実は不具合はまだまだ続きます。リンク読み込みした直後は正しく機能していたのですが、一度ファイルを保存して再度開きなおすと、また黒目の大きさを変えられない不具合が再発。しかも今度は純花の方にだけ不具合が現れて、純人の方は正常に動くのです。しかも3つの舞台ファイル全てで同じような現象が現れたのです。

 さらに不思議なのは、テストのためにまっさらな状態から純花のデータのみリンク読み込みしたファイルの方では、何度保存と再読み込みを繰り返しても不具合が発生しないこと。全く関連性のない背景オブジェクトの有無の違いだけで、なぜリンクキャラクターのシェイプキーの不具合の出方が変わるのか、全くわけがわかりません。(この時点で純花のデータそのものに問題があるという可能性がかなり低くなりました)

 納得いかぬまま、何度かデータを作り直しましたが、やはりと言うかどれも同じ結果になりました。変なところで再現性があります。そこで考え方を変えて、今までは(1)新規ファイル作成→(2)背景データをアペンド機能で読み込み→(3)キャラクターデータをリンク読み込み→(4)ライブラリオーバーライド適用、という順でデータを作っていたのを、これの手順を変え、(1)新規ファイル作成→(2)キャラクターデータをリンク読み込み→(3)ライブラリオーバーライド適用→(4)背景データをアペンド機能で読み込み、と言う順でファイルを作り直してみました。

 すると、不思議なことに不具合が発生しなくなったのです。「いやいやいや、出来上がりの結果はどちらの順序で作っても同じでしょうに」とは思うものの、現実は現実。データの読み込み順を変えたらなぜか正常に戻るとか、もうわけがわかりません。正直これはblenderのバグだと思うのですが、バグ報告しようにも再現の仕方があまりにも謎なので、報告も難しいのです。(今書いたことをソフト開発者にわかるように英語で報告できる自信がない)

 もう少し検証に時間をかけて条件を絞り込めば、不具合原因の糸口が見つかりバグ報告も可能かもしれませんが、流石にそこまでする余力はないので、今回はこのままCG作成を続けたいと思います。あ〜バグきついなー。

おまけ:姉は見た!

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

限定特典から探す

記事を検索