Engine Install: [UE_5.X.X location]\Engine\Plugins\Marketplace\Substance\Source\SubstanceCore\Classes\SubstanceGraphInstance.h
- Substance 3D home
- Ecosystems and Plugins
- Home
- Game Engines
- Unreal Engine
- Unreal Engine 5
- Unreal Engine 5 overview
- Unreal Engine 5 Release Notes
- Plugin Overview - UE5
- Plugin Settings - UE5
- Substance Input Image - UE5
- Material Instance Definition - UE5
- Material Template Usage - UE5
- Out-of-the-Box Material Templates
- Tiling Substance - UE5
- Substance 3D Plugin Default Templates
- Substance 3D Assets Library Usage - UE5
- Blueprints - UE5
- Unreal Engine 5 Scripting
- Installing to Source Builds
- Unreal Engine 5 overview
- Unreal Engine 4
- Unreal Engine 4 overview
- Unreal Engine 4 plugin release notes
- Unreal plugin 4.27.0.1
- Unreal plugin 4.26.0.21
- Unreal plugin 4.26.0.2
- Unreal plugin 4.26.0.1
- Unreal plugin 4.25.0.5
- Unreal plugin 4.25.0.4
- Unreal plugin 4.25.0.3
- Unreal plugin 4.24.0.3
- Unreal plugin 4.23.0.2
- Unreal plugin 4.23.0.1
- Unreal plugin 4.22.0.33
- Unreal plugin 4.22.0.32
- Unreal plugin 4.21.0.31
- Plugin Overview - UE4
- Plugin Settings - UE4
- Substance Input Image - UE4
- Material Instance Definition - UE4
- Tiling Substance - UE4
- Working with Bump Offset (Parallax) - UE4
- Working with Displacement - UE4
- Source in UE4
- Live Link in UE4
- Blueprints - UE4
- Unreal Engine 4 Scripting
- Unreal Engine 4 overview
- Unreal Engine 5
- Unity
- Unity overview
- Unity Release Notes
- Downloading Substance 3D Plugin in Unity
- Unity Plugin Overview
- Unity Preferences
- Optimization Guidelines
- Upgrading Projects/Known Issues
- Managing Substance Graphs
- Changing parameters
- Generated Textures (Packing)
- Rendering Color Space
- Using Image Inputs
- Publishing for Mobile
- Substance 3D for Unity Scripting
- Scripting in Unity (Deprecated)
- API Overview
- Scripting API
- C# Example Script
- Substance 3D Assets Library Usage
- Removing Substance Plugin
- Substance 3D in Unity Tutorials
- Physical Size in Unity
- Sharing sbsar Files Between Projects
- Unity overview
- Lumberyard
- Roblox
- Unreal Engine
- 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
- MODO overview
- 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
- Blender overview
- Creative Cloud Applications
- Renderers
- Partnerships
Unreal Engine 5 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 > 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()