デフォームボーンを利用した装着物とメッシュボディの干渉について(確認と現時点での解消方法)

 この記事は前回記事「AVASTARで作成したデフォームボーンのアップロード設定と注意点」の最下部にある「余談ではないデフォームボーンの注意点」の関連記事となります。

前回記事内容のおさらい ―

メッシュボディ装着時、デフォームボーンを利用したオブジェクトを装着すると「既にデフォームされたボーン部分」と後から装着した「オブジェクトのデフォームボーン」が干渉し、ボーンの変形がうまく行われない事がわかりました。
いくつかの検証を行った結果「変形されたボーンを含むオブジェクトを同時に装着した場合は、どちらが優先されるかわからない」を一応の答えとしました。

JIRAに上がっている記事で、同様の現象についてのポストがあり、リンデン側より問題の把握とボーンの優先度設定について今後SecondLife内への実装を進める、というような節のコメントがありました(2022年1月)。
※現時点ではJIRAのコメント以降、リンデンが上記内容に触れているニュース等はない(と思います。あったら教えてください)。

 おさらい終了

前回記事アップ後、海外のクリエイター様より現時点での解決のアドバイスをいただいたので、改めて問題の確認と解決方法を記します。
今回の記事も長いんですが自分自身が忘れそうなので備忘録として書いていると思ってください。眠気に誘われたら無理せず休みましょう。


■デフォームボーン同士の干渉問題の確認

既にボーンがデフォームされたメッシュボディを装着時、ボーンをデフォームした装着物を新たに装着すると下図の右のような現象が起こります。


画像左:正しい状態、オブジェクトのボーンが正常に反映されている。

画像左:オブジェクトのボーンがメッシュボディのデフォームボーンに負けている。

デフォームされた骨は画像内の細い赤い線と点で表示されています。
OK状態では制作オブジェクトのボーンが反映されていますが、NGの方はメッシュボディのボーンが適用されています。
(実際には左手は適用されるのに右手はされなかったり、と不安定な状態になります)


■何故干渉が起こるのか?

この現象はリンデンの標準アバターボディではこの現象は見られず、現在販売されている各ブランドの一部のメッシュボディを装着している時に起こります。
各メッシュボディのメーカーでは、標準アバターの芋くせぇスタイルを矯正するため、アバターの骨組みから改造を加え美しいボディラインを作成されています。
一部のメーカーでは手の骨も整形しているため、今回作成したようなオブジェクトを装着するとボーン情報の衝突が発生し、変形したりしなかったり‥といった状況になるわけです。

これはメッシュボディが悪い、後から装着したオブジェクトが悪い、ということではなく変形ボーンについて特に優先度があるわけでもないためこういう状況になる、ということかなと考えています。


■解決方法についてー海外クリエイター様よりいただいた情報

いただいた解決方法の一部より引用して、この現象を解消するために

「一時的な修正として、優先度5でアニメーションを使用すること」

「Avastarからエクスポートする際にアニメーションがTranslationになっていることが重要」

との情報をいただきました。 これを踏まえ、既に作成したボーンを使用して下記の要領でanimファイルを作成しました。 ※アニメーション作成の細かい手順はここでは触れません

① 1フレーム目に変形させたボーン全ての回転と位置のキーフレームを設定する(画像左上囲み)   今回は左右手首から先部分のキーフレームを設定

② 画像右下、Animation Export、Action Export optionsにて「開始フレーム1、終了フレーム1」を設定
③Anim Export Optionsにて「優先度:5」を設定
④Loop Settingにて「Loop animation」のチェックを外す
「With Bone translation」にチェックを入れる

上記の設定でアニメーションを書き出します。
このアニメーションをSL内で再生すると、次の動画のように、手のボーンが変形します。

このアニメーションの内容を文章にすると
「With Bone translation」にチェックを入れる事により、変形したボーンの情報を含む手の形のアニメーションをループせず、1フレームだけ再生する。
になります。
動画内のアニメーションの情報を見ると「Joints: 32」とあり、アニメーションにボーン情報が含まれている事がわかります。

本来であれば再生が終了した後は変形した手が元に戻るはずです。
しかし、With Bone Translationにチェックを入れたアニメーションでは再生後も骨の変形が保持されたままになります。
これは現時点でのSL、またはビューワーの仕様orバグ?かもしれず、今後FIXされる可能性があるかもしれなくておお・・私は頭痛の種が残るのを感じます。

ともあれ、既に手のボーンをデフォームされたメッシュボディ着用時でもアニメーションによって手の変形が行える事がわかりました。
このアニメーションを装着時に再生するスクリプトと共にオブジェクトに入れて装着すると次のようになります。

オブジェクト装着後、アニメーションが再生され手の変形が反映されています。
これでメッシュボディを選ばず、デフォームボーンのオブジェクトを使う事ができるようになりました。
メッシュボディ付属HUDのハンドポーズも使用する事が可能です。

