Engine Install: [UE_4.X.X location]\Engine\Plugins\Marketplace\Substance\Source\SubstanceCore\Classes\SubstanceGraphInstance.h
- Home
-
3D Applications
- Maya
- 3ds Max
-
MODO
- MODO overview
- Modo Plugin Release Notes
- Substance in MODO Overview
- Modo Installation
- Parameters
- Custom Materials
- Working with Normals
- Working with Emissive
- Bump and Displacement
- Working with References
- Animating Substances
- Copy/Duplicate Substance
- Environment and Rendering Setup
- Modo Switch Engine
- Tiling Modo textures
- Cinema 4D
- Houdini
-
Blender
- Blender overview
- Release Notes
- Substance in Blender Overview
- Downloading and Installing the Plugin
- Preferences
- The Substance 3D Panel
- Shortcuts and Navigation
- Workflows
- Physical size in Blender
- Substance 3D Assets Library
- Troubleshooting
- Uninstalling the Add-on
- Substance 3D Add-on for Blender Tutorials
- Creative Cloud Applications
-
Renderers
- Converting Substance outputs
- Color Management
- Arnold
- Vray
- Renderman
- Redshift
- Maxwell
- Corona
- Octane
- Keyshot
- Thea
- Maverick
- Toolbag
- Cycles and Eevee
- Partnerships
Unreal Engine 4 Scripting
The Substance in Unreal Engine plugin can be scripted. Methods are listed and annotated in the plugin's SubstanceGraphInstance.h file, which is normally found in the following directory when installing the plugin from the marketplace:
-
-
Project Install: [project folder loacation]\Plugins\Runtime\Substance\Source\SubstanceCore\Classes\SubstanceGraphInstance.h
BlueprintCallable
indicates that the method is usable in the Blueprint editor as well.
Scripting in Unreal Engine's Python Editor
When using the methods listed in the SubstanceGraphInstance.h file in Unreal Engine's Python editor, they must be converted from Pascal Case to Snake Case (with lowercase lettering an underscore in between each word). For example, SetInputColor
becomes set_input_color
.
The Python Editor in Unreal Engine can be accessed via Window > Developer Tools> Output Log, and setting the lower left dropdown to Python.
Example Scripts
Below are a set of example scripts that can be used in the Python Editor.
Create a Substance Material
# Python example on creating a Substance material. import unreal # Create factory sf = unreal.SubstanceFactory() factory = sf.import_archive("/Game", "C:/4d/unreal/stylized_lava_cracked.sbsar") graph_descs = factory.get_graph_descs() mats = unreal.SubstanceUtility.get_substance_included_materials() # Create graph instance for graph_desc in graph_descs: print(graph_desc) # You could name based on label or on index or another way graph_name = "/Game/FirstInstance_" + graph_desc.label material_name = "/Game/FirstMaterial_" + graph_desc.label # graph_name = f"/Game/FirstInstance_{graph_desc.index}" # material_name = f"/Game/FirstMaterial_{graph_desc.index}" graph = factory.create_graph_instance(graph_desc, graph_name) graph.create_outputs() graph.create_material(material_name, mats[0]) graph.set_input_color("obsidian_color", unreal.LinearColor(0, 0, 1)) graph.set_input_color("lava_color", unreal.LinearColor(0, 1, 0)) graph.prepare_outputs_for_save() graph.render_sync() graph.save_all_outputs(True)
Create a single graph of a Substance Material
# Python example on creating a Substance material. import unreal # Create factory sf = unreal.SubstanceFactory() factory = sf.import_archive("/Game", "C:/4d/unreal/stylized_lava_cracked.sbsar") graph_descs = factory.get_graph_descs() mats = unreal.SubstanceUtility.get_substance_included_materials() # Create only 1 graph instance graph_desc = graph_descs[0] print(graph_desc) graph_name = "/Game/MyGraphInstance" material_name = "/Game/MyMaterial" graph = factory.create_graph_instance(graph_desc, graph_name) graph.create_outputs() graph.create_material(material_name, mats[0]) graph.set_input_color("obsidian_color", unreal.LinearColor(0, 1, 1)) graph.set_input_color("lava_color", unreal.LinearColor(1, 0, 0)) graph.prepare_outputs_for_save() graph.render_sync() graph.save_all_outputs(True)
Create multiple instances of a Substance Material with different parameters.
# Python example on creating mulitple Substance materials. import unreal # Create factory. Should only need 1 factory, even if multiple instances are created sf = unreal.SubstanceFactory() factory = sf.import_archive("/Game", "C:/4d/unreal/stylized_lava_cracked.sbsar") graph_descs = factory.get_graph_descs() mats = unreal.SubstanceUtility.get_substance_included_materials() # Create first graph instance for graph_desc in graph_descs: graph_name = "/Game/FirstInstance_" + graph_desc.label material_name = "/Game/FirstMaterial_" + graph_desc.label graph = factory.create_graph_instance(graph_desc, graph_name) graph.create_outputs() graph.create_material(material_name, mats[0]) graph.set_input_color("obsidian_color", unreal.LinearColor(0, 0, 1)) graph.set_input_color("lava_color", unreal.LinearColor(0, 1, 0)) graph.prepare_outputs_for_save() graph.render_sync() graph.save_all_outputs(True) # Create second graph instance for graph_desc in graph_descs: graph_name = "/Game/SecondInstance_" + graph_desc.label material_name = "/Game/SecondMaterial_" + graph_desc.label graph = factory.create_graph_instance(graph_desc, graph_name) graph.create_outputs() graph.create_material(material_name, mats[0]) graph.set_input_color("obsidian_color", unreal.LinearColor(1, 0, 1)) graph.set_input_color("lava_color", unreal.LinearColor(1, 1, 0)) graph.prepare_outputs_for_save() graph.render_sync() graph.save_all_outputs(True)
Duplicate a Substance Graph
# Python example on duplicating a Subtance material. import unreal # Create factory sf = unreal.SubstanceFactory() factory = sf.import_archive("/Game", "C:/4d/unreal/stylized_lava_cracked.sbsar") graph_descs = factory.get_graph_descs() mats = unreal.SubstanceUtility.get_substance_included_materials() # Create first graph for graph_desc in graph_descs: print(graph_desc) graph_name = "/Game/FirstGraph_" + graph_desc.label material_name = "/Game/FirstMaterial_" + graph_desc.label graph = factory.create_graph_instance(graph_desc, graph_name) graph.create_outputs() graph.create_material(material_name, mats[0]) graph.set_input_color("obsidian_color", unreal.LinearColor(0, 0, 1)) graph.set_input_color("lava_color", unreal.LinearColor(0, 1, 0)) graph.prepare_outputs_for_save() graph.render_sync() # Duplicate graph new_material_name = "/Game/SecondMaterial" new_graph = graph.duplicate() new_graph.create_outputs() new_graph.create_material(new_material_name, mats[0]) new_graph.prepare_outputs_for_save() new_graph.render_sync()