Hi krftt thanks for reaching out us.
With regard to your question, if the intent is to bake the final appearance of a PBR material on a texture, I confirm that there are no means to achieve this considering that the baked data will also be camera-dependent.
If, on the contrary, your goal is to sample the shader used in any of the reflection layers used in a PBR material you can consider BaseShader::Sample() and, given a ChannelData, retrieve the color at a specific point - see this thread.
To browse through the different channel you can use something like:
# check for an active material
mat = doc.GetActiveMaterial()
if mat is None:
return
# retrieve the reflection layers count
layersCount = mat.GetReflectionLayerCount()
# loop through the layers
for i in xrange(layersCount):
# get the ReflectionLayer instance and the related data ID
reflLayer = mat.GetReflectionLayerIndex(i)
reflLayerData = reflLayer.GetDataID()
# check for the instance to be the one currently active in the Attribute Manager
if reflLayer.GetFlags() & (c4d.REFLECTION_FLAG_TAB):
# retrieve the color
color = mat[reflLayerData + c4d.REFLECTION_LAYER_COLOR_COLOR]
# try to retrieve the shader
colorShader = mat[reflLayerData + c4d.REFLECTION_LAYER_COLOR_TEXTURE]
# do something with the data retrieved
if colorShader is None:
print "Selected layer is ", reflLayer.GetName(), "and uses color: ", color
else:
print "Selected layer is ", reflLayer.GetName(), "and uses shader: ", colorShader.GetName()
Best, Riccardo