MMDマクロでの条件判定の方法

MMDマクロにで条件判定して命令を実行する話です。

 

すでに配布しているリップファイルの中に組み込まれているのですが、

その説明になります。

pip-mmd.hatenablog.com

 

例としては以下の箇所。

 

;判定計算用の定数
var(man, 10000)

;歌い出しが0.5以上の場合0.5にする
;リップモーフの変形量を取得
get(face_mouth_input, LipStart)

;変形量が0.5以上か判定する
calc(LipStart, -, 0.5, LipJudge)
calc(man, +, LipJudge, LipJudge)
calc(LipJudge,/,man)

;判定値を切り捨てる
calc(LipJudge, floor)

;判定値が1の場合、以下のファイルを実行する(0の場合は無視される)
loop(\ループ用\モーフ量調整.txt, LipJudge)

 

これはモーフから取得した値が0.5以上の場合は0.5に収めるという処理です。

0~0.5の入力値はそのままで0.5~1.0の入力値は0.5に丸められます。

 

MMDマクロではloopという命令で

他のテキストのマクロの回数を指定して実行できます。

実行回数が0回なら無視、1回以上なら実行されるのでそれを判定に使うわけ。

 

取得したモーフ入力値と判定値0.5の差分を取り、

それを定数10000に足し引きした後に1/10000して、

小数点以下を切り捨てることで1か0かの判定をしてるわけです。

 

仕組みは分かってしまえば簡単ですが、

命令や整数と小数の変換に多少慣れが必要なようです。

 

最初に判定計算用の定数10000をmanという変数に代入してますが、

後で計算式のcalcに使うための処理になります。

calc(man, +, LipJudge, LipJudge)

この箇所でcalcの冒頭が変数(man)ではなく数値(10000)は使えない様子。

 

上の場合、足し算なので逆にすれば実は変数を使わなくても大丈夫なんですが、

0.5以上~の判定ではなく、0.5以下~の判定の場合はこの順にしないとダメ。

というわけで使い回しが利くようにこの順になっています。

 

ちなみに定数に10000を使っていますが、

これはMMDで数値を使う場合に10000以上の数値を使うことがあまりないからです。

たぶんもう1~2桁は増やせると思うんですが精確な確認はしてません。

上の処理はモーフなのでこんなに桁数いらないですね。

ボーンで使うかどうかしょうか。

 

配布しているマクロではさらにもう1つ、

キーフレームの間隔を見てフレームをずらす判定式が組み込まれています。

 

というわけで上のような処理を行えば

入力数値を取得して判定値を元に追加処理を行うかどうかができます。

モデルに特定の名前のボーンやモーフがあるかみたいな判定はできません。

 

ここまでして使う人がいるかはよく分からないけれど

参考になればと思いますです。