Rendering/RenderLayers.py

Rendering/RenderLayers.py
1 # Copyright 2009 Autodesk, Inc. All rights reserved.
2 # Use of this software is subject to the terms of the Autodesk license agreement
3 # provided at the time of installation or download, or which otherwise accompanies
4 # this software in either electronic or hard copy form.
5 #
6 # Script description:
7 # Render all layers from a scene to different files.
8 #
9 # Topic: FBPlayerControl, FBCamera, FBVideoGrabber, FBFolderPopup
10 #
11 
12 from pyfbsdk import *
13 import os
14 
15 # naming mask to identify render layers
16 lRenderPrefix = 'Render'
17 lformat = '.tif' # .avi, .jpg, .tga, .tif, .tiff, .yuv, .swf
18 
19 # Rendering grabs zoom bar data for frame range
20 gApplication = FBApplication()
21 gSystem = FBSystem()
22 lControl = FBPlayerControl()
23 timeSpan = gSystem.CurrentTake.LocalTimeSpan
24 lStart = timeSpan.GetStart()
25 lStop = timeSpan.GetStop()
26 lStepFrame = 1
27 lFrameRate = lControl.GetTransportFpsValue()
28 
29 # a function for setting render options and executing render
30 def RenderLayer ( pPath,pLayerName ):
31  lRenderPath = "%s\%s_%s" % ( pPath,pLayerName,lformat )
32 
33  lOptions = FBVideoGrabber().GetOptions()
34  lOptions.ViewingMode = FBVideoRenderViewingMode().FBViewingModeCurrent
35  lOptions.TimeSpan = timeSpan
36  lOptions.TimeSteps = FBTime(0, 0, 0, 1)
37  lOptions.CameraResolution = FBCameraResolutionMode().kFBResolutionCustom
38  lOptions.AntiAliasing = False
39  lOptions.RenderAudio = False
40  lOptions.FieldMode = FBVideoRenderFieldMode().FBFieldModeNoField
41  lOptions.BitsPerPixel = FBVideoRenderDepth().FBVideoRender24Bits
42  lOptions.ShowCameraLabel = False
43  lOptions.ShowSafeArea = False
44  lOptions.OutputFileName = pPath
45  lOptions.ShowTimeCode = True
46  lOptions.OutputFileName = lRenderPath
47  gApplication.FileRender( lOptions )
48 
49 #Create a dictionary of Groups visibility to recall later
50 lShow = {}
51 for lGroups in FBSystem().Scene.Groups:
52  lShow[lGroups.Name]=lGroups.Show
53 
54 # hide Axis and grid from renders
55 for lCamera in FBSystem().Scene.Cameras:
56  lCamera.ViewShowAxis = False
57  lCamera.ViewShowGrid = False
58 
59 
60 # select global folder for renders
61 lFp = FBFolderPopup()
62 lFp.Caption = "Select a folder to put your Rendered Layers:"
63 
64 # Set the default path. Good for a PC only... will have to be different for Mac.
65 lFp.Path = r"C:\temp"
66 
67 lRes = lFp.Execute()
68 # create a subfolder for render layers
69 if lRes:
70  lfolder = FBMessageBoxGetUserValue( "Create subfolder for render layers: " , "Warning: will overwrite existing ", "MyRenderLayers", FBPopupInputType.kFBPopupString, "Ok" )
71 
72  if lfolder[0]:
73  print "Creating subfolder %s" % lfolder[1]
74  if not os.path.exists("%s\\%s" % ( lFp.Path,lfolder[1] )):
75  os.mkdir("%s\\%s" % ( lFp.Path,lfolder[1] ))
76 
77  lFp.Path = "%s\%s" % (lFp.Path,lfolder[1])
78 
79  else:
80  FBMessageBox( "Result", "Got an error", "Ok" )
81 
82  del( lfolder )
83 
84 # Render each Render Layer
85  for lGroups in FBSystem().Scene.Groups:
86  lGroups.Show = False
87  for lGroups in FBSystem().Scene.Groups:
88  if lGroups.Name.startswith( lRenderPrefix ):
89  lGroups.Show = True
90  print 'Rendering Layer ' + lGroups.Name.lstrip( lRenderPrefix )
91  RenderLayer(lFp.Path,lGroups.Name.lstrip( lRenderPrefix ))
92  print 'Done'
93  lGroups.Show = False
94 
95 # unhide axis and grid from scene
96 for lCamera in FBSystem().Scene.Cameras:
97  lCamera.ViewShowAxis = True
98  lCamera.ViewShowGrid = True
99 
100 # reset visibility status of Groups
101 for lGroups in FBSystem().Scene.Groups:
102  lGroups.Show = lShow[lGroups.Name]
103 
104 
105 
106 
107