· エフェクト

HgToonshader中心の順光トゥーンエフェクト構成

HgToonshader中心の順光トゥーンエフェクト構成
スポンサーリンク

自分用メモ。

手軽さと色味の調整のしやすさのバランス、リアルとトゥーンのいいとこ取りみたいなのを目指しました。

要求PCスペックは重め。

シェーダとポストエフェクトは以下の通り。

全体の比較はこんな感じ。

動いている所はこんな感じ。

基本設定

  • 照明:x=0.0 y=-0.4 z=1.0
  • セルフ影:5695
  • アンチエイリアス:なし
  • ステージのセルフシャドウ:なし

アンチエイリアスの切り忘れ防止にはMMPlusが便利です。

シェーダ

MikuMikuShadingを使って編集。設定を配布するので、使いたい人はどうぞ。

配布先

MikuMikuShadingのダウンロードはこちらから。

親登録(任意)をしてくださる方はこちら。登録されたら見に行きます。

MikuMikuShadingに読み込めばエフェクトを書き出してくれます。この時、ファイル名を日本語にするとエラーが起きるみたいなので注意してください。人物にはHgToonShader、背景にはHgOreShaderを適用しています。服には「マップ設定2」タブの「法線マップ」内の「参照」を押して、れんとん様のノーマルマップを適用してください。(再配布可とのことなので同梱してます。NM-Fablic01.pngというファイルです。)

このエフェクトのいいところはインスタントノーマルマップと反射光。肌と顔以外にインスタントノーマルマップを使ってます。ノーマルマップをモデルごとに作らなくてもいい感じに凹凸を再現してくれるインスタントノーマルマップ、大好き…。人物もそうだし、背景にも重宝しています。ただちょっと重いみたいです。反射光は服や髪のテカリとかを作れます。真っ黒な服や髪とかにとても良いです。

背景は補助ライトをかなり強めに設定してます。正面から映すとどうも反射光が光ってくれなくて。背面のライトを強めにして床の光が順光でも見えるようにしています。

髪、服、それ以外はノーマルマップや反射光、補助ライトを使ってますが、肌と顔は逆にトゥーン寄りにしています。顔はシェーダの方で法線の補正ができて(すごい!)前髪の影はうまくかかってかつモデルの顔に不自然な影が出なくなります(LocalShadowみたいな感じ)。LocalShadowよりいいなーと思う点としては、セルフシャドウなので手をかざした時の影とかも反映されることと、逆光にしたくなった時MMDの照明を動かすだけでいいという点ですね。肌の色には薄橙のライトをかけており、肌を補正し、白飛びしづらくなっています。モデルさんによっては不要かもしれないのでうまく調整して下さい。

なお、顔の鼻影と口元の影は今回お借りしたモデルさん(みつきちゃん)の元々のテクスチャです。鼻影と口元の影はテクスチャに描き込んでしまうというのも手かも。

瞳にはFollowingEyeを当てています。これはカメラ目線になるエフェクトです。私は目線をつけるのが苦手なのでこのエフェクトを入れています。欠点としては、例えばモデルの目をエフェクトで一部赤目にしたりするような演出がしづらくなる(一瞬だったら目のRx=180°回転を戻してそこだけ目線を手付けすればよい)ことですが、今のところそこまで困っていません。

FollowingEyeの設定値を決めるのに便利なツールをここでご紹介します。

カメラ目線ヘルパー

余談ですが私はFollowingEyeを多用するので、両目をRx=180°回転させるボーンモーフをモデルに入れています。とても便利なので、是非。

リムライト発光

DepthOffSetRim+AAは鍵束様が配布してくださっているPostSimpleBに同梱されているエフェクトです。リムライトエフェクトです。PostClipで囲い、人物モデルの髪、服、小物のみリムライトがかかるようにし、背景、肌、顔材質は除外しています。

LightBloomはray-mmdのExtensionに入っているものです。AutoLuminousで光っている背景部分とリムライトを拡散させます。光の光る半径を狭くし、光を強くします。青色もつけます。

