User Guide Cancel

Version 11.3.0 | Substance 3D Automation ToolKit

  1. Substance 3D home
  2. Home
  3. Command Line Tools
    1. Command Line overview
    2. sbsbaker
      1. sbsbaker overview
      2. sbsbaker command line options
      3. sbsbaker Example Command Lines
    3. sbscooker
      1. sbscooker overview
      2. sbscooker command line options
      3. sbscooker pattern variables
    4. sbsmtools
      1. sbsmtools overview
      2. sbsmtools command line options
    5. sbsmutator
      1. sbsmutator overview
      2. sbsmutator command line options
      3. sbsmutator Example Command Lines
    6. sbsrender
      1. sbsrender overview
      2. sbsrender base parameters and pattern variables
      3. sbsrender command line options
      4. sbsrender example command lines
    7. sbsupdater
      1. sbsupdater overview
      2. sbsupdater command line options
  4. Pysbs - Python API
    1. Pysbs - Python API overview
    2. Getting started
    3. General topics
      1. Basic manipulation
      2. Substance creation
      3. Substances modification
      4. Dependencies management
      5. PySbs batchtools module
      6. metadata manipulation
      7. SAT demos
      8. Edit sbsar with SBSARManager
      9. Spot Colors
      10. Thumbnail creation with SAT
    4. Examples
      1. demohelloworld
      2. demos
      3. demos_batchtools
      4. script_update_with_sbsupdater
    5. API Content
      1. API Content overview
      2. Substance definitions
        1. Common interfaces
          1. basegraph
          2. package
          3. sbsarobject
          4. sbsobject
        2. compnode
          1. compnode overview
          2. common
          3. compimplementation
          4. paramgraph
        3. context projectmgr
        4. graph
          1. graph overview
          2. function
          3. inputparameters
          4. output
        5. mdl
          1. mdlannotation
          2. mdlcommon
          3. mdldictionaries
          4. mdlenum
          5. mdlgraph
          6. mdllibclasses
          7. mdlmanager
          8. mdlnode
          9. mdlnodeimpl
          10. mdloperand
          11. mdlsbsbridge
        6. modelgraphindex
          1. modelannotationnames
          2. modelgraph
          3. modelgraphgenerator
          4. modelgraphimplementation
          5. modelnodenames
          6. modeloperand
          7. modulegraphindex
          8. moduleannotation
          9. moduleconnection
          10. modulegraph
          11. modulegraphgenerator
          12. modulegraphimplementation
          13. modulegraphlibrary
          14. modulegraphregister
          15. modulenode
          16. modulenodeimplementation
          17. modulenodeinstance
          18. moduleoperand
          19. moduleoutputbridging
          20. moduleparaminput
        7. params
          1. params overview
          2. dynamicvalue
          3. paramnode
        8. projectmgrdoc
        9. sbsarchive
          1. sbsarchive overview
          2. sbsarenum
          3. sbsargraph
          4. sbsargui
          5. sbsarguiwidgets
          6. sbsarmanager
        10. sbscommon
          1. connections
          2. gui
          3. nodes
          4. values
        11. sbspreset
        12. sbsproject
        13. substance
          1. substance overview
          2. content
          3. resource
      3. Libraries
        1. sbsenum
        2. sbslibrary
          1. sbslibrary overview
          2. sbsdictionaries
          3. sbsfilters
          4. sbsfunctions
          5. sbsfxmapnodes
          6. sbslibclasses
          7. sbswidgets
        3. sbsbakerslibrary
          1. sbsbakerslibrary overview
          2. sbsbakersdef
          3. sbsbakersdefaultprops
          4. sbsbakersdictionaries
          5. sbsbakersenum
          6. sbsbakingconverter
          7. sbsbakingconverterparam
          8. sbsbakingparameters
          9. sbsdialogstate
          10. sbsscenedata
        4. Helpers
          1. sbscleaner
          2. sbsexporter
          3. sbsgenerator
          4. sbsparser
          5. sbswriter
          6. qtclasses
            1. qtclasses overview
            2. qtvariantreader
            3. qtvariantwriter
          7. psdparser
          8. sbsimpactmanager
          9. batchtools
          10. autograph
            1. ag_functions
            2. ag_layout
            3. ag_types
          11. info_mesh_parser
          12. sbsbaker_info_handlers
          13. sbsrender_render_handlers
          14. output_handlers
          15. spotcolorinfo_handler
          16. thumbnail
          17. batchtools overview
        5. Execution context
          1. context
          2. functions
        6. API Change log
  5. Samples
    1. Samples overview
    2. Texturing Template Demo
    3. Batch Tools Demo
    4. Variations
    5. Texture Mat
    6. Pixel Processor Ray tracer
  6. Setup and Getting Started
    1. Setup and Getting Started overview
    2. Compatibility
    3. Frequently asked Questions
    4. Known issues
    5. SAT Cookbook
    6. Use Pysbs in different python interpreter (maya, sd, blender...)
  7. Integrations
    1. Substance Maya toolset
      1. Substance Maya Toolset overview
      2. Installing
      3. Launching
      4. Baking
        1. Baking overview
        2. Export parameters
        3. Baker parameters
        4. Mesh setup
        5. Using a template
      5. Changelog
  8. Release notes
    1. Version 11.3.0
    2. Version 11.2.0
    3. Version 11.1.0

Version 11.3.0

Edit and integrate the Substance 3D Designer model graph into your pipeline thanks to the new PySBS ModelGraph API.  

This new version of SAT offers a new extension to PySBS API to edit and create your Substance model graph. The Substance model graph is the new Substance 3D Designer procedural graph to build complex parametric geometry objects.  

