快捷导航

[MaxScripts] 浅析3ds max脚本

  [复制链接]
2013-8-5 13:06 / 查看: 22320 / 回复: 71
V5CG提示您:本文由admin发表,如需商业用途或转载请与admin联系授权,谢谢配合!
admin
积分:9395
管理员
1.概述:
    3ds max脚本功能强大,方便。本文是介绍3ds max脚本技术,运用一个实例来说明如何编写3ds max脚本,以及程序设计的基本思想。我尽量做到让没有看过和写过任何一行程序的朋友,也能读懂本文,并理解文章后面的源程序,我特意在脚本程序中加上适当的注释方便理解,读懂本文,读者至少使用过3ds max,本文后面的例子程序在3ds max环境下测试并能正常运行。   

2.基础知识:
    在计算机里,程序的概念是:所谓程序是由计算机能够执行的指令构成。程序是一种逻辑思维,程序逻辑主要包括三部分:1.顺序
2.判断
3.循环  
具体说明程序逻辑三部分:
(1)程序执行顺序,就像我们生活中常见的时间从前到后,从上到下,从左到右。
(2)程序中的判断,在C/C++等大多数计算机语言使用if( )语句来实现,下面以C/C++语言作为说明,if( )括号里边是判断的条件。
    我举个简单生活中的判断例子:假如今天不下雨,我就去看电影,假如今天下雨我就在家玩游戏,用程序可以这样写,每段程序后的”//”斜杆是程序注释,计算机执行时会忽略注释,把实现的功能写成函数,实现不同的功能写成不同的函数。if (today!=rain)          //假如今天不下雨   
SeeMovie( );              // 这里是看电影的函数
else                           //否则的话   
HomePlayGame( );    //在家玩游戏

(3)程序中的循环,就是让计算机不断的执行某段代码,直到不满足条件为止。
例如:今天我要在家玩十局星际争霸游戏,程序可以这样写:
for(int i=0; i<10; i++)    //玩十局游戏, i=0,每玩一次i+1直到i=9为止
{   
    PlayStarCraft(1);       //玩星际争霸游戏,1是函数参数,表示玩一局
}                                   //一对大括号表示循环范围  

3. 3DMax脚本基础知识:
(1)如何编辑3ds max脚本。
    3ds max脚本扩展名为*.ms ,可以使用记事本来编辑脚本另保存为*.ms,3ds max内置有一脚本编辑器,我们通常都使用这种方式来编写脚本,可以直接打开程序中的3ds max,在菜单栏中,有一个菜单MAXScript ,也可以通过快捷键Alt+M 来打开MAXScript菜单。菜单包括”新建脚本”,”打开脚本”,”运行脚本”, “MAXScript侦听器” ,”宏录制器”,”Visual MAXScript编辑器” 共六个项。
    这里我简要介绍一下后面三个项的作用。打开”MAXScript侦听器”用于显示我们在视图中的操作,以命令和参数的形式示。”宏录制器” 用于在操作视图时是否以命令字符显示我们的操作,这个功能用处非常大,我们可以把宏录制器录制下来的命令拷贝到我们自己的程序里边。不过要注意不是所以的操作都能录制宏,如“Video Post”的操作就无法录制成宏令。”Visual MAXScript编辑器”主要用于写3dsmax插件,以直观的方式编辑和定义插件介面外观,如卷展栏、菜单、按纽、微调控件等,还可以很方便的编写编辑事件处理程序。

(2)如何运行一个脚本。
    可以通过3ds max中的”MAXScript”菜单下的 ”运行脚本” 找到脚本所存储的目录并”打开”,即可看到运行脚本的效果。

(3)如何记录我们创建修改对象和设置动画的宏,便于把这些宏运用到我们自己的脚本当中。
    首先我们打开”MAXScript”菜单下的 ”宏录制器”,然后再打开“MAXScript侦听器”这样的话我们就可以在视图中操作,比如在透视图中创建一个Box长方体在“MAXScript侦听器”对话框中的顶部窗格中,会出现如下代码:
  1. Box lengthsegs:1 widthsegs:1 heightsegs:1 length:44.5692 width:40.1423 height:28.437 mapCoords:on pos:[20.6308,-22.0995,0] isSelected:on
