Extracting UV map from multipass render
-
On 10/02/2014 at 05:31, xxxxxxxx wrote:
Using Cinema R15 on OSX; I am trying to using the python API extract a UV map from a mulipass-render.
This can be done none programatically by going into [ render -> edit render settings ] then enabling multipass and then adding and enabling 'Material UVW'
The problem is that can't get this to reliably work programatically. Below is the code I trying:
def test(doc) : #creates a new render data object rd1=c4d.documents.RenderData() #add multipass vuvw=c4d.BaseList2D(c4d.Zmultipass) vuvw.GetDataInstance()[c4d.MULTIPASSOBJECT_TYPE] = c4d.VPBUFFER_MAT_UV rd1.InsertMultipass(vuvw) rd=rd1.GetDataInstance() rd[c4d.RDATA_MULTIPASS_ENABLE]=True #det dimensions xres=800 yres=800 rd[c4d.RDATA_XRES]=float(xres) rd[c4d.RDATA_YRES]=float(yres) #set output bmp = c4d.bitmaps.MultipassBitmap(xres, yres, c4d.COLORMODE_RGBw) res = c4d.documents.RenderDocument(doc, rd, bmp) if res!=c4d.RENDERRESULT_OK: print 'Render Failed!!!' return False else: print 'Render Success!!!' #print layer names for i in range(bmp.GetLayerCount()) : print bmp.GetLayerNum(i).GetParameter(c4d.MPBTYPE_NAME)
This code just prints out 'Background' instead of Background and 'Material UV'. (This is confirmed by writing the layers out to a file).
I am not really sure what I am doing wrong, of course please ask if there is any additional information I can provide.
Thanks for any help in advance! -
On 10/02/2014 at 11:03, xxxxxxxx wrote:
Give this one a try:
#This script creates a new render preset and sets it to create an RGB & Material UV pass image to your desktop #IMPORTANT!!: Make sure you rememebr to add a matrerial to your objects or the Material UV image will be black!! import c4d, os from c4d import bitmaps, documents def main() : firstRd = doc.GetFirstRenderData() if not firstRd: return False #If our custom render settings already exhist #Use it..Don't create another one if firstRd.GetName() == "Material UV pass": xres = 800 yres = 800 firstRd[c4d.RDATA_XRES] = float(xres) firstRd[c4d.RDATA_YRES] = float(yres) bmp = bitmaps.BaseBitmap() bmp.Init(int(xres), int(yres), firstRd[c4d.RDATA_FORMATDEPTH]) data = doc.GetActiveRenderData().GetData() res = documents.RenderDocument(doc, data, bmp, c4d.RENDERFLAGS_EXTERNAL) if res!=c4d.RENDERRESULT_OK: print 'Render Failed!!!' return False else: print 'Render Success!!!' #If our custom render settings don't already exhist #Create it first..then render the images else: myRd = c4d.documents.RenderData() myRd.SetName("Material UV pass") doc.InsertRenderData(myRd) doc.SetActiveRenderData(myRd) xres = 800 yres = 800 myRd[c4d.RDATA_XRES] = float(xres) myRd[c4d.RDATA_YRES] = float(yres) fn = c4d.storage.GeGetC4DPath(c4d.C4D_PATH_DESKTOP) path = os.path.join(fn,'render') myRd[c4d.RDATA_PATH] = path #Enable the Multi-Pass option myRd[c4d.RDATA_MULTIPASS_ENABLE]=True #Assign the passes container list of options to a variable uvPass = c4d.BaseList2D(c4d.Zmultipass) #Get the Material UV pass option uvPass.GetDataInstance()[c4d.MULTIPASSOBJECT_TYPE] = c4d.VPBUFFER_MAT_UV #Add the Material UV pass option to the render settings dialog myRd.InsertMultipass(uvPass) #Enable the Save Multi-Pass Image option myRd[c4d.RDATA_MULTIPASS_SAVEIMAGE]=True #Set the file path where to put the Material UV pass image fn = c4d.storage.GeGetC4DPath(c4d.C4D_PATH_DESKTOP) path = os.path.join(fn,'uv') myRd[c4d.RDATA_MULTIPASS_FILENAME] = path #Set the output format to .png myRd[c4d.RDATA_MULTIPASS_SAVEFORMAT] = c4d.FILTER_PNG bmp = bitmaps.BaseBitmap() bmp.Init(int(xres), int(yres), myRd[c4d.RDATA_FORMATDEPTH]) data = doc.GetActiveRenderData().GetData() res = documents.RenderDocument(doc, data, bmp, c4d.RENDERFLAGS_EXTERNAL) if res!=c4d.RENDERRESULT_OK: print 'Render Failed!!!' return False else: print 'Render Success!!!' c4d.EventAdd() if __name__=='__main__': main()
-ScottA
-
On 10/02/2014 at 15:20, xxxxxxxx wrote:
Thanks, I'll give it a go in the morning and report back!