PySBS provides a new module modelgraph to deal with the Designer model graph type.  

Create a new Model Graph

Once you have created or read a .sbs document, simply call SBSDocument’s method createModelGraph like this: 

from pysbs import sbsgenerator, context 
 
# create or read a sbs file 
doc = sbsgenerator.createSBSDocument(context.Context(), 'myPackage.sbs') 
 
# create a new model graph with an identifier name 
graph = doc.createModelGraph('myFirstModelGraph')

To create a node with the ModelGraph, the API needs a node path id -- the identifier for a node definition. It can look like 'Structure::NodeIntToBool'. If you’d rather avoid a path id like this, you can use the module modelgraph.nodenames and create nodes like this: 

from pysbs.modelgraph import modelnodenames 
 
# create a new import scene node 
scene_node = graph.createNode(modelnodenames.Scene)

Connect nodes

A ModelGraph node has outputs and can have inputs; in the ModelGraph terminology a node input is called operand. All node parameters are also operand and any of this operand can become a connectable operand, and therefore be considered as a node input.  

By default, a node can have a connectable operand. In this case, these connectable operand will be chosen as a priority during two nodes connection if one of these is free (not have a connection already on it). If you want to connect an operand that is not connectable by default you need to give the name of the desired operand during the connection. 

The following instructions show different connection cases: 

cube_node = graph.createNode(modelnodenames.NodePrimitive) 
bend_node = graph.createNode(modelnodenames.NodeBend) 
 
float_node = graph.createNode(modelnodenames.NodeFloat) 
 
# connect two nodes with their default connectable operands 
graph.connectNodes(cube_node, bend_node) 
 
# connect a float node to an operand attribute: the angle operand 
graph.connectNodes(float_node, bend_node, aInputIdentifer='angle')

Get or set operand values

Once a ModelGraph node is created, it’s possible to retrieve or set the values of its operands. Operand objects lie inside the implementation of the node. Today, ModelGraph has only one kind of implementation node so simply get it with node.getImplementation() and use its method implementation.getOperand(“operandname”). Once the operand object is retrieved you can set or get corresponding values. Each operand is typed:you must give the correct type and you will get a typed result.  

# get the float node's value operand and set it a value of 15.0 
operand = float_node.getImplementation().getOperand('value') 
operand.setValue(15.0) 
 
# get back the new value 
operand_value = operand.getValue()
Note:

If you don’t know the operand name, you can list them with node.getImplementation().listOperandNames()

Expose node as input graph parameter

Like for other graph types, it’s possible to create input graph parameters. With the ModelGraph, only constant nodes can be exposed --constant nodes have a single operand. If you want to expose an operand from a non-constant node, first create then connect a constant node of the right operand type to the desired operand and finally expose the constant node.  

The following instructions show you how to do that:  

bend_node = graph.createNode(modelnodenames.NodeBend) 
float_node = graph.createNode(modelnodenames.NodeFloat) 
 
# connect a float node to an operand attribute: the angle operand 
graph.connectNodes(float_node, bend_node, aInputIdentifer='angle') 
 
# expose the constant float node as graph input parameter and add a description to it 
graph.exposeNode(float_node, 'myExposedParam', aDescription="Float parameter to drive bend angle")

Set graph annotations

ModelGraph has predefined annotations like “Author”, “Description” which you can use easily edit with dedicated methods like graph.setDescription("my description") . If you need a custom annotation you can create one defining an annotation name and its content.  

The following instructions show you these two ways: 

# add a description annotation to a graph 
graph.setDescription("This is my first model graph") 
 
# create a custom annotation called ExtraInfo 
graph.addGraphAnnotation("ExtraInfo", "simple, bend")

Go further

Don’t hesitate to look at the Python file : pysbs_demo/modelgraphgeneratescatter.py : it’s a pretty complete example of how to generate a scatter from a given geometry files folder.  

The PySBS ModelGraph module is new and hasn’t been used in a production context yet. Please don’t hesitate to give us feedback, missing features, or issues.

What next 

Currently, only graph creation and editing are available. We plan to add to SAT the possibility to cook a ModelGraph as an sbsm file, as well a particularly important feature: export a geometry file from a cooked graph!  

With these tools collection a full ModelGraph automation could be set up.  

This new ModelGraph API is under beta form, keep in mind that there may be definition changes in future versions. 

Look at the change log to get the list of changes : https://substance3d.adobe.com/documentation/sat/pysbs-python-api/api-change-log

Known issue with MacOS Big Sur: 

The MacOS Big Sur GateKeeper protocol for SAT is not totally complete. If you are experiencing problems launching SAT’s commandlines, remove the quarantine flags from the SAT parent directory by following these instructions:  

  • Launch the terminal application 

Type the following command replacing [PATH_TO_YOUR_SAT_PARENT_DIRECTORY] by your SAT install directory path:  

  • xattr -r -d com.apple.quarantine [PATH_TO_YOUR_SAT_PARENT_DIRECTORY] 

Example:  

  • xattr -r -d com.apple.quarantine /Applications/Substance\ Automation\ Toolkit 

 Adobe

Get help faster and easier

New user?

Adobe MAX 2024

Adobe MAX
The Creativity Conference

Oct 14–16 Miami Beach and online

Adobe MAX

The Creativity Conference

Oct 14–16 Miami Beach and online

Adobe MAX 2024

Adobe MAX
The Creativity Conference

Oct 14–16 Miami Beach and online

Adobe MAX

The Creativity Conference

Oct 14–16 Miami Beach and online