【MMD/MME】モーションブラーについての小技

そぼろさんの配布しているMotionBlurについて。

 

MotionBlurにはMotionBlur2とMotionBlur3がありますが、

3はどちらかというと静画用、動画のブラーとしては大差ない、と思います。

そして、この記事は2でも3でも共通の話になります。

 

1.モデルの頂点数オーバー対応

YYB式NTミクさんとMotionBlurをMMDに読み込むと表示がおかしくなります。

 

 

動かしてないのに頭のあたりに変なブラーがかかってしまってます。

その理由は以下の通りreadmeに書いてあります。

 

>頂点数26万を超えるPMXファイルについては非対応です。

 

YYB式NTは頂点数が30万近くあって多すぎるんですね。

 

 

readmeには非対応とありますがfxファイルの中身をいじることで対応できます。

MotionBlurのフォルダ内にある「VelocityMap.fx」というファイルをメモ帳で開くと以下のような記述があります。

 

//26万頂点まで対応
#define VPBUF_WIDTH  512
#define VPBUF_HEIGHT 512

 

この数字を増やしてやることで26万頂点を超えることが可能になります。

たとえばこう。

 

//26万頂点まで対応
#define VPBUF_WIDTH  1024
#define VPBUF_HEIGHT 1024

 

これでだいたい100万頂点くらいまで対応します。ただ、このまま上書き保存すると頂点数が少ないモデルにもメモリが確保されてメモリをバカ食いします。

とりあえず書き換えたファイルを「VelocityMap1024.fx」とでも別名保存してしておきます(名前はなんでも可)。

 

そして、MMEのエフェクト割り当てを開いてのMotionBlurのRTタブ(VelocityRT)で該当のモデルに「VelocityMap1024.fx」を掛けてやることで頂点数の多いモデルにだけこのファイルを適用してメモリを確保することができるようになります。

 

 

注意しなければならないのは、RTタブで別名の「VelocityMap1024.fx」を掛ける時に、必ずモデル名がある行に適用することです。サブセット展開している時に間違って材質側に適用してしまうと、材質ごとにメモリを確保するようになるため適用された材質数分のメモリをバカ食いするようになります。材質数50に選択して適用すると50倍の重さになります。。

 

もともとモーションブラーはPCによって動かないこともある重いエフェクトです。

メモリをバカ食いしないように配布者側で親切にスペックに制限を掛けているわけで、その制限数値をいじるのは自己責任だということは心得てください。

 

 

2.モーションブラーのアルファ抜き出力

ここからは頂点数の多いモデルに関係なく全モデルで起きる話です。

背景モデルなしでMotionBlurの結果を編集用のアルファ抜き動画を出力しようとするとうまくいきません。

 

モデルはなんとなくボケるのですが、モーションブラーに本来必要な残像が背景の透明部分に食われてしまう感じになります。またモーションキットなどで背景Aviなどを読み込んだ場合も同様の現象が起きます(正確には背景の深度の問題です)。これはreadmeの説明にもあります。

 

>モデル単体よりも、無地でもなんらかの背景モデルがあったほうが望ましいです。
>白背景と黒背景を同梱しています。

 

 

そこでクロマキー合成するために色付きの背景を読み込めばと思いますが、クロマキー合成した場合にも残像部分が背景色と一緒に食われやすいという問題が起きます(閾値の判定次第ではあります)。

 

 

アルファ抜きしたい場合は、まず同梱の白背景.xか黒背景.xのどちらかをMMDに読み込んだ上でMMEのMainタブで白黒背景.xのチェックを外してください。これで背景が透明の状態でも残像が綺麗に残ったアルファ抜きされた動画を出力することができます。

 

 

背景Avi動画の上に残像を残したい場合も同じで、Mainタブの白黒背景.xのチェックを外しておけば大丈夫です。

 

 

この時、MotionBlurのRTタブ内での白黒背景.xのチェックはそのままにしておいてください。またアクセサリ欄のの方で白黒背景.xの表示をオフにしてしまうとやはりブラーが掛からなくなるので注意してください。

 

ちなみにアルファ抜き出力する場合に白背景.xと黒背景.xの色は出力結果に反映されないので、どちらでも同じ出力結果になります。あとで合成する背景の色に近づけたい場合は「MotionBlur.fx」をメモ帳で開いて以下の記述をいじってください。

 

//背景色
float4 BackColor
<
   string UIName = "BackColor";
   string UIWidget = "Color";
   bool UIVisible =  true;
> = float4( 1, 1, 1, 0 );

 

float4のカッコの中身が残像を背景の色に合成する際のRGBA(赤、緑、青、アルファ)の色数値になります。背景の色やモデルの色に近づけておいた方が綺麗に合成できます。

 

 

 

記事は以上です。

モーションブラーとうまく付き合えるといいですね。