Ray-MMD by Ray
https://github.com/ray-cast/ray-mmd
とある友人が製作中のシェーダです。まだ解説とかないので、代わりに使い方を書いてみました。
不慣れなものなので文章的におかしかったら大目に見てください
=====================
*ver1.08でいくつか変更点があります
基本的な使い方の解説:
①skybox/skybox.pmxもしくはskybox_hdr.pmxをMMDに読み込みます(最新版だとskyboxが独立されたので、それぞれのフォルダにあるskybox.pmxを一個選んで読み込んでください)
②ray.xを読み込みます。ray_controller.pmxもついでに読み込んでください
③MMEのmainタブで、モデルにmain/main.fxを適用したあと、Materialタブでモデルに(もしくはサブ展開した材質に))Material/Material.fxを適用します(マテリアルの設定は後ほど解説します)
④最低限の手順はここで完了です。 あとは照明調整したり、ray_controller.pmxでいろんな機能試してみたりするといいかもしれません

*ver1.08以降:skyboxを読み込んだあと、さらにMMEのEnvLightMAPタブで、skybox_hdr.pmxに同じフォルダにあるskylighting_hdr.fxを割り当ててください
*Tutorialフォルダに簡易説明画像があります

注意点:
skybox.pmxもしくはskybox_hdr.pmxはIBL(イメージベースライティング)で使われるので必ず読み込んでください。もし別のスカイドーム画像に変えたい場合は、cmftstudioで処理する必要があります。なので、現状では少々面倒なのかもしれません。作者によると、後ほど一発で変換するツールも作る予定なので、cmftstudioの使い方がわからない方はそのまま付属のスカイドームを使うか、ツールを待ちましょう
skybox.pmx(LDR)とskybox_hdr.pmx(HDR)の違いは作者の配布ページを御覧ください。ここでは割愛します。
==================================
*ver1.08以降:一発変換ツールの使い方↓
①skybox_hdr.pmxが格納されているフォルダを一個選んで複製し、適当にリネームする
②Tools\cmft.rarを解凍し、HDRi画像をcmft_cpu_x64.exe(64bit)にドラッグ&ドロップ
③HDRi画像(skybox.hdrにリネーム)と生成したファイル(skydiff_hdr.dds、skyspec_hdr.dds)をSkybox\複製で作ったフォルダ\textureに上書きすればokです
*対応形式:hdr(おすすめ), dds, ktx, tga
sIBL Archive  http://www.hdrlabs.com/sibl/archive.html

補足:
①描画順で、skyboxを一番上に置く必要があります (メニュー背景=>モデルの描画順)
②MMD側のAAをオフにする必要があります。 (メニュー表示=>アンチエイリアスのチェックを外す)
======================================
カスタムマテリアル:
Material.fxで材質の細かい設定ができます。(メモ帳でエラーが出た方はnotepad++でお試しください)
設定するにはまず、一行目の USE_CUSTOM_MATERIAL 1 を1にします(0=OFF 1=ON)共通仕様

①ALBEDO_MAPとはモデルのテクスチャです。特に弄る必要がありません。
例:
#define ALBEDO_MAP_ENABLE 1 (ALBEDO_MAPを使用する)
#define ALBEDO_MAP_IN_TEXTURE 1 (ALBEDO_MAPはモデルのテクスチャにある)
両方とも0にすると、モデルが白くなります。(テクスチャ無しの状態)
ALBEDO_MAP_APPLY_DIFFUSE 1 でPmxEditor側の拡散色を乗算します。(黒くするとか)必要ない場合は0に
ALBEDO_MAP_APPLY_COLOR 1 で 下にあるconst float3 albedo = 1.0;の色を乗算します。必要ない場合は0に
例:const float3 albedo = float3(1, 0.0, 0.0);で 赤を乗算(RGB)

②ALPHA_MAP テクスチャのアルファチャンネル(テクスチャの透明部分)
デフォルトでOFF。(現段階でBUGがあります。赤面などの半透明モーフはオンにしてもたぶん大丈夫です。)
*最新版は内部で処理するよう変更されました。