が、この制御にも弱点がある事が検証でわかりました。
オブジェクト装着→アニメーションを1瞬のみ再生、という事は以降手の変形状態は再生されていないためボーンの拘束状態があまり強くないようで、

・テレポート
・オブジェクトをつけたままログアウト→ログイン
・シェイプの変更、付け替え
・メッシュボディを後から装着する
・新たなオブジェクトの装着

など、さまざまな行動で手の変形がリセットされるのを確認しました。
アニメーションをLoopさせれば常に変形が保持されるようになりますが、その場合は変形ボーンアニメーションで設定した優先度5以下のBENTO HAND用アニメーションが適用されない可能性があります。
これを回避するため、アニメーション再生スクリプトは以下の状態時にも再生を行う様にしました。

・on_rez (ログイン時)
・attach(装着時)
・changed / CHANGED_TELEPORT (テレポート時)

これにより・テレポート後、ログイン後も手の変形アニメーションを一瞬再生し、変形を行うようにしました。
スクリプトが堪能であれば上記以外の場面でも制御できるかと思うのですが、

<ここでごめんなさい>
アニメーション再生スクリプトについては筆者がネットからいただいたスクリプトを元に、非常に素人知識で手を加えたものでとても公開できるような内容ではないため掲載いたしません。
SLには既にスクリプトに堪能な方も沢山居られるので、もしなんかすごくいいスクリプトがあり、本記事が役に立ったなあ、なんか飴でも投げるか、って思われた際は教えていただけるとジャンプして喜びます。


上記スクリプト(テレポート、ログイン時)以外での手の変形が解除された場合は、オブジェクトの再装着により再度変形が行われます。
しかし、何かする度に毎回装着しなおす、という方法だけでは不便でわかりにくいと考え、今回はHUDに「Deform」ボタンを設置しました。

ボタンを押すと変形アニメーションを再生します。
HUDをわざわざ装着する、という手間は発生しますが、これにより視覚的に「ボタン一つでデフォームできる」という事を伝える事が出来ると思います。

■締めに
前回、今回の記事で、この度の制作でぶち当たった問題について一応解決する事ができました。お助けいただいた方、アドバイスいただいた方、検証していただいた方が居たからこそ完成できたと思っています。改めてお礼申し上げます。
検証は完璧とは言えず、上記内容で上げた以外にも手の変形が解除される場合があるかもしれません。また、より良い方法があるかもしれません。
今後新たな問題や解決方法が見つかった場合は本記事に加筆、修正や新たに記事を書く事があります。
いい方法を見つけた方は、是非ご教示いただければ嬉しいです。
また、製品についてはアップデートにて対応をする予定です。

本記事も大変長くなりましたがSLの制作をする方の一助となれば幸いです。
お疲れ様でした。










<ここからは読まなくていい記事タイトルと関係のない内容です>
前回からの問題に続き、今回の内容と、SLの動作や仕様をギリギリに攻めているのでは?という感があります。こんなに動作が不安定なものは製品として販売してはいけないのかもしれない、と考えたりもしました。

実はこの「巨大ハンド制作」の計画自体は2018年にSLに復帰し、制作を始めて2019年頃からありました。
しかし当時の自分では作る事が出来ないと考えAVASTARを導入し、簡単なリグ入り尻尾づくりから始め、単純なリグ入れアニメッシュ、変形ボーンのアニメッシュ、ボーンを変形させたアバター、と出来る事を少しずつ増やして、ようやく挑戦してみようとなり、今回色んな助けを借り完成まで至る事ができました。
それは単純に「自分が作りたかった、欲しかった」アイテムだからです。
もし好みに完璧にハマるものが販売されていれば作ってなかったかもしれません。
まさかここまで苦労するとも思いませんでした(これ毎回作るたびに言うてます)。
また、イベントで発表してどんな反応をいただけるのかという楽しみ(不安)もあります。(クレームこわい・・・!)

もちろん大人気!一億万個売れた!なら大喜びするし、ざんねん!あんまり売れなかった!で一喜一憂もしますがそれはそれ、
今は「作りたい欲が止まらなかった」自分を満足させられたのが一番の収穫だと思っています。

最近読んだネットの記事で、ゲーム開発者らが「小規模な作品から始めよう、小さなものを完成までやり遂げる事で自分に自信をつけ、技術をステップアップできる」と言っているのを見てゲーム制作だけの事ではなくあらゆる制作に通じる事かもね、と感じました。

このブログは個人用に始めたもので、ツイッターで公開する予定もなかったのですが、前回と今回については協力いただいた方からの内容もあり公開する事となりました。
何度も書きましたが備忘録として残しているため内容が古かったり間違っている部分や文章のおかしい点があるかと思いますが、いつかSL向け制作を始める誰かのためになれば嬉しいです。

おわり

コメント