MikuMikuDance(MMD)を用いた紳士動画を製作していくwikiです。

追加された行はこの色です。
削除された行はこの色です。

*マテリアルコントローラーとは
[[sdPBR]]の[[マテリアル>>sdPBR - マテリアル]]の数値を、MMD上で変更するためのpmxファイルです。
動画やシチュにより、細かい数値の変更をしたい場面が出てくると思うので、コントローラーの作成を推奨します。

コントローラーはマテリアル毎、できれば材質ごとに用意したいところです。
例えば肌マテリアルであれば、顔用と顔以外の身体用で分ける。
*マテリアルコントローラーpmxの作成
**1.sdPBRMaterialController.pmxのコピー
sdPBRのmaterial\controllableフォルダにあるファイルをコピーして作成します。
sdPBRMaterialController.pmxをコントローラーにしたいマテリアルfxファイルがあるフォルダにコピーします。
sdPBRMaterialController.pmx以外のpmxファイルでより相応しいものがあれば、それをコピーしてください。
**2.sdPBRMaterialController.pmxの編集
まず、sdPBRMaterialController.pmxのファイル名をマテリアルに対応するわかりやすい名前に変更します。
例:sdPBRMaterialController&color(#ff0000){_skin}.pmx
次にコントロールしたい数値、今回はマップのループ数とスケールを追加したいと思います。
-ファイル名を変更したpmxファイルを[[PMXエディタ]]で開きます。
-モーフタブを開き、上記数値を追加したいパネルにあるモーフを複製します。
-複製したモーフ名を以下のように変えます。意味が分かれば自分の好きな名前で構いません
・loops
・normalScale
必要に応じて表示枠タブで、[表情]の表示枠に追加してください。

複数の倍率を用意しても良いかもしれません。「loops_x10」「loops_x100」など。
-保存して、PMXエディタを閉じます。
自分は肌マテリアルにaddBaseColorR,addBaseColorG,addBaseColorBモーフを追加しています。ちょっと肌に赤味を足したり、smoothShade値を適用したマテリアルの色を明るくするために使用しています。

それと、不要なモーフは削除すると、数値を操作する際に分かりやすいです。最初は何がどの数値か分からないと思うので、わかるようになってから削除することを推奨します。
**3.マテリアルfxファイルの編集
マテリアルのfxファイルとmaterial\controllable\sdPBR_controllable.fxもしくは、コピーしたpmxに対応するfxファイルをテキストエディタで開いてください。
***変数定義の追加
-sdPBR_controllable.fxの「#define MATERIAL_CONTROLLER〜」から「void SetMaterialParam」の上の行までをコピーし、マテリアルfxファイルの同じ個所にコピーします。
-「#define MATERIAL_CONTROLLER "sdPBRMaterialController.pmx"」の"sdPBRMaterialController.pmx"の中身を、コピーして変えたファイル名に変更してください。
例:#define MATERIAL_CONTROLLER "sdPBRMaterialController&color(#ff0000){_skin}.pmx"
-そして、今回追加した数値の変数定義を追加してください。自分の好きな名前を付けている場合は""の中をその名前にしてください。
=|BOX|
float ctrl_loops : CONTROLOBJECT < string name = MATERIAL_CONTROLLER; string item = "loops"; >;
float ctrl_normalScale : CONTROLOBJECT < string name = MATERIAL_CONTROLLER; string item = "normalScale"; >;
||=
=|BOX|
float ctrl_addBaseColorR : CONTROLOBJECT < string name = MATERIAL_CONTROLLER; string item = "addBaseColorR"; >;
float ctrl_addBaseColorG : CONTROLOBJECT < string name = MATERIAL_CONTROLLER; string item = "addBaseColorG"; >;
float ctrl_addBaseColorB : CONTROLOBJECT < string name = MATERIAL_CONTROLLER; string item = "addBaseColorB"; >;
||=
不要な変数定義は削除するとわかりやすくなります。
***数値設定の実装
-sdPBR_controllable.fxの「void SetMaterialParam(inout Material m, float3 n, float3 l, float3 Eye, float2 uv)」の「{」と「}」の間を全てコピーし、マテリアルfxの同じ個所にコピーします。loopsやScaleの行があると思うので、その下にコピーしましょう。
不要な変数定義を削除している場合は、それに対応する実装も削除してください。
-あとは今回追加した数値の実装をします。実装例は以下のとおりです。ご自身でHLSLを勉強して使いやすいように修正してください。
「loops」→元からあるloopsに関わる行は消してください。インポートしたマップに対応した箇所だけ残し、追加してください。
=|BOX|
if (ctrl_loops!=0)
{
float loops = ctrl_loops * 100; //ここの100という倍率は自分の好みで調整してください。10くらいでも良いと思います。
m.aoLoops = loops;
m.heightLoops = loops;
m.metallicLoops = loops;
m.normalLoops = loops;
m.clearcoatGlossLoops = loops;
m.roughnessLoops = loops;
}
||=
「normalScale」→元からあるnormalScaleに関わる行は消してください。10という倍率はお好みでry
=|BOX|
if (ctrl_normalScale !=0) m.normalScale = ctrl_normalScale * 10;
||=
「addBaseColor」
=|BOX|
if (ctrl_addBaseColorR !=0 || ctrl_addBaseColorG !=0 || ctrl_addBaseColorB !=0)
m.baseColor *= float3(ctrl_addBaseColorR + 1, ctrl_addBaseColorG + 1, ctrl_addBaseColorB + 1);
||=

どなたでも編集できます