Baking textures for PBR object
-
Is it possible to bake the values of the reflection channel into textures using "Bake object"?
-
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