現在アバターの着せ替えシステムを作成しているのですが、服などのあまりポリゴンがないものはテクスチャを切り替えることにより対応しようと思うのですが、髪の毛などの細かいパーツの場合に、mocファイルを分けるか一つのmocファイルの中に複数の髪型を入れてパラメーターで切り替えるかを迷っております。一番の心配は負荷問題になります。各髪型は物理演算なども含まれているので、例えば3つの髪型があって、2つを非表示(透明度を0%)にして、一つを表示(透明度を100%)にした場合に合計3つの処理が走ることにより負荷が3倍になるのではないかと考えております。
mocファイルごと切り替えればこの心配もないのですが、できれば一つのmocファイルでパラメーターで髪型を切り替えたい状態です。
pose機能に各パーツを非表示にする機能もあるようですが、pose機能で非表示にした場合も裏では処理が動いている状態でしょうか?
一番処理が軽くすみ、シンプルな方法がございましたら、ご教授いただけると幸いです。
@taku1122 様
いつも弊社製品をご愛顧くださり誠にありがとうございます。
Live2Dスタッフでございます。
Pose機能によって大きな負荷が発生することはないと思われます。
Poseはモデルのパーツ不透明度の値を計算する機能で、毎フレーム動作します。
しかし処理としては、フレームごとに管理しているパーツごとに不透明度の値(0~1)を計算し、その値を計算直前にモデルに適用するという、数値の操作のみを行います。
よろしくお願いいたします。
ご返信ありがとうございます!
一点ご確認させていただきたいのが、不透明度が0の状態でも、裏ではディフォーマー等の処理が走っていて、例えば9つの髪の毛が不透明度0で1つの髪の毛が不透明度1の場合に、9個の髪の毛の物理演算等は見えないで毛で裏では動いており、負荷がかかるという認識であっておりますでしょうか?
Tak
2023 年 3 月 15 日午前 11:12
4
@taku1122 様
いつも弊社製品をご愛顧くださり誠にありがとうございます。
Live2DスタッフのTakと申します。
本件onoに代わりまして回答差し上げます。
SDK for Nativeに沿って説明いたしますが、パラメータの更新処理などはLAppModel::SetupModel()内で呼ばれている各クラスのUpdateParameters()やEvaluate()が更新を行っており、ここでは不透明度による分岐を行っていないためその分負荷がかかります。
しかし、例えば不透明0の場合この部分の処理を通さないといったような形に書き換えることでパラメータ更新の負荷を減らすことが可能です。
ただし、この更新処理はPoseやBreathに設定したアートメッシュ以外も動かさない等の使用方法ではご期待に沿わない場合がございますことを予めご了承ください。
補足となりますが、不透明度が0の状態のアートメッシュは描画更新がなされない仕様となります。
この回答が意図に沿わない内容でございましたら、さらなる詳細をご連絡いただければ幸いでございます。
以上ご確認のほど何卒よろしくお願いいたします。
ご回答ありがとうございます。SDKのファイルを書き換えでの対応が可能ということを理解できました。
もう一点質問なのですが、Live2Dエディター内のパーツ一覧の中に目のアイコン(表示・非表示を切り替えられるボタン)がありますが、こちらを非表示にした場合は処理は走らない(描画されなく、裏でパラーメーター等のアップデート等も行われれない)という理解でよろしいでしょうか?
Tak
2023 年 3 月 17 日午前 10:42
6
@taku1122
Live2D スタッフのTakでございます。
ご質問いただいたCubism Editorのパーツパレットにございます表示切り替えボタン(目のアイコン)による処理の差につきまして、非表示にした場合描画処理はスキップしますが、パラメータの更新などは行われます。
以上ご確認のほど何卒よろしくお願いいたします。