User Guide Cancel

Texture Mat | 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. Changelog overview

Texture Mat

Overview

Texture Mat is a sample showing how to Automatically texture a model using the Python API and Command Line Tools.The data used in the demo are:

  • texture_mat.py script that does most of the work
  • create_compositing_network.py which uses the python API to generate a custom SBS file for selecting what material goes on what part
  • batch_utilities.py, demo_cmd.py and demos.py for utility functions
  • Mesh_MAT.FBX and a set of SBS files in the texture_mat directory

The output will be put in the texture_mat/_outputs directory

In order to run the demo, make sure python is installed and in your path environment and that the substance python api is installed. Then go to the samples directory and run:

python texture_mat.py

It will now invoke a set of calls to different command line tools to generate three different sets of maps for the model

Details

The mat model is set up as three parts, the head, the body and the base.

The UV set is laid out in a single uv tile:

There are three materials set up for the model, leather_fine_touch.sbs, steel_battered.sbs and terracotta_glossy.sbs. They are all set up with wear driven by geometry maps such as occlusion, curvature, position etc.

Process setup

In texture_map.py there is a section the with the setup

The bake setup specifying what maps to bake and what command line parameters to pass to the baker and how to name the maps. The only special case here is the color-from-mesh baker where we set the color source to be the material id's.

# All bakes needed for generating materials together with  
# additional command line options and  
# what input images they should be bound to when rendering 
maps_to_bake = [('ambient-occlusion', [], 'ambient-occlusion'),  
                ('curvature', [], 'curvature'), 
                ('position', [], 'position'), 
                ('normal-world-space', [], 'normal-world-space'), 
                # Bake color from mesh with submesh id as color source (2) 
                ('color-from-mesh', ['--use-lowdef-as-highdef', 'true', '--color-source', '2'], 'color-id')] 

The following part maps part names to colors coming out of the color id baker so we can detect what texel belongs to what part of the object.

# Dictionary mapping sub mesh to a compositing color 
submesh_to_color_mapping = {'head' : '0,1,0', 
                            'body' : '0,0,1', 
                            'base' : '1,0,0'} 
 

In this section we define what sets of maps we want to bake. Different sbs files and settings are assigned to the different mesh parts in the three different setups.

# SBS assignments for all variations to render together  
# with what sub graph to render and parameters to set for each material  
output_texture_variations = { 'Rusty' :  
                                {'head' : ('steel_battered.sbs', 'steel_rusty', {'rust_spreading' : [.16], 
                                                                                 'steel_color' : [1,.88,.60]}), 
                                 'body' : ('steel_battered.sbs', 'steel_rusty', {'rust_spreading' : [.16], 
                                                                                 'steel_color' : [.98,.81,.75]}), 
                                 'base' : ('steel_battered.sbs', 'steel_rusty', {'rust_spreading' : [.16]})}, 
                              'Leather' :  
                                {'head' : ('leather_fine_touch.sbs', 'leather_worn', {}), 
                                 'body' : ('leather_fine_touch.sbs', 'leather_worn', {}), 
                                 'base' : ('leather_fine_touch.sbs', 'leather_worn', {})}, 
                               'Painted_Terracotta' :  
                                {'head' : ('terracotta_glossy.sbs', 'painted_terracotta', {}), 
                                 'body' : ('terracotta_glossy.sbs', 'painted_terracotta', {}), 
                                 'base' : ('terracotta_glossy.sbs', 'painted_terracotta', {})} 
                            }

Baking

The first thing happening when running the texture_mat.py script is maps being baked for the mesh. It will use the maps_to_bake definition to generate a set of calls to sbs_baker.

When done the _output directory will contain the following maps:

Compositing Network

In order to create specific maps for each texture variation we are going to create a new substance file representing the specific assignments and parameters. The heavy lifting for this process happens in the file create_compositing_network.py. It takes as input the substance files and specific settings for each material color and generates a custom texturing substance file using the substance python api.

The output for the leather material looks like this:

In the center is a multi material blend node that has the different materials associated with their corresponing color from the sub mesh. The materials imported also have their properties from the configuration set on them to make sure there can be multiple instances of the same material with different parameters in one texturing network. There are also inputs for ambient occlusion for color id, ambient occlusion and curvature wired into the networks.

Cooking

In order to render maps from these compositing networks the generated sbs files they need to be cooked to sbsar files. This happens through the sbscooker command line tool.

Rendering

The final stage is rendering the maps for each variation using sbsrender. The command line to sbsrender binds the right textures and renders out the correct maps.

With these maps we can render the final result

Get help faster and easier

New user?