-- SM Scene Optimizer -- Ver 1.6 -- Started 5 Oct 2004 -- Written By Shibu Menon -- shibumenon74@yahoo.com -- ====================================================================================== -- Tho the script is called Scene Optimizer, the code itself might not be an optimized one, -- coz I'm not a hardcore programmer..... -- hven't commented the steps ..... sorry --======================================================================================= -- # This script should be of good use to animators, lighting artist, modellers, shading guys, -- if u r working on a very heavy scene (lotsa geometry) and have a problem navigating thro your scene.... -- # Launching the optimizer makes your scene very light (for navigation purpose) in the viewports ... -- # What u see in the viewport is not what will be rendered. -- # After launching optimizer, u can interactively put on or off the optimize effect on selection of objects.... -- using the "OPT ON" and "OPT OFF" buttons. -- # u can also set the level of optimization required on the whole scene or on selection of objects using the -- vertical slider .... taking the slider up means more optimization..... -- # The button "Kill Optimizer" will remove all optimizations from the entire scene (or selected objects if -- your have clicked on the "sel" radio button.... -- # "MS ON" and "MS OFF" with "scene" radio selected puts on or off Meshsmooth for all objects in the -- scene which have a meshsmooth applied ..... if "sel" radio is activated, the same works on selected objects only -- # When u render the scene, it shows u actual geometry, not optimized stuff..... -- # The button exclude objects is not yet implemented ..... -- # V1.4 : -- In Ver 1.4, clicking on launch optimizer also puts off textures of all objects seen in the viewport -- You can then interactively either put ON or OFF textures for the entire scene or selection of objects -- using the buttons "TexON" and "TexOFF" --=========================================================================================================== -- #V1.6 Rectified a stupid bug (It was actually a line which I forgot to remove) because of which Kill Optimizer -- took ages to execute. -- Kindly use at your own risk rollout SceneOptimizerRollout "SM SceneOptimizer" width:172 height:250 ( button ExcludeObjsbtn7 "Exclude Objects" pos:[32,16] width:104 height:17 button Setupbtn1 "Launch Optimizer" pos:[32,40] width:104 height:26 button OptiOnbtn2 "Opti ON" pos:[16,116] width:54 height:24 enabled:true button OptiOffbtn5 "Opti OFF" pos:[80,116] width:54 height:24 enabled:true button RemoveOptbtn9 "Kill Optimizer" pos:[32,223] width:104 height:24 slider Optzsld1 "" pos:[138,122] width:16 height:80 enabled:true range:[0,50,20] orient:#vertical ticks:5 GroupBox grp1 "" pos:[7,82] width:155 height:134 radiobuttons Optzrdo1 "" pos:[13,93] width:146 height:16 labels:#("Scene", "Selection") default:1 columns:2 button MSOFFbtn46 "MS OFF" pos:[16,148] width:54 height:24 button MSONbtn47 "MS ON" pos:[80,148] width:54 height:24 progressBar Launchpb1 "" pos:[15,71] width:136 height:8 color:[205,25,50] button TexOnbtn8 "Tex ON" pos:[80,180] width:54 height:24 enabled:true button TexOffbtn9 "Tex OFF" pos:[16,180] width:54 height:24 enabled:true global optsldVal = 20.0 fn matcollectr = ( selObjMats = #() selObjs = selection as array for i in selObjs do ( if ((classOf i.material != multimaterial) and (i.material != undefined) and (classof i != bonegeometry) and ((finditem selObjmats i.material) == 0)) then append selObjmats i.material if classOf i.material == multimaterial then ( for subm in i.material where ((finditem selObjMats subm) == 0) do append selObjMats subm ) ) return selObjMats ) fn AllTexOFF = ( try( for i in scenematerials do ( if classof i == Multimaterial then ( for stdm in i do ( try ( stdm.showinViewport = false )catch() ) ) else (try(i.showinviewport = false)catch()) ) )catch() ) fn AllTexON = ( try( for i in scenematerials do ( if classof i == Multimaterial then ( for stdm in i do ( stdm.showinVieport = on ) ) else i.showinviewport = on ) )catch() ) on SceneOptimizerRollout open do ( if SceneGeometry != undefined then ( if pb != undefined then Launchpb1.value = 100.*pb/(SceneGeometry.count) ) SceneOptimizerRollout.height += 1 global optsldVal = SceneOptimizerRollout.Optzsld1.value; ) on ExcludeObjsbtn7 pressed do ( max tool hlist try(global exclObjs = $ as array)catch() ) on Setupbtn1 pressed do ( max motion mode disablesceneredraw() persistent global SceneGeometry = for i in $* collect if (SuperclassOf i == GeometryClass and (classof i != biped_Object) and (classof i != boneGeometry) and (validmodifier i (optimize()) == true) ) then i else dontCollect persistent global pb = 1 for obj in SceneGeometry do ( Launchpb1.value = 100.*pb/(SceneGeometry.count) try( if (matchpattern obj.modifiers[1].name pattern:"SMOptimize" == false ) then addmodifier obj (Optimize()) ) catch(if obj.modifiers.count == 0 then addmodifier obj (Optimize())) try(obj.modifiers[#Optimize].name = "SMOptimize") catch() --obj.modifiers[#SMOptimize].facethreshold1 = optsldVal try (obj.modifiers[#SMOptimize].enabledinRenders = false) catch() try (obj.modifiers[#SMOptimize].facethreshold1 = optsldVal) catch() try (obj.modifiers[#MeshSmooth].enabledinviews = false) catch() pb += 1 ) try(AllTexOFF())catch() enablesceneredraw() --forceCompleteRedraw() ) on OptiOnbtn2 pressed do ( disablesceneredraw() if Optzrdo1.state == 1 then ( for obj in SceneGeometry do try ( obj.modifiers[#SMOptimize].enabled = true ) catch() ) else try for i in $ do ( i.modifiers[#SMOptimize].enabled = true ) catch() enablesceneredraw() ) on OptiOffbtn5 pressed do ( disablesceneredraw() if SceneOptimizerRollout.Optzrdo1.state == 1 then for obj in SceneGeometry do try( obj.modifiers[#SMOptimize].enabled = false )catch() else try for i in $ do(i.modifiers[#SMOptimize].enabled = false) catch() enablesceneredraw() ) on RemoveOptbtn9 pressed do ( max motion mode disablesceneredraw() if SceneOptimizerRollout.Optzrdo1.state == 1 then ( pb = scenegeometry.count for obj in SceneGeometry do ( try(deletemodifier obj obj.modifiers[#SMOptimize])catch() try (obj.modifiers[#MeshSmooth].enabledinViews = true) catch() pb -= 1 Launchpb1.value = 100*pb/(SceneGeometry.count) ) try(persistents.remove #pb)catch() try(persistents.remove #SceneGeometry)catch() ) else ( pb = selection.count for obj in selection do ( try ( try(deletemodifier obj obj.modifiers[#SMOptimize])catch() try (obj.modifiers[#MeshSmooth].enabledinViews = true) catch() --pb -= 1 --Launchpb1.value = 100*pb/(SceneGeometry.count) ) catch() ) ) enablesceneredraw() ) on Optzsld1 changed val do ( max motion mode disablesceneredraw() optsldVal = val print optsldVal if SceneOptimizerRollout.Optzrdo1.state == 1 then ( for obj in SceneGeometry do try(obj.modifiers[#SMOptimize].facethreshold1 = val)catch() ) else try (for i in selection do (i.modifiers[#SMOptimize].facethreshold1 = val)) catch() enablesceneredraw() ) on MSOFFbtn46 pressed do ( disablesceneredraw() if SceneOptimizerRollout.Optzrdo1.state == 1 then ( for obj in SceneGeometry do try (obj.modifiers[#MeshSmooth].enabledinViews = false) catch() ) else for i in selection do try (i.modifiers[#MeshSmooth].enabledinViews = false) catch() enablesceneredraw() ) on MSONbtn47 pressed do ( disablesceneredraw() if SceneOptimizerRollout.Optzrdo1.state == 1 then ( for obj in SceneGeometry do try (obj.modifiers[#MeshSmooth].enabledinViews = true) catch() ) else for i in $ do try (i.modifiers[#MeshSmooth].enabledinViews = true) catch() enablesceneredraw() ) on TexOnbtn8 pressed do ( try( disablesceneredraw() if SceneOptimizerRollout.Optzrdo1.state == 1 then try(AllTexON())catch() else ( selectedObjsMat = matcollectr() for i in selectedObjsMat do ( i.showinViewport = on ) ) enablesceneredraw() )catch(enablesceneredraw()) ) on TexOffbtn9 pressed do ( try ( disablesceneredraw() if SceneOptimizerRollout.Optzrdo1.state == 1 then AllTexOFF() else ( selectedObjs = selection as array selectedObjsMat = matcollectr() for i in selectedObjsMat do ( i.showinViewPort = off ) ) enablesceneredraw() ) catch(enablesceneredraw()) ) ) rollout refreshRollout "Refresh" width:162 height:50 rolledUp:true ( button refreshBtn "Refresh Scene" on refreshBtn pressed do ( enablesceneredraw() ) ) if opti != undefined do closerolloutFloater opti opti = newRolloutFloater "SM Scene Optimizer" 180 305 addrollout SceneOptimizerRollout opti addrollout refreshRollout opti