复制代码
这个宏命令告诉我们我们创建了一个BOX,并定义了长宽高、段数及长宽高数值,是否打开纹理坐标,box创建在视图中的位置,当前是否选择了box。
    我们可以把这个宏拷贝,然后在“MAXScript侦听器”对话框中下边的窗格中,并修改部分数值,然后敲键盘Enter键,一切OK的话,透视图中会显示你用脚本创建的这个box长方体。  

4. 动手编写Max脚本:
    最后激动的时刻到了,我们动手写一个”雪山飞壶”3ds max脚本程序。
    这算是我们的第一个入门程序吧,(这个程序离实用还很远,庆幸的是你已经入门了)
    我们要实现的功能:
    1.创建一雪山,
    2.创建粒子雪
    3.创建一个茶壶
    4.创建“雪山飞壶”字幕
    5.创建一个摄影机,并设置动画。

    需要说明的是,max脚本程序中注释是使用“ -- ”两个横杆,写好的max脚本直接选择”MAXScript”菜单下的 ”运行脚本”,就可以看到效果。雪山飞壶脚本运用分模块来设计,先创建雪山 → 茶壶等对象 → 然后设置动画,每创建一个对象后赋给一个变量,这个变量用于设置动画,设置动画时可以很方便的调用设置好的变量。

00.jpg
    例如创建一个茶壶,并赋给一个荼壶变量,可以这样做  chahu=Teapot radius:9 ,变量直接可以使用,无需先申明,变量样式是这样:  “茶壶变量名= Teapot茶壶参数”。最后说明一下程序中” / ”斜杆是换行符,表示下一行继续书写程序。运行脚本后可以切换到摄影机视图查看到完整动画效果(如图示)。

以下是完整的” 雪山飞壶 ”脚本源程序:
----------------源程序开始----------------------
  1. --第一步.生成一个box 长方体设置box参数
  2. box length:140 width:140 height:5 /                     
  3. lengthsegs:30 widthsegs:30 heightsegs:2 /
  4. pos:[0, 0, 0] wirecolor:[50,250,245]/
  5. mapCoords:off
  6. --修改box 加入噪波修改使之成为一个凸起的山
  7. addModifier $box01(NoiseModifier fractal:true /      
  8. seed:9 /
  9. scale:100.0 /
  10. strength:[0, 0, 60] )



  11. --第二步.生成一个水壶并设置参数 赋予chahu变量
  12. chahu=Teapot radius:9 /
  13. smooth:on /
  14. segs:4 /
  15. body:on /
  16. handle:on /
  17. spout:on /
  18. lid:on /
  19. mapCoords:off /
  20. pos:[-117, -18, 65]/
  21. wirecolor:[233, 154, 229]



  22. --第三步.生成一个粒子雪景及设置参数并赋予变量sn
  23. sn = snow   pos:[4, 16, 100] /
  24. wirecolor:[255, 255,255] /
  25. viewportcount:100 /
  26. rendercount:100 /
  27. flakesize:2.0 /
  28. speed:10.0 /
  29. variation:2.0 /
  30. tumble:0.0 /
  31. tumblerate:1.0 /
  32. display:0 /
  33. start:(-30) /
  34. life:(65) /
  35. constant:true /
  36. emitterwidth:200 /
  37. emitterheight:200
  38. sn.hideEmitter = true



  39. --第四步.生成一个“雪山飞壶” 字体,赋予变量t
  40. t = text size:20 pos:[0,200,57] font:"宋体"  --设置字体
  41. t.text = "雪山飞壶"           --字为
  42. rotate t 90 [1,0,0]      --字体绕x轴旋转90度
  43. addModifier t (extrude amount:(-10))  --挤压成立体字
  44. textMat = standardMaterial diffuse:[178, 102, 178] --加入材质光
  45. t.mat = textMat



  46. --第五步.生成一个目标摄象机
  47. cam=Targetcamera fov:45 nearclip:1 farclip:1000 /
  48. nearrange:0 farrange:1000 /
  49. mpassEnabled:off mpassRenderPerPass:off /
  50. pos:[20.1, -191.169, 89.275] /  --isSelected:on
  51. target:(Targetobject transform:(matrix3 [1,0,0] [0,1,0] [0,0,1] [-9.8, 52.891, 11.745]))
  52. --第六步.茶壶动画
  53. animate on
  54. (  at time 100       --时间为100帧
  55.    (
  56.    move chahu [228.0, 0.0, 0.0]        --茶壶沿x轴位移
  57.    rotate chahu (angleaxis 360.0 [0,1,0]) --茶壶沿y轴旋转360度
  58.    move t [0, -200, 0]   --字效沿y轴位移
  59.    scale t [1.4, 1.4, 1.4]  --缩放字效
  60.    )
  61. )
  62. max zoomext sel all     --放大视图
  63. max time play          --场景创建完成 自动播放动画

  64. ----------------源程序结束---------------------