③NORMAL_MAP 法線マップ。材質のでこぼこ感を表現します
#define NORMAL_MAP_SUB_ENABLE 1 (法線マップを使用する)
#define NORMAL_MAP_SUB_FILE "xxxx.png" (法線マップを同じフォルダに入れて、ファイル名を指定します。拡張子含め)
normalMapSubLoopNum = 1 (法線マップの繰り返し回数、模様の大きさ)
normalMapSubScale = 1 (高さ補正 -1=反転)

④NORMAL_MAP_SUB サブノーマル。メイン法線マップを適用した状態で、更に小さいでこぼこを表現する場合に使います。使い方は右に同じく

⑤SMOOTHNESS_MAP 材質の光沢度
#define SMOOTHNESS_MAP_ENABLE 0 が0の状態で、下にあるsmoothness = xxで、材質の光沢度を指定します。
例:#define SMOOTHNESS_MAP_ENABLE 0 (スムースネスマップを使用しない)
......
smoothness = 1 (つるつるになる)
PBR材質マップを使用する場合はSMOOTHNESS_MAP_ENABLE を1に。 ファイルの指定方法は法線マップと同じく

⑥METALNESS_MAP 材質の金属度
const float metalness = 0.0 (材質は金属ではない)
1.0=金属。 材質マップの指定は右と同じく
const float metalnessBaseSpecular = 0.04; (0.04が物理的に正しいが、もし肌などの材質がテカテカしすぎた場合は0.00に)

⑦SSS 表面下散乱。皮膚などの透明感のある材質を表現するパラメータです
#define SSS_ENABLE 1 (sssを使用する)
#define SSS_MAP_ENABLE 0 (SSSマップを使用する場合は1に)
const float3 transmittance = 0.8 (sssの色を指定する  1.0=白 )
*ver1.07以降:const float3 transmittance = SSS_SKIN_TRANSMITTANCE(0.75); (0.5~0.9で色を指定)
const float3 transmittance = float3(0.3, 0.0, 0.0); (少々赤め)
const float transmittanceStrength = 1.9f (強さを指定する。 1.0~1.99f肌 0.0~0.99fそのほか)

⑧MELANIN_MAP 日焼けを表現するパラメータ
例:#define MELANIN_MAP_ENABLE 0
const float melanin = 1.0; (0~1 で強さを調整)

⑨EMISSIVEで、発光するかどうかを指定します
#define EMISSIVE_ENABLE 1 (発光する)
#define EMISSIVE_USE_ALBEDO 0 (ALBEDOの色を使用しない)
#define EMISSIVE_MAP_ENABLE 0 (EMISSIVEMAPを使用するか 1で使用 ファイルの指定方法は法線マップと同じく)
const float3 emissive = 1.0; (マップを使用しない場合の色を指定する =float3(1.0, 0.0, 0.0);で赤)
*モデル側で発光するかどうかを指定する機能も今後追加する予定だそうです。 (反射強度で発光の強さ、反射色で発光色を指定する)
*ver1.08以降:const float emissiveIntensity = 1.0;で強さを指定する。もしくはモデル側で反射強度が200以上で発光する

⑩PARALLAX_MAP 視差マップ。指定方法は法線マップと同じ

⑪異方性フィルタリング デフォで16x
============================================
一見多いのですが、実際によく使うのは金属度、光沢度、sss この3つです。
例:皮膚の場合は (私個人的な設定なのでご参考までに)
#define NORMAL_MAP_ENABLE 1(ノイズから生成した法線マップを使ってます)
#define NORMAL_MAP_FILE "skin normal.png" (同じフォルダにあるファイル名を指定)
.....
#define METALNESS_MAP_ENABLE 0 (マップを使用しない)
const float metalness = 0.0 (金属度=0)
.....
#define SMOOTHNESS_MAP_ENABLE 0
const float smoothness = 0.45 (光沢度=0.45)
.....
#define SSS_ENABLE 1 (SSS オン)
.....
const float3 transmittance = float3(0.25, 0.0, 0.0); (sssの色は少々赤め)
.....
const float melanin = 0.2; (肌を少し黒く)

