Materials - Stellar-Blade-Modding-Team/Stellar-Blade-Modding-Guide GitHub Wiki
Overview
[!IMPORTANT] This section was written by our member peek6 and improved by Lady-420. In this document we will be introducing how to import MIs(Material Instance) and dummy MMs(Master Material) in Unreal Editor for Stellar Blade.
Appreciate Modder peek6 for providing source document and tips.
If you are beginner of Unreal Editor and want to have a ground understanding of material usage in Unreal Engine games such as Stellar Blade, Follow this page for more details.
Previewing and exporting
We will be mainly using FModel to extract MI JSONs.
Workflow in UE
[!NOTE] This workflow is based on having Json2DA plugin installed for your Uproject.
Required Plugin
Step 1: Installing plugin
Move the (branch = ff7rebirth_ue426) into your Content/Python directory. Create a folder named Python
if there isn't.
Step 2: Uproject setting
[!NOTE] First make sure you have finished the step of Creating UE Project for your mod.
In Unreal editor we need to enable the Python script editor plugin and Editor scripting utilities plugin for running Json2DA.
Step 3: Creating Dummy Materials & Material Instances
OPTION 1 - Use for MIs which have static flags:
https://github.com/user-attachments/assets/40e3d514-6af9-41ef-a8dc-e86a731c95e8
-
In UE, right-click inside a folder -> create a Material (NOT a Material Instance / MI), and name it with the same name as the original game's MI whose properties you want to inherit. Let's call it
MI_Source
, but its name and directory must exactly match the original game MI whose properties you want. -
Right-click on the
MI_Source
material, and select scripted actions -> Import MI JSON 2 MM -> select your MI JSON. -
Right-click again on the
MI_Source
-> Create Material Instance. Keep the generated name if this instance, let's call itMI_Target
, is not supposed to replace a different material. But if you want to change the material of Eve's costume then give it the name of the MI you want to replace. -
Double-click on the
MI_Target
and in the "Global Texture Param" section, enable ONLY the assets you modified and save. You will also notice if you scroll down at the bottom that the parent is selected to be theMI_Source
. You can safely close the menu now. -
Double-click on the mesh and in the "Material Slots" section, choose the
MI_Target
. You could also simply drag and drop them into the slot.
[!WARNING] Do not put
MI_Source
into the material slots of skeletal mesh. Do not enable texture slots for the textures you dont replace in the created Material Instance. Enable only texture slots for the texture you imported and assign it in the Material Instance setting.
-
Save all.
-
Only include
MI_Target
and your textures in your chunk/label by following the instructions of Packaging Mods. DO NOT INCLUDE THE DUMMY MATERIAL (i.e.,MI_Source
) in your chunk.
OPTION 2 - It should work without modifying any meshes, but may have issues if the MI has static flags:
-
Create the parent master material for your MI, and make an instance of it. Name them as in the original game.
-
Right-click on the master material asset, select scripted actions->Import MI JSON 2 MM and select your MI JSON.
-
Right-click on the MI asset, select scripted actions->Import JSON 2 MI and again select your MI JSON.
You can now change the textures or other params of your MI and include the modded MI in your chunk by following instruction of Packaging Mods
Never include any dummy MMs in the chunk for your mod:
The dummy material hooks up all the parameters in the instance as nodes which feed into an adder, so that you can create instances of that material (e.g. MIs), which have those fields available for you to mod.
*example MA_CH_P_EVE_09
[!NOTE] It's a dummy material created by Scripted Actions->Import MI JSON 2 MM and selecting
MI_CH_P_EVE_09_Suit.json
.
Since it's a dummy, If you include it in your mod's chunk, it will crash the game. But now, you can create an instance from it (e.g., an MI) called MI_CH_P_EVE_09_Suit
and now run scripted actions->Import JSON 2 MI> again selecting MI_CH_P_EVE_09_Suit.json
, which will populate all those parameters with specific textures etc. You can now modify that MI and point it to your own custom textures and include the MI in your chunk.
You can also replace an MI with your own custom MI which points to a different parent (e.g., a different dummy MM) having different properties. For example, if you have an MI for an opaque material and you want to make it semi-sheer. You can find a sheer material and corresponding MI, create a dummy MM and MI from it, and use that sheer MI instead of the original opaque one, pointing it to whatever textures you want.
As long as you can find a different MI to instance off which has the properties you want to inherit, then the best approach is to create a material, give it the name of that MI (whose properties you want to inherit), create an instance of it, and name the instance the same as the MI you want to replace (e.g., the one the mesh already points to). Then only include the instance in the chunk .
Lady-420)
For stocking material (byHere's a video showing how to replace skin with stockings material in UE.
https://github.com/user-attachments/assets/1fa2b735-491f-468f-9297-83a8af00b1cc
In this example, we will use the stocking material CH_P_EVE_46_TypeB_M01
of "Silver Kunoichi" costume to replace the skin material MI_CH_P_EVE_61_BB
of "Midsummer Alice" costume.
*example MI_CH_P_EVE_61_BB
example CH_P_EVE_46_TypeB_M01
-
In UE, import the model/mesh of the outfit you want to have the stokings on (follow Models page)
-
Create a folder in the PC folder for the outfit from which you want to use the stocking materials, in this case folder
CH_P_EVE_46
and follow the OPTION 1 from Step 3. But remember, we will replace something here. -
When the model/mesh was imported, some materials were imported as well, and one of them is the skin material of that model which we want to replace.
-
Open the
MI_Target
, which is our stocking material now, by double-click and in the "Global Texture Params" section activate the "MASK_Stocking" option and also take note of the texture's name of that option, which in our case isCH_P_EVE_46_BB_StockingMask
. -
The mesh of the outfit, the stocking material and the StockingMask texture (which you can find in the texture folder of the outfit the stockings came from,
CH_P_EVE_46
in our case) needs to be assigned to the label.
For glow material (by Salt)
Here's an video to show how to use script action in UE to make glow MI.
https://github.com/user-attachments/assets/bedc5d1c-7e40-4e01-8f2b-2dd45c7ee40b
Example* MI_CH_EVE_30_GlowEmissive
Some glow MIs are using the default color from MA_MachineGlow
so it is not written in the properties json. Which means the json script is not enough on its own in this case. Fmodel can reveal the names if you set it to all material layers, in this case the name of the glow parameter is Eye Core HDR Tint
.
This requires adding a new vector parameter with that name to the parent material, which you can then edit in your custom MI.
Color values in unreal is greater than 1.0
for glow , so you can set higher number for more noticeable glow effect in visual.
Heuwu & Lady-420)
For multiple material (by[!NOTE] This video shows how to replace the material of an outfit with a unique material that has multiple effects. The process is similar when you are doing it on the same outfit for your mod.
https://github.com/user-attachments/assets/2abf452b-1950-44e5-90f0-778670f1d192
In Stellar Blade there are some special materials that could content multiple visual effects more than just one, we call it Multple Materials. A good example of this type of material is MI_RavensuitVinyl
from Raven's suit.
Let's say you want to replace the material MI_P_EVE_08_Layered
of Punk Top outfit by using the MI_RavensuitVinyl
, which is a transparent material that also carries visual effect of glow. Here's what you need to do:
- Make your own emissive map in photoshop for your suit if it doesn't exists. Black part is none emissive and white is emissive. Here we borrowed one of the layer from it's ORM map as emissive just to show you for guide. For In game result check image above.
-
Import and/or creating the required materials, skeletal mesh, skeleton and then put them in the correct folder in UE (according to the directory shown in Fmodel).
-
Create material instance of
MI_RavensuitVinyl
and move the instance to the same folder asMI_P_EVE_08_Layered
, deleteMI_P_EVE_08_Layered
and rename the instance toMI_P_EVE_08_Layered
. -
Open the skeletal mesh and assign the new
MI_P_EVE_08_Layered
to the mesh.
[!NOTE] Alternatively you can keep the MI's name as customized with for example
_inst
in name and just assign it to your skeletal mesh.
-
Now you can make the following changes to the new
MI_P_EVE_08_Layered
by opening it and:- You can change the shape of the glow by enabling emissive map, normal map and ORM map -> put your modified maps of those in the texture folder -> drag those into their respective slots in the material.
- You can change the color of the glow by enabling
EmissiveColor
and changing it. - You can remove the glow by changing the color of EmissiveColor to black (all the values to 0). The alpha channel does nothing for glow, so it can be kept as is.
- You can play around the various other parameters to see how it effects your mod.
If you done everything right, you can achieve a mix of transparancy and glowing visual effect for your mod which will be very beautiful in some scenario. You can also make the whole emissive map in white and adjust the emissive strength in UE to have the semi glow effect covered over whole part of the suit by using this multiple material. More style combination and possibility for artistical purpose.
Known Bugs and Issues
Armpit joint shadow bug & solution:
Method 1: Enable Compute Skin Cache (found by 11001011)
First enable skinning cache in the project options.
Edit> Project Setting> Engine(Rendering)> Optimizations> Enable
Support Compute Skin Cache
Restart your UE to apply changed settings.
Enable Recalculate Tangents in the LOD0 in your material property.
Double click on Skeleton mesh> Asset Details> LOD0> Enable
Recalculate Tangents
Enable Recompute Normals
Click Save All
.
However for custom model, you need your model painted with black and green vertex color to avoid seams. The devs did this for skin and some tight clothes, only leaving the neck line black. Otherwise it will give your model an extra seam with skin cache setting.
In UE, when you enable setting in LOD 0 , the default is green channel "Recompute Tangent Green". In Fmodel you can see game devs use this setting.
Select your model in object mode> Enter vertex paint mode> It's easier to see if you set viewport lighting to flat.
Use full 1.0 green with max brightness: Hex code #00FF00
. Paint the whole body to green expect neck line part , leave it as black.