8_1_マテリアル - gaj-cg/ray-mmd-docs-ja GitHub Wiki
マテリアルとは、モデルの見た目を決定する設定です。MMDのモデルでは「材質」と呼ばれている設定ですが、ray-mmdでは従来のMMDモデルの設定とは異なり、PBR(Physically Based Rendering - 物理ベースレンダリング)用のマテリアル設定を行うことになります。
その為、MMDのモデルにray-mmdのデフォルトマテリアル(material_2.0.fx
)を設定すると、多くの場合、白っぽい感じになりMMD標準のレンダリング結果との差を感じることになると思います。これは、ray-mmdがMMDの材質設定に合わせたレンダラーではなく、PBRのマテリアル設定に合わせたレンダラーだからです。
PBRのマテリアル設定、特にアルベドで参照されるテクスチャマップの色の設定方法が従来のものと大きく異なり、輝度で言うと非金属の場合sRGBで30~240程度に収まり完全な白(255)や黒(0)は使われません。
ray-mmdのマテリアルは、モデルの材質設定の一部を参照しつつ、足りないパラメータについてはマテリアル設定のfxファイルで補う形になっています。
デフォルトマテリアルの material_2.0.fx
をコピーして編集することで、独自のマテリアルファイルを作成することが出来ます。
PBRのマテリアル詳細については下記の参考資料を参照してください。
- 参考資料
マテリアルファイル( material_2.0.fx
等)を「MaterialMap」タブで材質に割り当てることで質感を設定していきます。
※ マテリアルを設定する前に、「4_1_クイックスタート」でモデルの「Main」タブに main.fx
を割り当てたように、全てのモデルには「Main」タブに main.fx
を割り当てなければなりません。
- モデルの「Main」タブに
main.fx
を割り当てる。 - 「MaterialMap」タブを選択し、モデルを選んでマウスの右クリックで「サブセット展開」を選択します。
- 希望する材質にマテリアルファイルをドラッグ・アンド・ドロップ、または、ダブルクリックで表示されるファイルダイアログから選択し、設定します。
* Tips:
この時、「MaterialMap」タブで材質のチェックをオフにすると、MMDでの表示が消えるので希望する材質を見つけやすいかもしれません。 - 「OK」ボタンを押して割り当てを終了します。
ray-mmdには多くのプリセット(と言うよりはサンプル)マテリアルが有ります。ここではフォルダごとにどのようなマテリアルファイルが有るか見ていきます。
デフォルトのマテリアルファイルとreadmeが有ります。
ファイル名 | 説明 |
---|---|
material_2.0.fx | デフォルトのマテリアル設定ファイル。 ray.xが追加されている時に、モデルを追加すると「MaterialMap」タブに自動的に割り当てられる。 |
material_common_2.0.fxsub | マテリアルのプログラムコード。 各マテリアル設定ファイルから読み込まれ実行される。 |
material_skybox.fx | スカイボックス用のマテリアル設定ファイル。 |
README.md |
マテリアルの各パラメータについて書かれたファイル。(英語) 日本語に意訳したものは、 8_2_マテリアル_パラメータ を参照してください。 |
README_chs.md | マテリアルの各パラメータについて書かれたファイル。(中国語) |
プリセットマテリアルで使用される各種マップが有ります。
金属・非金属の材質に関わらず透明な層を持つ材質を模したマテリアル。例えば、車のボディなど。
Shading Model ID の Clear Coat(=6) を使用したサンプルマテリアル。
material_albedo.fx | material_black.fx |
---|---|
![]() |
![]() |
material_metal_clearcoat.fx | material_white.fx |
---|---|
![]() |
![]() |
布を模したマテリアル。マイクロファセットによる表面の細かな凸凹によるざらつきを再現しています。詳細はペーパー(PDF)を参照してください。
Shading Model ID の Cloth(=5) を使用したサンプルマテリアル。
material_black_coat.fx | material_cloth.fx | material_white.fx |
---|---|---|
![]() |
![]() |
![]() |
コントローラーを使用して、マテリアルの値を変更することが出来ます。
-
Editor
フォルダ内の任意のfxをモデルに割り当てます。 - 同じフォルダにある同じ番号の
PMX
をMMDに追加します。(これがコントローラーになります。) - コントローラーのモーフを操作してマテリアルの設定を行います。
- Tips:
コントローラーを調整する時は、「表示」メニューの「モデル編集時カメラ・照明追従」をオンにし、ボーン操作パネルの「選択」ボタンをオフ(ショートカット:Cキー)にしておくと調整がやりやすいと思います。
Albedo,Specular,Emissiveの色やマップの繰り返し回数等を設定します。HSVで設定するものはSの設定を上げておかないと変化がわかりづらいかもしれません。
モーフ名 | 機能 |
---|---|
AlbedoH AlbedoS AlbedoV |
AlbedoのH(色相)S(彩度)V(明度)を調整します。 |
AlbedoLoops | Albedoに設定しているマップの繰り返し回数を設定します。 |
SpecularH SpecularS SpecularV+ SpecularV- |
SpecularのH(色相)S(彩度)V(明度)を調整します。 |
SpecularLoops | Specularに設定しているマップの繰り返し回数を設定します。 |
EmissiveR | EmissiveのカラーをRGBで調整します。 |
EmissiveBlink | Emissiveの点滅速度を調整します。 割り当てたfxファイルの EMISSIVE_MAP_APPLY_BLINK に1 が設定されていないと機能しません。 |
EmissiveIntensity | Emissiveの輝度を調整します。 |
EmissiveLoops | Emissiveに設定しているマップの繰り返し回数を設定します。 |
ノーマルマップの設定を行います。ノーマルマップが設定されていないと機能しません。
モーフ名 | 機能 |
---|---|
NormalScale+ NormalScale- |
Normalの凸凹感を調整します。 |
NormalLoops | Normalに設定しているマップの繰り返し回数を設定します。 |
NormalSubScale+ NormalSubScale- |
NormalSubの凸凹感を調整します。 |
NormalSubLoops | NormalSubに設定しているマップの繰り返し回数を設定します。 |
Smoothness,Metalness,Melaninの設定を行います。
モーフ名 | 機能 |
---|---|
Smoothness | Smoothnessを調整します。 |
SmoothnessLoops | Smoothnessに設定しているマップの繰り返し回数を設定します。 |
Metalness | Metalnessを調整します。 |
MetalnessLoops | Metalnessに設定しているマップの繰り返し回数を設定します。 |
Melanin | Melaninを調整します。 |
MelaninLoops | Melaninに設定しているマップの繰り返し回数を設定します。 |
Shading Model ID 用の設定を行います。Shading Model ID が 1 以上でないと機能しません。
また、Shading Model IDによってCustomA、CustomBのパラメータの意味が変わります。詳細は「8_2_マテリアル_パラメータ」を参照してください。
モーフ名 | 機能 |
---|---|
CustomA | |
CustomALoops | CustomAに設定しているマップの繰り返し回数を設定します。 |
Custom2R Custom2G Custom2B |
|
CustomBLoops | CustomBに設定しているマップの繰り返し回数を設定します。 |
発光体表現を行うマテリアル。光を投射するわけではないので、他のモデルを照らしたり、影ができるようなことはありません。(AutoLuminanceのようなものと言えばわかりやすいですかね?)
フォルダ名 | 説明 |
---|---|
material_lighting.fx | これはライトを追加した時に、自動的にそのライトの「MaterialMap」タブに割り当てられます。(ライト用) |
Fixed Color x1~x4 | アルベドまたは固定色で発光して見えるマテリアル。x1,x2,x4は emissiveIntensity で輝度を変えたもの。 |
Fixed Color Blink x1~x4 | Fixed Color x1~x4に点滅設定を追加したもの。 |
Rainbow | Emmisiveに設定する色にアニメーションGIFを使用して、色が変化するマテリアル。効果を確認するにはMMDの再生ボタンを押す必要があります。 |
BodyLine | Rainbow同様アニメーションGIFを使用して、発光する部分を制御しているマテリアル |
material_albedo_x2.fx | material_blue_x2.fx | material_green_x2.fx |
---|---|---|
![]() |
![]() |
![]() |
material_orange_x2.fx | material_purple_x2.fx | material_red_x2.fx |
---|---|---|
![]() |
![]() |
![]() |
material_white_blue_x2.fx | material_white_pink_x2.fx | material_white_x2.fx |
---|---|---|
![]() |
![]() |
![]() |
material_yellow_green_x2.fx | material_yellow_x2.fx |
---|---|
![]() |
![]() |
髪の毛向けのマテリアル。
主にスペキュラの乗りが変わっています。
*_anisotropy.fx
は、Shading Model ID の Anisotropy(=3) を使用したサンプルマテリアル。
material_2.0.fx 黒いモデルを使用 |
material_hair.fx | material_hair_sss.fx |
---|---|---|
![]() |
![]() |
![]() |
material_hair_with_anisotropy.fx | material_hair_with_anisotropy2.fx |
---|---|
![]() |
![]() |
金属のマテリアル。
金属のマテリアルの設定は、アルベドに金属の種類に応じたF0(光が垂直に入射するときのフレネル反射率 F(0°))が設定されます。この値は現実世界での測定に基づいた値です。
表面がざらついた金属( Smoothness
の値が低い)
※ *_meatal.fx
は Albedo
にモデルのテクスチャを使い、その他はテクスチャではなく const float3 albedo
に、F0(光が垂直に入射するときのフレネル反射率 F(0°))が設定されています。
material_rough_brass.fx | material_rough_copper.fx | material_rough_gold.fx |
---|---|---|
![]() |
![]() |
![]() |
material_rough_iron.fx | material_rough_metal.fx | material_rough_silver.fx |
---|---|---|
![]() |
![]() |
![]() |
表面が滑らかな金属( Smoothness
の値が高い)
※ *_meatal.fx
は Albedo
にモデルのテクスチャを使い、その他はテクスチャではなく const float3 albedo
に、F0(光が垂直に入射するときのフレネル反射率 F(0°))が設定されています。
material_smooth_brass.fx | material_smooth_copper.fx | material_smooth_gold.fx |
---|---|---|
![]() |
![]() |
![]() |
material_smooth_iron.fx | material_smooth_metal.fx | material_smooth_silver.fx |
---|---|---|
![]() |
![]() |
![]() |
摩耗した金属( Smoothness
にマップを使用したサンプル)
※ *_meatal.fx
は Albedo
にモデルのテクスチャを使い、その他はテクスチャではなく const float3 albedo
に、F0(光が垂直に入射するときのフレネル反射率 F(0°))が設定されています。
material_worn_brass.fx | material_worn_copper.fx | material_worn_gold.fx |
---|---|---|
![]() |
![]() |
![]() |
material_worn_iron.fx | material_worn_metal.fx | material_worn_silver.fx |
---|---|---|
![]() |
![]() |
![]() |
レンガ状の金属( NORMAL_MAP_FILE
,OCCLUSION_MAP_FILE
を使用したサンプル)
※ *_meatal.fx
は Albedo
にモデルのテクスチャを使い、その他はテクスチャではなく const float3 albedo
に、F0(光が垂直に入射するときのフレネル反射率 F(0°))が設定されています。
material_rough_brass.fx | material_rough_copper.fx | material_rough_gold.fx |
---|---|---|
![]() |
![]() |
![]() |
material_rough_iron.fx | material_rough_metal.fx | material_rough_silver.fx |
---|---|---|
![]() |
![]() |
![]() |
プログラムコード(.fxsub
)が専用に作られたマテリアル。その為、設定ファイルも専用のものになっています。
waterは water.pmx
を追加し material_water.fx
を割り当てています。
material_water.fx | material_wetness.fx | water+wetness |
---|---|---|
![]() |
![]() |
![]() |
肌向けのマテリアル。
Shading Model ID の PreIntegrated Skin(=1) を使用したサンプルマテリアル。
サンプル画像のシェーダーボールはアルベドに使われているテクスチャが白いので、肌色に見えませんが影との境目あたりにSSSの効果が出ているのが見て取れると思います。
beigeのサンプルはALBEDO_MAP_APPLY_SCALE
に1
を設定して、const float3 albedo
に設定した色で乗算しています。この方法を使うと明るすぎるアルベドを調整する事ができます。(設定値によっては明るくすることも出来ます)
material_body.fx | material_body_beige.fx | material_body_beige_dark.fx |
---|---|---|
![]() |
![]() |
![]() |
material_skin.fx | material_skin_beige.fx | material_skin_beige_dark.fx |
---|---|---|
![]() |
![]() |
![]() |
material_skin_melanoderm.fx | Human material_body.fx |
Human material_body_melanoderm.fx |
---|---|---|
![]() |
![]() |
![]() |
「Tda式初音ミク・アペンド Ver1.00」用に作成された、curvatureマップ、thicknessマップを使ったサンプル。
これらのマップを作成、使用することでSSSの効果をコントロールできます。
material_2.0.fx | material_TDA_face.fx material_TDA_body.fx 肌以外はmaterial_2.0.fx |
material_TDA_face_red.fx material_TDA_body_red.fx 肌以外はmaterial_2.0.fx |
---|---|---|
![]() |
![]() |
![]() |
サブサーフェス・スキャッタリング(Subsurface Scattering : SSS)を使用したマテリアル。
Shading Model ID の Subsurface(=7) を使用したサンプルマテリアル。
サブサーフェス・スキャッタリングは半透明な物体の表面を透過し、内部で散乱した後に表面から出て行く現象で、現実世界では数多くみられます。(例えば、肌、氷、牛乳、大理石、など)
material_jade_white.fx | material_lampshade.fx | material_marble.fx |
---|---|---|
![]() |
![]() |
![]() |
透明な材質のマテリアル。
Shading Model ID の Glass(=4) を使用したサンプルマテリアル。透明度自体は alpha
で設定します。
CUSTOM_Aの設定で曲率、CUSTOM_Bの設定でガラスを通過する色(ライトの反対側、影の部分に現れる色)を設定します。
material_glass.fx | material_glass_metal.fx | material_glass.fx を改変 |
---|---|---|
![]() |
![]() |
![]() |
MMDのスクリーンや背景AVIの表示を行うマテリアル。
このマテリアルを使う場合、Extension\DummyScreen\DummyScreen.x
をMMDに追加し、MMDの「背景」メーニューで「ON・モード~」を選択する必要があります。
material_screen.fx | material_screen_emissive.fx | material_screen_led.fx |
---|---|---|
![]() |
![]() |
![]() |
※ サンプル画像は床にマテリアルを設定しています。
-
モデルをサブセット展開して材質ごとに割り当てた「MaterialMap」タブの設定は保存、読み込みができます。
設定を保存しておくことで、別のシーンで同じモデルを使う時にマテリアル割り当ての時間を短縮することが出来ます。 -
設定の保存方法
- MMEの「エフェクト割り当て」ダイアログを開きます。
- 「エフェクト割り当て」ダイアログで「MaterialMap」タブを選択。
- 設定を保存したいモデルを選択。
- 「エフェクト割り当て」ダイアログのファイルメニューから、「モデル単位で設定保存」を選択して、ファイル名を設定して保存します。(拡張子は
.emd
で中身はテキストエディタで見ることが出来ます。)
-
設定の読み込み方法
- MMEの「エフェクト割り当て」ダイアログを開きます。
- 「エフェクト割り当て」ダイアログで「MaterialMap」タブを選択。(選択したタブに読み込むので、間違えないように!)
- 設定を保存したいモデルを選択。
- 「エフェクト割り当て」ダイアログのファイルメニューから、「モデル単位で設定読込」を選択して、ファイル名を指定して読み込みます。
Model : ShaderBall_MMD by カユテガ / Tda式初音ミク・アペンド Ver1.00 by Tda
Pose : 女の子の撮影ポーズ集 by KEITEL