复制代码
你可以直接复制上面代码,放到你的MAX里运行试试。一下就创建好了~
原文是CGSIR写的,求交流。
加入土豪吧,爽!
浪剑飞舟 -2013-8-7 00:54:10 | 显示全部楼层
我顶。不错的老文章
酷哥学者 -2013-8-7 07:25:54 | 显示全部楼层
虽然我不会编写脚本,但是还是支持楼主
BAR斯文男生 -2013-8-7 11:43:45 | 显示全部楼层
前排来顶
Uker -2013-8-8 12:35:37 | 显示全部楼层
我靠!看来医生是都疯了!要不怎么让他出院了!
家穷人丑 -2013-8-8 13:22:31 | 显示全部楼层
很好的学习资料,我也要开始学脚本
漂亮蓝影 -2013-9-1 14:48:34 | 显示全部楼层
无法HOLD啦 >_<......
bx99 -2013-9-5 11:25:35 | 显示全部楼层
我只是路过打酱油的。
娴雨婷 -2013-9-14 12:55:59 | 显示全部楼层
过来看看的,喜欢
欢喜楊陽 -2013-9-20 08:03:30 | 显示全部楼层
这不就是我一直要追逐的吗?
流星的美 -2013-9-27 09:36:21 | 显示全部楼层
如果有代码的部分,可以详细介绍下代码的意思吗?谢谢
听听海 -2013-9-27 12:50:35 | 显示全部楼层
我只是来回帖的,无回帖,不论坛,这才是人道。
傷惢☆無淚 -2013-9-27 13:41:41 | 显示全部楼层
楼主是怎么做到的啊,太帅呆了~
老树根 -2013-9-27 14:35:59 | 显示全部楼层
帮你顶下哈!!
pp8848 -2013-9-27 14:36:06 | 显示全部楼层
路过,学习下
谁可相欹 -2013-9-27 15:56:01 | 显示全部楼层
楼主是怎么做到的啊,太帅呆了~
fswdnr -2013-9-27 16:17:12 | 显示全部楼层
虽然不懂,但真是收益匪浅
慕朵朵 -2013-9-27 16:40:42 | 显示全部楼层
看到这个,我和我的小伙伴们都惊呆了...
sxyzy -2013-9-27 16:51:48 | 显示全部楼层
我喜欢这些东西,请求更多的共享!
a7man1314 -2013-9-27 17:30:04 | 显示全部楼层
期待好工具,帮助我们提高效率,谢谢咯
bluebell周 -2013-9-27 18:26:11 | 显示全部楼层
对于些东西,我只想说,目前在我们这,搞不起啊~真羡慕
恒河沙 -2013-9-27 20:31:38 | 显示全部楼层
我也来试试看
等待Dè你 -2013-9-27 20:46:57 | 显示全部楼层
这要通宵多少个夜晚啊,佩服!
mail1974 -2013-9-27 21:12:51 | 显示全部楼层
效果很棒,真是难得给力的帖子啊。
Tools -2013-9-27 21:20:12 | 显示全部楼层
坐等教程啊。谢谢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则