MentalRay Setup Script - Fine in 2012 - Errors in 2013
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 ) ) <code>

Comments
one hint
I wonder how it ever works (in any Max), as there is incorrect function at line 75 (fn_create_rez_files) that use
CreateFile()function to create 2 files, butCreateFile()returnFileStreamthat SHOULD be closed.If by chance this script works in Max 2012 its probably because that 2 ini files already exist and that function actually never called ;-)
my recent MAXScripts RSS (archive here)