Recently I've been asked by a co-worker to write a very simple script to randomly shift UVW Map gizmo of selected objects by an amount in a given range. And that's what it does. I'm open to any suggestion as to how to increase its usefulness, though.
try destroyDialog randomizeUVWdialog catch()rollout randomizeUVWdialog "Randomize UVW" height:155 width:175(label lblVectorX "Range X:" pos:[15,7]label lblVectorY "Range Y:" pos:[15,25]label lblVectorZ "Range Z:" pos:[15,43]spinner spnRangeX "\xB1" width:65 range:[-1e9,1e9,0.] scale:1 pos:[100,7]spinner spnRangeY "\xB1" width:65 range:[-1e9,1e9,0.] scale:1 pos:[100,25]spinner spnRangeZ "\xB1" width:65 range:[-1e9,1e9,0.] scale:1 pos:[100,43]checkBox chxLinkSpinners "Use X Range For All" align:#center offset:[0,5]radioButtons rbCoords labels:#("World", "Local") offset:[0,7]button btnRandomize "RANDOMIZE" offset:[0,7] width:160 height:25mapped fn randomizeUvw obj range coord =(local howManyModifiers = obj.modifiers.countfor m = howManyModifiers to 1 by -1where isKindOf (local objMod = obj.modifiers[m]) Uvwmap doif coord then exit with objMod.gizmo.pos += [random -range.x range.x,random -range.y range.y,random -range.z range.z]/obj.scaleelse exit with objMod.gizmo.pos = ((objMod.gizmo.pos * obj.transform) + [random -range.x range.x,random -range.y range.y,random -range.z range.z]) * inverse obj.transform)on spnRangeX changed val doif chxLinkSpinners.checked do#(spnRangeY, spnRangeZ).value = valon chxLinkSpinners changed state do(#(spnRangeY, spnRangeZ).enabled = NOT stateif state do #(spnRangeY, spnRangeZ).value = spnRangeX.value)on btnRandomize pressed do(if selection.count == 0 thenmessageBox "Nothing selected!" title:"Error"else(setCommandPanelTaskMode mode:#modifywith undo label:"Randomize UVW" on randomizeUvw selection [spnRangeX.value,spnRangeY.value,spnRangeZ.value] (rbCoords.state == 2))))createDialog randomizeUVWdialog
USAGE: Select some objects with UVW Map modifier applied, enter maximum XYZ values in the range input fields and press Randomize. You can choose whether you want the shift to happen in the world coordinate system or local. The units will be always world units, independent on the scale of the object.
DISCLAIMER: All scripts and snippets are provided as is under Creative Commons Zero (public domain, no restrictions) license. The author and this blog cannot be held liable for any loss caused as a result of inaccuracy or error within these web pages. Use at your own risk.



This Post needs Your Comment!
hi, your script is great, i try it on max 2013. but it need that one add the uvwmap modifier one by one.
is there a way that the script add by it self the uvwmap modifier to a selection of objects, istanced or not?
also to chose which mapping way to add? like to randomize between cylindrical and spherycal?
muchas gracias, despues de un rato de busqueda di con tu codigo y la verdad, mis aplausos que gran trabajo.
Leave a Comment