【実写合成MMD】WorkingFloorAL(またはMirrorWF)による鏡面の映り方をほんの少しリアルにする

元記事:https://archive.md/8ku9h

作成者:--様

ニコニコユーザーページ:https://www.nicovideo.jp/user/11195552

作成日:2013-07-01 00:07


 (本記事は2013年に書いた内容を、2020年に改変したものになります。)


実写合成MMDにおいて、ガラス面やツヤツヤしている床などに映り込み描写があると、作品のクオリティが格段に上がります。


映り込み描写にはMirrorWFWorkingFloorALが使えますが、そのまま使った場合映り込み方がくっきりしすぎてしまうので、他のエフェクトと組み合わせて調整します。


なお、本記事の元ネタは2012年に行われた第1回MMD関西勉強会でのおたもん様の発表内容です。


------------------------------------------------------------------------

(※追記 2020/5/10)

この記事を書いた2013年当時はMirrorWFを使用していたのですが、数年ぶりにMMDについて調べているうちに、この用途ならMirrorWFよりもWorkingFloorALを使ったほうが良さそうだと気づきました。


そのため、記事タイトルを「MirrorWFによる鏡面の映り方を~」から「WorkingFloorAL(またはMirrorWF)による鏡面の映り方を~」に改題し、内容を修正しています。


MirrorWFよりもWorkingFloorALのほうが、シェーダーエフェクトやAutoLuminousとの組み合わせで有利となります。


一方で、WorkingFloorALは2つ以上読み込むことができません。複数の鏡面を一度に作りたい時(例えば、壁と床の両方に同時に映り込みを行いたい場合)はMirrorWFを使う必要があります。

------------------------------------------------------------------------


使用するエフェクトは以下の3つです。

WorkingFloorAL(針金P様)またはMirrorWF(針金P様)

o_OpticalBlur(おたもん様)

Adjuster(データP様)


------------------------------------------------------------------------


【1. エフェクトの事前設定】

WorkingFloorALを使う場合

WorkingFloorALフォルダ内の「WorkingFloorAL.fx」をメモ帳で開き、

#define UseXShadow 1

と書かれているところを

#define UseXShadow 0

に書き換えます。



・MirrorWFを使う場合

MirrorWFフォルダ内の「MirrorWF.fx」をメモ帳で開き、

float4 ClearColor = { 1, 1, 1, 1 };

と書かれているところを

float4 ClearColor = { 0, 0, 0, 0 };

に変更します。



------------------------------------------------------------------------

【2. 鏡面の位置合わせ】


MMDに、使用モデルとWorkingFloorAL.x(MirrorWF.x)を読み込ませます。


WorkingFloorAL.xの初期位置はモデルの足元・水平ですが、MirrorWF.xの初期位置は座標軸の原点・垂直となっています。

本項ではWorkingFloorAL.xを使用する前提で解説していますが、MirrorWF.xのRxを90に設定しておけば、ほぼ同じ作業で位置合わせができます。


さらに、背景となる実写映像(背景AVI)も読み込ませます。

(※ 背景映像が暗くて分かりづらかったので、LinearColorAdjust(かき様)で一時的に無理やり明るくしています)

ガラス面に正対して撮影すると撮影者が写り込んでしまうので、ガラス面に対し斜めから撮影するのがオススメです。
できれば撮影時にはPLフィルタを使って、実写で生じている映り込みを極力減らしておいたほうが良いです。

静止画(固定カメラ)の場合はパース等を考慮してカメラを手作業で設定します。
(参考:ザ・蝦入。様のブログ記事 フォトジェミック基礎と若干の応用。)
動画(マッチムーブ)の場合は外部ソフトでAfterEffects等の外部ソフトでカメラデータ(.vmd)を生成して、MMDに読み込ませます。

壁(ガラス面)に鏡面を作る場合は、うまいこと位置調整を行う必要があります。

MMD本体に同梱されている「ダミーボーン.pmd」を使うと調整しやすいと思います。



ダミーボーン.pmdを読み込ませ、WorkingFloorAL.xを紐付けさせます。


ダミーボーン・ボーン01は、デフォルトの状態では原点座標に存在しています。


こういうガラス面の前に段差があるようなシーンでは、以下のように対応します。


①座標軸を非表示にし、ボーン01のX軸移動、またはZ軸移動を行い、ボーンの位置を実写映像中の「壁際」のところまで移動させます。

②この状態でY軸回転を行い、ダミーボーンのZ軸を壁に添わせます。

③Y軸移動を行い、段差の高さまで持ち上げます。

④X軸移動を行い、ダミーボーンのZ軸をガラス面に添わせます。

⑤この状態でZ軸を90度回転させると、壁に沿って鏡面が表示されるようになります。

⑥更に、画面上向きにX軸移動し、ガラス面と段差の境界まで鏡面を持ち上げます。


これで位置合わせができました。

端的に言えば「壁際に持っていって、回転させる」というだけの作業です。


------------------------------------------------------------------------


【3. 描写をぼかしつつ、色調整する】


このままでは映り込みがくっきりしすぎているので、調整を行います。


まずはWorkingFloorAL.x(MirrorWF.x)のTrを変更します。

0.05~0.5くらいに設定すると良いと思います。


