前言
之前有篇博文实现了超低精度树的效果,那个时候就提到过可以用这种方法可以制作细节好像,面数超低的森林。
但是项目需要根据地形安排树木,那么就只能用人工去排面片的方法。
目前面片是弄好了,需要在Maya中弄出每个面片都有些许大小变化的效果。
这种操作人工操作会累死的,所以本插件就诞生了。
实现
原理其实非常简单,获取当前的物体放到字符串数组中,对字符串循环操作,将随机数加入到scale中。
废话不多,直接上代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| if (`window -ex ZSD_randScaleWin` != true){
window -w 310 -h 100 -t ("批量随机缩放 - 插件") -in "randomScale" -s true -tb true ZSD_randScaleWin;
columnLayout cr_mainCol;
separator -style "in" -w 300 -h 8;
rowColumnLayout -nc 2 -cw 1 70 -cw 2 230;
text -l "缩放值: " -al "right";
floatField -v 0 -w 60 -min 0 scaleVal;
setParent "..";
rowColumnLayout -nc 2 -cw 1 70 -cw 2 230; text -l "偏移振幅: " -al "right"; floatField -v 1 -w 60 offsetAmp; setParent ".."; separator -style "none" -w 300 -h 4;
button -l "随机大小" -al "center" -w 300 -c ("randScale();") -ann "" butSearchReplace;
showWindow ZSD_randScaleWin; } else { showWindow ZSD_randScaleWin; }
global proc randScale(){ float $scaleVal = `floatField -q -v scaleVal`;
float $offsetAmp = `floatField -q -v offsetAmp`; int $checkScale = 0; if($scaleVal == 0){ $checkScale = 1; } string $sel[] = `ls -sl `; int $len = size($sel); int $num; float $rand; if($checkScale == 0){ for($num = 0; $num < $len; $num++){ $rand =(`rand 0 1`*2 - 1)*$offsetAmp; setAttr ($sel[$num]+".scaleX") ($scaleVal+$rand); setAttr ($sel[$num]+".scaleY") ($scaleVal+$rand); setAttr ($sel[$num]+".scaleZ") ($scaleVal+$rand); } }else{ for($num = 0; $num < $len; $num++){ $rand = ((`rand 0 1`)*2 - 1 )*$offsetAmp; float $scaleX = `getAttr ($sel[$num]+".scaleX")`; float $scaleY = `getAttr ($sel[$num]+".scaleY")`; float $scaleZ = `getAttr ($sel[$num]+".scaleZ")`;
setAttr ($sel[$num]+".scaleX") ($scaleX+$rand); setAttr ($sel[$num]+".scaleY") ($scaleY+$rand); setAttr ($sel[$num]+".scaleZ") ($scaleZ+$rand); } } }
|
总结
在写随机数的时候本来用rand来实现随机效果的,但是不知道为什么物体太多的话随机效果就不明显了,又专研了很久才得出这个结果。