VRChatでのDirectBlendTreeの挙動
■メリット
・レイヤー数が減るため負荷軽減ににゃる。また、処理速度が僅かに向上する
※ただしレイヤー数100以下等にゃらそこまで変化はにゃい
・DBTはWDオンのStateで実行される為、見た目に影響するものをDBTにまとめておくとWDオンStation(Sit判定等)に入った時でもバグらにゃくにゃる
・AAPを利用した四則演算、Smooting処理にゃどDBTやAAPでしか出来にゃいことがある
■欠点
・学習コストが高すぎる
・WDオフ環境で使用する場合、DBTでAAPを利用すると「Interruption Source = Next」の遷移発生時にバグる(WDオン擬きのようにゃ効果が発生する)
・アバター容量が僅かに増える
・可読性が落ちる
・ギミックの組み直しが大変/綺麗にまとめて作るためには深い知識が必要とにゃる
って感じ~
メリットももちろんあるけど、1つのアバターに山ほどギミックを盛り込むって人以外には向かにゃそうですねー
(というより学習コストが高すぎてほとんどの人が手を出せにゃいと思う)
何より可読性が落ちるのとdebugがしづらくにゃるので…
リモートでも綺麗にFloatを同期/Smoothingしたい、AAPで計算をしたいって時以外は無理して使わにゃくてよさそう~
もちろんメリットは合って、ギミック製作者が全員DBT対応してMA MergeBlendtreeを設定しておいてくれたらすべてのギミックを1レイヤーで済ませるってこともできます。
(ただし前述した学習コストの問題からこれは非現実的でしょう…)
うちの子の場合は元から軽量化&可読性意識してたからかFPSとかはほぼ変わらにゃかった~
DBT面白いので習熟するまでは続けるけどね!
最終的には必要時にだけ使うって感じににゃりそう?
Merge Blend Treeは、複数のブレンドツリーを1つのFXレイヤーにマージすることができます。 複数のギミックを1つのレイヤーにまとめて、負荷を低減するための高度なコンポーネントです。
ブレンドツリーを常にアバターで稼働させたい場合に使います。
ブレンドツリーを無効にしたり、モーションタイムを制御したりする必要がある場合は、Merge Blend Treeを使わないでください。
DirectBlendtree使えば両対応しやすいかにゃとは思うけど今度はMAのMergeAnimator使うとWD設定が書き変わると言う問題がry
…って思ったけどWDオフベース→オンにする分には問題にゃいか~
>DirectBlendTreeは、WDに関しては例外です。つまり、WDを同じレイヤー内で混在させない限り、混在させても問題ありません。
DirectBlendTreeの場合、アニメーターコントローラーの他の部分がWD Offを使用していても、安全にWD Onを使用できることを意味します。
DirectBlendTree、WDオフだと使えにゃいと勘違いしてた~~
BlendTreeはその名の通り配下のアニメーションを"ブレンド"する必要から、混合元になるパラメーター…つまりデフォルト値が必要だし、Additiveレイヤーも"加算"だから同上…
Interruption Sourceも、中断が発生した瞬間のパラメーターを一時デフォルト値として温存した上で、割り込んできた遷移先と"ブレンド"する…
…と考えていくと、これらがWDオンありき(もしくはWDみたいな動きをする)になる理屈は通ってそうだなぁ、と
BlendTreeというか、子持ちのBlendTree?
DirectBlendTreeも各Motionスロットごとにブレンドしたのをひとまとめにする過程で一時デフォルト値を作ってる、的な…?
(DBTをWDオフにすると起こる被害から想像すると)
BlendTreeについて調べてたらAdditiveレイヤーの使い方が解説されてて思わぬ収穫が…
Apparently, blend trees of type "Direct" with Write Defaults OFF are not affected by the non-normalized value compounding issue when the layer is Additive.
This seems to be very interesting to simplify Direct Blend Tree layers.