Hi All,
If anyone can help it would be greatly appreciated.
I have a script for setting up the render settings for MentalRay, it worked great in 2012 but errors out in 2013.
it gives the following error: --Unable to convert: undefined to type: Integer
and highlights line 105: rw=ReadString rwf as integer
below is the full script.
any pointers would be great.
thanks
Sam
macroScript MRay_Render_setup_OR
category:"GSS_Scripts"
(
try closeRolloutFloater theFloater catch()
mfn = maxfilename
if mfn == "" then messagebox "Save the file first fool!!!"
else
(
global file_nr = maxfilename[5]+maxfilename[6]
global file_path = pathConfig.convertPathToUnc maxfilepath
global file_path_s = pathConfig.removePathLeaf file_path
global pj_name = substring file_path_s 24 (file_path_s.count-23)
global gi_dir = "\\\datagssk\\shared\\Jobs\\"+pj_name+"\\max\\Mray\\cam_"+ file_nr
global fg_dir = "\\\datagssk\\shared\\Jobs\\"+pj_name+"\\max\\Mray\\cam_"+ file_nr
global re_dir = "\\\datagssk\\shared\\Jobs\\"+pj_name+"\\Renders\\cam_"+ file_nr
global anim_re_dir = "\\\datagssk\\shared\\Jobs\\"+pj_name+"\\max\\cam_"+ file_nr
global pj_nr = substring pj_name 1 7
global mr = renderers.current
global rez_w_file_string = "\\\datagssk\\shared\\Jobs\\"+pj_name+"\\max\\Mray\\cam_"+ file_nr+"\\cam_"+ file_nr+"_width.ini" as string
global rez_h_file_string = "\\\datagssk\\shared\\Jobs\\"+pj_name+"\\max\\Mray\\cam_"+ file_nr+"\\cam_"+ file_nr+"_height.ini" as string
global renderengine = mental_ray_renderer()
global rh = ""
global rw = ""
--function that sets render resolution for animations
fn fn_set_render_res_anim res=
(
if res == 576 then
(
renderwidth = 720
renderheight = 576
renderPixelAspect = 1.4222
)
else if res == 720 then
(
renderwidth = 1280
renderheight = 720
renderPixelAspect = 1
)
else if res == 1080 then
(
renderwidth = 1920
renderheight = 1080
renderPixelAspect = 1
)
)
fn fn_set_scene_move_anim_pre_pass =
(
renderengine.FGProjectionMode = 0
renderengine.IlluminationCacheMode =1
renderengine.SkipFinalRender = true
renderengine.PhotonMapUseFile = true
renderengine.PhotonFreeze = false
renderengine.FinalGatherFreeze = false
renderengine.DeleteFinalGatherFile noprompt:true
renderengine.DistributedEnable = false
filename = fg_dir+"\\cam_"+file_nr+".pmap"
deleteFile filename
rendSaveFile = false
rendTimeType = 2
)
fn fn_set_scene_move_anim_final interpolate=
(
renderengine.FGInterpolateNFrames = interpolate
renderengine.IlluminationCacheMode =1
renderengine.PhotonFreeze = true
renderengine.PhotonMapUseFile = true
renderengine.FinalGatherFreeze = true
renderengine.DistributedEnable = false
renderengine.SkipFinalRender = false
rendSaveFile = true
rendTimeType = 2
)
-- function creating two files
fn fn_create_rez_files =
(
createfile rez_w_file_string
createfile rez_h_file_string
)
-- function that writes data to files
fn fn_write_rez_files =
(
rwf = fopen rez_w_file_string "r+"
WriteString rwf (renderwidth as string)
fflush rwf
fclose rwf
rhf = fopen rez_h_file_string "r+"
WriteString rhf (renderheight as string)
fflush rhf
fclose rhf
)
--Function to create files containing width and hight data for render resolution
fn fn_create_ren_res_ini =
(
files = getfiles ("\\\datagssk\\shared\\Jobs\\"+pj_name+"\\max\\Mray\\cam_"+ file_nr + "\\*.ini")
if files.count == 0 then
(
fn_create_rez_files()
fn_write_rez_files()
)
else
(
rwf = fopen rez_w_file_string "r+"
rw = ReadString rwf as integer
fclose rwf
rhf = fopen rez_h_file_string "r+"
rh = ReadString rhf as integer
fclose rhf
)
)
-- function pulls information from hight and width files
fn fn_get_rez_files =
(
rwf = fopen rez_w_file_string "r+"
rw = ReadString rwf as integer
fclose rwf
rhf = fopen rez_h_file_string "r+"
rh = ReadString rhf as integer
fclose rhf
)
--Function to create project directory files
fn create_dir =
(
makedir gi_dir
makedir fg_dir
makedir re_dir
)
--funtion that writes spinner figures to file
fn fn_store_img_res renw renh=
(
rwf = fopen rez_w_file_string "r+"
WriteString rwf (renw as string)
fflush rwf
fclose rwf
rhf = fopen rez_h_file_string "r+"
WriteString rhf (renh as string)
fflush rhf
fclose rhf
)
-- function that creates an ambient occlusion shader, The materials also contains the contour map required for contours.
fn fn_create_white_occluded_mat =
(
occludedmaterial = mrMaterial()
occludedmaterial.name = "Occluded material"
occludedmaterial.surface = Ambient_Reflective_Occlusion__3dsmax()
occludedmaterial.surface.samples = 64
occludedmaterial.surface.max_distance = 0.75
occludedmaterial.Contour = contour_shader_simple()
occludedmaterial.Contour.width = 0.1
setMeditMaterial 5 occludedmaterial
)
--function that resuse GI and FG maps for final renders
fn final_render_reuse_FG_GI =
(
renderengine.FinalGatherFreeze = true
renderengine.PhotonFreeze = true
)
-- function that enables GI
fn fn_enable_GI =
(
renderengine.GlobalIllumEnable = true
renderengine.PhotonFreeze = false
filename = fg_dir+"\\cam_"+file_nr+".pmap"
renderengine.PhotonMapFilename = (filename as string)
)
-- function that disables GI
fn fn_disable_GI =
(
renderengine.GlobalIllumEnable = false
)
-- function that enables final gather
fn fn_enable_FG =
(
renderengine.FinalGatherEnable2 = true
renderengine.UseFinalGatherFile = true
filename = fg_dir+"\\cam_"+file_nr+".fgm"
renderengine.FinalGatherFilename = (filename as string)
)
-- function that switches off final gather
fn fn_disable_FG =
(
renderengine.FinalGatherEnable2 = false
)
-- function that sets the global tuning to low settings
fn fn_global_tune_low =
(
renderengine.softshadowsprecision =0.5
renderengine.glossyreflectionsprecision = 0.75
renderengine.glossyrefractionsprecision = 0.75
renderengine.MinimumSamples = -1
renderengine.MaximumSamples = 1
renderengine.RestoreFinalGatherPreset 2
)
--funtion that sets the global tuning to high settings
fn fn_global_tune_anim =
(
renderengine.softshadowsprecision = 0.5
renderengine.glossyreflectionsprecision = 0.75
renderengine.glossyrefractionsprecision = 0.75
renderengine.MinimumSamples = -1
renderengine.MaximumSamples = 1
renderengine.RestoreFinalGatherPreset 2
)
--funtion that sets the global tuning to high settings
fn fn_global_tune_high =
(
renderengine.softshadowsprecision =1
renderengine.glossyreflectionsprecision = 1.5
renderengine.glossyrefractionsprecision = 1.5
renderengine.MinimumSamples = 0
renderengine.MaximumSamples = 1
renderengine.RestoreFinalGatherPreset 3
renderengine.filter = 1
renderengine.GaussFilterHeight = 3
renderengine.GaussFilterWidth = 3
)
--funtion that sets the global tuning to animation settings
fn fn_global_tune_4a =
(
renderengine.softshadowsprecision =1
renderengine.glossyreflectionsprecision = 1.5
renderengine.glossyrefractionsprecision = 1.5
renderengine.MinimumSamples = 0
renderengine.MaximumSamples = 1
renderengine.RestoreFinalGatherPreset 3
renderengine.filter = 1
renderengine.GaussFilterHeight = 3
renderengine.GaussFilterWidth = 3
)
-- funtion to set up render for contour lines
fn fn_render_contour =
(
renderengine.EnableContours = true
renderengine.MinimumSamples = 0
renderengine.MaximumSamples = 2
renderengine.filter = 1
renderengine.GaussFilterHeight = 3
renderengine.GaussFilterWidth = 3
renderengine.Contour_Output_Shader = contour_only()
rendOutputFilename = re_dir +"\\cam_"+file_nr+"_contour.tif"
rendSaveFile = true
)
--funtion to set upi render of Ambient Occlusion
fn fn_render_AO =
(
renderengine.MinimumSamples = 0
renderengine.MaximumSamples = 2
renderengine.filter = 1
renderengine.GaussFilterHeight = 3
renderengine.GaussFilterWidth = 3
rendOutputFilename = re_dir +"\\cam_"+file_nr+"_AO.tif"
rendSaveFile = true
)
--function to setup combined Ambient occlusion and Contour lines
fn fn_render_combined =
(
renderengine.EnableContours = true
renderengine.Contour_Output_Shader = contour_composite()
rendOutputFilename = re_dir +"\\cam_"+file_nr+"_combined.tif"
rendSaveFile = true
)
-- function that sets the scene up to render for a non - photoreal render such as ambient occlusion or contour
fn fn_non_render_setup rt=
(
occludedmaterial = mrMaterial()
occludedmaterial.name = "Occluded material"
occludedmaterial.surface = Ambient_Reflective_Occlusion__3dsmax()
occludedmaterial.surface.samples = 64
occludedmaterial.surface.max_distance = 0.75
occludedmaterial.Contour = contour_shader_simple()
occludedmaterial.Contour.width = 0.05
setMeditMaterial 5 occludedmaterial
backgroundcolor = (color 255 255 255)
SceneExposureControl.exposureControl.active = false
renderengine.Enable_Material_Override = true
renderengine.Override_Material = occludedmaterial
fn_disable_FG ()
fn_disable_GI ()
if rt == "contour" then
fn_render_contour()
else if rt == "combined" then
fn_render_combined()
else
fn_render_AO ()
)
-- function that sets scene up with only FG for external scenes as as test render at size specified on dialogue
fn fn_render_fg =
(
fn_disable_GI()
renderengine.FinalGatherBounces = 4
renderengine.FinalGatherReflectionDepth = 5
renderengine.SkipFinalRender = false
renderengine.DistributedEnable = false
renderengine.UseFinalGatherFile = false
renderwidth = (rw * 0.15)
renderheight = (rh * 0.15)
fn_global_tune_low ()
)
-- function that sets scene up with FG and GI for internal scenes as as test render at size specified on dialogue
fn fn_render_gi_fg =
(
fn_enable_GI ()
renderengine.SkipFinalRender = false
renderengine.PhotonMapUseFile = false
renderengine.UseFinalGatherFile = false
renderengine.DistributedEnable = false
renderwidth = (rw * 0.15)
renderheight = (rh * 0.15)
fn_global_tune_low ()
)
--function that set scene up to render just the FG and GI pre final render at 100% of final render size.
fn fn_render_pre_final =
(
fn_enable_GI ()
renderengine.SkipFinalRender = true
renderengine.PhotonMapUseFile = true
renderengine.PhotonFreeze = false
renderengine.FinalGatherFreeze = false
renderengine.DeleteFinalGatherFile noprompt:true
renderengine.DistributedEnable = false
filename = fg_dir+"\\cam_"+file_nr+".pmap"
deleteFile filename
renderwidth = (rw * 0.5)
renderheight = (rh * 0.5)
fn_global_tune_low ()
)
--function that set scene up to render just the FG pre final render at 100% of final render size.
fn fn_render_fg_pre_final =
(
fn_disable_GI ()
renderengine.FinalGatherBounces = 4
renderengine.FinalGatherReflectionDepth = 5
renderengine.SkipFinalRender = true
renderengine.PhotonMapUseFile = true
renderengine.PhotonFreeze = false
renderengine.FinalGatherFreeze = false
renderengine.DeleteFinalGatherFile noprompt:true
renderengine.DistributedEnable = false
filename = fg_dir+"\\cam_"+file_nr+".pmap"
deleteFile filename
renderwidth = (rw * 0.5)
renderheight = (rh * 0.5)
fn_global_tune_low ()
)
--function that sets scene up to render just final render at 100% of final render size using only FG.
fn fn_render_fg_final =
(
fn_disable_GI ()
renderengine.SkipFinalRender = false
renderengine.PhotonFreeze = true
renderengine.PhotonMapUseFile = true
renderengine.FinalGatherFreeze = true
renderengine.DistributedEnable = true
renderwidth = rw
renderheight = rh
rendSaveFile = true
fn_global_tune_high ()
)
--function that sets scene up to render just final render at 100% of final render size using FG and GI.
fn fn_render_fg_gi_final =
(
fn_enable_GI ()
renderengine.SkipFinalRender = false
renderengine.PhotonFreeze = true
renderengine.PhotonMapUseFile = true
renderengine.FinalGatherFreeze = true
renderengine.DistributedEnable = true
renderwidth = rw
renderheight = rh
rendSaveFile = true
fn_global_tune_high ()
)
--function that sets scene up to render just final render at 100% of final render size using only FG FOR ANIMATION.
fn fn_render_fg_animation =
(
fn_disable_GI ()
renderengine.SkipFinalRender = false
renderengine.PhotonFreeze = false
renderengine.PhotonMapUseFile = false
renderengine.FinalGatherFreeze = false
renderengine.DistributedEnable = false
renderwidth = rw
renderheight = rh
rendSaveFile = true
fn_global_tune_4a ()
)
--function that sets scene up to render just final render at 100% of final render size using FG and GI FOR ANIMATION.
fn fn_render_fg_gi_animation =
(
fn_enable_GI ()
renderengine.SkipFinalRender = false
renderengine.PhotonFreeze = false
renderengine.PhotonMapUseFile = false
renderengine.FinalGatherFreeze = false
renderengine.DistributedEnable = false
renderwidth = rw
renderheight = rh
rendSaveFile = true
fn_global_tune_4a ()
)
-- function that sets up the scene for a full render pass
fn fn_render_setup pass=
(
backgroundcolor = (color 0 0 0)
SceneExposureControl.exposureControl.active = true
renderengine.Enable_Material_Override = false
renderengine.EnableContours = false
rendOutputFilename = re_dir +"\\cam_"+file_nr+".tif"
rendSaveFile = false
renderengine.FinalGatherBounces = 2
fn_enable_FG ()
if pass == "fg" then
(fn_render_fg())
else if pass == "gi_fg" then
(fn_render_gi_fg())
else if pass == "fg pre final" then
(fn_render_fg_pre_final())
else if pass == "gi + fg pre final" then
(fn_render_pre_final())
else if pass == "fg final render" then
(fn_render_fg_final())
else if pass == "gi + fg final render" then
(fn_render_fg_gi_final())
else if pass == "fg final animation" then
(fn_render_fg_animation())
else if pass == "gi + fg final animaition" then
(fn_render_fg_gi_animaiton())
)
-- funtion that is called when the 'setup scene' button is pressed; it analyses which radial buttons are selected and directs the secen to be setup accordingly.
fn fn_sc_setup k rt pass=
(
renderengine = mental_ray_renderer()
renderers.current = renderengine
exposurecontrol = mrToneMapExposureControl()
if SceneExposureControl.exposureControl != exposurecontrol then SceneExposureControl.exposureControl != exposurecontrol
renderengine.DistributedEnable = false
renderwidth = (rw * k)
renderheight = (rh * k)
rendTimeType = 1
renderPixelAspect = 1
if rt == "render" then
(
fn_render_setup pass
)
else
(
fn_create_white_occluded_mat ()
fn_non_render_setup rt
)
)
--function that sets the scene up for a GI pass in preperation for a static animation
fn fn_set_scene_static_anim_GI=
(
fn_disable_FG ()
fn_enable_GI()
renderengine.PhotonMapUseFile = true
renderengine.SkipFinalRender = true
renderengine.PhotonFreeze = false
filename = fg_dir+"\\cam_"+file_nr+".pmap"
deleteFile filename
renderengine.PhotonMapFilename = filename
renderengine.DistributedEnable = false
rendTimeType = 1
)
--function that sets the scene up for a FG pass in preperation for a static animation
fn fn_set_scene_static_anim_pre_pass path_div=
(
--Set GI settings
renderengine.PhotonMapUseFile = true
renderengine.PhotonFreeze = true
filename = fg_dir+"\\cam_"+file_nr+".pmap"
renderengine.PhotonMapFilename = filename
--SET FG Settings
fn_enable_FG()
renderengine.FGProjectionMode = 0
renderengine.SkipFinalRender = true
renderengine.FinalGatherFreeze = false
renderengine.DeleteFinalGatherFile noprompt:true
filename = fg_dir+"\\cam_"+file_nr+".fgm"
renderengine.FinalGatherFilename = filename
-- set render dialogue settings
rendSaveFile = false
rendTimeType = 2
rendNThFrame = path_div
-- set distributed render
renderengine.DistributedEnable = false
)
--function that sets the scene up for a final render pass for a static animation
fn fn_set_scene_static_anim_final=
(
--set GI Settings
fn_enable_GI()
renderengine.PhotonMapUseFile = true
renderengine.PhotonFreeze = true
filename = fg_dir+"\\cam_"+file_nr+".pmap"
renderengine.PhotonMapFilename = filename
--set FG settings
renderengine.UseFinalGatherFile = true
filename = fg_dir+"\\cam_"+file_nr+".fgm"
renderengine.FinalGatherFilename = filename
renderengine.FinalGatherFreeze = true
--set MR render engine stttings
renderengine.SkipFinalRender = false
--set render dialogue settings
rendOutputFilename = re_dir +"\\cam_"+file_nr+".rpf"
rendSaveFile = true
rendTimeType = 2
rendNThFrame = 1
)
create_dir () -- create folders for output files
fn_create_ren_res_ini () -- either creates text files to hold the render resolution sizes. if none are already available or pulls the data from existing files
----------------------------------------------------------------------------------------------------------------------------------------
rollout project_settings "Project Settings"
(
Group "Project"
(
edittext project_name "" text:pj_name width:370
)
Group "Files"
(
label gi_dir_lbl "Global Illumination" align:#left
edittext browse_gi_dir_lbl "" text:gi_dir width:320
button browse_gi_dir "Browse" pos:[340,88]
label fg_dir_lbl "Final Gather Map" align:#left
edittext browse_fg_dir_lbl "" text:fg_dir width:320
button browse_fg_dir "Browse" pos:[340,130]
label re_dir_lbl "Render" align:#left
edittext browse_re_dir_lbl "" text:re_dir width:320
button browse_re_dir "Browse" pos:[340,172]
)
)
rollout still_image_setup "Still Image Setup" width:400 height:440
(
-----User Interface
Group "Render Settings"
(
label re_w_lbl "Width" align:#left
spinner re_w range:[0,10000,rw] type:#integer pos:[55,25] fieldwidth:45
label re_h_lbl "Height" align:#left
spinner re_h range:[0,10000,rh] type:#integer pos:[55,45] fieldwidth:45
groupbox gb_re_type "Render Type" pos:[120,20] width:280 height:40
radiobuttons rdo_re_type labels:#("Render","Occluded","Contour","Combined") pos:[125,40]
label lbl3 "\nSelect the type or Indirect Illumination Setup You require:" align:#left width:200 height:40 enabled:true
radiobuttons rdo_pass labels:#("FG (Test Render)","GI+FG (Test Render)","FG Calculation (For Final)","GI+FG Calculation (For Final)","Final Render (FG)","Final Render (GI+FG)","Final Animation (FG)","Final Animation (GI+FG)") default:2 columns:2 align:#left enabled:true
groupbox gb_pass_rez width:255 height:30 align:#left
radiobuttons rdo_pass_rez labels:#("20%","50%","75%","100%") default:4 pos:[20,175]
button si_setup "Setup Scene" width:80 tooltip:"Set up the scene with the parameters chosen" align:#right pos:[310,175]
)
-----Button Actions
---- File path buttons
On browse_gi_dir pressed do
(
gi_dir = getSavePath initialdir:gi_dir
browse_gi_dir_lbl.text = (gi_dir as string)
)
On browse_fg_dir pressed do
(
fg_dir = getSavePath initialdir:fg_dir
browse_fg_dir_lbl.text = (fg_dir as string)
)
On browse_re_dir pressed do
(
re_dir = getSavePath initialdir:re_dir
browse_re_dir_lbl.text = (re_dir as string)
)
----- Radio Button Pushed
on rdo_re_type changed state do
(
if rdo_re_type.state > 1 then
(
rdo_pass.state = 0
rdo_pass.enabled = false
lbl3.enabled = false
)
else
(
rdo_pass.state = 2
rdo_pass.enabled = true
lbl3.enabled = true
)
)
-----Render Setup buttons
on si_setup pressed do
(
renderscenedialog.close() -- close render dialogue
-- passses values of dialogue to global variables
rw = re_w.value --gets value of width spinner
rh = re_h.value --gets value of hight spinner
case rdo_pass_rez.state of --gets state of pass resolution as passes a multiplier to local K
(
1: local k = 0.2
2: local k = 0.5
3: local k = 0.75
4: local k = 1
)
case rdo_re_type.state of --gets state of Render Type as string to local rt
(
1: local rt = "render"
2: local rt = "occludded"
3: local rt = "contour"
4: local rt = "combined"
)
case rdo_pass.state of --gets state of Render pass as string to local pass
(
1: local pass = "fg"
2: local pass = "gi_fg"
3: local pass = "fg pre final"
4: local pass = "gi + fg pre final"
5: local pass = "fg final render"
6: local pass = "gi + fg final render"
7: local pass = "fg final animation"
8: local pass = "gi + fg final animation"
)
-- activates funtions
fn_store_img_res rw rh --stores current spinner values to file.
fn_sc_setup k rt pass -- sets up scene
renderscenedialog.open() -- open render dialogue
)
)
theFloater = newRolloutFloater "MR Render Setups" 420 350
addRollout project_settings theFloater rolledUp:true
addRollout still_image_setup theFloater rolledUp: true
)
)
Anubis · 2013-02-19