*ver1.07以降 skin&hair設定済みのMaterialが追加されました

思い通りの質感にならない場合はIBLの画像(skybox)を変えてみるといいかもしれません(HDR変えただけで、割りと全然違ってくる場合があります)。もしくはMMD側の照明を調整したりするとか
マテリアルのおおまかな説明は以上で終わりです。もっと詳しく知りたい方は作者さんの配布ページの画像を御覧ください。
====================
ray.conf
フォルダにあるray.confをnotpad++で開いてshaderの各種設定ができます
①SHADOW_QUALITY (陰影のクオリティ) デフォルトで3
②IBL_QUALITY (IBLのクオリティ) デフォルトで2
③SSAOに関する設定。
*AOキャンセル:
#define SSAO_MODE を2にすると、SSAODepthMapタブが生成されます。Shadow\Depth_nossao.fxをサブ展開した材質に適用すると、指定した材質のAOを消すことができます。
④SSGI (削除されました。代わりに別のものに変更する予定)
⑤SSR_QUALITY (テスト機能、映り込み。まだ使用できる段階ではない 重いので注意)
⑥SSSS_QUALITY SSSS デフォルトでオン
⑦FOG_ENABLE  (テスト機能、フォグエフェクト。 1でオン ExtensionフォルダにあるGroundFogController.pmxで調整できます)
⑧HDR_BLOOM_QUALITY (光が周囲に溢れて見える現象 デフォで3)
⑨AA_QUALITY (アンチエイリアス デフォルトで1)
===================================================
多光源:(いろいろテスト中)
lightingフォルダに各種光源が格納されています
使い方(スポットライト):
①SpotLight.pmxを読み込みます
②表情モーフで色や範囲、強さなどを調整します

デフォルトで陰影がオフなので、オンにする場合は(環境によっては少々重いかもしれません)
ver1.07 LightMapタブで、spotlight.pmxに、lighting\shader\sopt_lighting_s1.fxを適用します(s1~s3陰影のクオリティ)
旧バージョン lighting\shader\spot_lighting.fxを開いて、#define SHADOWMAP_ENABLE を1にします

他の光源の使い方は大体おなじです

*ver1.08 アルファチャンネルバグ修正&ポイントライトの陰影追加

動画ソースを光源として使う方法 LED:
①Lighting\DummyScreen.xを読み込んで非表示にします
②MMDメニューから背景AVIを読み込みます。(モード3にする)
③LED.PMXを読み込んで位置やサイズを調整します (表情モーフ)

GIF画像の場合:
①rectangle_lighting.pmx(面光源)を読み込みます
②shader\rectangle_lighting.fxでGIF画像を指定します
(VIDEO_MAP)
#define VIDEO_MAP_ENABLE 1
#define VIDEO_MAP_IN_TEXTURE 0
#define VIDEO_MAP_ANIMATION_ENABLE 1
#define VIDEO_MAP_ANIMATION_SPEED 1
#define VIDEO_MAP_UV_FLIP 0
#define VIDEO_MAP_FILE "xxxx.gif" (ファイル名)
③Materialタブでrectangle_lighting.pmxに適用するMaterial.fxを以下のように設定する
(ALBEDO)
#define ALBEDO_MAP_ENABLE 0 (OFF)
#define ALBEDO_MAP_IN_TEXTURE 0
#define ALBEDO_MAP_ANIMATION_ENABLE 0
(EMISSIVE)
#define EMISSIVE_ENABLE 1 (発光する)
#define EMISSIVE_USE_ALBEDO 0
#define EMISSIVE_MAP_ENABLE 1 
#define EMISSIVE_MAP_IN_TEXTURE 0
#define EMISSIVE_MAP_IN_SCREEN_MAP 0
#define EMISSIVE_MAP_ANIMATION_ENABLE 1 
#define EMISSIVE_MAP_ANIMATION_SPEED 1
#define EMISSIVE_MAP_UV_FLIP 0
#define EMISSIVE_APPLY_COLOR 1
#define EMISSIVE_APPLY_MORPH_COLOR 0
#define EMISSIVE_MAP_FILE "xxxx.gif" (ファイル名)

