用 MAXscript 在指定坐标轴范围内随机生成自定义数量的几何体

/ 522 阅读 / 1

工作中遇到个小问题,一个一个做太麻烦了,就尝试用 MAXscript 在指定坐标轴范围内随机生成自定义数量的几何体。

代码中 plane 是平面,如果你想要生成几何体,可以把 plane 修改成 boxsphere 等。

注意!sphere 的尺寸调整是半径 radius:120;box 的尺寸则是长宽高:length:320 width:480 height:200

MAXscript 代码

myitem = box length:320 width:480 height:10 /* 设置尺寸,替换其他几何体,对应几何体设置不同尺寸参数 */
for i = 1 to 27 do /* 数字 27 是生成数,加上第一个,共生成 28,调整 27 为你想生成的数量 */
(
	item_copy = copy myitem /* 创建一个原始副本 */
	item_copy.length = (random 320 480) /* 长度随机范围 */
	item_copy.width = (random 480 640) /* 宽度随机范围 */
	item_copy.height = (random 20 40) /* 高度随机范围 */
	/* 如果你不需要随机长宽高参数,可是把上面 length、width、height 三段代码删除 */
	item_copy.wirecolor = [i*25,i*50,(5-i)*50] /* 框颜色随机范围 */
	item_copy.pos = [(random -1200 1200),(random -500 500),(random -4000 5500)] /* 方括号内为 XYZ 轴,random 为随机,正负数字为生成坐标范围 */
)
 /* 设置生成几何体的分段数 */
myitem.lengthsegs = 1
myitem.widthsegs = 1
myitem.heightsegs = 1

item_copy.pos 等号后面的方括号内的三个圆括号 ()为 X、Y、Z 轴(顺序)。random 为随机,正负数字为生成坐标范围。上方代码的意思:随机在 X 轴±1200 范围内,随机在 Y 轴±500 范围内,随机在 Z 轴-4000 到 5500 范围内随机的生成几何体。

如何操作

  1. 打开 3dmax 软件
  2. 鼠标左键单击菜单 “脚本” 下的 “新建脚本”
  3. 在弹出的脚本编辑窗口中,选择输入窗口
  4. 在脚本编辑窗口中,将上面的代码复制粘贴
  5. 鼠标左键单击菜单 “工具” 下的 “计算所有”

你就可以看到随机生成自定义数量的几何体了。


上面的代码是生成 box 的,下面列举几个例子:

平面(Plane)

myitem = plane length:320 width:480 /* 设置尺寸,替换其他几何体,对应几何体设置不同尺寸参数 */
for i = 1 to 27 do /* 数字 27 是生成数,加上第一个,共生成 28,调整 27 为你想生成的数量 */
(
	item_copy = copy myitem /* 创建一个原始副本 */
	item_copy.length = (random 320 480) /* 长度随机范围 */
	item_copy.width = (random 480 640) /* 宽度随机范围 */
	/* 如果你不需要随机长宽高参数,可是把上面 length、width、height 三段代码删除 */
	item_copy.wirecolor = [i*25,i*50,(5-i)*50] /* 框颜色随机范围 */
	item_copy.pos = [(random -1200 1200),(random -500 500),(random -4000 5500)] /* 方括号内为 XYZ 轴,random 为随机,正负数字为生成坐标范围 */
)
 /* 设置生成几何体的分段数 */
myitem.lengthsegs = 1
myitem.widthsegs = 1

球体(Sphere)

myitem = Sphere radius:100 /* 设置尺寸,替换其他几何体,对应几何体设置不同尺寸参数 */
for i = 1 to 27 do /* 数字 27 是生成数,加上第一个,共生成 28,调整 27 为你想生成的数量 */
(
	item_copy = copy myitem /* 创建一个原始副本 */
	item_copy.radius = (random 80 160) /* 长度随机范围 */
	/* 如果你不需要随机长宽高参数,可是把上面 length、width、height 三段代码删除 */
	item_copy.wirecolor = [i*25,i*50,(5-i)*50] /* 框颜色随机范围 */
	item_copy.pos = [(random -600 600),(random -4000 5500),(random -1200 1200)] /* 方括号内为 XYZ 轴,random 为随机,正负数字为生成坐标范围 */
)
 /* 设置生成几何体的分段数 */
myitem.segs = 8

特殊用法

除了那些基础线、面和几何体,有时候你也会用到自己制作的模型,也想实现在指定坐标轴范围内随机排列自定义数量的模型。

使用前提是建立在已经有足够数量想要分布的模型情况下,选择这些模型再执行 MAXscript

代码如下:

for selObjs in $ do /* 这里的 $符号意思是你所选择的物体 */
(	
	selObjs.pos = [(random -600 600),(random -4000 5500),(random -1200 1200)] /* 方括号内为 XYZ 轴,random 为随机,正负数字为生成坐标范围 */
)

例如:我做了一个 logo 模型,想要在 X 轴±600 范围内,Y 轴-4000 到 5500 范围内,Z 轴±1200 范围内随机分布 20 个 logo 模型。

  1. 先复制 20 个 logo 模型
  2. 鼠标左键单击菜单 “脚本” 下的 “新建脚本”
  3. 在弹出的脚本编辑窗口中,选择输入窗口
  4. 在脚本编辑窗口中,将上方的代码复制粘贴
  5. 鼠标左键单击菜单 “工具” 下的 “计算所有”

好了,20 个 logo 模型就随机分布在指定坐标轴范围内了,如果你对分布不满意,可以在执行一次 “计算所有” 或者使用快捷键 Ctrl+E

说实话,代码肯定会有错误的地方,还有优化的余地,我也是摸索着折腾的,能用也就 ok 了。