この時みつきちゃんの服の白い部分(肩のひらひらなど)が発光していないのは、msBrightnessVintageで白を丸め込んでいるからです。詳細は後述。

【設定値】

DepthOffSetRim+AA

  • X=2.0
  • Y=-6.5
  • Si=1.0
  • Tr=0.76

LightBloom

  • BloomThreshold 0.26
  • BloomRadius- 0.21
  • BloomColorAllH+ 0.64(青みの色相補正なので、作りたい色味によって変更する部分)
  • BloomColorAllS+ 0.44
  • BloomColorAllV+ 0.12

左上のスライダーしか操作しません。残りは0.0。

背景の質感向上

nbHSV_2Dは背景にだけかかるようマスクしています。背景だけをかなり暗くしています。また、今回は青みを足しています。

HgSpotLight(セルフシャドウあり・pmx版)でライトを追加しています。これはP.I.P様が配布されているHgSpotLightMaskでモデルをライトから除外し、ステージだけにライトがかかるようにします。

HgSpotLightの設定値はほぼパラメータ初期化.vmd通りですが、照射縁諧調は0.74にしてぼかしを強くしています。光源位置をモデルの頭上(y=96.7、z=27.05)、照射方向をモデルの地面あたり(y=-14.35、z=-7.70)にしています。

ikWetFloorは床の反射です。ぼやっとうっすら反射させることで、質感を上げています。

ikWetFloorSettings.fxsubを開き、

// パラメータ

// 表面のザラつき(0~2程度)。ザラつくほど映り込みがボケる。
// 後段のBlurSizeも参照。ラフネスを小さくしても、ボカシの値が大きいと映り込みがボケる。
float Roughness = 1.0;

// 映り込みに適用する色。
float3 ReflectionColor = float3(1.0, 1.0, 1.0);

// 視線方向に引き伸ばす長さ(0~50程度)
float LightTail = 25.0;

// 鏡面画像のサンプル数(1~64程度)。多いほど映り込みがスムーズになるが重くなる。
// ザラつきが小さいほど、サンプル数は少なくてよい。
const int NUM_LOOP = 16;

// 段差を許容する範囲(MMD単位)
// ※アクセサリの高さを基準に映り込みを計算している。
float HeightThreshold = 10.0;


// マテリアルをテクスチャで指定する
// αの値でRoughness、RGBで各色の反射率を指定する。黒に近いほど反射しなくなる。
// 指定しない場合は、//#define のように先頭に//をつける。
//#define MaterialTextureName "tile.png"

// テクスチャのスケール。テクスチャ1枚がどのくらいの大きさか。
// アクセサリのスケールとここで、実際のサイズを決める。10で80cm~1m程度?
float MaterialTextureScale = 10;


///////////////////////////////////////////////////////////////////////////////////////////////
// AL対応 (擬似対応です。完全にはサポートしていません。)

// AL対応するか?
#define USE_HDR		1

// ALの強度をどれだけ上げるか
#define AL_Power	4.0

//閾値
float LightThreshold = 0.9;


///////////////////////////////////////////////////////////////////////////////////////////////

#define XFileMirror  1  // アクセサリ(XFile)も鏡像化する時はここを1にする

float BlurSize = 1.0;

// 画面を小さく描画することで、画面端のポッピングを軽減する
float FrameScale = 0.8;

float FloorDarkenRate = 1.0;	// 映り込み度に応じて床を暗くする(0.0~1.0:暗くする)


にしています。

xファイルの設定値はTr0.1です。

PostKrSSGIは鍵束様が配布されているPostSimpleBに同梱されているエフェクトです。

SSGIとは

スクリーン ビュー内のオブジェクトに動的な間接ライティングを追加することで、自然に見えるライティングの作成を目的にしている機能

らしいです。参考

このエフェクトを使うと質感が超向上します。ただものすごく重いです。fpsが一気に20くらい下がります。無理して入れる必要はないと思います。ダメ押しの一手みたいな位置づけです。

背景にだけかけます。DepthOffSetRim+AAと同様、PostClipでエフェクトを挟み込みます。

Trは0.7です。

色調補正

一番最初のmsGradation3は下から黒の乗算がかかるようにします。

