global crntools --main rollout global a --general rollout global b --IR rollout global c --material rollout global d --rend. setup rollout global f --environment rollout global g --DR rollout global h --author credit rollout global i --rollout string list for VFB autosave global j --rollout UHD cache global k --rollout bucket engine global presetoncams --rollout preset on cameras global presetoncams_UHD --rollout UHD cache for preset on cameras global presetoncams_bucket --rollout Bucket engine for preset on cameras global FakeIncExc --rollout fake include/exclude global customization --rollout option customize ---------------------------------FUNCTIONS fn OnOffBtn_WhenRender_fn state= ( if b.open == true do ( b.dockedIRinPT_btn.enabled = b.IRinPT_btn.enabled = b.startIR_btn.enabled = state ) ) fn CheckRendererOnFileOpen_fn= ( if iscoronaascurrent() == true then updateAllCtrls_fn() else ( showhideAllRolls false; OnOffCtrls_fn false; coronaquery() ) ) fn OnOffCtrls_fn states= ( for i in CrnTools.sr1.rollouts do i.controls.enabled = CrnTools.controls.enabled = states) fn OnOffIRPT_fn state= ( if b.open == true do b.dockedIRinPT_btn.enabled = b.IRinPT_btn.enabled = state ) --UPDATE CTRLS fn CtrlsValToRendSetup_fn Ctrls RendSetup= ( if Ctrls.value != RendSetup do (Ctrls.value = RendSetup)) fn CtrlsStateToRendSetup_fn Ctrls RendSetup= ( if Ctrls.state != RendSetup do (Ctrls.state = RendSetup)) fn CtrlsTextToRendSetup_fn Ctrls RendSetup= ( if Ctrls.text != RendSetup do (Ctrls.text = RendSetup)) fn CtrlsMapToRendSetup_fn Ctrls RendSetup= ( if Ctrls.map != RendSetup do (Ctrls.map = RendSetup)) fn CtrlsColorToRendSetup_fn Ctrls RendSetup= ( if Ctrls.Color != RendSetup do (Ctrls.Color = RendSetup)) fn updateAllCtrls_fn = ( start=timestamp(); print start ( ( if a.isdisplayed == true do -----------------update rollout A ( CtrlsValToRendSetup_fn a.w renderwidth CtrlsValToRendSetup_fn a.h renderheight CtrlsValToRendSetup_fn a.r getrendimageaspect() CtrlsValToRendSetup_fn a.autobackuptime_SPN autosave.Interval CtrlsStateToRendSetup_fn a.autobackup_CB autosave.enable CtrlsTextToRendSetup_fn a.coronaautosave_ET renderers.current.vfb_autosave_filename ( if a.saverend_CB.state != rendSaveFile do ( a.saverend_CB.state=rendSaveFile if a.saverend_CB.state == on then ( a.saverend_ET.enabled = true a.edittxtsaverend_BTN.enabled = true a.browsesaverend_BTN.enabled = true ) else ( a.saverend_ET.enabled = false a.edittxtsaverend_BTN.enabled = false a.browsesaverend_BTN.enabled = false ) ) ) ) ) ( if b.isDisplayed == true do -----------------update rollout B ( CtrlsValToRendSetup_fn b.IRpasses_SPN renderers.current.interactive_passLimit CtrlsValToRendSetup_fn b.IRthread_SPN renderers.current.interactive_numThreads CtrlsStateToRendSetup_fn b.clearVFB_IR renderers.current.interactive_clearVfb ( IRpsCtrl = b.IRpasses_SPN if renderers.current.interactive_passLimit == 0 then ( b.IRpasses_CB.state = off IRpsCtrl.enabled = false ) else ( IRpsCtrl.value = renderers.current.interactive_passLimit IRpsCtrl.enabled = true ) ) ) ) ( if c.isDisplayed do -----------------udpate rollout C ( CtrlsStateToRendSetup_fn c.Displace_Cbtn renderDisplacements ( displctrl = c.displacesize_SPN if renderers.current.geometry_displace_subdivType != 1 then ( c.Displacesize_btn.text = "screen size" displctrl.value = renderers.current.geometry_displace_maxSizeWorld displctrl.tooltip = "displacement subdivs in world size" displctrl.caption = "mm" ) else ( c.Displacesize_btn.text = "world size" displctrl.value = renderers.current.geometry_displace_maxSizeScreen displctrl.tooltip = "displacement subdivs in screen size (px)" displctrl.caption = "px" ) ) ( if renderers.current.mtlOverride_enabled != true then ( c.mtlovrdmtl_BTN.enabled = false c.Mtl_override_btn.text = "Mtl.override is off" ) else ( c.mtlovrdmtl_BTN.enabled = true if renderers.current.mtlOverride_preserveDisplacement == false then c.Mtl_override_btn.text = "Mtl.override is on" else c.Mtl_override_btn.text = "Mtl.override is on with displ" ) ) ( if c.mtlovrdmtl_BTN.material != renderers.current.mtlOverride do ( c.mtlovrdmtl_BTN.material = renderers.current.mtlOverride c.mtlovrdmtl_BTN.text = classof c.mtlovrdmtl_BTN.material as string + " " + "(" + c.mtlovrdmtl_BTN.material.name + ")" as string print "material of mtloverride updated" ) ) ) ) ( if d.isDisplayed == true do-----------------update rollout D ( CtrlsValToRendSetup_fn d.progressivepasslim_SPN renderers.current.progressive_passLimit CtrlsValToRendSetup_fn d.LSM_SPN renderers.current.lights_samplesMult CtrlsValToRendSetup_fn d.msi_SPN renderers.current.shading_maxSampleIntensity CtrlsValToRendSetup_fn d.giaa_SPN renderers.current.shading_giToAaRatio CtrlsValToRendSetup_fn d.maxraydepth_SPN renderers.current.shading_maxRayDepth ( rentypeCtrl=d.areatorender case getRenderType() of ( #view: ( if rentypeCtrl.selection!=1 do rentypeCtrl.selection=1 ) #region: ( if rentypeCtrl.selection!=2 do rentypeCtrl.selection=2 ) #crop: ( if rentypeCtrl.selection!=3 do rentypeCtrl.selection=3 ) #blowup: ( if rentypeCtrl.selection!=4 do rentypeCtrl.selection=4 ) ) ) ( renEngineCtrl = d.renderengine_DDL case renderers.current.shading_renderEngine of ( 2: ( if renEngineCtrl.selection != 1 do (renEngineCtrl.selection = 1 ; if d.isDisplayed == true then removesubrollout CrnTools.SR1 k ) ) 0: ( if renEngineCtrl.selection != 2 do (renEngineCtrl.selection = 2 ; if d.isDisplayed == true then addsubrollout CrnTools.SR1 k) ) ) ) ( secSolverCtrl = d.secondarysolver_DDL case renderers.current.shading_secondarySolver of ( 0: ( if secSolverCtrl.selection != 1 do (secSolverCtrl.selection = 1 ; if d.isDisplayed == true then removesubrollout CrnTools.SR1 j; ( b.IRinPT_btn.enabled = true; b.dockedIRinPT_btn.enabled = true ) ) ) 1: ( if secSolverCtrl.selection != 2 do (secSolverCtrl.selection = 2 ; if d.isDisplayed == true then removesubrollout CrnTools.SR1 j; ( b.IRinPT_btn.enabled = false; b.dockedIRinPT_btn.enabled = false ) ) ) 4: ( if secSolverCtrl.selection != 3 do (secSolverCtrl.selection = 3 ; if d.isDisplayed == true then addsubrollout CrnTools.SR1 j; ( b.IRinPT_btn.enabled = true; b.dockedIRinPT_btn.enabled = true ) ) ) ) ) ( renSelectCtrl = d.renderselected_DDL objIDCtrl = d.objectID_SPN incexcCtrl = d.incexclist_BTN addincexcCtrl = d.addincexclist_BTN case renderers.current.renderSelected_mode of ( 0: ( if renSelectCtrl.selection != 1 do (renSelectCtrl.selection = 1; objIDCtrl.visible = incexcCtrl.visible = addincexcCtrl.visible = false ) ) 3: ( if renSelectCtrl.selection != 2 do (renSelectCtrl.selection = 2; objIDCtrl.visible = false; incexcCtrl.visible = addincexcCtrl.visible = true ) ) 1: ( if renSelectCtrl.selection != 3 do (renSelectCtrl.selection = 3; objIDCtrl.visible = incexcCtrl.visible = addincexcCtrl.visible = false ) ) 2: ( if renSelectCtrl.selection != 4 do (renSelectCtrl.selection = 4; objIDCtrl.visible = true; incexcCtrl.visible = addincexcCtrl.visible = false ) ) ) ) CtrlsStateToRendSetup_fn d.embree_memory_CB renderers.current.geometry_embree_lowMemory CtrlsStateToRendSetup_fn d.embree_quality_CB renderers.current.geometry_embree_highQuality CtrlsStateToRendSetup_fn d.embree_precise_CB renderers.current.geometry_embree_precise CtrlsStateToRendSetup_fn d.clearVFB_render renderers.current.vfb_clearBetweenRenders CtrlsValToRendSetup_fn d.intres_SPN renderers.current.image_internalResMult d.proglimits_CB.checked = ((renderers.current.progressive_passLimit != 0) or (renderers.current.progressive_timeLimit != 0)) d.TimeLimH.value = renderers.current.progressive_timeLimit/3600000 d.TimeLimM.value = (renderers.current.progressive_timeLimit - d.TimeLimH.value*3600000)/60000 d.TimeLimS.value = (renderers.current.progressive_timeLimit - d.TimeLimH.value*3600000 - d.TimeLimM.value*60000)/1000 ) ) ( if f.isDisplayed == true do--------------update rollout F ( CtrlsStateToRendSetup_fn f.refractoverrideCB renderers.current.bg_overriderefract CtrlsMapToRendSetup_fn f.refractionoverrideMapB renderers.current.bg_texmaprefract CtrlsColorToRendSetup_fn f.refractionoverrideCP renderers.current.bg_colorrefract CtrlsStateToRendSetup_fn f.reflectoverrideCB renderers.current.bg_overridereflect CtrlsMapToRendSetup_fn f.reflectionoverrideMapB renderers.current.bg_texmapreflect CtrlsColorToRendSetup_fn f.reflectionoverrideCP renderers.current.bg_colorreflect CtrlsColorToRendSetup_fn f.directvisoverrideCP renderers.current.bg_colordirect CtrlsMapToRendSetup_fn f.directvisoverrideMapB renderers.current.bg_texmapdirect CtrlsStateToRendSetup_fn f.directvisoverrideMapCB renderers.current.bg_texmapusedirect CtrlsStateToRendSetup_fn f.directvisoverrideCB renderers.current.bg_overridedirect CtrlsColorToRendSetup_fn f.sceneenvironmentCP renderers.current.bg_color CtrlsMapToRendSetup_fn f.environmentMapB renderers.current.bg_texmap CtrlsMapToRendSetup_fn f.environmentMapB renderers.current.bg_texmap CtrlsStateToRendSetup_fn f.environtmentmapCB renderers.current.bg_texmapusemain ( maxenvCtrl = f.maxenvironment case renderers.current.bg_source of ( 0 : ( if maxenvCtrl.state != on do (maxenvCtrl.state = on) ) 1 : ( if maxenvCtrl.state != off do (maxenvCtrl.state = off ) ) ) ) ) ) ( if k.isDisplayed == true do -------------update rollout K ( CtrlsValToRendSetup_fn k.bucketsamples_SPN renderers.current.bucket_samplesPerIteration CtrlsValToRendSetup_fn k.bucketpasses_SPN renderers.current.bucket_passes CtrlsValToRendSetup_fn k.bucketthrshld_SPN renderers.current.bucket_adaptiveThreshold ) ) ( if j.isDisplayed == true do -------------update rollout J ( CtrlsValToRendSetup_fn j.UHDprec_SPN renderers.current.gi_uhdcache_precision ( UHDpresetCtrl = j.UHDpreset_CB case renderers.current.gi_uhdcache_preset of ( 0: ( if UHDpresetCtrl.text != "still frame preset" do (UHDpresetCtrl.text = "still frame preset") ) 1: ( if UHDpresetCtrl.text != "animation preset" do (UHDpresetCtrl.text = "animation preset") ) ) ) ) ) ( if g.isDisplayed == true do -------------update rollout G ( CtrlsStateToRendSetup_fn g.enableDR_CB renderers.current.dr_enable ) ) ) end=timestamp(); print end print ("values updated in " + ((end-start) as string) + " ms") print "dionchstudio controls value is updated" ) fn runcoronaconverter = ( srchDir = GetDir #scripts scripts = getfiles (srchDir + "\\CoronaRenderer\\" + "CoronaConverter_v*.ms") if scripts.count != 0 then ( sort scripts latest = scripts[scripts.count] filein latest ) else (messageBox "No CoronaConverter script file found in Scripts\CoronaRenderer directory" title:"Error") ) fn coronaquery = ( if querybox "This script works with corona-renderer only.\nYou can convert your scene and change your current renderer by click \"YES\" button below and run this script again" beep:true then runcoronaconverter() ) fn iscoronaascurrent = (matchpattern (renderers.production as string) pattern: "corona*") fn checkrenderer = (if iscoronaascurrent() == true then true else false) fn AddSubRolls_fn roll = (addsubrollout CrnTools.sr1 roll) fn RemoveSubRolls_fn roll = (if roll.isdisplayed == true do removeSubRollout CrnTools.SR1 roll) fn AddBucketOrUHDRolls_fn rollUHD rollBucket = ( if renderers.current.shading_secondarySolver == 4 do AddSubRolls_fn rollUHD if renderers.current.shading_renderEngine == 0 do AddSubRolls_fn rollBucket ) --fn PRESET ON CAMS fn updatecamlist_fn = ( camcount = cameras.count PresetOnCams.camlist.items= ( for i=1 to camcount collect ( camitem=cameras[i] if classof camitem == Targetobject do continue; ( camitem.name ) ) ) ) fn createdcams_fn= ( for i in (getcurrentselection()) do ( if superclassof i == camera do updatecamlist_fn() ) ) fn ResetRollControls = ( for i = 1 to 11 do update1; i) fn SelectedCam = ( getnodebyname PresetOnCams.camlist.selected ) fn EnableDisablectrls = (if PresetOnCams.enablesetup.text == "Setup is Disabled" then false else true) fn UpdateRollControls = ( for y = 1 to 11 do ( execute (getappdata (selectedcam()) (if getappdata (selectedcam()) y == undefined do continue; y )) ) ) fn SelectCamsNode = (for o in cameras where o.name == PresetOnCams.camlist.selected do select o) fn SetCamView = (viewport.setCamera (SelectedCam())) fn EnableControls bool capt= ( ctrls = presetoncams.controls enablebtn = ctrls[2] for i = 2 to ctrls.count do ctrls[i].enabled = bool; enablebtn.enabled = true enablebtn.text = capt; setAppData (selectedcam()) -10000 capt ) fn SetRollcontrolsToRendcurrents ctrlsval rendcurrentsval= (PresetOnCams.ctrlsval = renderers.current.rendcurrentsval) fn h_isWdivR = (PresetOnCams.h.value = (PresetOnCams.w.value) as float / (PresetOnCams.r.value) as float) fn r_isWdivH = (PresetOnCams.r.value = (PresetOnCams.w.value) as float / (PresetOnCams.h.value) as float) fn w_isRtimH = (PresetOnCams.w.value = (PresetOnCams.r.value) as float * (PresetOnCams.h.value) as float) fn setappdataVal ID strings ctrl = (setAppData (selectedcam()) ID (strings + (ctrl.value as string))) fn setappdataState ID strings ctrl = (setAppData (selectedcam()) ID (strings + (ctrl.state as string))) fn setappdataSelection ID strings ctrl = (setAppData (selectedcam()) ID (strings + (ctrl.selection as string))) fn setappdataText ID strings ctrl = (setAppData (selectedcam()) ID (strings + (ctrl.text as string))) --fn TOOLS fn allobjasBox state = ( for i in $* where i.boxmode != state do i.boxmode = state ) fn TurnoffBoxMode = (for i in (getcurrentselection()) do i.boxmode = false) fn wirecolorsel = ( if $ != undefined then ( for i in (getcurrentselection()) do i.wirecolor = (random black white) ) else messagebox "nothing selected" title:c.wireframecol_btn.text ) fn wirecolorall = ( for i in $* do i.wirecolor = (random black white) ) fn showmodifypanel_fn = ( showmodpanel = (if getCommandPanelTaskMode() != #modify then (max modify mode)) if selection.count != 0 then (showmodpanel) else (max create mode) ) --fn FAKE INC/EXC fn allobjectslist = (for i in $* where ((superclassof i == camera) or (classof i == targetobject)) != true collect i.name) fn rendselectedlist = (for i in renderers.current.renderSelected_list collect i.name) fn mtloverridelist = (for i in renderers.current.overrideMtl_exclude collect i.name) fn objectslistitem array1 array2 = ( myarray = #() --i didn't write this code, copied from some forum.. sorry i can't remember where it was. for i in array1 do ( if (finditem array2 i) == 0 then append myarray i ) return myarray ) fn MoveSelItem list1 list2 = ( for i in list1.selection do (appendifunique list2.items list1.items[i] ) -- again, i didn't write this code, copied from some forum.. sorry i can't remember where it was. list1.items = for i in (-list1.selection) collect list1.items[i] list2.items = sort list2.items ) fn AddSelObjectToChoosenObj = ( for i in (getcurrentselection()) do (appendifunique FakeIncExc.choosenobj.items i.name ) FakeIncExc.objectslist.items=(sort (objectslistitem (allobjectslist()) (rendselectedlist()))) FakeIncExc.choosenobj.items = sort FakeIncExc.choosenobj.items ) fn WhenFocusedToAList list1 string = ( ctrl=FakeIncExc.adds if list1.selection.numberset != 0 then list1.selection = #{}; if ctrl.text != string then ctrl.text = string ) fn IncToObjlist superclass = (for i in ($* as array) where ((superclassof i == superclass) and (classof i != targetobject)) == true collect i.name) fn ExcToObjlist superclass = (for i in ($* as array) where ((superclassof i == superclass) and (superclassof i == camera) and (classof i == targetobject)) == false collect i.name) fn ObjListFilter filtername = (for i in FakeIncExc.controls where ((matchpattern i.name pattern:"filter*" == true) and ((matchpattern i.name pattern:filtername == false))) == true do i.checked = false) fn rendselectedIncExcText = ( renderSelected_incmode = ( case renderers.current.renderSelected_includeMode of ( true: "inc obj"; false: "exc obj" ) ) d.incexclist_btn.text = ( (renderers.current.renderSelected_list.count)as string + " " + (renderSelected_incmode) ) ) fn mtloverrideIncExcText = ( mtloverride_incmode = ( case renderers.current.mtlOverride_includeMode of ( true: "inc obj"; false: "exc obj" ) ) c.incexclist2_btn.text = ( (renderers.current.overrideMtl_exclude.count)as string + " " + (mtloverride_incmode) ) ) -------------- FN CUSTOMIZATION fn getdefrolls rolls=(getinisetting (getmaxinifile()) "dionchstudio-coronatools" rolls) fn defaultrolls = (for i = 1 to 6 do execute (getdefrolls (("roll" + i as string) as name))) fn setMySetting_fn keystring keyvalstring = ( setinisetting (getMAXIniFile()) "DionchStudio-CoronaTools" keystring keyvalstring ) fn delMySetting_fn keystring = ( delinisetting (getmaxinifile()) "Dionchstudio-coronatools" keystring ) fn getMySetting_fn keystring = ( getinisetting (getmaxinifile()) "Dionchstudio-coronatools" keystring ) fn setRollState_fn roll string = ( if getdefrolls roll == string then true else false ) fn SpinnerDefaultVal_fn keystring = (if getMySetting_fn keystring == "" then 1 else (getMySetting_fn keystring) as integer) fn setoutputpreset_fn ctrl = ( setMySetting_fn (ctrl.name as name) (ctrl.value as string) ) fn setmypresetname ctrl = (setMySetting_fn (ctrl.name as name) ctrl.text) fn notworkingmessage_fn = messagebox "currently not working" if iscoronaascurrent() == true then ( --------------------------------------------------------------------------------------- ROLLOUT SUBMENU rcMenu EnvMapBtn ( menuItem EnvMapBtn1 "copy" menuItem EnvMapBtn2 "paste" seperator menuSep01 menuItem EnvMapBtn3 "clear map" seperator menuSep02 menuItem EnvMapBtn4 "mount to ME" on EnvMapBtn1 picked do ( notworkingmessage_fn() ) on EnvMapBtn2 picked do ( notworkingmessage_fn() ) on EnvMapBtn3 picked do ( notworkingmessage_fn() ) on EnvMapBtn4 picked do ( notworkingmessage_fn() ) ) rcMenu dispmtloverride ( menuItem onoffdispl "preserve displacement" checked:( if renderers.current.mtlOverride_preserveDisplacement == false then false else true ) on onoffdispl picked do ( if renderers.current.mtlOverride_preserveDisplacement == false then ( renderers.current.mtlOverride_preserveDisplacement = true onoffdispl.checked = true ( if renderers.current.mtlOverride_enabled == true then ( c.Mtl_override_btn.text = "Mtl.override is on with displ" ) else ( c.Mtl_override_btn.text = "Mtl.override is off" ) ) ) else ( renderers.current.mtlOverride_preserveDisplacement = false onoffdispl.checked = false ( if renderers.current.mtlOverride_enabled == true then ( c.Mtl_override_btn.text = "Mtl.override is on" ) else ( c.Mtl_override_btn.text = "Mtl.override is off" ) ) ) ) ) fn DRaddressesupdt = (renderers.current.dr_slaveAddresses = g.DRslaveaddresses_LB.items) fn ClearItemOnDRlist = ( g.DRslaveaddresses_LB.items = deleteItem g.DRslaveaddresses_LB.items g.DRslaveaddresses_LB.selection DRaddressesupdt() ) rcMenu DRcombobox ( menuItem cleartxt "clear selected" on cleartxt picked do ( ClearItemOnDRlist() ) ) --------------------------------------------------------------------------------------- DECLARE RC MENU fn showhideAllRolls state = (for i in CrnTools.controls do ( if matchpattern i.name pattern:"*tab" != true do continue; i.changed state )) rcMenu mainmenu ( menuItem authors "about" menuItem hideall "-" enabled: (if renderSceneDialog.isOpen() == true then false else true) menuItem shwall "+" enabled: (if renderSceneDialog.isOpen() == true then false else true) menuitem closedialog "x" menuitem superexpert "¤" menuitem option "opt" on authors picked do ( createdialog h width:400 modal:true) on hideall picked do ( showhideAllRolls false ) on shwall picked do ( showhideAllRolls true ) on closedialog picked do ( cui.UnRegisterDialogBar CrnTools; destroydialog CrnTools ) on superexpert picked do try ( if cui.getExpertMode() == false then ( cui.expertModeOn() cui.showToolbar "dionchstudio" cui.commandPanelOpen = true StatusPanel.visible = false timeSlider.setVisible false trackbar.visible = false ) else ( if cui.getExpertMode() == true then (cui.expertModeOff()) StatusPanel.visible = true timeSlider.setVisible true trackbar.visible = true ) ) catch() on option picked do ( createdialog customization width:250 modal:true) ) --------------------------------------------------------------------------------------- UNREG & REMOVE EXISTING DIALOG try (cui.UnRegisterDialogBar CrnTools) catch() try (cui.FloatDialogBar CrnTools) catch() try (destroydialog CrnTools) catch() --------------------------------------------------------------------------------------- ROLLOUT CrnTools rollout CrnTools "Dionch Studio" height:1000 width:160 ( local zw = 54 --tabs pos checkbutton a_tab "General" across:3 enabled:(checkrenderer()) offset:[-7,0] width:zw height:16 on a_tab changed state do try ( if state == on then ( AddSubRolls_fn a ) else ( RemoveSubRolls_fn a if j.open == true do removeSubRollout CrnTools.SR1 j if k.open ==true do removeSubRollout CrnTools.SR1 k ) ) catch () checkbutton b_tab "IR & DR" enabled:(checkrenderer()) pos:(a_tab.pos+[zw,0]) width:(zw) height:16 on b_tab changed state do try ( if state == on then ( AddSubRolls_fn b AddSubRolls_fn g ) else ( RemoveSubRolls_fn b RemoveSubRolls_fn g ) ) catch () checkbutton c_tab "Tools" enabled:(checkrenderer()) pos: (b_tab.pos+[zw,0]) width: (zw) height: 16 on c_tab changed state do try ( if state == on then ( AddSubRolls_fn c ) else ( RemoveSubRolls_fn c ) ) catch () checkbutton d_tab "R.setup" across: 3 enabled:(checkrenderer()) align:#center width:(zw) height:16 pos:(a_tab.pos+[0,16]) on d_tab changed state do try ( start= timestamp() if state == on then ( AddSubRolls_fn d AddBucketOrUHDRolls_fn j k ) else ( RemoveSubRolls_fn d RemoveSubRolls_fn k RemoveSubRolls_fn j ) end=timestamp() print ("rollout rendersetup takes " + (end-start) as string + "ms") ) catch () checkbutton f_tab "Env" enabled:(checkrenderer()) align:#center width:(zw) height: 16 pos:(b_tab.pos+[0,16]) on f_tab changed state do try ( if state == on then ( AddSubRolls_fn f ) else ( RemoveSubRolls_fn f ) ) catch () checkbutton g_tab "Cams" enabled:(checkrenderer()) align:#center width:(zw) height: 16 pos:(c_tab.pos+[0,16]) on g_tab changed state do try ( if state == on then ( AddSubRolls_fn PresetOnCams ) else ( RemoveSubRolls_fn PresetOnCams RemoveSubRolls_fn presetoncams_UHD RemoveSubRolls_fn presetoncams_bucket ) ) catch () on CrnTools close do try ( callbacks.removeScripts id:#disablerolloutscontrols callbacks.removeScripts id:#renddialogupdate callbacks.removeScripts id:#IRnotification2 if customization.isdisplayed == true do destroydialog customization if fakeincexc.isdisplayed == true do destroydialog fakeincexc ) catch() --------------------------------------------------------------------------------------- SUBROLLOUT subrollout SR1 "" height:500 width:(CrnTools.width+3) align:#center --------------------------------------------------------------------------------------- CALLBACKS on CrnTools open do ( if renderSceneDialog.isOpen() == true do (OnOffCtrls_fn false) ------------------------------------------------------------------------ disable/enable rollout controls ) ) ------------------------------------------------------------------------------------------------------------------- batas rollout rollout a "General" ( fn rendwidthis_w = (renderwidth = a.w.value) fn rendheightis_h = (renderheight = a.h.value) fn h_isWdivR = (a.h.value = (a.w.value) as float / (a.r.value) as float) fn r_isWdivH = (a.r.value = (a.w.value) as float / (a.h.value) as float) fn w_isRtimH = (a.w.value = (a.r.value) as float * (a.h.value) as float) spinner w "W" range:[1,10000,renderwidth] width:55 type:#integer pos: [7,3] tooltip: "output width" on w changed val do ( rendwidthis_w(); ( if a.rb.state == on then ( h_isWdivR() rendheightis_h() ) else ( r_isWdivH() rendheightis_h() ) ) a.outputsizepreset.selection = 1 ) spinner h "H" range:[1,10000,renderheight] width:55 type:#integer tooltip: "output height" pos: (w.pos+[-42,20]) on h changed val do ( rendheightis_h() ( if a.rb.state == on then ( w_isRtimH() rendwidthis_w() ) else ( r_isWdivH() rendwidthis_w() ) ) a.outputsizepreset.selection = 1 ) spinner r "R" range:[0,10000,getrendimageaspect()] width:50 type:#float tooltip: "image aspect ratio" pos: (w.pos+[25,0]) on r changed val do ( rendheightis_h() h_isWdivR() a.outputsizepreset.selection = 1 ) label rbl "" pos: (r.pos+[-15,2]) visible: true checkbutton rb "" pos: (r.pos+[15,0]) width:16 height:16 tooltip: "lock/release image aspect ratio" images: #("LockButton_i.bmp",undefined,1,1,1,1,1) on rb changed state do if state == on then ( rbl.visible=true r.visible = false rbl.text="R: " + r.value as string ) else ( if state == off then ( rbl.visible = false r.visible=true ) ) dropdownlist outputsizepreset "" items:#("custom",(getMySetting_fn #outputpreset1),(getMySetting_fn #outputpreset2),(getMySetting_fn #outputpreset3),(getMySetting_fn #outputpreset4)) width: 70 height: 15 pos: (r.pos+[-40,20]) tooltip: "imageaspect preset" on outputsizepreset selected sell do ( width = a.w height = a.h case outputsizepreset.selection of ( 1: (r.visible = true; rbl.visible=false; a.rb.state = off) 2: ( renderwidth= width.value= SpinnerDefaultVal_fn #width1; renderheight= height.value= SpinnerDefaultVal_fn #height1; r_isWdivH() ) 3: ( renderwidth= width.value= SpinnerDefaultVal_fn #width2; renderheight= height.value= SpinnerDefaultVal_fn #height2; r_isWdivH() ) 4: ( renderwidth= width.value= SpinnerDefaultVal_fn #width3; renderheight= height.value= SpinnerDefaultVal_fn #height3; r_isWdivH() ) 5: ( renderwidth= width.value= SpinnerDefaultVal_fn #width4; renderheight= height.value= SpinnerDefaultVal_fn #height4; r_isWdivH() ) ) ) spinner autobackuptime_SPN "" range:[0,100,autosave.Interval] width:45 offset:[10,0] enabled: autosave.enable type:#integer tooltip: "autobackup minute time interval" on autobackuptime_SPN changed val do (autosave.Interval = autobackuptime_SPN.value) checkbox autobackup_CB "autobackup" offset:[-5,-20] checked: autosave.enable tooltip: "enable/disable autobackup" on autobackup_CB changed state do ( autosave.enable = state if autobackup_CB.state == on then (autobackuptime_SPN.enabled = true) else (autobackuptime_SPN.enabled = false) ) ------------------------------------------------------------------corona AUTOSAVE checkbox coronaautosave_CB "VFB autosave" offset:[-5,0] checked: renderers.current.vfb_autosave_enable tooltip: "corona output autosave, during rendering VFB will be automatically saved by schedule\nuseful for \"resume from file\" feature (.exr)" on coronaautosave_CB changed state do ( renderers.current.vfb_autosave_enable = state if coronaautosave_CB.state == on then ( a.coronaautosave_ET.enabled = true a.edittxtcoronaautosave_BTN.enabled = true a.browsecoronaautosave_BTN.enabled = true renderers.current.vfb_autosave_enable = true ) else ( a.coronaautosave_ET.enabled = false a.edittxtcoronaautosave_BTN.enabled = false a.browsecoronaautosave_BTN.enabled = false renderers.current.vfb_autosave_enable = false ) ) button cleartxtcoronaautosave_BTN "x" pos: (coronaautosave_CB.pos+[90,0]) height: 15 width: 15 tooltip: "clear autosave text" on cleartxtcoronaautosave_BTN pressed do ( a.coronaautosave_ET.text = "" renderers.current.vfb_autosave_filename = "" ) button edittxtcoronaautosave_BTN "+" enabled:renderers.current.vfb_autosave_enable height: 15 width: 15 pos: (cleartxtcoronaautosave_BTN.pos+[16,0]) tooltip: "add special sequences to autosave text" on edittxtcoronaautosave_BTN pressed do ( createdialog i width: 250 ) button browsecoronaautosave_BTN ".." enabled:renderers.current.vfb_autosave_enable height: 15 width: 15 pos: (edittxtcoronaautosave_BTN.pos+[16,0]) tooltip: "choose folder path" on browsecoronaautosave_BTN pressed do ( if pathConfig.isAbsolutePath (a.coronaautosave_ET.text as string) == false then (a.coronaautosave_ET.text = (getSavePath() as string + "\\")) else ( if pathConfig.isAbsolutePath (a.coronaautosave_ET.text as string) == true then (messagebox "there is already exist an absolute path") ) renderers.current.vfb_autosave_filename = a.coronaautosave_ET.text ) edittext coronaautosave_ET "" align: #center text: renderers.current.vfb_autosave_filename enabled: renderers.current.vfb_autosave_enable width: 150 height: 17 on coronaautosave_ET entered txt do ( renderers.current.vfb_autosave_filename = a.coronaautosave_ET.text ) ------------------------------------------------------------------max AUTOSAVE checkbox saverend_CB "save output" offset:[-5,0] checked: rendSaveFile tooltip: "autosave render output" on saverend_CB changed state do ( rendSaveFile = state if saverend_CB.state == on then ( a.saverend_ET.enabled = true rendSaveFile = true a.edittxtsaverend_BTN.enabled = true a.browsesaverend_BTN.enabled = true ) else ( a.saverend_ET.enabled = false rendSaveFile = false a.edittxtsaverend_BTN.enabled = false a.browsesaverend_BTN.enabled = false ) ) button cleartxtsaverend_BTN "x" pos: (saverend_CB.pos+[90,0]) height: 15 width: 15 tooltip: "clear save output text" on cleartxtsaverend_BTN pressed do ( a.saverend_ET.text = "" rendOutputFilename = "" ) button edittxtsaverend_BTN "+" enabled:rendSaveFile height:15 width:15 pos:(cleartxtsaverend_BTN.pos+[16,0]) tooltip:"add special sequences to save output text" on edittxtsaverend_BTN pressed do ( createdialog l width: 350 ) fn savefile = getsaveFileName caption:"save VFB output" \ types:"All|*.*|openEXR (*.exr)|*.exr|jpeg file (*.jpg)|*.jpg|png file(*.png)|*.png|" \ filename: (maxFilepath+(substituteString maxFilename ".max" "")) as string button browsesaverend_BTN ".." enabled:rendSaveFile height: 15 width: 15 pos: (edittxtsaverend_BTN.pos+[16,0]) tooltip: "choose folder path" on browsesaverend_BTN pressed do ( if pathConfig.isAbsolutePath (a.saverend_ET.text as string) == false then (a.saverend_ET.text = (savefile() as string)) else (messagebox "there is already exist an absolute path") rendOutputFilename = a.saverend_ET.text ) edittext saverend_ET "" align: #center text: rendOutputFilename enabled: rendSaveFile caption: "set file path for autosave render output" width: 150 height: 17 on saverend_ET entered txt do ( rendOutputFilename = a.saverend_ET.text if pathConfig.isAbsolutePath (rendOutputFilename) == false do ( messagebox "current path is not an absolute path" a.saverend_ET.text = "" rendOutputFilename = "" ) ) ) ------------------------------------------------------------------------------------------------------------------- batas rollout rollout b "Interactive Rendering" ( fn startIR = (CoronaRenderer.CoronaFp.startInteractive()) fn startdockIR = (CoronaRenderer.CoronaFp.startInteractivedocked()) fn secGIprint = ( case secGI of ( 0: ("secGI: none") 1: ("secGI: Path tracing") 4: ("secGI: UHD cache") ) ) --------------------------------------------------------------------------------------- FN CALLBACK IR -2 fn IR2pre_fn = ( autosave.enable = false; a.autobackup_CB.state = off; print "autobackup is disabled - callbackIR2pre_fn" ) fn IR2post_fn = ( autosave.enable = true; a.autobackup_CB.state = on; print "autobackup is enabled - callbackIR2post_fn" ) button startIR_btn "start IR" across:2 width:70 align:#right tooltip: "start Interactive Rendering" on startIR_btn pressed do ( startIR() ) fn IRPTenabled = (if renderers.current.shading_secondarySolver == 1 then false; else true) button IRinPT_btn "IR w/ PT" enabled: (IRPTenabled()) width:70 align:#left tooltip: "start IR with secondary GI set to path tracing, current setting will be returned to last selected when stopped" on IRinPT_btn pressed do ( storeSecGI = renderers.current.shading_secondarySolver (if d.isdisplayed == true do storeSecGICtrl = d.secondarysolver_DDL.selection ) renderers.current.shading_secondarySolver = 1 (startIR()); renderers.current.shading_secondarySolver = storeSecGI (if d.isdisplayed == true do d.secondarysolver_DDL.selection = storeSecGICtrl) ) button stopIR_btn "stop render" across:2 width:70 align:#right tooltip: "stop any rendering progress, useful for stop docked IR progress" on stopIR_btn pressed do ( CoronaRenderer.CoronaFp.stoprender() ) button dockedIRinPT_btn "docked IR.PT" enabled: (IRPTenabled()) width:70 align:#left tooltip: "start docked IR with secondary GI set to path tracing, current setting will be returned to last selected when stopped" on dockedIRinPT_btn pressed do ( storeSecGI = renderers.current.shading_secondarySolver storeSecGICtrl = d.secondarysolver_DDL.selection renderers.current.shading_secondarySolver = 1 (startdockIR()); renderers.current.shading_secondarySolver = storeSecGI d.secondarysolver_DDL.selection = storeSecGICtrl ) checkbox IRpasses_CB "" checked:(if renderers.current.interactive_passLimit != 0 then true else false) tooltip:"unchecked this is the same as set IR limit max passes to \"0\". when checked passes number will be returned to last defined value" offset:[-55,0] align:#center on IRpasses_CB changed state do try ( if IRpasses_CB.state == off then ( renderers.current.interactive_passLimit = 0 b.IRpasses_SPN.enabled = false ) else ( renderers.current.interactive_passLimit = b.IRpasses_SPN.value b.IRpasses_SPN.enabled = true ) ) catch() spinner IRpasses_SPN "max.passes :" enabled:(if renderers.current.interactive_passLimit != 0 then true else false) range:[0,10000,renderers.current.interactive_passLimit] type:#integer width:100 offset:[35,-20] tooltip:"rendering will stop when IR passes reach to the current value, but still listen to scene update.\n0 value will render forever until stopped" on IRpasses_SPN changed value do try ( renderers.current.interactive_passLimit = IRpasses_SPN.value ) catch() spinner IRthread_SPN "core/threads :" range:[-((sysInfo.cpucount as integer)-1),(sysInfo.cpucount as integer),renderers.current.interactive_numThreads] type:#integer width:75 align:#right offset:[7,0] tooltip:"Limits threads count used by IR and the negative value is threads count left by IR" on IRthread_SPN changed value do try ( renderers.current.interactive_numThreads = IRthread_SPN.value ) catch() checkbox clearVFB_IR "clear VFB inbetween IR" checked:renderers.current.interactive_clearVfb tooltip:"" offset:[0,0] align:#center on clearVFB_IR changed state do try ( renderers.current.interactive_clearVfb = state ) catch() checkbox optimizedIR2_cbx "stop autoback while IR" tooltip: "autobackup will be disabled on IR/final render progress and will be enabled when IR/final render stopped\nuseful for prevent you kick your monitor when autobackup start in the middle of IR process." align: #center on optimizedIR2_cbx changed state do if autosave.enable == true then try ( if optimizedIR2_cbx.state == on then ( callbacks.addScript #preRender "IR2pre_fn()" id:#autobackuponoff_IR callbacks.addScript #postRender "IR2post_fn()" id:#autobackuponoff_IR ) else ( callbacks.removeScripts id:#autobackuponoff_IR ) ) catch (messagebox "IR-2 ga iso") else (messagebox "autobackup is already disabled"; optimizedIR2_cbx.state = off) on b close do ( callbacks.removeScripts id:#autobackuponoff_IR ) ) ------------------------------------------------------------------------------------------------------------------- batas rollout rollout c "some tools" ( fn subselection_fn type =( if $ != undefined then ( if ((classof $ == Editable_mesh) or (classof $ == editable_poly) or (classof $ == PolyMeshObject))== true then ( modPanel.setCurrentObject $.baseObject; subobjectLevel = type ) else ( print "selected object doesn't has such as that subobject") ) else ( print "nothing selected") ) checkbutton Displace_Cbtn "Enable Displacement" checked: renderDisplacements width:(CrnTools.width-10) border:false tooltip: "enable/disable displacement globally" on Displace_Cbtn changed state do try ( renderDisplacements = state renderSceneDialog.update() if state == on then ( c.Displacesize_Cbtn.enabled = true c.displacesize_SPN.enabled = true ) else ( if state == off then ( c.Displacesize_Cbtn.enabled = false c.displacesize_SPN.enabled = false ) ) ) catch() button Displacesize_btn "use world size" checked: (if renderers.current.geometry_displace_subdivType == 1 then true ; else false ) width:80 height:18 border:false pos: (Displace_Cbtn.pos+[0,22]) tooltip: "click the button to change, use screen or world for displacement subdivision size" on Displacesize_btn pressed do try ( if renderers.current.geometry_displace_subdivType == 1 then ( renderers.current.geometry_displace_subdivType = 0 Displacesize_btn.text = "screen size" c.displacesize_SPN.value = renderers.current.geometry_displace_maxSizeWorld c.displacesize_SPN.tooltip = "displacement subdivs in world size" c.displacesize_SPN.caption = "mm" ) else ( renderers.current.geometry_displace_subdivType = 1 Displacesize_btn.text = "world size" c.displacesize_SPN.value = renderers.current.geometry_displace_maxSizeScreen c.displacesize_SPN.tooltip = "displacement subdivs in screen size (px)" c.displacesize_SPN.caption = "px" ) ) catch() spinner displacesize_SPN "mm" range:[0.01,100,2] width:45 type:#float pos: (Displacesize_btn.pos+[95,2]) on displacesize_SPN changed val do try ( if renderers.current.geometry_displace_subdivType == 1 then ( renderers.current.geometry_displace_maxSizeWorld = displacesize_SPN.value ) else ( if renderers.current.geometry_displace_subdivType == 0 then ( renderers.current.geometry_displace_maxSizeScreen = displacesize_SPN.value ) ) ) catch() button Mtl_override_btn "Mtl.override" offset:[0,5] width: 150 border:false tooltip:"corona material override, rightclick to access \"preserve displacement\"" on Mtl_override_btn pressed do try ( if renderers.current.mtlOverride_enabled == true then ( c.mtlovrdmtl_BTN.enabled = renderers.current.mtlOverride_enabled = false Mtl_override_btn.text = "Mtl.override is off" ) else ( c.mtlovrdmtl_BTN.enabled = renderers.current.mtlOverride_enabled = true if renderers.current.mtlOverride_preserveDisplacement == false then Mtl_override_btn.text = "Mtl.override is on" else Mtl_override_btn.text = "Mtl.override is on with displ" ) ) catch() on Mtl_override_btn rightclick do try ( popupmenu dispmtloverride ) catch() materialbutton mtlovrdmtl_BTN "none" across:2 enabled:renderers.current.mtlOverride_enabled material:renderers.current.mtlOverride offset:[-1,0] height:16 width:76 tooltip:"material used for mtl.override" on mtlovrdmtl_BTN picked mtl do ( renderers.current.mtlOverride = mtlovrdmtl_BTN.material mtlovrdmtl_BTN.text = classof mtlovrdmtl_BTN.material as string + " " + "(" + mtlovrdmtl_BTN.material.name + ")" as string ) button incexclist2_BTN "inc/exc:" width:50 height:16 visible: true on incexclist2_BTN pressed do try ( createdialog FakeIncExc width:320 pos: [10,100] modal:false FakeIncExc.OK_mtlOverride.visible=true FakeIncExc.IncExc_mtloverride.visible=true FakeIncExc.choosenobj.items=(mtloverridelist()) FakeIncExc.objectslist.items=(sort (objectslistitem (allobjectslist()) (mtloverridelist()))) ) catch() button addincexclist2_BTN "+" width:16 height:16 visible: incexclist2_BTN.visible pos: (incexclist2_BTN.pos+[50,0]) on addincexclist2_BTN pressed do ( sels = selection if sels.count != 0 then ( for i in sels where ((superclassof i == camera) or (classof i == targetobject)) != true do appendifunique renderers.current.overrideMtl_exclude i ) else print "nothing selected" mtloverrideIncExcText() ) button resetobjmtl_btn "reset all object material" width:140 align:#center offset:[0,10] tooltip: "reset material of all objects in scene" on resetobjmtl_btn pressed do ( undo on ($*.material=coronamtl()) ) button mirrormtl_btn "mirror mtl" offset:[-8,0] across:2 tooltip:"apply mirror material to selected object(s)" on mirrormtl_btn pressed do try ( if $ != undefined then for i in (getcurrentselection()) do ( i.material =coronamtl leveldiffuse:0 levelreflect:1 fresnelior:999 ) else ( messagebox "nothing selected" ) ) catch() button winglass_btn "win.glass mtl" offset:[-1,0] tooltip: "apply windows glass material to selected object(s)" on winglass_btn pressed do try ( if $ != undefined then for i in (getcurrentselection()) do ( i.material =coronamtl leveldiffuse:0 levelreflect:1 levelRefract:1 thin:true ) else messagebox "nothing selected" ) catch() button onoffalllight_btn "turn on/off all lights" width:140 align:#center tooltip:"don't worry it does turn on/off all the light in current scene only, not in your house" on onoffalllight_btn pressed do try ( for i in lights do i.on = ( if i.on == off then on else off ) ) catch() checkbutton hideallobjbutlight "hide any obj but lights" width:140 align:#center tooltip:"hide any objects but lights, then zoom extents all" on hideallobjbutlight changed state do ( if state == on then ( viewport.setType #view_persp_user max tool zoomextents for i in $* where superclassof i != light do i.ishidden = true ) else ( for i in $* where i.ishidden == true do i.ishidden = false ) ) button displayasbox_btn "on/off selected as box" width:140 align:#center tooltip: "display selected object as box" on displayasbox_btn pressed do try ( undo on ( if $ != undefined then ( for i in (getcurrentselection()) do if i.boxmode==false then i.boxmode=true else i.boxmode=false ) else messagebox "nothing selected" ) ) catch (messagebox "select object first") checkbutton displayasbox_cbtn "on/off all obj as box" width:140 align:#center tooltip:"only selected objects will not displayed as a box" on displayasbox_cbtn changed state do ( $*.displaybylayer = false if state == on then ( allobjasBox true callbacks.addScript #selectionSetChanged "start=timestamp(); allobjasBox true; TurnoffBoxMode(); end=timestamp(); print (\"displayasbox take \"+(end-start) as string+\"ms\")" id:#displayasbox ) else ( allobjasBox false callbacks.removeScripts id:#displayasbox ) ) button ctrpvt_btn "center pivot all obj" width:140 align:#center on ctrpvt_btn pressed do try ( for i in $* where ((superclassof i == camera) or (classof i == targetobject)) != true do ( i.pivot = i.center ) ) catch() button btmpvt_btn "bottom pivot obj" tooltip:"set selected/all object pivot to the center bottom position" across:2 width:111 align:#left offset:[-8,0] on btmpvt_btn pressed do ( if c.SelOrAll_btmpivot.text == "sel" then ( if $ != undefined then ( for i in (getcurrentselection()) where ((superclassof i == camera) or (classof i == targetobject)) != true do ( i.pivot = i.center i.pivot.z = i.min[3] ) ) else messagebox "nothing selected" title:btmpvt_btn.text ) else ( for i in $* where ((superclassof i == camera) or (classof i == targetobject)) != true do ( i.pivot = i.center i.pivot.z = i.min[3] ) ) ) button SelOrAll_btmpivot "sel" align:#right offset:[8,0] on SelOrAll_btmpivot pressed do ( if SelOrAll_btmpivot.text == "sel" then ( SelOrAll_btmpivot.text = "all" ) else ( SelOrAll_btmpivot.text = "sel" ) ) button wireframecol_btn "wireframe color" across:2 width:111 align:#left offset:[-8,0] tooltip: "set selected object's wireframe color with random color" on wireframecol_btn pressed do try ( if c.SelOrAll_wireframecol.text == "sel" then ( wirecolorsel() ) else ( wirecolorall() ) ) catch() button SelOrAll_wireframecol "sel" align:#right offset:[8,0] on SelOrAll_wireframecol pressed do ( if SelOrAll_wireframecol.text == "sel" then ( SelOrAll_wireframecol.text = "all" ) else ( SelOrAll_wireframecol.text = "sel" ) ) button adduvw_btn "addUVW to selected" width:140 tooltip: "add UVW modifer to selected object with size L:1600 W:1600 H:1600" on adduvw_btn pressed do try ( if $ != undefined then ( setCommandPanelTaskMode #modify; for i in (getcurrentselection()) do addModifier i (uvwmap maptype:4 length:1600 width:1600 height:1600 realworldmapsize:false); ) else messagebox "nothing selected" title:adduvw_btn.text ) catch() button collapsestack_btn "collapse stack" width:140 tooltip: "Collapses the modifiers out of a stack, leaving a resultant editable base object corresponding to the class of the node(s) on top of their stack" on collapsestack_btn pressed do try ( if $ != undefined then for i in (getcurrentselection()) do collapsestack i else messagebox "nothing selected" title:collapsestack_btn.text ) catch() checkbox showmodifypanel "show mod.panel" align:#center tooltip:"if state on, modify panel always displayed when any object selected but if selection change to nothing then displayed panel will change to create panel" on showmodifypanel changed state do ( if state == true then ( callbacks.addScript #selectionSetChanged "showmodifypanel_fn()" id:#showmodifypanel ) else ( callbacks.removeScripts id:#showmodifypanel ) ) button selectvertex "vert" across:4 width:35 align:#center offset:[-6,0] tooltip:"will select subobject vertex of baseobject, only if selected object is an editablepoly or editablemesh \nuseful when need to select subobject but there is more modifier inside current object" on selectvertex pressed do ( if subobjectLevel != 1 then ( subselection_fn 1 ) else ( subobjectLevel = 0 ) ) button selectedges "edg" width:35 align:#center pos:(selectvertex.pos+[35,0]) tooltip:"will select subobject edge of baseobject, only if selected object is an editablepoly or editablemesh \nuseful when need to select subobject but there is more modifier inside current object" on selectedges pressed do ( if subobjectLevel != 2 then ( subselection_fn 2 ) else ( subobjectLevel = 0 ) ) button selectpolygon "surf" width:35 align:#center pos:(selectedges.pos+[35,0]) tooltip:"will select subobject surface of baseobject, only if selected object is an editablepoly or editablemesh \nuseful when need to select subobject but there is more modifier inside current object" on selectpolygon pressed do ( if subobjectLevel != 4 then ( subselection_fn 4 ) else ( subobjectLevel = 0 ) ) button selectelm "elmn" width:35 align:#center pos:(selectpolygon.pos+[35,0]) tooltip:"will select subobject element of baseobject, only if selected object is an editablepoly or editablemesh \nuseful when need to select subobject but there is more modifier inside current object" on selectelm pressed do ( if subobjectLevel != 5 then ( subselection_fn 5 ) else ( subobjectLevel = 0 ) ) on c open do ( if renderers.current.mtlOverride_enabled == true then ( if renderers.current.mtlOverride_preserveDisplacement == false then c.Mtl_override_btn.text = "Mtl.override is on" else c.Mtl_override_btn.text = "Mtl.override is on with displ" ) else ( c.Mtl_override_btn.text = "Mtl.override is off" ) mtlovrdmtl_BTN.material = renderers.current.mtlOverride if mtlovrdmtl_BTN.material != undefined then (mtlovrdmtl_BTN.text = classof mtlovrdmtl_BTN.material as string + " " + "(" + mtlovrdmtl_BTN.material.name + ")" as string) else mtlovrdmtl_BTN.text = "none" if renderers.current.geometry_displace_subdivType == 0 then ( c.Displacesize_btn.text = "screen size" c.displacesize_SPN.value = renderers.current.geometry_displace_maxSizeWorld c.displacesize_SPN.tooltip = "displacement subdivs in world size" c.displacesize_SPN.caption = "mm" ) else ( c.Displacesize_btn.text = "world size" c.displacesize_SPN.value = renderers.current.geometry_displace_maxSizeScreen c.displacesize_SPN.tooltip = "displacement subdivs in screen size (px)" c.displacesize_SPN.caption = "px" ) mtloverrideIncExcText() ) on c close do ( callbacks.removeScripts id:#showmodifypanel callbacks.removeScripts id:#displayasbox ) ) ------------------------------------------------------------------------------------------------------------------- batas rollout rollout d "Render Setup" ( fn getareatorender= ( case getRenderType() of ( #view:1; #region:2; #crop:3; #blowup:4 ) ) fn rendengine=( case renderers.current.shading_renderEngine of ( 2: 1; 0: 2) ) fn secsolver=( case renderers.current.shading_secondarySolver of ( 0: 1; 1: 2; 4: 3 ) ) fn rendselected=( case renderers.current.renderSelected_mode of ( 0: 1; 3: 2; 1: 3; 2: 4 ) ) spinner giaa_SPN "GI/AA:" across:2 range:[1,286,renderers.current.shading_giToAaRatio] width:70 offset:[-7,0] type:#integer align:#center tooltip:"GI vs. AA balance" on giaa_SPN changed val do ( renderers.current.shading_giToAaRatio = giaa_SPN.value ) spinner msi_SPN "MSI:" range:[0,1000,renderers.current.shading_maxSampleIntensity] offset:[0,0] width:70 type:#float tooltip:"Max Sample Intensity" on msi_SPN changed val do ( renderers.current.shading_maxSampleIntensity = msi_SPN.value ) spinner LSM_SPN "LSM:" across: 2 width:60 offset: [-3,0] range:[0,100,renderers.current.lights_samplesMult] type:#float align:#right tooltip:"Light Samples Multiplier" on LSM_SPN changed val do ( renderers.current.lights_samplesMult = LSM_SPN.value ) spinner maxraydepth_SPN "Rays:" range:[0,100,renderers.current.shading_maxRayDepth] offset: [3,0] width:70 type:#integer tooltip: "maximum number of light bounces" on maxraydepth_SPN changed val do ( renderers.current.shading_maxRayDepth = maxraydepth_SPN.value ) button rendelm_btn "R. elements" across:2 checked:false offset:[0,0] width:75 align:#right tooltip:"render elements only (antialiased)" on rendelm_btn pressed do ( CoronaRenderer.CoronaFp.renderElements true ) button reset_btn "Reset setting" offset:[0,0] width:75 align:#left on reset_btn pressed do ( coronarenderer.coronafp.resetSettings() updateAllCtrls_fn() ) button coronavfb_btn "CoronaVFB" across: 2 offset:[0,0] width:75 align:#right tooltip:"show corona VFB" on coronavfb_btn pressed do ( CoronaRenderer.CoronaFp.showVfb true ) button resume_btn "ResumeLast" offset: [0,0] width:75 align: #left on resume_btn pressed do ( coronarenderer.coronafp.resumeRender() ) fn dumpVFB = getsaveFileName caption:"load and resume render from file" \ types:"openEXR (*.exr)|*.exr|" \ button savevfb_btn "saveVFB" across: 2 checked:false offset:[0,-5] width:75 align: #right tooltip:"show corona VFB" on savevfb_btn pressed do ( if dumpVFB() !=undefined do CoronaRenderer.CoronaFp.dumpVfb (dumpVFB() as string) ) fn loadresumefile = getopenFileName caption:"load and resume render from file" \ types:"All|*.*|openEXR (*.exr)|*.exr|" \ button resumefile_btn "ResumeFile" offset:[0,-5] width:75 align:#left on resumefile_btn pressed do ( if loadresumefile() !=undefined do coronarenderer.coronafp.loadAndResume (loadresumefile() as string) ) label renderarealbl "Render area:" pos:(savevfb_btn.pos+[5,30]) label renderenginelbl "RenderEngine:" pos:(savevfb_btn.pos+[5,55]) label secondarysolver_lbl "Secondary GI:" pos:(savevfb_btn.pos+[5,80]) label renderselected_lbl "Rend. select:" pos:(savevfb_btn.pos+[5,103]) dropdownList areatorender "" selection:(getareatorender()) tooltip:"area to render" items:#("view","region","crop","blowup") width:65 align:#center pos:(renderarealbl.pos+[75,-2]) on areatorender selected sell do ( editregion = ( EditRenderRegion.EditRegion()) case areatorender.selection of ( 1: ( setRenderType #view; EditRenderRegion.IsEditing = false; EditRenderRegion.UpdateRegion() ) 2: ( setRenderType #region; editregion ) 3: ( setRenderType #crop; editregion ) 4: ( setRenderType #blowup; editregion ) ) ) dropdownList renderengine_DDL "" selection:(rendengine()) tooltip:"Render engine" items:#("Progressive","Bucket") width:65 align:#center pos:(renderarealbl.pos+[75,22]) on renderengine_DDL selected sell do ( case renderengine_DDL.selection of ( 1: ( renderers.current.shading_renderEngine = 2 ; removesubrollout CrnTools.SR1 k) 2: ( renderers.current.shading_renderEngine = 0 ; addsubrollout CrnTools.SR1 k) ) ) dropdownList secondarysolver_DDL "" selection:(secsolver()) tooltip:"Secondary solver GI" items:#("none","Path tracing","UHD cache") width:65 align:#center pos:(renderarealbl.pos+[75,46]) on secondarysolver_DDL selected sell do ( case secondarysolver_DDL.selection of ( 1: ( renderers.current.shading_secondarySolver = 0 ; removesubrollout CrnTools.SR1 j; OnOffIRPT_fn true ) 2: ( renderers.current.shading_secondarySolver = 1 ; removesubrollout CrnTools.SR1 j; OnOffIRPT_fn false ) 3: ( renderers.current.shading_secondarySolver = 4 ; addsubrollout CrnTools.SR1 j; OnOffIRPT_fn true ) ) ) dropdownList renderselected_DDL "" selection:(rendselected()) tooltip:"render selected" items:#("disable","include/exclude list","viewport Selection", "object GBuffer ID") width:65 align:#center pos:(renderarealbl.pos+[75,69]) on renderselected_DDL selected sell do ( objID=d.objectID_SPN incexc=d.incexclist_BTN addincexc=d.addincexclist_BTN case renderselected_DDL.selection of ( 1: ( renderers.current.renderSelected_mode = 0; objID.visible = incexc.visible = addincexc.visible = false ) 2: ( renderers.current.renderSelected_mode = 3; objID.visible = false; incexc.visible = addincexc.visible = true ) 3: ( renderers.current.renderSelected_mode = 1; objID.visible = incexc.visible = addincexc.visible = false ) 4: ( renderers.current.renderSelected_mode = 2; objID.visible = true; incexc.visible = addincexc.visible = false ) ) ) spinner objectID_SPN "obj.ID:" width:48 range:[0,100,2] type:#integer visible: false pos: (renderselected_DDL.pos+[18,25]) on objectID_SPN changed val do ( renderers.current.renderSelected_objectId = objectID_SPN.value ) button incexclist_BTN "inc/exc:" width:50 height:16 visible: false pos: (renderselected_DDL.pos+[0,25]) on incexclist_BTN pressed do ( createdialog FakeIncExc width:320 pos: [10,100] modal:false FakeIncExc.OK_renderSelected.visible=true FakeIncExc.IncExc_RenderSelected.visible=true FakeIncExc.choosenobj.items=(rendselectedlist()) FakeIncExc.objectslist.items=(sort (objectslistitem (allobjectslist()) (rendselectedlist()))) ) button addincexclist_BTN "+" width:16 height:16 visible: incexclist_BTN.visible pos: (incexclist_BTN.pos+[50,0]) on addincexclist_BTN pressed do ( sels = selection if sels.count != 0 then ( for i in sels where ((superclassof i == camera) or (classof i == targetobject)) != true do appendifunique renderers.current.renderSelected_list i ) else print "nothing selected" rendselectedIncExcText() ) spinner intres_SPN "Intrn.res" width: 45 align: #left range:[1,4,renderers.current.image_internalResMult] type:#integer pos: (objectID_SPN.pos+[-130,0]) tooltip:"Internal resolution" on intres_SPN changed val do ( renderers.current.image_internalResMult = intres_SPN.value ) checkbox clearVFB_render "clearVFB" across: 2 checked: renderers.current.vfb_clearBetweenRenders tooltip: "hapus frame VFB yg terakhir, \njika dinonaktifkan maka frame yg tersimpan sebelumnya akan terupdate secara bertahap" on clearVFB_render changed state do ( if clearVFB_render.state == on then ( renderers.current.vfb_clearBetweenRenders = true ) else ( renderers.current.vfb_clearBetweenRenders = false ) ) checkbox embree_precise_CB "E.precise" checked: renderers.current.geometry_embree_precise pos: (clearVFB_render.pos+[65,0]) tooltip: "enable/disable intel embree to boost render engine in rendering precisement\nBe careful, changing this will affect final render quality and render performance" on embree_precise_CB changed state do ( if embree_precise_CB.state == on then ( renderers.current.geometry_embree_precise = true ) else ( renderers.current.geometry_embree_precise = false ) ) checkbox embree_quality_CB "E.quality" across: 2 checked: renderers.current.geometry_embree_highQuality tooltip: "enable/disable intel embree to boost render engine in final render quality result\nBe careful, changing this will affect final render quality and render performance" on embree_quality_CB changed state do ( if embree_quality_CB.state == on then ( renderers.current.geometry_embree_highQuality = true ) else ( renderers.current.geometry_embree_highQuality = false ) ) checkbox embree_memory_CB "E.memory" checked: renderers.current.geometry_embree_lowMemory pos: (embree_quality_CB.pos+[65,0]) tooltip: "enable/disable intel embree to boost render engine by lowering memory consumtion\nBe careful, changing this will affect final render quality and render performance" on embree_memory_CB changed state do ( if embree_memory_CB.state == on then ( renderers.current.geometry_embree_lowMemory = true ) else if embree_memory_CB.state == off then ( renderers.current.geometry_embree_lowMemory = false ) ) checkbox proglimits_CB " Limits progr. rendering" align:#center checked: ((renderers.current.progressive_passLimit != 0) or (renderers.current.progressive_timeLimit != 0)) border: false on proglimits_CB changed state do ( if state == on then ( d.progressivepasslim_SPN.enabled = d.TimeLimH.enabled = d.TimeLimM.enabled = d.TimeLimS.enabled = true ) else ( d.progressivepasslim_SPN.enabled = d.TimeLimS.enabled = d.TimeLimM.enabled = d.TimeLimH.enabled = false renderers.current.progressive_passLimit = 0 renderers.current.progressive_timeLimit = 0 ) ) spinner TimeLimH "H" across:3 enabled:(proglimits_CB.checked) width:45 pos: (proglimits_CB.pos+[-5,25]) range:[0,1000,(renderers.current.progressive_timeLimit/3600000)] type:#integer align:#center tooltip:"hours" on TimeLimH changed val do ( renderers.current.progressive_timeLimit = 3600000*TimeLimH.value+60000*TimeLimM.value+1000*TimeLimS.value ) spinner TimeLimM "M" enabled:(proglimits_CB.checked) width:45 pos: (TimeLimH.pos+[15,0]) range:[0,59,((renderers.current.progressive_timeLimit - d.TimeLimH.value*3600000)/60000)] type:#integer align:#center tooltip:"minutes" on TimeLimM changed val do ( renderers.current.progressive_timeLimit = 3600000*TimeLimH.value+60000*TimeLimM.value+1000*TimeLimS.value ) spinner TimeLimS "S" enabled:(proglimits_CB.checked) width:45 pos: (TimeLimM.pos+[15,0]) range:[0,59,((renderers.current.progressive_timeLimit - d.TimeLimH.value*3600000 - d.TimeLimM.value*60000)/1000)] type:#integer align:#center tooltip:"seconds" on TimeLimS changed val do ( renderers.current.progressive_timeLimit = 3600000*TimeLimH.value+60000*TimeLimM.value+1000*TimeLimS.value ) spinner progressivepasslim_SPN "Passes limits:" enabled:(proglimits_CB.checked) range:[0,10000,renderers.current.progressive_passLimit] width:85 type:#integer align: #right tooltip: "limit passes of progressive rendering" on progressivepasslim_SPN changed val do ( renderers.current.progressive_passLimit = progressivepasslim_SPN.value ) on d open do ( if d.renderselected_DDL.selected == "include/exclude list" do ( d.addincexclist_BTN.visible = d.incexclist_BTN.visible = true ) rendselectedIncExcText() ) ) ------------------------------------------------------------------------------------------------------------------- batas rollout rollout f "Environment Source" ( colorpicker sceneenvironmentCP "" color: renderers.current.bg_color width: 20 height: 15 modal: false enabled: (if renderers.current.bg_source == 0 then false ; else (if renderers.current.bg_source == 1 then true )) pos: [0,30] on sceneenvironmentCP changed new_col do ( renderers.current.bg_color = sceneenvironmentCP.color ) mapbutton environmentMapB "none" map: renderers.current.bg_texmap width:106 height:15 pos: (sceneenvironmentCP.pos+[18,0]) type:#texturemap enabled: ( if renderers.current.bg_source == 0 then false else ( if renderers.current.bg_texmapUseMain == true then true else false ) ) on environmentMapB picked texmap do ( renderers.current.bg_texmap = environmentMapB.map; environmentMapB.text = classof texmap as string + " " + "(" + texmap.name + ")" as string ) on environmentMapB rightclick do ( popUpMenu EnvMapBtn ) checkbox environtmentmapCB "" pos: (environmentMapB.pos+[108,0]) checked: renderers.current.bg_texmapusemain enabled: (if renderers.current.bg_source == 0 then false; else (if renderers.current.bg_source == 1 then true )) tooltip: "by default you're using corona environment map, when checked it will switched to max environmentmap" on environtmentmapCB changed state do ( renderers.current.bg_texmapusemain = state if state == on then ( environmentMapB.enabled = true ) else ( if state == off then ( environmentMapB.enabled = false ) ) ) checkbutton maxenvironment "Use Max Environment Map" checked: (if renderers.current.bg_source == 0 then true ; else (if renderers.current.bg_source == 1 then false )) pos:(sceneenvironmentCP.pos+[0,-25]) border:false width:140 on maxenvironment changed state do ( if state == on then ( renderers.current.bg_source = 0 sceneenvironmentCP.enabled = environtmentmapCB.enabled = environmentMapB.enabled = false ) else ( if state == off then ( renderers.current.bg_source = 1 sceneenvironmentCP.enabled = environtmentmapCB.enabled = true ( if environtmentmapCB.state == on then (environmentMapB.enabled = true) else ( if environtmentmapCB.state == off then (environmentMapB.enabled = false) ) ) ) ) ) -------------------------------------------------------------------- colorpicker directvisoverrideCP "" color: renderers.current.bg_colordirect width: 20 height: 15 modal: false enabled: renderers.current.bg_overrideDirect pos: (sceneenvironmentCP.pos+[-4,40]) on directvisoverrideCP changed new_col do ( renderers.current.bg_colordirect = directvisoverrideCP.color ) mapbutton directvisoverrideMapB "none" map: renderers.current.bg_texmapdirect width: 106 height: 15 pos: (directvisoverrideCP.pos+[18,0]) enabled: ( if renderers.current.bg_overridedirect == false then false else ( if renderers.current.bg_overridedirect == true then ( if renderers.current.bg_texmapusedirect == true then true else ( if renderers.current.bg_texmapusedirect == false then false ) ) ) ) on directvisoverrideMapB picked texmap do ( renderers.current.bg_texmapdirect = texmap; directvisoverrideMapB.text= (classof texmap as string + " " + "(" + texmap.name + ")" as string) ) on directvisoverrideMapB rightclick do ( popUpMenu EnvMapBtn ) checkbox directvisoverrideMapCB "" pos: (directvisoverrideMapB.pos+[108,0]) enabled: renderers.current.bg_overrideDirect checked: renderers.current.bg_texmapusedirect on directvisoverrideMapCB changed state do ( renderers.current.bg_texmapusedirect = state directvisoverrideMapB.enabled = not directvisoverrideMapB.enabled ) checkbox directvisoverrideCB "direct vis. override:" checked: renderers.current.bg_overrideDirect pos: (directvisoverrideCP.pos+[0,-17]) on directvisoverrideCB changed state do ( renderers.current.bg_overrideDirect = state if state == off then ( directvisoverrideCP.enabled = false directvisoverrideMapCB.enabled = false directvisoverrideMapB.enabled = false ) else ( if state == on then ( directvisoverrideCP.enabled = true directvisoverrideMapCB.enabled = true ( if directvisoverrideMapCB.state == on then (directvisoverrideMapB.enabled = true) else ( if directvisoverrideMapCB.state == off then (directvisoverrideMapB.enabled = false) ) ) ) ) ) -------------------------------------------------------------------- colorpicker reflectionoverrideCP "" color: renderers.current.bg_colorreflect width: 20 height: 15 modal:false enabled: renderers.current.bg_overrideReflect pos: (directvisoverrideCP.pos+[-4,35]) on reflectionoverrideCP changed new_col do ( renderers.current.bg_colorreflect = reflectionoverrideCP.color ) mapbutton reflectionoverrideMapB "none" map: renderers.current.bg_texmapreflect width: 106 height: 15 pos: (reflectionoverrideCP.pos+[18,0]) enabled: ( if renderers.current.bg_overridereflect == false then false else ( if renderers.current.bg_overridereflect == true then ( if renderers.current.bg_texmapusereflect == true then true else ( if renderers.current.bg_texmapusereflect == false then false ) ) ) ) on reflectionoverrideMapB picked texmap do ( renderers.current.bg_texmapreflect = texmap reflectionoverrideMapB = (classof texmap as string + " " + "(" + texmap.name + ")" as string) ) on reflectionoverrideMapB rightclick do ( popUpMenu EnvMapBtn ) checkbox reflectionoverrideMapCB "" checked: renderers.current.bg_texmapusereflect pos: (reflectionoverrideMapB.pos+[108,0]) enabled: renderers.current.bg_overrideReflect on reflectionoverrideMapCB changed state do ( renderers.current.bg_texmapusereflect = state reflectionoverrideMapB.enabled = not reflectionoverrideMapB.enabled ) checkbox reflectoverrideCB "reflections override:" checked:renderers.current.bg_overrideReflect pos: (reflectionoverrideCP.pos+[0,-17]) on reflectoverrideCB changed state do ( renderers.current.bg_overrideReflect = state if state == off then ( reflectionoverrideCP.enabled = false reflectionoverrideMapCB.enabled = false reflectionoverrideMapB.enabled = false ) else ( if state == on then ( reflectionoverrideCP.enabled = true reflectionoverrideMapCB.enabled = true ( if reflectionoverrideMapCB.state == on then (reflectionoverrideMapB.enabled = true) else ( if reflectionoverrideMapCB.state == off then (reflectionoverrideMapB.enabled = false) ) ) ) ) ) -------------------------------------------------------------------- colorpicker refractionoverrideCP "" color: renderers.current.bg_colorrefract width:20 height: 15 modal:false enabled: renderers.current.bg_overrideRefract pos: (reflectionoverrideCP.pos+[-4,35]) on refractionoverrideCP changed new_col do ( renderers.current.bg_colorrefract = refractionoverrideCP.color ) mapbutton refractionoverrideMapB "none" map: renderers.current.bg_texmaprefract width: 105 height: 15 pos: (refractionoverrideCP.pos+[18,0]) enabled: ( if renderers.current.bg_overrideRefract == false then false else ( if renderers.current.bg_overrideRefract == true then ( if renderers.current.bg_texmapuserefract == true then true else ( if renderers.current.bg_texmapuserefract == false then false ) ) ) ) on refractionoverrideMapB picked texmap do ( renderers.current.bg_texmaprefract = texmap refractionoverrideMapB.text=(classof texmap as string + " " + "(" + texmap.name as string + ")" ) ) on refractionoverrideMapB rightclick do ( popUpMenu EnvMapBtn ) checkbox refractionoverrideMapCB "" checked: renderers.current.bg_texmapuserefract pos: (refractionoverrideMapB.pos+[108,0]) enabled: renderers.current.bg_overrideRefract on refractionoverrideMapCB changed state do ( renderers.current.bg_texmapuserefract = refractionoverrideMapCB.state refractionoverrideMapB.enabled = not refractionoverrideMapB.enabled ) checkbox refractoverrideCB "refractions override:" checked:renderers.current.bg_overrideRefract pos: (refractionoverrideCP.pos+[0,-17]) on refractoverrideCB changed state do ( renderers.current.bg_overrideRefract = state if state == off then ( refractionoverrideCP.enabled = false refractionoverrideMapCB.enabled = false refractionoverrideMapB.enabled = false ) else ( if state == on then ( refractionoverrideCP.enabled = true refractionoverrideMapCB.enabled = true ( if refractionoverrideMapCB.state == on then (refractionoverrideMapB.enabled = true) else ( if refractionoverrideMapCB.state == off then (refractionoverrideMapB.enabled = false) ) ) ) ) ) ---------------------------------------------------------------------------------------------------------------------- on f open do ( environmentMapB.map = renderers.current.bg_texmap directvisoverrideMapB.map = renderers.current.bg_texmapdirect reflectionoverrideMapB.map = renderers.current.bg_texmapreflect refractionoverrideMapB.map = renderers.current.bg_texmaprefract; ) ) ------------------------------------------------------------------------------------------------------------------- batas rollout rollout g "Distributed Rendering" ( checkbox enableDR_CB "enable DR" checked:renderers.current.dr_enable pos:[5,7] across:3 on enableDR_CB changed state do ( renderers.current.dr_enable = state if enableDR_CB.state == on then (g.DRslaveaddresses_LB.enabled = true) else ( if enableDR_CB.state == off then (g.DRslaveaddresses_LB.enabled = false) ) ) button addDRaddress "add" width:35 height:15 offset:[25,0] tooltip: "clear DR addresses list" on addDRaddress pressed do ( g.DRslaveaddresses_LB.items = append g.DRslaveaddresses_LB.items "..." renderers.current.dr_slaveAddresses = g.DRslaveaddresses_LB.items ) button clearDRaddress "x" width:15 height:15 offset:[10,0] tooltip: "clear DR addresses list" on clearDRaddress pressed do ( g.DRslaveaddresses_LB.items = #() DRaddressesupdt() ) combobox DRslaveaddresses_LB "" enabled:(renderers.current.dr_enable) align:#center items: (renderers.current.dr_slaveAddresses as array) on DRslaveaddresses_LB entered txt do ( if g.DRslaveaddresses_LB.selected != undefined then ( DRslaveaddresses_LB.selected = g.DRslaveaddresses_LB.text; DRaddressesupdt() ) else ( g.DRslaveaddresses_LB.items = #("","") appendifunique renderers.current.dr_slaveAddresses g.DRslaveaddresses_LB.text DRaddressesupdt() ) g.DRslaveaddresses_LB.items = makeuniquearray g.DRslaveaddresses_LB.items ) on DRslaveaddresses_LB rightclick do (if DRslaveaddresses_LB.selection != 0 do popupmenu DRcombobox) spinner DRstringOptions_SPN "DRslave thread limits" range: [-64,64,(if matchpattern renderers.current.stringoptions pattern:"int dr.numThreads*" == true then ((substring renderers.current.stringoptions 21 23) as integer) else 0)] type:#integer width: 95 align:#left offset:[-5,0] tooltip: "limits DRslave machine's CPU thread\nNOTE that the spinner value will replace all the string you have in the string options in the development/exeperimental rollout with its own order" on DRstringOptions_SPN changed val do ( renderers.current.stringoptions = ("int dr.numThreads = " + DRstringOptions_SPN.value as string) if DRstringOptions_SPN.value == 0 then (renderers.current.stringoptions = "") ) ) ------------------------------------------------------------------------------------------------------------------- batas rollout rollout h "authors credit" ( label one_LBL "Developed by :" align:#left hyperlink dionchstudio_HL "Christa Noel" address:"http://dionchstudio.co.vu/" Color:(color 255 70 0) VisitedColor:(color 255 0 0) pos: (one_LBL.pos+[90,0]) label three_LBL "Renderers :" align:#left hyperlink corona_HL "Corona-Renderer" address:"https://corona-renderer.com/" Color:(color 255 70 0) VisitedColor:(color 255 0 0) pos: (three_LBL.pos+[90,0]) label thanxx "<< another thanx for their nice code >>" offset:[0,10] label four_LBL "delete multilistbox selection :" align:#left hyperlink cgsocietymultilistbx_HL "remove multilistbox selection topic at CGsociety" address:"http://forums.cgsociety.org/showthread.php?t=639756" Color:(color 255 70 0) VisitedColor:(color 255 0 0) pos: (four_LBL.pos+[150,0]) label two_LBL "Original idea :" align:#left hyperlink coronatweak_HL "coronatweaker by HeadOff" address:"https://corona-renderer.com/forum/index.php/topic,6827.msg46080.html#msg46080" Color:(color 255 70 0) VisitedColor:(color 255 0 0) pos: (two_LBL.pos+[90,0]) ) ------------------------------------------------------------------------------------------------------------------- batas rollout rollout i "add strings to VFB autosave text" ( button scenefilename_BTN "filename" across: 4 width: 50 tooltip: "scene filename" on scenefilename_BTN pressed do ( if a.coronaautosave_CB.state == on then try ( if pathConfig.isAbsolutePath (a.coronaautosave_ET.text as string) == true then ( a.coronaautosave_ET.text = (a.coronaautosave_ET.text as string + " %%f")) ) catch (print "that's not an absolut folder path") else ( if a.coronaautosave_CB.state == off then (messagebox "you can't update the strings if vfb autosafe is disabled") ) renderers.current.vfb_autosave_filename = a.coronaautosave_ET.text ) button currentdate_BTN "date" width: 50 tooltip: "current date / time" on currentdate_BTN pressed do ( if a.coronaautosave_CB.state == on then try ( if pathConfig.isAbsolutePath (a.coronaautosave_ET.text as string) == true then ( a.coronaautosave_ET.text = (a.coronaautosave_ET.text as string + " %%d")) ) catch (print "that's not an absolut folder path") else ( if a.coronaautosave_CB.state == off then (messagebox "vfb autosafe is disabled") ) renderers.current.vfb_autosave_filename = a.coronaautosave_ET.text ) button cameraname_BTN "camera" width: 50 tooltip: "current camera name / current view" on cameraname_BTN pressed do ( if a.coronaautosave_CB.state == on then try ( if pathConfig.isAbsolutePath (a.coronaautosave_ET.text as string) == true then ( a.coronaautosave_ET.text = (a.coronaautosave_ET.text as string + " %%v")) ) catch (print "that's not an absolut folder path") else ( if a.coronaautosave_CB.state == off then (messagebox "vfb autosafe is disabled") ) renderers.current.vfb_autosave_filename = a.coronaautosave_ET.text ) button cpuname_BTN "CPU" width: 50 tooltip: "current CPU name" on cpuname_BTN pressed do ( if a.coronaautosave_CB.state == on then try ( if pathConfig.isAbsolutePath (a.coronaautosave_ET.text as string) == true then ( a.coronaautosave_ET.text = (a.coronaautosave_ET.text as string + " %%c")) ) catch (print "that's not an absolut folder path") else ( if a.coronaautosave_CB.state == off then (messagebox "vfb autosafe is disabled") ) renderers.current.vfb_autosave_filename = a.coronaautosave_ET.text ) ) ------------------------------------------------------------------------------------------------------------------- batas rollout fn changeUHDbtntext = ( if renderers.current.gi_uhdcache_preset == 1 then (j.UHDpreset_CB.text = "animation preset") else (j.UHDpreset_CB.text = "still frame preset") ) rollout j "UHD cache" ( on j open do try ( changeUHDbtntext() ) catch () button UHDpreset_CB "" width:108 border:false pos:[2,5] tooltip: "current text showed is current UHD preset\npress it to change the preset (still frame and animation)" on UHDpreset_CB pressed do ( if renderers.current.gi_uhdcache_preset == 1 then (renderers.current.gi_uhdcache_preset = 0; UHDpreset_CB.text = "still frame preset") else (renderers.current.gi_uhdcache_preset = 1; UHDpreset_CB.text = "animation preset") ) spinner UHDprec_SPN "" range:[0.01,20,renderers.current.gi_uhdcache_precision] type:#float width:37 pos:(UHDpreset_CB.pos+[109,3]) tooltip:"quality - time tradeoff for UHD cache" on UHDprec_SPN changed val do ( renderers.current.gi_uhdcache_precision = UHDprec_SPN.value ) ) ------------------------------------------------------------------------------------------------------------------- batas rollout rollout k "Bucket render engine" ( spinner bucketsamples_SPN "sample" range: [1,10000,renderers.current.bucket_samplesPerIteration] type:#integer width: 70 pos: [15,5] tooltip: "How many samples to render for each pixel in the initial pass, before the adaptive rendering is used." on bucketsamples_SPN changed val do ( renderers.current.bucket_samplesPerIteration = bucketsamples_SPN.value ) spinner bucketpasses_SPN "pass" range: [1,10,renderers.current.bucket_passes] type:#integer width:37 pos:(bucketsamples_SPN.pos+[35,0]) tooltip:"How many adaptive passes will be rendered" on bucketpasses_SPN changed val do ( renderers.current.bucket_passes = bucketpasses_SPN.value ) spinner bucketthrshld_SPN "adaptivity thershold:" range: [0.001,1,renderers.current.bucket_adaptiveThreshold] type:#float scale:0.01 width:108 pos: (bucketsamples_SPN.pos+[-35,25]) tooltip: "How sensitive is the adaptivity to changes in the image. Lower values will render longer, but produce cleaner image. Too low or too high values will make the adaptivity inefficient." on bucketthrshld_SPN changed val do ( renderers.current.bucket_adaptiveThreshold = bucketthrshld_SPN.value ) ) ------------------------------------------------------------------------------------------------------------------- batas rollout rollout l "add strings to save output render text" ( button scenefilepath_BTN "filepath" across: 6 width:50 align:#center tooltip: "scene file path" on scenefilepath_BTN pressed do try ( if pathConfig.isAbsolutePath (a.saverend_ET.text as string) != true then ( a.saverend_ET.text = maxFilepath ) else (if querybox "there is already exist an absolute path, do you want to rewrite it?" beep:true then ( a.saverend_ET.text = maxFilepath )) rendOutputFilename = a.saverend_ET.text ) catch( print "g iso" ) button scenefilename_BTN "filename" width:50 align:#center tooltip: "scene file name" on scenefilename_BTN pressed do try ( if pathConfig.isAbsolutePath (a.saverend_ET.text as string) == true then ( a.saverend_ET.text = (a.saverend_ET.text as string + (substituteString maxFilename ".max" "")) ) else (messagebox "current strings isn't an absolute path") rendOutputFilename = a.saverend_ET.text ) catch( print "g iso" ) button currentview_BTN "view" width:50 align:#center tooltip: "current view" button jpg_BTN ".jpg" width:35 align:#center tooltip: "insert jpg extension" on jpg_BTN pressed do try ( if pathConfig.isAbsolutePath (a.saverend_ET.text as string) == true then ( a.saverend_ET.text = (a.saverend_ET.text as string + ".jpg") if doesfileexist (a.saverend_ET.text as string) == true then ( if querybox "File is already exist, Do you want to overwrite?" beep: false then a.saverend_ET.text = "" ) ) else (messagebox "current strings isn't an absolute path") rendOutputFilename = a.saverend_ET.text ) catch( print "g iso" ) button png_BTN ".png" width:35 offset:[-18,0] align:#center tooltip: "insert png extension" on png_BTN pressed do try ( if pathConfig.isAbsolutePath (a.saverend_ET.text as string) == true then ( ipngio a.saverend_ET.text = (a.saverend_ET.text as string + ".png") ) else (messagebox "current strings isn't an absolute path") rendOutputFilename = a.saverend_ET.text ) catch( print "g iso" ) button exr_BTN ".exr" width:35 offset:[-36,0] align:#center tooltip: "insert exr extension" on exr_BTN pressed do try ( if pathConfig.isAbsolutePath (a.saverend_ET.text as string) == true then ( a.saverend_ET.text = (a.saverend_ET.text as string + ".exr")) else (messagebox "current strings isn't an absolute path") rendOutputFilename = a.saverend_ET.text ) catch( print "g iso" ) ) rcMenu rendernow ( menuItem one "select its target" enabled: (PresetOnCams.camlist.selection != 0) menuitem two "render from selected cam" enabled:( (PresetOnCams.camlist.selection != 0) and (PresetOnCams.enablesetup.text == "setup is enabled") ) on one picked do ( select (execute ("$'" + PresetOnCams.camlist.selected + ".target'")) ) on two picked do ( PresetOnCams.rendernow.pressed() ) ) rollout PresetOnCams "Presets on My Cams" ( local width_ID=1 local height_ID=2 local areatorender_ID=3 local rendengine_ID=4 local secsolver_ID=5 local giaa_ID=6 local msi_ID=7 local lsm_ID=8 local intres_ID=9 local displace_ID=10 local raydepth_ID=11 local UHDpreset_ID=12 local UHDprecise_ID=13 local BucketSample_ID=14 local BucketPass_ID=15 local BucketAdapt_ID=16 fn checkcamspreset = ( if getappdata (selectedcam()) -10000 != "setup is enabled" then ( if PresetOnCams.enablesetup.enabled == false do PresetOnCams.enablesetup.enabled = true enablecontrols false "setup is disabled" ) else ( enablecontrols true "setup is enabled" ) ) fn AdditionalRolls = ( if PresetOnCams.enablesetup.text == "setup is enabled" then ( if PresetOnCams.secondarysolver_DDL.selection == 3 then AddSubRolls_fn presetoncams_UHD else RemoveSubRolls_fn presetoncams_UHD if PresetOnCams.renderengine_DDL.selection == 2 then AddSubRolls_fn presetoncams_bucket else RemoveSubRolls_fn presetoncams_bucket ) else ( removerollout presetoncams_UHD removerollout presetoncams_bucket ) ) fn h_isWdivR = (presetoncams.h.value = (presetoncams.w.value) as float / (presetoncams.r.value) as float) fn r_isWdivH = (presetoncams.r.value = (presetoncams.w.value) as float / (presetoncams.h.value) as float) fn w_isRtimH = (presetoncams.w.value = (presetoncams.r.value) as float * (presetoncams.h.value) as float) combobox camlist "" items: (for i = 1 to cameras.count collect ( if matchpattern cameras[i].name pattern:"*target" == true do continue; ( cameras[i].name ) )) height:7 selection:0 on camlist selected itm do ( selectcamsnode() updaterollcontrols() checkcamspreset() AdditionalRolls() ) on camlist doubleclicked itm do ( setcamview() ) on camlist rightclick do ( popupmenu rendernow ) button enablesetup "Setup is Disabled" enabled:false border: false tooltip:"enable/disable setups for selected item" on enablesetup pressed do ( if enablesetup.text == "setup is disabled" then ( enablecontrols true "setup is enabled" if PresetOnCams.secondarysolver_DDL.selection == 3 do AddSubRolls_fn presetoncams_UHD if PresetOnCams.renderengine_DDL.selection == 2 do AddSubRolls_fn presetoncams_bucket ) else ( enablecontrols false "setup is disabled" if PresetOnCams.secondarysolver_DDL.selection == 3 do RemoveSubRolls_fn presetoncams_UHD if PresetOnCams.renderengine_DDL.selection == 2 do RemoveSubRolls_fn presetoncams_bucket ) ) on camlist entered txt do ( $.name = txt camlist.selected = txt ) spinner w "W:" across:2 range:[1,10000,renderwidth] offset:[-15,0] enabled:(EnableDisablectrls()) width:70 type:#integer tooltip: "default value is current output width" on w changed val do ( setappdataVal width_ID "PresetOnCams.w.value = " PresetOnCams.w ( if PresetOnCams.rb.state == on then ( h_isWdivR() ) else ( r_isWdivH() ) ) ( if PresetOnCams.WidthHeightPreview.state == on then ( h_isWdivR(); renderwidth=w.value ) else ( r_isWdivH(); ) ) ) spinner h "H:" range:[1,10000,renderheight] offset:[-5,0] enabled:(EnableDisablectrls()) width:65 type:#integer tooltip: "default value is current output height" on h changed val do ( setappdataVal height_ID "PresetOnCams.h.value = " PresetOnCams.h ( if PresetOnCams.rb.state == on then ( w_isRtimH() ) else ( r_isWdivH() ) ) ( if PresetOnCams.WidthHeightPreview.state == on then ( h_isWdivR(); renderheight=h.value ) else ( r_isWdivH(); ) ) ) spinner r "R:" across:4 enabled:(EnableDisablectrls()) range:[0,10000,getrendimageaspect()] width:75 type:#float tooltip: "image aspect ratio" on r changed val do try ( rendheightis_h() h_isWdivR() ) catch() label rbl "" offset:[-35,0] enabled:(EnableDisablectrls()) visible: true checkbutton rb "" enabled:(EnableDisablectrls()) width:16 height:16 offset:[-11,0] tooltip: "lock/release image aspect ratio" enabled:(EnableDisablectrls()) images: #("LockButton_i.bmp",undefined,1,1,1,1,1) on rb changed state do ( if state == on then ( rbl.visible=true r.visible=false rbl.text="R: " + r.value as string ) else ( rbl.visible=false r.visible=true ) ) checkbutton WidthHeightPreview "check VP" height:16 offset:[-5,0] enabled:(EnableDisablectrls()) tooltip:"preview the outputsize setting to viewport, uncheck to return the outputsize original setting" on WidthHeightPreview changed state do ( if state == on then ( setcamview() setAppData (selectedcam()) -1 (renderwidth as string) setAppData (selectedcam()) -2 (renderheight as string) renderwidth = PresetOnCams.w.value renderheight = PresetOnCams.h.value if a.isdisplayed == true do (a.w.enabled = false; a.h.enabled = false) ) else ( renderwidth = (getAppData (selectedcam()) -1) as integer renderheight = (getAppData (selectedcam()) -2) as integer if a.isdisplayed == true do (a.w.enabled = true; a.h.enabled = true) ) ) label outputsizepreset_lbl "preset: " offset:[-15,3] across:2 enabled:(EnableDisablectrls()) dropdownlist outputsizepreset "" items:#("custom",(getMySetting_fn #outputpreset1),(getMySetting_fn #outputpreset2),(getMySetting_fn #outputpreset3),(getMySetting_fn #outputpreset4)) enabled:(EnableDisablectrls()) width:90 tooltip:"imageaspect preset" align:#right on outputsizepreset selected sell do ( width = presetoncams.w height = presetoncams.h case outputsizepreset.selection of ( 1: (r.visible = true; rbl.visible=false; a.rb.state = off) 2: ( width.value= SpinnerDefaultVal_fn #width1; height.value= SpinnerDefaultVal_fn #height1; r_isWdivH() ) 3: ( width.value= SpinnerDefaultVal_fn #width2; height.value= SpinnerDefaultVal_fn #height2; r_isWdivH() ) 4: ( width.value= SpinnerDefaultVal_fn #width3; height.value= SpinnerDefaultVal_fn #height3; r_isWdivH() ) 5: ( width.value= SpinnerDefaultVal_fn #width4; height.value= SpinnerDefaultVal_fn #height4; r_isWdivH() ) ) ) label renderenginelbl "Rend. Engine:" offset:[-35,7] enabled:(EnableDisablectrls()) label secondarysolver_lbl "Second. GI:" offset:[-30,7] enabled:(EnableDisablectrls()) dropdownList renderengine_DDL "" selection: ( case renderers.current.shading_renderEngine of ( 2: 1; 0: 2) ) tooltip:"Render engine" enabled:(EnableDisablectrls()) items:#("Progressive","Bucket") width: 65 align: #center pos: (renderenginelbl.pos+[75,-3]) on renderengine_DDL selected sell do ( setappdataSelection rendengine_ID "PresetOnCams.renderengine_DDL.selection = " PresetOnCams.renderengine_DDL if PresetOnCams.renderengine_DDL.selection == 2 then AddSubRolls_fn presetoncams_bucket else RemoveSubRolls_fn presetoncams_bucket ) dropdownList secondarysolver_DDL "" selection: ( case renderers.current.shading_secondarySolver of ( 0: 1; 1: 2; 4: 3 ) ) tooltip:"Secondary solver GI" enabled:(EnableDisablectrls()) items:#("none","Path tracing","UHD cache") width: 65 align: #center pos: (renderenginelbl.pos+[75,20]) on secondarysolver_DDL selected sell do ( setappdataSelection secsolver_ID "PresetOnCams.secondarysolver_DDL.selection = " PresetOnCams.secondarysolver_DDL if secondarysolver_DDL.selected == "UHD cache" then ( AddSubRolls_fn presetoncams_UHD ) else ( RemoveSubRolls_fn presetoncams_UHD ) ) spinner giaa_SPN "GI/AA:" across:2 range:[1,286,renderers.current.shading_giToAaRatio] width:70 enabled:(EnableDisablectrls()) offset: [-7,0] type:#integer align:#center tooltip:"GI vs. AA balance" on giaa_SPN changed val do ( setappdataVal giaa_ID "PresetOnCams.giaa_SPN.selection = " PresetOnCams.giaa_SPN ) spinner msi_SPN "MSI:" range:[0,1000,renderers.current.shading_maxSampleIntensity] offset:[0,0] width:70 enabled:(EnableDisablectrls()) type:#float tooltip:"Max Sample Intensity" on msi_SPN changed val do ( setappdataVal msi_ID "PresetOnCams.msi_SPN.selection = " PresetOnCams.msi_SPN ) spinner LSM_SPN "LSM:" across: 2 width:60 enabled:(EnableDisablectrls()) offset:[-3,0] range:[0,100,renderers.current.lights_samplesMult] type:#float align:#right tooltip:"Light Samples Multiplier" on LSM_SPN changed val do ( setappdataVal lsm_ID "PresetOnCams.LSM_SPN.selection = " PresetOnCams.LSM_SPN ) spinner maxraydepth_SPN "Rays:" range:[0,100,renderers.current.shading_maxRayDepth] offset:[3,0] width:70 enabled:(EnableDisablectrls()) type:#integer tooltip:"maximum number of light bounces" on maxraydepth_SPN changed val do ( setappdataVal 11 "PresetOnCams.maxraydepth_SPN.selection = " PresetOnCams.maxraydepth_SPN ) spinner intres_SPN "Internal resolution:" width:65 enabled:(EnableDisablectrls()) align:#right range:[1,4,renderers.current.image_internalResMult] type:#integer tooltip:"Internal resolution" on intres_SPN changed val do ( setappdataVal intres_ID "PresetOnCams.intres_SPN.selection = " PresetOnCams.intres_SPN ) checkbutton Displace_Cbtn "Enable Displacement" checked:renderDisplacements border:false enabled:(EnableDisablectrls()) tooltip:"enable/disable displacement globally" on Displace_Cbtn changed state do ( setappdataState displace_ID "PresetOnCams.Displace_Cbtn.selection = " PresetOnCams.Displace_Cbtn ) fn updaterendsetups = ( ( case PresetOnCams.renderengine_DDL.selection of ( 1: ( renderers.current.shading_renderEngine = 2) 2: ( renderers.current.shading_renderEngine = 0) ) ) ( case PresetOnCams.secondarysolver_DDL.selection of ( 1: ( renderers.current.shading_secondarySolver = 0) 2: ( renderers.current.shading_secondarySolver = 1) 3: ( renderers.current.shading_secondarySolver = 4) ) ) renderers.current.shading_giToAaRatio = PresetOnCams.giaa_SPN.value renderers.current.shading_maxSampleIntensity = PresetOnCams.msi_SPN.value renderers.current.lights_samplesMult = PresetOnCams.LSM_SPN.value renderers.current.shading_maxRayDepth = PresetOnCams.maxraydepth_SPN.value renderers.current.image_internalResMult = PresetOnCams.intres_SPN.value renderDisplacements = PresetOnCams.Displace_Cbtn.state if PresetOnCams_UHD.UHDpreset_CB.text == "still frame preset" then ( renderers.current.gi_uhdcache_preset = 0 ) else ( renderers.current.gi_uhdcache_preset = 1 ) renderers.current.gi_uhdcache_precision = PresetOnCams_UHD.UHDprec_SPN.value renderers.current.bucket_samplesPerIteration = PresetOnCams_bucket.bucketsamples_SPN.value renderers.current.bucket_passes = PresetOnCams_bucket.bucketpasses_SPN.value renderers.current.bucket_adaptiveThreshold = PresetOnCams_bucket.bucketthrshld_SPN.value ) button rendernow "Render Selected Camera" enabled:(EnableDisablectrls()) tooltip:"render using selected camera setting" height:30 on rendernow pressed do ( storeWidth = renderwidth storeHeight = renderheight storeRendEngine = renderers.current.shading_renderEngine storeSecGI = renderers.current.shading_secondarySolver storeGiaa = renderers.current.shading_giToAaRatio storeMSI = renderers.current.shading_maxSampleIntensity storeLSM = renderers.current.lights_samplesMult storeMxraydepth = renderers.current.shading_maxRayDepth storeIntRes = renderers.current.image_internalResMult storeDispl = renderDisplacements storeUHDpreset = renderers.current.gi_uhdcache_preset storeUHDprecise = renderers.current.gi_uhdcache_precision storeBucketSample=renderers.current.bucket_samplesPerIteration storeBucketPasses=renderers.current.bucket_passes storeBucketThereshold=renderers.current.bucket_adaptiveThreshold storewidth; storeheight; storeRendEngine; storeSecGI; storeGiaa; storeMSI; storeLSM; storeMxraydepth; storeIntRes; storeDispl; storeUHDpreset storeUHDprecise storeBucketSample storeBucketPasses storeBucketThereshold updaterendsetups() setcamview() ( render camera:(selectedcam()) outputwidth:presetoncams.w.value outputheight:presetoncams.h.value vfb:false ) ( renderwidth = storewidth renderheight = storeheight renderers.current.shading_renderEngine = storeRendEngine; renderers.current.shading_secondarySolver = storeSecGI; renderers.current.shading_giToAaRatio = storeGiaa; renderers.current.shading_maxSampleIntensity = storeMSI; renderers.current.lights_samplesMult = storeLSM; renderers.current.shading_maxRayDepth = storeMxraydepth; renderers.current.image_internalResMult = storeIntRes; renderDisplacements = storeDispl; renderers.current.gi_uhdcache_preset=storeUHDpreset renderers.current.gi_uhdcache_precision=storeUHDprecise renderers.current.bucket_samplesPerIteration= storeBucketSample renderers.current.bucket_passes=storeBucketPasses renderers.current.bucket_adaptiveThreshold=storeBucketThereshold ) ) on PresetOnCams open do ( ( callbacks.addScript #nodeCreated "updatecamlist_fn()" id:#updatecamlist_fn1 callbacks.addScript #nodePostDelete "updatecamlist_fn()" id:#updatecamlist_fn1 callbacks.addScript #nodeRenamed "updatecamlist_fn()" id:#updatecamlist_fn1 callbacks.addScript #filePostOpen "updatecamlist_fn()" id:#updatecamlist_fn1 callbacks.addScript #sceneundo "createdcams_fn()" id:#updatecamlist_fn1 callbacks.addScript #sceneredo "createdcams_fn()" id:#updatecamlist_fn1 callbacks.addScript #nodeCloned "createdcams_fn()" id:#updatecamlist_fn1 ) ) on PresetOnCams close do ( callbacks.RemoveScripts id:#updatecamlist_fn1 ) ) --end of rollout ------------------------------------------------------------------------------------------------------------------- batas rollout fn changeCamsUHDbtntext = ( if renderers.current.gi_uhdcache_preset == 1 then ( presetoncams_UHD.UHDpreset_CB.text = "animation preset" ) else ( presetoncams_UHD.UHDpreset_CB.text = "still frame preset" ) ) rollout presetoncams_UHD "UHD cache" ( local UHDpreset_ID=12 local UHDprecise_ID=13 on presetoncams_UHD open do try ( changeCamsUHDbtntext() ) catch () button UHDpreset_CB "" width:108 border:false pos:[2,5] tooltip: "current text showed is current UHD preset\npress it to change the preset (still frame and animation)" on UHDpreset_CB pressed do ( if UHDpreset_CB.text == "animation preset" then ( UHDpreset_CB.text = "still frame preset" setappdataText UHDpreset_ID "presetoncams_UHD.UHDpreset_CB.text = " presetoncams_UHD.UHDpreset_CB; ) else ( UHDpreset_CB.text = "animation preset" setappdataText UHDpreset_ID "presetoncams_UHD.UHDpreset_CB.text = " presetoncams_UHD.UHDpreset_CB; ) ) spinner UHDprec_SPN "" range:[0.01,20,(renderers.current.gi_uhdcache_precision)] type:#float width:37 pos:(UHDpreset_CB.pos+[109,3]) tooltip:"quality - time tradeoff for UHD cache" on UHDprec_SPN changed val do ( setappdataVal UHDprecise_ID "PresetOnCams.UHDprec_SPN.value = " presetoncams_UHD.UHDprec_SPN ) ) ------------------------------------------------------------------------------------------------------------------- batas rollout rollout presetoncams_bucket "Bucket render engine" ( local BucketSample_ID=14 local BucketPass_ID=15 local BucketAdapt_ID=16 spinner bucketsamples_SPN "sample" range: [1,10000,(renderers.current.bucket_samplesPerIteration )] type:#integer width:70 pos:[15,5] tooltip: "How many samples to render for each pixel in the initial pass, before the adaptive rendering is used." on bucketsamples_SPN changed val do try ( setappdataVal BucketSample_ID "presetoncams_bucket.bucketsamples_SPN.value = " presetoncams_bucket.bucketsamples_SPN ) catch() spinner bucketpasses_SPN "pass" range:[1,10,(renderers.current.bucket_passes)] type:#integer width:37 pos: (bucketsamples_SPN.pos+[35,0]) tooltip: "rendering passes" on bucketpasses_SPN changed val do try ( setappdataVal BucketPass_ID "presetoncams_bucket.bucketpasses_SPN.value = " presetoncams_bucket.bucketpasses_SPN ) catch() spinner bucketthrshld_SPN "adaptivity thershold:" range:[0.001,1,(renderers.current.bucket_adaptiveThreshold)] type:#float scale:0.01 width:108 pos: (bucketsamples_SPN.pos+[-35,25]) tooltip: "adaptivity thereshold" on bucketthrshld_SPN changed val do try ( setappdataVal BucketAdapt_ID "presetoncams_bucket.bucketthrshld_SPN.value = " presetoncams_bucket.bucketthrshld_SPN ) catch() ) -------------------batas rollout Rollout FakeIncExc "Fake include/exclude dialog" ( checkbox filtergeometry "geometry" align:#right across:4 enabled:((geometry as array).count != 0) tooltip:"All objects list filter, check to show geometries only" on filtergeometry changed state do ( if state == on then ( FakeIncExc.objectslist.items = (sort (objectslistitem (IncToObjlist geometryclass) (rendselectedlist()))) ObjListFilter "filtergeometry" ) else ( FakeIncExc.objectslist.items=(sort (objectslistitem (allobjectslist()) (rendselectedlist()))) ) ) checkbox filtershapes "shapes" align:#right enabled:((shapes as array).count != 0) tooltip:"All objects list filter, check to show shapes only" on filtershapes changed state do ( if state == on then ( FakeIncExc.objectslist.items = (sort (objectslistitem (IncToObjlist shape) (rendselectedlist()))) ObjListFilter "filtershapes" ) else ( FakeIncExc.objectslist.items=(sort (objectslistitem (allobjectslist()) (rendselectedlist()))) ) ) checkbox filterlights "lights" align:#right enabled:((lights as array).count != 0) tooltip:"All objects list filter, check to show shapes only" on filterlights changed state do ( if state == on then ( FakeIncExc.objectslist.items = (sort (objectslistitem (IncToObjlist light) (rendselectedlist()))) ObjListFilter "filterlights" ) else ( FakeIncExc.objectslist.items=(sort (objectslistitem (allobjectslist()) (rendselectedlist()))) ) ) checkbox filterxrefs "xrefs" align:#right enabled:((for i in $* where hasproperty i #srcFileName == true collect i.name).count != 0) tooltip:"All objects list filter, check to show xrefs only" on filterxrefs changed state do ( if state == on then ( ) else ( ) ) edittext findobjectslist "find:" across:2 width:130 offset:[0,0] text:"currently not working" on findobjectslist edited txt do ( ) button addselectedobj "add selected object(s)" height:16 offset:[3,0] on addselectedobj pressed do (AddSelObjectToChoosenObj()) multilistbox objectslist " --All Objects--" across:2 width:130 height:20 offset:[0,0] items:(sort (objectslistitem (allobjectslist()) (rendselectedlist()))) on objectslist selected itm do ( WhenFocusedToAList FakeIncExc.choosenobj ">" ) on objectslist doubleclicked itm do ( MoveSelItem FakeIncExc.objectslist FakeIncExc.choosenobj ) multilistbox choosenobj " --Choosen Objects--" width:130 height:20 offset:[15,0] items: (rendselectedlist()) on choosenobj selected itm do ( WhenFocusedToAList FakeIncExc.objectslist "<" ) on choosenobj doubleclicked itm do ( MoveSelItem FakeIncExc.choosenobj FakeIncExc.objectslist ) button adds "" width:25 height:265 offset:[0,-272] on adds pressed do ( if choosenobj.selection.numberset != 0 then ( MoveSelItem FakeIncExc.choosenobj FakeIncExc.objectslist ) else ( MoveSelItem FakeIncExc.objectslist FakeIncExc.choosenobj ) ) radiobuttons IncExc_RenderSelected "" across:2 offset:[0,0] visible:false labels:#("include","exclude") default: ( case renderers.current.renderSelected_includeMode of ( true: 1 false: 2 ) ) on IncExc_RenderSelected changed state do ( case IncExc_RenderSelected.state of ( 1: ( renderers.current.renderSelected_includeMode = true ) 2: ( renderers.current.renderSelected_includeMode = false ) ) ) radiobuttons IncExc_mtloverride "" across:2 pos:(IncExc_RenderSelected.pos+[0,0]) visible:false labels:#("include","exclude") default: ( case renderers.current.mtlOverride_includeMode of ( true: 1 false: 2 ) ) on IncExc_mtloverride changed state do ( case IncExc_mtloverride.state of ( 1: ( renderers.current.mtlOverride_includeMode = true ) 2: ( renderers.current.mtlOverride_includeMode = false ) ) ) button clears "clear" offset:[110,-20] across:2 on clears pressed do ( choosenobj.items = #() objectslist.items = (allobjectslist()) ) button OK_renderSelected "OK" width:80 visible:false pos:(clears.pos+[50,0]) on OK_renderSelected pressed do ( renderers.current.renderSelected_list = (for i in choosenobj.items collect getnodebyname i) destroydialog FakeIncExc rendselectedIncExcText() ) button OK_mtlOverride "OK" width:80 visible:false pos:(OK_renderSelected.pos+[0,0]) on OK_mtlOverride pressed do ( renderers.current.overrideMtl_exclude = (for i in choosenobj.items collect getnodebyname i) destroydialog FakeIncExc mtloverrideIncExcText() ) ) -------------------batas rollout rollout customization "customization" ( fn setdropdownlist_A= (a.outputsizepreset.items = #("custom",(getMySetting_fn #outputpreset1),(getMySetting_fn #outputpreset2),(getMySetting_fn #outputpreset3),(getMySetting_fn #outputpreset4))) checkbox setroll1 "set tab general as default" checked:(setRollState_fn #roll1 "; AddSubRolls_fn a; crntools.a_tab.checked = true") on setroll1 changed state do ( if state == on then ( setMySetting_fn #roll1 "; AddSubRolls_fn a; crntools.a_tab.checked = true" ) else ( delMySetting_fn #roll1 ) ) checkbox setroll2 "set tab IR & DR as default" checked:(setRollState_fn #roll2 "; AddSubRolls_fn b; addsubrolls g; crntools.b_tab.checked = true") on setroll2 changed state do ( if state == on then ( setMySetting_fn #roll2 "; AddSubRolls_fn b; addsubrolls g; crntools.b_tab.checked = true" ) else ( delMySetting_fn #roll2 ) ) checkbox setroll3 "set tab Tools as default" checked:(setRollState_fn #roll3 "; AddSubRolls_fn c; crntools.c_tab.checked = true") on setroll3 changed state do ( if state == on then ( setMySetting_fn #roll3 "; AddSubRolls_fn c; crntools.c_tab.checked = true" ) else ( delMySetting_fn #roll3 ) ) checkbox setroll4 "set tab Render Setup as default" checked:(setRollState_fn #roll4 "; AddSubRolls_fn d; crntools.d_tab.checked = true") on setroll4 changed state do ( if state == on then ( setMySetting_fn #roll4 "; AddSubRolls_fn d; crntools.d_tab.checked = true" ) else ( delMySetting_fn #roll4 ) ) checkbox setroll5 "set tab Environment as default" checked:(setRollState_fn #roll5 "; AddSubRolls_fn f; crntools.f_tab.checked = true") on setroll5 changed state do ( if state == on then ( setMySetting_fn #roll5 "; AddSubRolls_fn f; crntools.f_tab.checked = true" ) else ( delMySetting_fn #roll5 ) ) checkbox setroll6 "set tab Camera as default" checked:(setRollState_fn #roll6 "; AddSubRolls_fn presetoncams; crntools.g_tab.checked = true") on setroll6 changed state do ( if state == on then ( setMySetting_fn #roll6 "; AddSubRolls_fn presetoncams; crntools.g_tab.checked = true" ) else ( delMySetting_fn #roll6 ) ) local spinnerposW = 10 local spinnerwidthW = 65 local edittextwidth = 95 group "outputsize preset" ( edittext outputpreset1 "1." across:3 width:edittextwidth text:(getMySetting_fn #outputpreset1) on outputpreset1 entered txt do ( setoutputpreset_fn customization.width1 setoutputpreset_fn customization.height1 setmypresetname customization.outputpreset1 setdropdownlist_A() ) spinner width1 "W" offset:[spinnerposW,0] type:#integer width:spinnerwidthW range:[1,30000,(SpinnerDefaultVal_fn #width1)] on width1 changed val do ( setoutputpreset_fn customization.width1 ) spinner height1 "H" type:#integer width:(spinnerwidthW-5) range:[1,30000,(SpinnerDefaultVal_fn #height1)] on height1 changed val do ( setoutputpreset_fn customization.height1 ) edittext outputpreset2 "2." across:3 width:edittextwidth text:(getMySetting_fn #outputpreset2) on outputpreset2 entered txt do ( setoutputpreset_fn customization.width2 setoutputpreset_fn customization.height2 setmypresetname customization.outputpreset2 setdropdownlist_A() ) spinner width2 "W" offset:[spinnerposW,0] type:#integer width:spinnerwidthW range:[1,30000,(SpinnerDefaultVal_fn #width2)] on width2 changed val do ( setoutputpreset_fn customization.width2 ) spinner height2 "H" type:#integer width:(spinnerwidthW-5) range:[1,30000,(SpinnerDefaultVal_fn #height2)] on height2 changed val do ( setoutputpreset_fn customization.height2 ) edittext outputpreset3 "3." across:3 width:edittextwidth text:(getMySetting_fn #outputpreset3) on outputpreset3 entered txt do ( setoutputpreset_fn customization.width3 setoutputpreset_fn customization.height3 setmypresetname customization.outputpreset3 setdropdownlist_A() ) spinner width3 "W" offset:[spinnerposW,0] type:#integer width:spinnerwidthW range:[1,30000,(SpinnerDefaultVal_fn #width3)] on width3 changed val do ( setoutputpreset_fn customization.width3 ) spinner height3 "H" type:#integer width:(spinnerwidthW-5) range:[1,30000,(SpinnerDefaultVal_fn #height3)] on height3 changed val do ( setoutputpreset_fn customization.height3 ) edittext outputpreset4 "4." across:3 width:edittextwidth text:(getMySetting_fn #outputpreset4) on outputpreset4 entered txt do ( setoutputpreset_fn customization.width4 setoutputpreset_fn customization.height4 setmypresetname customization.outputpreset4 setdropdownlist_A() ) spinner width4 "W" offset:[spinnerposW,0] type:#integer width:spinnerwidthW range:[1,30000,(SpinnerDefaultVal_fn #width4)] on width4 changed val do ( setoutputpreset_fn customization.width4 ) spinner height4 "H" type:#integer width:(spinnerwidthW-5) range:[1,30000,(SpinnerDefaultVal_fn #height4)] on height4 changed val do ( setoutputpreset_fn customization.height4 ) ) -- group end ) ---------------CALLBACKS ( callbacks.addScript #tabbedDialogCreated "OnOffCtrls_fn false" id:#disablerollouts callbacks.addScript #tabbedDialogDeleted "if iscoronaascurrent() == true do OnOffCtrls_fn true" id: #disablerollouts ) -------------------------------------------------------------------disable IR button while rendering ( callbacks.addScript #preRender "OnOffBtn_WhenRender_fn false" id:#IRnotification2 callbacks.addScript #postRender "OnOffBtn_WhenRender_fn true" id:#IRnotification2 ) -------------------------------------------------------------------update rollout controls values ( callbacks.addScript #filePostOpen "CheckRendererOnFileOpen(); if iscoronaascurrent() == true do OnOffCtrls_fn true" id:#renddialogupdate callbacks.addScript #tabbedDialogDeleted "updateAllCtrls_fn()" id:#renddialogupdate callbacks.addScript #systemPreNew "print \"entute direset\"" id:#renddialogupdate ) -------------------------------------------------------------------------------------------------------------------- declare rollouts/dialog creation createdialog CrnTools menu: mainmenu CrnTools.SR1.height = (systemTools.GetScreenHeight()-100) CrnTools.SR1.pos += [0,-5] cui.RegisterDialogBar CrnTools style:#(#style_titlebar, #style_sysmenu, #style_minimizebox,#cui_dock_left, #cui_dock_right, #cui_floatable, #cui_handles) cui.DockDialogBar CrnTools #cui_dock_left defaultrolls() ( if d.isDisplayed == true then ( if renderers.current.shading_renderEngine == 0 then addsubrollout CrnTools.sr1 k if renderers.current.shading_secondarySolver == 4 then addsubrollout CrnTools.sr1 j ) ) ) else ( coronaquery() )