最終更新:ID:yJ06slEBQQ 2023年09月01日(金) 21:03:38履歴
sdPBRのmaterial\controllableフォルダにあるファイルをコピーして作成します。
sdPBRMaterialController.pmxをコントローラーにしたいマテリアルfxファイルがあるフォルダにコピーします。
sdPBRMaterialController.pmxをコントローラーにしたいマテリアルfxファイルがあるフォルダにコピーします。
sdPBRMaterialController.pmx以外のpmxファイルでより相応しいものがあれば、それをコピーしてください。
まず、sdPBRMaterialController.pmxのファイル名をマテリアルに対応するわかりやすい名前に変更します。
・normalScale
例:sdPBRMaterialController_skin.pmx次にコントロールしたい数値、今回はマップのループ数とスケールを追加したいと思います。
- ファイル名を変更したpmxファイルをPMXエディタで開きます。
- モーフタブを開き、上記数値を追加したいパネルにあるモーフを複製します。
- 複製したモーフ名を以下のように変えます。意味が分かれば自分の好きな名前で構いません
・normalScale
必要に応じて表示枠タブで、[表情]の表示枠に追加してください。
複数の倍率を用意しても良いかもしれません。「loops_x10」「loops_x100」など。
- 保存して、PMXエディタを閉じます。
自分は肌マテリアルにaddBaseColorR,addBaseColorG,addBaseColorBモーフを追加しています。ちょっと肌に赤味を足したり、smoothShade値を適用したマテリアルの色を明るくするために使用しています。
それと、不要なモーフは削除すると、数値を操作する際に分かりやすいです。最初は何がどの数値か分からないと思うので、わかるようになってから削除することを推奨します。
マテリアルの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_skin.pmx"
- そして、今回追加した数値の変数定義を追加してください。自分の好きな名前を付けている場合は""の中をその名前にしてください。
float ctrl_loops : CONTROLOBJECT < string name = MATERIAL_CONTROLLER; string item = "loops"; >; float ctrl_normalScale : CONTROLOBJECT < string name = MATERIAL_CONTROLLER; string item = "normalScale"; >;
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を勉強して使いやすいように修正してください。
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
if (ctrl_normalScale !=0) m.normalScale = ctrl_normalScale * 10;「addBaseColor」
if (ctrl_addBaseColorR !=0 || ctrl_addBaseColorG !=0 || ctrl_addBaseColorB !=0) m.baseColor *= float3(ctrl_addBaseColorR + 1, ctrl_addBaseColorG + 1, ctrl_addBaseColorB + 1);
コメントをかく