msBrightnessVintageで真っ黒を上げ、真っ白を下げます。こうすることでLightBloomで光を拡散させた時、リムライトだけ光り、服の白い部分が光らなくなります。

設定値は

x=0.19、Y=0.92、Si=1.4、Tr=1.0

です。

CHATEAU(PostMovie改変 BREAK THE COLOR)はこちらで配布されているものです。

周辺ボケとか、画面にうっすらのボケとか、アニメっぽくする処理の諸々これでいいのでは?と思い入れています。CHATEAUは色味が変わりにくいのが使い心地のいい点です。Tr0.5。

msGradation1は白いスクリーンを上からかけています。CHATEAUで斜め上からかかっていますが、さらにかけます。msGradation1は幅狭めにかけます。加算だと白飛びすることがあるので、スクリーン合成でかけます。

msGradation2はオーバーレイを上からかけます。msGradation1やCHATEAUで白っぽくなってしまった画面の色を締めます。自分が作りたい色の色味をかけます。

sdColorGradingSDRはsdPBRに含まれているポストエフェクトで、これ単体で使えます(sdPBR480>posteffect>ColorGrading)。カラーグレーディングエフェクトです。これは色味の調整がとても楽です。これとmsGradation2、nbHSV(背景)とで画面の色を調整していきます。まずはコントローラにdefault.vmdを読み込みましょう。Liftが暗い部分、Gammaが中間部分、Gainが明るい部分を操作します。LiftS,GanmaSでどれだけ色味を反映させるか決め、LiftH,GanmaHで色相を決めます。GainやLiftV,GanmaVはほとんど使いません。今回ならLiftH:0.61、LiftS:0.2、LiftH:0.68、GammaS:0.04で青みを入れています。色味の調整の時に役に立つのは同梱のsdHistgramで、画面上の色の情報がわかります。

msPowerOverlayは入れるだけで画面の色合いが良くなるので入れることにしました。今回は1.0で入れてます。

その他のエフェクト

  • Dippen:エッジエフェクト。設定値はラヴィエフェクトメイキング&Dippenの設定値のものをそのまま使いました。
  • PostSimpleB:DepthOffSetRim+AAとPostKrSSGIを使うのに必要。
  • HgSSAO:SSAOは背景の質感のために入れています。顔だけ除外。
  • PowerDoF:DoF。前ボケはいらないのでTr0。Si1.0。
  • PostAlphaEye:前髪を透けさせるため。
  • sdFXAA:アンチエイリアス系。
  • AutoLuminous:ステージの照明を光らせるため。
  • MotionBlur3L:モーションブラー。si0.5

Q&A

Q.なぜExcellentShadowを使わないのでしょうか?

A.使ってもいいですが、使う意味があまりなく感じました。私は元々ExcellentShadowをひかえめ設定でつかっていてあまり負荷はなかったのですが、ちょっとでも負荷を軽くしたくて。(その割に激重エフェクトを使っています)

Q.なぜリムライトにDepthOffSetRim+AAを選んだのでしょうか?

A.リムライトの加減が好きだから…というのと、以前はPostRimLightToonを使っていましたが、黒髪モデルだとカメラを遠くした時白っぽくなるように感じたので変えました。この現象の解決方法をご存じの方がいらしたら教えてください。

Q.アンチエイリアスはなぜ切っているのでしょうか?

A.なんとなくですが、sdFXAAだけの方が画質良く感じるからです。若干ですが出力も高速になる…?

Q.ステージのセルフシャドウを切っているのはなぜですか?

A.室内の場合、モデルにステージのセルフシャドウがかかってしまうことがあるからです。

Q.猫型dog様のSSAA改を入れてないのはなぜですか?

A.MMD標準のアンチエイリアスを切ることにより、変な線が出なくなったっぽいからです。

Q.シャープ系のエフェクトを使わないのはなぜですか?

A.sdFXAAを使っていると十分ぱきっと感を感じるからです。シャープをかけすぎるとジャギジャギ感が出てきちゃうような…。と思ったのですが、今回の動画を見るとちょっとぼやっと感もあるような気がします。次回はシャープを入れてもいいかもしれません。

