Substance 3D Painter

A wide view of headphones painted in Painter and viewed in Omniverse Create

Overview

Adobe Substance 3D Painter is a world leading solution for 3D texturing. It’s a go-to 3D texturing app for creative professionals with hundreds of smart materials at your disposal and a powerful brush engine that allows you to texture any 3D model in minutes.

The Substance 3D Painter Connector works in tandem with the Create Painter Live Link extension to provide real time visualization of painted meshes in Omniverse Create. The Painter Connector can:

  • Open a USD of the active Painter mesh in Create

  • Duplicate the Painter environment HDR in Create as a Dome Light

  • Live-update texture maps and materials in Create

  • Import a USD stage that’s currently open in Create from Omniverse

    • If the USD is using OmniPBR then the Albedo, Normal, and Roughness textures are imported into the project in Painter

Note

A video tutorial for version 200 is coming soon.

Installation

There are two components to install, the Painter Connector and the Create Painter Link extension.

Painter Connector

The Painter Connector is available from the Omniverse Launcher. It requires that you have Substance 3D Painter installed.

The Substance 3D Painter Connector is available from the Omniverse Launcher

Settings and Actions

Painter Connector

The Omniverse Connector is a plugin that automatically exports texture maps whenever a user paints or changes any properties in the texture set. There is a settings and actions panel that allows the user to configure the Connector, export, and import meshes.

Sometimes the panel is hidden or mostly minimized after installation in the bottom right corner.

If the Settings panel is completely hidden, open it by selecting Window > Views > Omniverse-Connector:

Making the settings pane in Painter visible

If it’s stuck in the bottom right corner, drag the title bar up to expose all of the parameters:

Exposing the settings pane in Painter

The Settings pane:

The extension settings pane in Painter

Import Menu

Menu Items

Action

Mesh

Import the current USD prop that’s open in Create into a new Painter project

Export Menu

Menu Items

Action

Mesh

Opens the current Painter mesh in Omniverse Create

Textures

Exports all texture set maps and sends to Omniverse Create

Edit Menu

Menu Items

Action

Connection Settings

Settings dialog for connecting to Omniverse Create

Connection Settings Dialog

The Connection Settings Dialog in Painter

Option

Result

Update Interval (ms)

The interval between texture exports in milliseconds

Port

The port on which the Create extension is listening for texture update, mesh import, and mesh export notifications. The default is 8111, but if you’re running more than one instance of Create or you’re using View/Code/etc. this will change.

Mesh

This folder is where the plugin stores FBX meshes so Create can import them. If Submit to Nucleus is unchecked, this is also where Create will save the USD stage.
Note: The Adobe Substance 3D Painter documents folder will be used by default, or if an invalid directory is given.

Texture

This folder is where the plugin stores Textures if the “Default” option is not checked
Note: The Adobe Substance 3D Painter documents folder will be used by default, or if an invalid directory is given.

Texture Export Options

The Texture Export Options in Painter

Option

Result

Preset

Defines what textures are output and how they’re formatted. For now, only two are supported:
PBR Metallic Roughness
Unreal Engine 4 (Packed)

Resolution

The size of exported textures

Bit Depth

The bit depth of the exported textures. Note that not all bit depths are supported by some formats

Format

The texture file format (PNG, TGA, etc.)

Note

The two available Texture Presets (PBR Metallic Roughness and Unreal Engine 4 (Packed)) are currently the only two presets that will work with the Painter Link extension in Create. The specific format of the map names - $mesh_$textureSet_BaseColor(_$colorSpace)(.$udim) - is linked to the constructing of the OmniPBR texture within Create. In the future we intend to support more custom presets and possibly even custom presets so creators can format things as they require.

Status Indicator

The Texture Export Options in Painter

State

Result

Idle…

Live-Link is enabled and will send texture updates to Create when paint strokes are made

Exporting

Mesh or textures are exporting

Live-Link Disabled

