User Guide Cancel

Using color management | Substance 3D Designer

Using color management

The SDColorManagementEngine class, accessible from the SDApplication class, contains information about the current color management settings.

Accessing and querying the Color Management Engine

import sd
ctx = sd.getContext()
app = ctx.getSDApplication()
# Access the color management engine.
cm = app.getColorManagementEngine()
# Currently getName can return "legacy", "ace" or "ocio"
# depending on the color management settings in the preferences.
cmName = cm.getName()
print(cmName)
print(cm.getWorkingColorSpaceName())
print(cm.getRawColorSpaceName())
if cmName == "ocio":
# If OpenColorIO is enabled, print the config file name.
print(cm.getOCIOConfigFileName())
# List all color spaces.
colorSpaces = cm.getColorSpaces()
for cs in colorSpaces:
print(cs.get())
import sd ctx = sd.getContext() app = ctx.getSDApplication() # Access the color management engine. cm = app.getColorManagementEngine() # Currently getName can return "legacy", "ace" or "ocio" # depending on the color management settings in the preferences. cmName = cm.getName() print(cmName) print(cm.getWorkingColorSpaceName()) print(cm.getRawColorSpaceName()) if cmName == "ocio": # If OpenColorIO is enabled, print the config file name. print(cm.getOCIOConfigFileName()) # List all color spaces. colorSpaces = cm.getColorSpaces() for cs in colorSpaces: print(cs.get())
import sd 
 
ctx = sd.getContext() 
app = ctx.getSDApplication() 
 
# Access the color management engine. 
cm = app.getColorManagementEngine() 
 
# Currently getName can return "legacy", "ace" or "ocio" 
# depending on the color management settings in the preferences. 
cmName = cm.getName()  
print(cmName) 
 
print(cm.getWorkingColorSpaceName()) 
print(cm.getRawColorSpaceName()) 
 
if cmName == "ocio": 
    # If OpenColorIO is enabled, print the config file name. 
    print(cm.getOCIOConfigFileName()) 
 
# List all color spaces. 
colorSpaces = cm.getColorSpaces() 
for cs in colorSpaces: 
    print(cs.get())

In addition, it is possible to assign color spaces to bitmap resources from Python.

Setting color spaces on bitmap resources

import sd
import sd
from sd.api.sdproperty import *
from sd.api.sdresourcebitmap import SDResourceBitmap
from sd.api.sdvaluestring import SDValueString
from sd.api.sdvaluebool import SDValueBool
ctx = sd.getContext()
app = ctx.getSDApplication()
pkgMgr = app.getPackageMgr()
cm = app.getColorManagementEngine()
colorSpaces = cm.getColorSpaces()
# Get all the resources in the first package.
pkg = pkgMgr.getPackages()[0]
resources = pkg.getChildrenResources(isRecursive=True)
for res in resources:
if isinstance(res, SDResourceBitmap):
props = res.getProperties(SDPropertyCategory.Annotation)
# Print the current color space for the resource.
p0 = res.getPropertyFromId("bitmap_color_space", SDPropertyCategory.Annotation)
cs = res.getAnnotationPropertyValueFromId("bitmap_color_space")
print(cs.get())
# Print the current premultiplied alpha setting for the resource.
p1 = res.getPropertyFromId("bitmap_premultiplied_alpha", SDPropertyCategory.Annotation)
cs = res.getAnnotationPropertyValueFromId("bitmap_premultiplied_alpha")
print(cs.get())
# Assign new values for the color space and premultiplied alpha properties.
res.setPropertyValue(p0, colorSpaces[2])
res.setPropertyValue(p1, SDValueBool.sNew(False))
import sd import sd from sd.api.sdproperty import * from sd.api.sdresourcebitmap import SDResourceBitmap from sd.api.sdvaluestring import SDValueString from sd.api.sdvaluebool import SDValueBool ctx = sd.getContext() app = ctx.getSDApplication() pkgMgr = app.getPackageMgr() cm = app.getColorManagementEngine() colorSpaces = cm.getColorSpaces() # Get all the resources in the first package. pkg = pkgMgr.getPackages()[0] resources = pkg.getChildrenResources(isRecursive=True) for res in resources: if isinstance(res, SDResourceBitmap): props = res.getProperties(SDPropertyCategory.Annotation) # Print the current color space for the resource. p0 = res.getPropertyFromId("bitmap_color_space", SDPropertyCategory.Annotation) cs = res.getAnnotationPropertyValueFromId("bitmap_color_space") print(cs.get()) # Print the current premultiplied alpha setting for the resource. p1 = res.getPropertyFromId("bitmap_premultiplied_alpha", SDPropertyCategory.Annotation) cs = res.getAnnotationPropertyValueFromId("bitmap_premultiplied_alpha") print(cs.get()) # Assign new values for the color space and premultiplied alpha properties. res.setPropertyValue(p0, colorSpaces[2]) res.setPropertyValue(p1, SDValueBool.sNew(False))
import sd 
import sd 
from sd.api.sdproperty import * 
from sd.api.sdresourcebitmap import SDResourceBitmap 
from sd.api.sdvaluestring import SDValueString 
from sd.api.sdvaluebool import SDValueBool 
 
ctx = sd.getContext() 
app = ctx.getSDApplication() 
pkgMgr = app.getPackageMgr() 
cm = app.getColorManagementEngine() 
 
colorSpaces = cm.getColorSpaces() 
 
# Get all the resources in the first package. 
pkg = pkgMgr.getPackages()[0] 
resources = pkg.getChildrenResources(isRecursive=True) 
 
for res in resources: 
 if isinstance(res, SDResourceBitmap): 
  props = res.getProperties(SDPropertyCategory.Annotation) 
 
        # Print the current color space for the resource. 
  p0 = res.getPropertyFromId("bitmap_color_space", SDPropertyCategory.Annotation) 
  cs = res.getAnnotationPropertyValueFromId("bitmap_color_space") 
  print(cs.get()) 
 
        # Print the current premultiplied alpha setting for the resource. 
  p1 = res.getPropertyFromId("bitmap_premultiplied_alpha", SDPropertyCategory.Annotation) 
  cs = res.getAnnotationPropertyValueFromId("bitmap_premultiplied_alpha") 
  print(cs.get()) 
 
        # Assign new values for the color space and premultiplied alpha properties. 
  res.setPropertyValue(p0, colorSpaces[2]) 
  res.setPropertyValue(p1, SDValueBool.sNew(False))

Writing SDTextures with color space conversions

The save method of the SDTexture class now accepts an optional outputColorSpace parameter. When specified, the color space conversion will be applied before saving the image.

If the color management mode supports embedded ICC profiles and the destination file format also supports them, the color space ICC profile will be embedded in the resulting image file.

Get help faster and easier

New user?