===========================================

49,590

コメント数 22

参考になりました。
ありがとうございます。

amazing tutorial (≧∇≦)キャー♪
may i ask how to make these files :

transmittance.png
melanin.png

thank you in advance <(_ _)>

the newest version have skin material. most of the time you don't need to deal with those images, but you can use the photoshop to paint it, or you can borrow maps made for other shader

↑by Ray not me

ありがとうございます thank you very much (≧∇≦)キャー♪

感謝說明( ゚∀゚)ノ
該好好研究了。

ありがとうございます!m(__)m
とてもわかりやすいです!!

ありがとうございます。
試しに使ってみたところ、キャラの周囲に謎の影が出るようになりました。
(1:15ぐらいから特に目立ちます)
http://ecchi.iwara.tv/videos/dgmp8urzyc7lyrdl
なにかわかりましたら教えて頂ければ幸いです。

背景の変な影のことでしたら、skybox.PMXの描画順を一番上に置くと治ると思います。(やり方はメニュー背景=>モデルの描画順で、SKYBOXを一番上に)
もし治らなかった場合は、MMEのMaterialタブで、skybox.pmxにmaterial_skybox.fxが自動で割り当てられてない可能性が考えられます。なので、materialフォルダにあるmaterial_skybox.fxを手動で割り当ててお試しください
それと、MMD側のアンチエイリアスもオフにする必要があります。メニュー表示=>アンチエイリアスのチェックを外すと、モデルの縁の部分の黒いギザギザを改善できます
かくのを忘れました、報告ありがとうございますm(__)m

skybox.PMXの描画順を一番上に置くことで解決しました。
本当にありがとうございます。

感谢,还有大触你还收小弟吗?

Skyboxの作り方で気になるところがあるので確認していただけますでしょうか?
>③生成したファイル(skybox.hdr、skydiff_hdr.dds、skyspec_hdr.dds)をSkybox\複製で作ったフォルダ\textureに上書きすればokです
ということですが、skybox.hdrは作成されないので元の画像をリネームするのではないかと思ってます。
(自分のところではこれで動いているように見えます。)

あ、そうでした
修正しました、ありがとうございます!

いえ、こちらこそありがとうございます。ちょっと自信なかったもので本当にこれでいいのかと心配でしたw

ちなみにもう一つBUGかどうかわかりませんが、
変換したskyboxを読み込んでも真っ白なまま、何も表示されない、もしくは謎の黒い線が出る
もしそうなった場合の解決策:HDRi画像の解像度を3200*1600に変更すると治ります

Ver1.1.0ではSSAO_MODEはなくなりましたか?
(かわりにDepthMapタブでDepth_nossao.fxを割り当てる
ことで無効にできたみたい)

返事が遅れてごめんなさい、、、あまりログインしないので全然気が付きませんでした、。、
先程試してきたのですが、nossaoのやり方はそれで間違いないです

これを書いたのは大分前で、最新版だと一致しない部分が他にもいくつかあると思うんで、時間ができたらまた書き直します。
使い方自体はたぶん今まで通りで大丈夫だと思います。

1.1verのhdri変換ツールについてですが、rgbm_x24とrgbt_x1024二種類用意されてます。x64=64bit x86=32bit。fast、medium、highはそれぞれ生成した画像の品質です。

旧バージョンで作ったskyboxはそのまま使えるので、作り直す必要がありません
新規で作る場合はREADME画像の通り、複製したskyboxフォルダではなく、Templateフォルダに(rgbm_x24で作ったファイルを旧バージョンのskyboxフォルダに入れると多分バグると思います、今までがrgbm_x6なので)
rgbtはテスト中だそうで、rgbm_x24よりさらに高品質?っぽいです

Can you share the settings file you used please? I followed the tutorial but now there is an error when I try to use the raycast material.
Edit: I got it to open but it doesn't look good like yours.. mine looks very plain.
Where can I find your skin texture (is it the skin.png that comes with the shader)?

thank you so much ^_^

so cool and so hard .. i can't understand anything T_T , maybe somewhere tutorial on english ?

你的mmd使用的模型在哪里可以下载啊