All live update features are paused (brush strokes will not receive updates in Create)
The status indicator

Texture Set Settings

Only the channels specified in the Channels list are initialized in the OmniPBR material that Omniverse Create updates. This can be used to make a material more efficient. For example, if there’s no opacity required, the Opacity channel can be deleted and that parameter will be unchecked in the generated OmniPBR material.

Show the extension window settings pane

Create Painter Live Link Extension

To bring up the Painter Live Link settings, go to Window > Substance 3D Painter Link

Show the extension window settings pane

This will show the Painter Live Link settings:

The Painter Link extension settings pane

Setting

Effect

Link Port

This shows the current port on which the Painter Link extension is listening. It can be configured in the Painter Connector settings.

Idle/Working Indicator

Shows the user when the extension is busy uploading textures (larger textures take time to upload and the delay can be noticeable).

Exporting to Omniverse Create and Painting

The Connector and extension allow a user to export a Painter mesh into Omniverse Create for live painting.

  1. Open or create a project in Painter

  2. To link Painter with Create, find the Omniverse Connector dock widget (it might be in the bottom right corner). It might be better to dock it under the viewport so it’s slightly wider.

  3. In the Settings pane, select Edit > Connection Settings… and in the Connection Settings dialog, ensure that the Port field matches the number shown in the Create 3D Painter Link window. This number can change if you have multiple instances of Create running or if you are running Omniverse Code instead of Create

    Ensure the ports match between the Connector and Extension
  4. Select Export > Mesh to send the current mesh and texture sets to Omniverse Create

  5. If you want to match the environment, you can create a matching dome light in Create by clicking the Use Environment Map checkbox and click Show if you want to make it visible

  6. Start painting

UV Tile (UDIM) Support

The Connector supports exporting Painter projects with the UV Tile workflow enabled. When a change is made to any individual tile all of the tiles are exported, so take note that every brush stroke can generate a lot of work exporting textures.

Importing a Mesh from Omniverse

With the Connector and Create Painter Link extension, it is possible to open a USD stage in Create and import it into Substance Painter.

The Import Process Explained

  1. Open a USD prop in Create that you intend to import into Painter

Note

We advised that the USD stage contains a single mesh for painting, not a massive set with many props

This USD prop/stage will be edited by the Painter Link:

  • Existing materials that are OmniPBR-based will be edited

  • We suggest that if you want to keep the original OmniPBR-based materials to duplicate them before importing

  • Existing material that are not OmniPBR-based will be renamed and new OmniPBR-based materials will be created and assigned to the USD mesh

  1. Select Import > Mesh…

    • If your project has unsaved changes, a dialog will ask if you want to save your changes. If your file has not yet been saved, another dialog will allow you to specify where to save your Painter project.

    • A dialog will ask if you want to create your new project using UDIMs

    • The current USD stage is exported as an FBX at the Mesh Folder location from the Painter Connector’s Connection Settings dialog

    • A new project is created in Painter based on the mesh

    • The Texture Sets in Painter are all sent back to Create and it will generate and assign materials to the mesh

Note

the current solution doesn’t preserve the USD’s materials and textures initially, so it will appear that all of the textures and materials are wiped and replaced with white.

  1. If the USD contained OmniPBR materials, they can be recreated because the textures should have been imported to the project

Recreating OmniPBR Materials in Painter

If the USD contained OmniPBR materials then the import process should have imported textures into the Painter project. They can be applied with these steps:

  1. Find the imported textures from the Project Assets (select the Texture filter to isolate them in the panel)

    Find the imported textures in the Painter project
  2. For each texture set, add a fill layer

  3. Drag the imported textures from the Project Textures onto the fill layer’s channels

    Drag the imported textures onto the fill layer's channels

At this point the original material exists in Painter for further editing.

Operating on a USD Mesh Within a Stage