次に、鏡面に対してぼかしと色調節をかけます。

「o_OpticalBlur.x」と「Adjuster.pmd」をMMDに読み込みます。

すると、画面全体に対してぼかしと色調節がかかります。


ここでMMD右上に表示されている「MMEffect」のボタンをクリック。

さらに「エフェクト割当(M)」をクリック。

Mainタブにて「Adjuster.pmd」「o_OpticalBlur.x」のチェックを外し、

MirrorWFRTタブにて「Adjuster.pmd」「o_OpticalBlur.x」のチェックを入れます。



これにより「鏡像にのみ、ぼかしと色調節がかかる」という状態になります。

MMDの照明と、「Adjuster.pmd」「o_OpticalBlur.x」の数値を調整します。


Adjusterによる調整は本当に微調整程度でOKで、不要な場合も多いです。

o_OpticalBlurは、床面に使うときには強めに、ガラス面に使うときには弱めに適応させます。


これで完成です。


------------------------------------------------------------------------


【4. WorkingFloorAL対応エフェクトについて】


従来のWorkingFloorエフェクトやMirrorWFエフェクトの弱点は、モデルにシェーダーエフェクトをかけた場合や、AutoLuminous4(そぼろ様)で発光させた場合でも、鏡面側にはそれが反映されないということです。




AutoLuminousの光が写り込まない問題を解決した改変エフェクトがWorkingFloorALです。



また、シェーダーエフェクトの一部は折鶴P様、P.I.P様により、WorkingFloorALに映り込ませられるように改変されています。
PAToon+β(P.I.P様)
仕事する床対応HgSAO(折鶴P様)


上記以外のシェーダーエフェクトを使おうとする場合、WorkingFloor対応のための改変が必要になります。指針を折鶴P様が説明してくださっています。

ただし、当記事の通りにWorkingFloorALのTr値を低くして鏡面を薄く描写した場合では、鏡面側の描写がデフォルトのシェーディングだとしても、視聴者さんはほとんど違和感を感じないと思います。なので、わざわざ適応しなくても良いんじゃないかと思っています。




なお、WorkingFloorALは同時に1つしか読み込ませることができませんが、MirrorWFは複数読み込ませることができます。
2面以上(例えば壁と床の両方)への映り込みを行いたい場合、片方の面ではWorkingFloorALを使い、もう片方の面にMirrorWFを使うと良いと思います。
その場合、WorkingFloorALの存在がMirrorWFの描写の邪魔をしないように、エフェクト割当のMirrorWFRTタブにて「WorkingFloorAL.x」のチェックを外してください。

------------------------------------------------------------------------

【5. 制作のヒント】

映り込みをさせるメリットは、3つあると思います。

1つ目は、映り込みがある方がリアルということ。
「物理的に正しい」とも言えます。

2つ目は、映像中の情報量が増えること。
多くの視聴者さんは「映り込みすごい!」という感想が先に来て、多少モーションやライティングが雑でも目をつぶってくれます。

3つ目は、鏡面に映ったキャラの表情が見えやすくなること。
例えば「水槽を見つめるキャラ」を撮ろうと思った時、キャラと水槽を同時に映そうすると、キャラは後ろ姿となってしまいがちです。
映り込みがあれば、キャラの顔がカメラ側に向いていなかったとしても、表情を伺うことができます。


キャラの表情が見えることはとても重要です。


なぜなら、キャラものの実写合成では
「CGキャラに、現実世界の事象へどのようなリアクションをさせるか」
ということが、そのキャラの実在感を左右させるからです。

これは、
 「現実世界には水槽がある」
 「水槽を楽しそうに見つめるキャラが居る」
→「水槽を楽しそうに見つめるキャラは、現実世界にいる(かのように錯覚できる)」
という、ガバガバ三段論法に基づくものです。

ただ
「居る」「立っている」「歩いている」
だけでなく、
「現実世界の夕焼け空を慈しみながら観ている」
「現実世界の待ち合わせスポットで時計を確認しながら立っている」
「現実世界の桜並木を眺めながら歩いている」
というふうに。

現実世界に関わらせるほど、CGキャラは現実世界の事象そのもののように感じられ、「リアル」になります。また、旅行系投稿者のアバター的な役割として、「キャラの表情を通じて、その旅先の魅力を伝える」ということにも繋がります。



そして、上記3つのメリットを考慮した上で、鏡面の映り方の「強さ」を調整すべきです。
必ずしも、物理的な正しさを追求する必要はないと思います。

①リアルな感じで薄っすらと写り込ませる。
鏡面の奥にある水槽も、映像として見やすい。


②視聴者さんの意識を映り込みに集中させるため、リアルよりも濃く写り込ませる。

鏡面の奥にある水槽は、映像的には若干見づらくなる。


③キャラの表情が見やすいように、リアルよりも更にくっきりと写り込ませる。

鏡面の奥にある水槽よりも、鏡面に映るキャラの表情のほうが視覚的に優先される。



どれが正解というわけでもないので、映り込みの強さはケースバイケースで決めると良いと思います。

しいて言うなら、静止画より動画のほうが映り込みは目立つので、静止画では濃い目に、動画では薄めに映り込みをかけたほうがいいかもしれません。



コメント