Q.SSAOの中でHgSSAOを選んだ理由は?

A.SSAOの出方が好きなのと、顔材質を除外できる所に魅力を感じました。SvSSAOも好きなので迷い所です。

Q.「6番目より後のアクセサリはモデル描画後に描写する」にしているのはなぜですか?

A.HgSpotLight.pmxをmsBrightnessVintageより後にしたいからです。msGradation3で黒乗算のグラデーションを、msBrightnessVintageで白を丸め込んでいるので、これらより後にHgSpotLightを反映させたいのです。アクセサリ版は設定の調整が難しく、pmx版を使っています。ただPmx版だとPostClipが使えないんですよね。マスクが配布されているので良いのですが、以前モデルが透ける現象に遭遇したことがあり…(原因不明)コントローラ版があれば…

Q.以前のExcellentShadowとHgShadowを同時使用する方法をやめたのはなぜですか?

A.最近のエフェクト構成について語る(上級者向け)の方法のことですが、ステージのセルフシャドウを出すならSpotLightで照らす方がいいなと思ったからです。

Q.ポイントライトではなくスポットライトなのはなぜですか?

A.室内の場合ですが、比較的明るい室内の場合はスポットライトが自然だと思ったからです。本当は今回の動画であれば背景のAutoLuminousの周辺だけ光っているのが正しい気もしますが(書いていて気づいたのですがそれはg_Alexで可能でしたね)、割と人物と背景を分けて考えているレンダリング方法なのと、人物モデルはできるだけ明るい方がいいという持論でこうしています。暗い室内で光源が1個しかない場合はHgPointLight、屋外でサンライトだなと思ったらPostDirectionalLightを選ぶかもしれません。

Q.背景を暗くするのにnbHSV_2Dを使ったのはなぜですか?

A.こだわりは特にありません。RTタブでマスクできるのが好きです。同じようなことはM4Layer_色調機能つき改変でもできます。ただ、M4Layer_色調機能つき改変は以前透過材質の色が変わらない現象に遭遇しました。解決策をご存じの方がいらっしゃいましたら教えてください。nbHSVはかなり自由度の高いエフェクトでポテンシャルがすごいです。是非配布動画をご覧ください。

Q.DoFの中でPowerDoFを選んだ理由は?

A.ボケ方が一番好きだからです。玉ボケが欲しい人はikBokehやLiteDoFV3がおすすめです。

Q.フォグ入れないんですか?

A.試したけど上手く使いこなせず…。検討中です。

Q.出力とFPSは?

A.1900Fを、15fps、約10分程度。PCはこちらです。

関連記事

HgSpotLightでキャラをマスクしたい時

HgSpotLightでキャラをマスクしたい時

HgSpotLightでキャラクターにHgSpotLightが当たってほしくない時、つまりマスクしたい時、チェックを普通に外すとキャラクターが透明になる。この現象を回避するにはExclude同梱のDrawTransParent.fxをHgSL_DrawRTのタブでモデルに適用するといい。

【2026年最新版】最近のエフェクト構成についてメモ

【2026年最新版】最近のエフェクト構成についてメモ

エフェクト記事もずいぶん古くなってしまったので、最新の動画で使った構成を自分用メモも兼ねて公開します。

生き生きとした表情にするためのFollowingEye設定値

生き生きとした表情にするためのFollowingEye設定値

モデルに魂を吹き込んだ表情にするには目線追従がマストです。しかし、モデルの視線を手動でカメラ目線にするのは手間がかかります。そこで出てくるのが「Following Eye」です。これはとても便利なのですが、デフォルトの設定では目がぎょろっと...

ロンパ風MMDのエフェクトメイキング

ロンパ風MMDのエフェクトメイキング

完成品目だけレタッチ。エフェクトS5ShaderDippen(Accent)ImSSAOY1 Z0.4HgSAOikDryBrushikclutRC_cinemaのRCM4Layer(乗算)L_edgeShader_defMultiplyを...

セレナーデ制作記
セレナーデ制作記
スポンサーリンク