The real power of being able to visualize an exported mesh from Painter comes when you include it in a composed stage in Create. The Connector will update textures for any material found in the stage that uses them. It is possible to export a mesh prop to Omniverse, setup the materials a bit, then actually drag that prop into another stage and continue editing it. The Painter Link extension should find the mesh and update it as painting continues in Painter.

The extension can edit textures used by a referenced USD prop within a stage

Implementation Details

The Substance 3D Painter Connector and Create Painter Link Extension work in tandem to handle texture, material, mesh, and lighting synchronization between Painter and Create.

Mesh

Painter Export

  1. The Painter FBX is exported out of the Painter project and placed in the Mesh Output Folder

  2. The Painter Connector notifies the Create Painter Link extension through and HTTP post message to convert the FBX mesh to USD. The Create extension performs the conversion and opens the stage in Create. The stage is located in the Nucleus folder.

  3. The Painter Connector exports all of the textures for all of the texture sets to the mesh’s folder by default (otherwise, to the Texture folder if the Default option is unchecked and a texture folder is specified).

  4. The Painter Connector notifies the Create extension through HTTP post messages that the texture set maps are available and the Painter Link extension updates the OmniPBR materials in the USD stage with the Painter maps and parameters.

An overview of the interaction between the Painter Connector and Create Painter Link extension

Painter Import

  1. A USD prop stage, preferably located in the Nucleus folder is open in Create

  2. Painter requests to “Import a Mesh from Omniverse” with an HTTP post message to the Painter Link extension

  3. The Painter Link extension exports the current open stage as FBX. If the USD mesh had an OmniPBR material then the textures are exported in a folder next to the mesh (under materials/textures)

  4. When the export is complete Painter is notified and it creates a new project, setting the normal map convention to DirectX and adding any textures from materials/textures

Textures

Textures are exported using the Painter plugin API into time-stamped folders. The Create extension is notified of these new textures and updates the materials to reference them. The textures are copied to the Nucleus Folder if the Submit setting is checked.

Materials

When the Painter Connector exports textures, it notifies the Painter Link extension to update materials with all of the correct meshes and texture preset channels

Note

Regarding the Omniverse Physically Based Rendering (OmniPBR) Material: Currently the only material that the Painter Link extension generates or updates in Create is OmniPBR. Also, the only material exported by Create’s FBX exporter is OmniPBR, so if there are OmniGlass, OmniSurface, or any other materials on the mesh the textures won’t be imported to Painter.

Environment Lighting

The Painter plugin API provides the current environment map path. When the environment map is exported, a messages is sent to the Painter Link extension with the environment map path on local disk. A Dome Light is created in the stage under the /Preview/DomeLight prim path. Note that this is outside the defaultPrim so that there are no lighting collisions when referencing the USD prop in another stage. The environment map is also copied to the Nucleus Folder if the Submit setting is checked.

Toggle environment map options

Session Layers and Local vs. Nucleus Textures

In an effort to make local Painter changes appear very quickly and still make the updates replicate through Omniverse, the Painter Link extension uses the Session Layer. The Session Layer is “scratch space” to configure, override, and experiment with the data contained in files backing the stage. An anonymous layer is a layer that cannot be saved to disk and will only reside in memory.

The Create Painter Link extension uses an anonymous sublayer within the Session Layer to store local texture paths. While working in the live session with Painter, these local texture paths are what a user sees and they update very quickly because all access is local. The Nucleus Paths to the textures are stored in the Root Layer so that the file-backed version of the stage contains the Nucleus-resident textures. If the stage is opened from another client on another computer the textures are referenced from Nucleus. They will update automatically, but not as quickly as the local textures update.

To show the Session Layer in the Layer tab, select Show Session Layer in the hamburger button (menu or collapsed menu button).

This is the Layer tab from Create. The Session Layer is on top because it is the strongest layer in the stage. The Painter Link extension creates the anon:####:PainterLinkLocalFileReferences sublayer and sets that to the authoring layer whenever textures are updated within the material.

