Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
Thanks Maxime! I'm relieved it's a bug, I was looking everywhere for functions to manually fix the OpenGL preview. I will try with this approach.
Y.
Hi Maxime,
The PSD file is just a test file, so at the moment it's a very simple layered file. Four layers, everything completely rasterised, no text or effects or anything special. Here's the code I'm using - you'll need to replace "/MyPath/test.psd" with a path to your PSD image.
Than you so much for helping!
import c4d from c4d import bitmaps def CreateMaterial(matName, fileName, layerName, i): # Create a new material from scratch mat = c4d.Material() mat.SetName(matName) doc = c4d.documents.GetActiveDocument() doc.InsertMaterial(mat) # create a texture shader and assign it to the color channel # enable the color channel mat[c4d.MATERIAL_USE_COLOR] = True # create a bitmap shader texshader = c4d.BaseShader(c4d.Xbitmap) texshader[c4d.BITMAPSHADER_FILENAME] = fileName # provide the layer set information layerSet = c4d.LayerSet() layerSet.SetMode(c4d.LAYERSETMODE_LAYERS) layerSet.AddLayer(layerName) texshader[c4d.BITMAPSHADER_LAYERSET] = layerSet # insert the bitmap shader into the material mat.InsertShader(texshader) # assign the bitmap shader to the color channel mat[c4d.MATERIAL_COLOR_SHADER] = texshader # enable the alpha channel mat[c4d.MATERIAL_USE_ALPHA] = True # create a bitmap shader texshader = c4d.BaseShader(c4d.Xbitmap) texshader[c4d.BITMAPSHADER_FILENAME] = fileName # provide the layer set information layerSet = c4d.LayerSet() layerSet.SetMode(c4d.LAYERSETMODE_LAYERALPHA) layerSet.AddLayer(layerName) texshader[c4d.BITMAPSHADER_LAYERSET] = layerSet layerSet.SetPreviewMode(0) # insert the bitmap shader into the material mat.InsertShader(texshader) # assign the bitmap shader to the color channel mat[c4d.MATERIAL_ALPHA_SHADER] = texshader # by default the reflectance channel is enabled, # let's disable it mat[c4d.MATERIAL_USE_REFLECTION] = False # Create a new null and plane from scratch nl = c4d.BaseObject(c4d.Onull) nl.SetName(matName) nl.SetRelScale(c4d.Vector(i,i,i)) doc.InsertObject(nl) pl = c4d.BaseObject(c4d.Oplane) pl.SetName(matName) pl[c4d.PRIM_PLANE_WIDTH] = 192 pl[c4d.PRIM_PLANE_HEIGHT] = 108 pl[c4d.PRIM_PLANE_SUBW] = 1 pl[c4d.PRIM_PLANE_SUBH] = 1 pl[c4d.PRIM_AXIS] = 5 pl.SetRelPos(c4d.Vector(0,0, 200)) doc.InsertObject(pl,nl) # Add a texture tag to the plane tt = c4d.TextureTag() tt.SetName(matName) tt.SetMaterial(mat) pl.InsertTag(tt) return def main(): # load a multi layer psd file path = "/MyPath/test2.psd" bc = c4d.BaseContainer() bc.SetFilename(c4d.LOADTEXTURE_FILENAME, path.encode('utf-8')) tex = c4d.modules.bodypaint.SendPainterCommand(c4d.PAINTER_LOADTEXTURE, doc=doc, tex=None, bc=bc) if tex is None: print "Failed loading file" return # iterate over the layers and create the materials layer = tex.GetFirstLayer() i = 0 while layer: i += 1 layerName = layer.GetName() materialName = layerName CreateMaterial(materialName, path, layerName, i) # up to the next layer in the PSD layer = layer.GetNext() c4d.EventAdd() if __name__=='__main__': main()
Hi,
Newbie here so forgive any breach of protocol etc!
I'm trying to use python to assign PSD layers to individual materials, then apply these materials to a texture tag on individual planes (this can be used to create a pop-up book effect for example). The material previews look fine in the material window, and perfect when rendered with the standard renderer, but in the C4d view panel they all appear as the PSD layers all merged together (see pic attached of viewport vs rendered, with the material previews below). I suspect I'm missing a command to create a specific viewport or OpenGL texture from the material, or from the shader... Does anyone have any obvious suggestions or pointers?
Thanks, Yan.