共有回帖数 2 个
-
吧里都是各种建模和渲染大神,本人美术功底不行,渲染又不会。从事了几年游戏美工,自学了一些MAX的脚本语言,现来分享一些简单实用的功能
MaxScript 语法有些类似C++ 但是比C++要更高级,更方便。
废话不多。。。
首先是如何打开脚本窗口
MaxScript有两种脚本编辑窗口
左边的叫做Linstener窗口,用于运行单行程序以及给出反馈,一般用来测试代码。
右边的就是编辑窗口,可以运行一整套代码。
1.如何去除已经赋予物体的材质球。
赋予物体材质球,大家基本都会,不会的再去自学一下。。。。
但是如何去除材质球,相信许多人都一直想知道。。。。
通过选中物体,然后输入代码
$.material = undefined
可以轻松实现
接下来 来解释下这条代码。
》》》》》 符号: $ 《《《《《
名称:dollar sign
中文:美金符号
输入方法:在英文输入法下 shift+4
作用:返回当前选中物体的基本属性
如图红色区域为代码输入区域,白色为返回值区域
选中物体为一个立方体BOX 简单输入$
返回$Box为选中物体的类别,由于没有塌陷成多边形,所以物体类别是Box
Box442为物体的名称
之后[-794.023926,-1784.491333,0.000000]为物体的世界坐标,注意,这里单位显示为英寸,是MAX的标准单位。换算成其他单位的话 需要自行转化。
$.material 中 句号(.)的意义为 当前选中物体的某一项属性,material就是材质
$.material = undefined中 undefined 的意义为 “未定义”
等号(=) 顾名思义,就是设置参数
把选中物体的材质属性设置为未定义
就达到去除材质球的作用。
2.数学运算和逻辑运算
max的Listener窗口,还能进行一些数学运算。
比如 整数运算 50 + 50 对应输入100
sin 90度 结果为 1
反三角函数 asin 0.5的结果 则为30度
50的倒数为0.02
圆周率在max中 为 3.14159
接下来的3个 5/2是脚本中比较容易弄错的。
在计算机语言中 分 整数和浮点数两种不同的数字类型。
5除以2 被计算机认为整数运算 所以 5/2在日常生活中,答案为2.5,但是由于计算机默认成整数运算,所以会把小数部分忽略,所以返回的结果 就是2 (没有4舍5入)
下来的5.和5.0其实是一样的,计算机语言中 整数后跟小数点,就会被认为是浮点数,不需要再写成5.0。
之后 浮点数 与 整数进行运算,输出结果也为浮点数。 所以5.0/2结果为2.5
BTW:0和1之间的数字 也可以输入为 .x(x为数字) 而不用输入成 0.x
接下来 x = 1
很容易理解,就是 定义一个变量 x,x的值为1
所以返回结果为1
接下来x == 2
两个等号 为比较运算符(逻辑运算符的一种),可以理解为 x的值和2对比 如果相同,则返回true,如果不同,则返回false
可以看到 x == 2返回的是false 而 x == 1返回的true
还有其他的比较运算符 比如 (大于) , (小于) , =(大于或等于) , =(小于或等于) , !=(不等于 注意 感叹号 记作 非 运算符 也就是 not)
3.设置随机物体线框颜色
场景中,如果有一堆物体,但是为了容易分别,想设置成不同的颜色,
手动设置,肯定是噩梦。
接下来,神奇的脚本就可以轻松实现
首先,选中需要改变颜色的物体
有多种实现方法,我提供了2种:
$.count 会返回选中物体的数量
运用 for 循环
这是 for 循环的一个概念。 i 是一个变量,可以记成任何名称,比如 你可以改成 index 改成 object 改成 a 改成 b 都可以。。1 to 10代表 从1开始到10的数字(包括 1和10),
第一条中 我从1 循环到 物体的数量 每循环一次 就会 定义三个随机数 代表 r g b 红 绿 蓝 3个颜色 分别从 0 到 255(涉及到计算机图形知识,不详细解释)
random是一个max自带函数 需要2个数字作为参数 分别是上限和下限,用空格隔开 所以 记作 random 0 255 就是随机从0到255(包括)中的任意数字
接下来 selection
selection为当前选择集,其作用和$类似,具体区别,不太清楚(selection返回的是一个集合,都记作$selection 。$在选中单个物体时,会返回这个物体的属性)。。写作$也可以运作。
后面的表示选择集中 第 i 个物体 所以 selection[1]就表示为 该选择集中,排名第一个的物体。 之后 括号内的操作 都是针对这个物体,当全部执行完后,i会增加1 一直循环到 最后一个物体。
之后 wirecolor 为 物体的线框颜色(注意,如果有材质球,线框颜色不会影响到物体表面颜色。)
之后 (color r g b)
color 也是一个max自带函数 需要 红 绿 蓝 三种数值,分辨为 0到255的数字
第二种方法更为简单粗暴
直接将 i(stand for "index" index的首字母,其实 这里 i 改成 o(object)命名更合理 who care...) 定义为选择的物体
由于 i 本身就是一个物体变量, 所以 不需要再通过索引的数字来循环物体。
所以 i.wirecolor 直接就是 当前物体的线框颜色
4.检查物体缩放
在制作模型的时候,难免会用到缩放功能,导致物体的缩放量不是1,之后再导入导出模型到其他地方的时候,产生比例变化。 十分头疼
接下来 给大家一个检查缩放量的方法。
这次,我选择 在 geometry中进行挑选 geometry是几何体的英语,这样的操作,目的在于不会选中场景中的虚拟体,灯光,摄像机等非几何体。
where则是类似一个筛选的命令 在几何题中 只选择 transform中scale(transform有三项,分别为位移,旋转和缩放)。我只选择缩放属性有改变(不为[1,1,1]分别对应 x y z轴)
由于我不需要对那些物体进行操作,只需要筛选出来,所以这里用到collect i 而不是之前的 do
把选中的物体 加入到一个选择集中 我把这个集命名为c(collection)
这样
使用 select(选择)命令 选中选择集c 就可以把所有 带有缩放信息的物体挑选出来,单独进行x-form也行
配合 for i in $ do i.scale = [1,1,1],把尺寸调回到原先也可以。
5.重新实例关联物体。
在建模场景时,可能会有大量的重复复杂物体,会用到大量实例复制。
有时候,都是先做完一个物体,再去复制出其他的。 但是这样会造成比例不好把握。
现在提供一种反向思路,不如先把物体摆在那里,控制好比例,再去单独调整一个物体。
最后 通过脚本 把没有修改过的模型与完成的模型进行关联。
OK, Let's go
我不打算在这里教如何制作UI, 所以 这里 提供纯代码教学,如果对Maxscript有兴趣的话,可以自行搜索如何制作UI。
首先,定义为一个变量,让变量的值成为修改过的模型
选中修改过的模型
假设变量名为 x(源模型)
x= $
选中需要修改的模型
$.baseobject = x
这样,所有的模型都自动关联成源模型(还是实例关联,修改任何一个 其他都能相应修改)
大家要问了,那和重新复制 有什么区别呢?
。。忘记一个很重要的操作。。。。
在编辑窗口中,写完代码,
使用Ctrl+E进行全部执行
Shift+Enter为执行当前选中行。。
像这样一个圆形阵列,或者一些 不规则的角度甚至有大小缩放,重新复制 会比较麻烦。
运用上面的脚本,可以之前就定义好大小和角度。最后再关联形状。
短短两行代码,省去了大量的操作,是不是很方便呢。
大家有什么觉得特别重复劳动的问题,可以跟帖提问。。这些功能性的脚本,可以发掘。
楼主 2015-06-20 18:38 回复
-
66666666给楼主赞一个
1楼 2015-08-15 10:32 回复
-
好厉害呀 我很想学脚本语言,可是感觉太难了,还没下定决心!
2楼 2015-08-17 00:54 回复
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈 |
关于直线 |
版权声明 |
会员须知