The anonymous session layer with the material's local texture "overs" expanded

Known Issues

Here are a collection of issues that can cause issues and we are working on:

  • In Adobe Substance 3D Painter the OMNIVERSE-CONNECTOR Settings pane is missing

    • If the Settings panel is completely hidden, open it by selecting Window > Views > Omniverse-Connector. If it’s stuck in the bottom right corner drag the title bar up to expose all of the parameters.

  • If the Omniverse Nucleus server you’re using is remote and texture copies are less than immediate, Create may freeze when the textures are uploading to Nucleus.

  • If the Texture Set names are different than the material names in the FBX you may run into issues when exporting the mesh to Create. Painter doesn’t export the FBX with updated material names and there will be a mismatch. This can be fixed in one of two ways. You can either:

    • Rename the materials in Create to match the Texture Set names

    • Or use the Create Materials Painter Link option to generate new materials and assign them to the meshes yourself

Release Notes

200.0 Release

The emphasis for this release is a redesigned UI for an improved user experience.

Features

  • User-defined texture export directory

  • Separate checkboxes for using and showing environment map

  • Status indicator that indicates when connector is idle, exporting, or if live-link is disabled.

  • Save project dialog when importing mesh from Omniverse if project is unsaved (OM-50152)

Changes

  • Redesigned user interface (OM-50822)

Resigned user interface
  • Updated http post protocol from version 1.1 to 2.0 to support new export options (OM-51808)

  • Updating texture resolution will no longer automatically export textures

  • Menu bar containing import mesh command, export mesh and textures commands, and connection options

  • Moved the Save Stage checkbox, Create Materials checkbox and Nucleus folder textbox from the Create Painter Live Link extension and into the Substance 3D Painter Connector

  • Files uploaded to Nucleus are placed directly in Nucleus folder specified by the Connector and subdirectories are no longer created for them (OM-57804)

102.1 Release

The emphasis for this release is on stability, bug fixes, and some light workflow improvement with the UI.

Features

  • Added a button that will toggle enabling/disabling of all live-link features.

  • Added a checkbox that allows a mesh to be imported from Omniverse using UDIMs (OM-44584)

  • Added busy indicators to the Painter Connector and Create Extension for feedback during long-running operations

    Busy indicators in both the Connector and Extension

Bug Fixes

  • Painter now rotates the folder that textures are written to to make GPU access in Create safer. (OM-46027)

  • Installer fails and pops up a dialog when Painter not installed (OM-47068)

  • Installer uses proper exception handling on file/directory access (OM-47002)

  • Installer will overwrite files in the plugin folder (OM-49033)

  • The Texture Settings dialog will not export textures if none of the properties were changed from their original value.

  • Nucleus folder will not be created if not requested by having “Copy Textures To Nucleus” on (OM-48623)

  • Added support for OpenColorIO color management projects (OM-48645)

    • Note: detailed color space support is not working, but exported maps will link up correctly with the Omniverse PBR material

  • Doc link from the extension manager, now includes a link to the documentation (OM-47530)

  • Settings - version renamed to Substance 3D Painter Settings - version (OM-47531)

  • Re-exporting a mesh from painter twice no longer crashes Create (OM-46084)

Changes

  • Local only workflow is supported. Base layer now maps paths locally when copy textures to nucleus is off. (OM-48689)

  • The text on button that allows user to select a directory is replaced with a folder icon.

  • Added an icon that indicates if exporting is taking place (OM-49002).

  • Added a button for force exporting all textures (OM-48696).

  • Updated http post protocol from version 1.0 to 1.1 to send local textures relative directory with post.

101.1 Release

Features

  • Export the Painter mesh and texture sets as USD and MDL then open in Omniverse Create

  • Duplicate the Painter environment HDR in Create as a Dome Light

  • Live-update texture maps and materials in Create

  • Import a USD stage that’s currently open in Create from Omniverse