快捷导航

[MaxScripts] 关于MAX场景垃圾清理的那些事

  [复制链接]
2013-8-31 19:56 / 查看: 28445 / 回复: 61
V5CG提示您:本文由半影发表,如需商业用途或转载请与半影联系授权,谢谢配合!
半影
积分:90
版主
纵观各种有关MAX场景优化和垃圾清理的小脚本,无论是一个ms的小文件还是拥有良好交互界面的插件工具,其核心内容大多是一些换汤不换药的东西。在这里,我们就以学习的角度来说说关于MAX场景的垃圾清理到底包含哪些内容。

1.清除空物体
所谓空物体,也就是在场景中存在有名称,但是就是没有实体形态可以看到的那一类对象。例如可编辑多边形,在其子层级的时候删除了所有的东西,而且它依然存在一个顶层级(进入多边形的任意一个子层级,Ctrl+A,然后点Delete键,最后返回到顶层级,这个时候是不是有一个对象被选择,而无任何内容呢)。通常这类对象是无用的,多了会占用大量内存,所以还是清除的好。

所使用到的脚本:
  1. NoneObj=#()
  2. for i in geometry do
  3. (
  4. a=getPolygonCount i ;
  5. if classof i!= VRayProxy do (if a[1]==0 then append NoneObj i)
  6. )
  7. if NoneObj.count == 0 then messagebox"没有空物体点击确定退出"
  8. else
  9. (
  10. messagebox"有空物体点击确定删除空物体";
  11. select NoneObj;
  12. delete $;
  13. )
复制代码
解释:
  1. NoneObj = #()
复制代码
--这是定义一个空的数组,它是用来存储空物体的
  1. for i in geometry
  2. do
复制代码
--for语句 搜索整个场景 如果某个对象属于geometry这个类别那么就当它是i  然后做以下的事情(此过程只对一个对象执行操作,操作结束后再检查另一个对象,然后亦同)
  1. (a=getPolygonCount i;
复制代码
--定义变量a ,它用来收集 i 的面数和点数;getPolygonCount返回一个二元数组,第一个元素包含面的数量,第二个元素包含点的数量。
  1. if classof i != VRayProxy do (if a[1] == 0
  2. then append NoneObj i
复制代码
--if语句 classof表示返回值的类别  在这里可以看做是返回对象的类别;a[1]表示数组中的第一个元素,这里就是表示面数;append表示添加的意思,在这里就是将 i 添加到NoneObj这个事先定义的数组中。
--那么整句解释起来就是:如果 i 的类别不是VRay代理物体,那么又如果 i 的面数为0,那么将 i 添加到NoneObj数组中
  1. if NoneObj.count == 0 then messagebox"没有空物体点击确定退出"
复制代码
--如果NoneObj数组中元素的数量为0,那么弹出提示窗口,内容如上
  1. else
  2. (
  3. messagebox"有空物体点击确定删除空物体";
复制代码
--否则,自己看吧  看不懂的补基础去 不解释


2.清除缓冲区
主要是为了清除历史,也就是你可以撤销(Ctrl+z)的那部分缓存
脚本:
  1. gc();
复制代码
就这么两个字母+括号+分号,没啥好解释的


3.清除一般动画中的无用数据
脚本:
  1. numNoteTracks
  2. trackviewnodes[#max_motionClip_manager]
  3. while (numNoteTRacks
  4. TrackViewNodes.Max_MotionClip_Manager > 0) do deleteNoteTrack
  5. TrackViewNodes.Max_MotionClip_Manager (getNoteTrack TrackViewNodes.Max_MotionClip_Manager1)
复制代码
这个说句实话,对于动画我还是了解不多,这段脚本的大概意思就是删除轨迹视图中的无用节点。大家直接复制用就行了。



4.清除reactor动力学缓存
  1. reactor.clearStoredCollisions()
复制代码
MAXScript自带的函数,清楚动力学缓存,解释不了



5.清除位图缓存
  1. freeSceneBitmaps();
复制代码
自带函数,不解释



6.烦人的particleView
这个东西是怎么产生的我也不是很清楚,它在场景中是找不到的,在你将场景合并到另一个场景时,可以在对象列表中看到它,如何在当前场景中清楚,脚本如下:
  1. delete $“particle view*”;
复制代码
解释:
--$“particle view*” 表示选择以particleview为名称开头的所有对象,*是通配符这个学脚本的应该都了解,不了解的要么面壁去要么补基础去
--值得注意的是在对象名称的两端有单引号,上用双引号是因为用单引号会跟网页程序产生冲突,so 一定要搞清楚particle view的两端用的是单引号 谢谢工具哥帮忙找出问题所在
--------------------------------------------------------------------------------------------------------------------------------------------------------


总结:
本文相当于是对场景清理脚本的一次简单梳理,提供脚本的同时,力所能及的对脚本进行解释,也算是让大家在用的同时学习一下脚本的写作思路和过程,了解一些常用的函数和命令。
由于个人能力有限,关于动画部分的解释无法完整的提供给大家,还请见谅。

加入土豪吧,爽!
半影 -2013-8-31 20:03:03 | 显示全部楼层
编辑了4、5次  总算基本没问题了  排版比较费劲  特别是代码工具 老是出错 不知道是我不会用 还是咋滴  坐个沙发吐个槽
Tools -2013-8-31 21:17:54 | 显示全部楼层
仔细看了下,你发代码时出的错误就在于第6条particle view用双引号就没事,单引号和网页和程序代码有冲突,被程序错读了
TACO -2013-8-31 21:18:11 | 显示全部楼层
谢谢分享
半影 -2013-9-1 21:45:57 | 显示全部楼层
Tools 发表于 2013-8-31 21:17
仔细看了下,你发代码时出的错误就在于第6条particle view用双引号就没事,单引号和网页和程序代码有冲突, ...

原来是酱紫啊,我说呢,我都复制到word编辑,然后再倒回来都出问题,感谢工具哥
期待~~ -2013-9-6 14:16:16 | 显示全部楼层
我看过版主发的同个教程还是不错的,值得学习。
菌男 -2013-9-14 17:42:53 | 显示全部楼层
我看过版主发的同个教程还是不错的,值得学习。
小雪 -2013-9-20 08:44:28 | 显示全部楼层
如果有代码的部分,可以详细介绍下代码的意思吗?谢谢
sunren -2013-9-27 12:50:37 | 显示全部楼层
小手一抖,积分到手!不过这里没积分的我也顶楼主~我就是特地来顶楼主的!
明天坏女人 -2013-9-27 13:30:38 | 显示全部楼层
学习了,谢谢分享、、、
小豌豆 -2013-9-27 13:39:19 | 显示全部楼层
楼主的工具在哪呢?
dew -2013-9-27 14:29:32 | 显示全部楼层
太给力了,楼主我爱你~
加尔福特 -2013-9-27 14:34:18 | 显示全部楼层
路过,支持一下啦
寒江雪 -2013-9-27 15:23:55 | 显示全部楼层
我是个凑数的。。。
zzmmhtd -2013-9-27 15:34:00 | 显示全部楼层
找到好贴不容易,我顶你了,谢了
密西西比河 -2013-9-27 16:15:17 | 显示全部楼层
真是郁闷啊!
VFXcg -2013-9-27 16:24:12 | 显示全部楼层
楼主的工具在哪呢?
猫少爷 -2013-9-27 17:08:49 | 显示全部楼层
淡定,淡定,淡定……
夜半未央 -2013-9-27 17:09:39 | 显示全部楼层
帮你顶下哈!!
美国甜心 -2013-9-27 18:32:37 | 显示全部楼层
现在很多人都是用C#,或者VS写SDK之类的,不过我不懂
小笨 -2013-9-27 20:57:43 | 显示全部楼层
这要通宵多少个夜晚啊,佩服!
kobe菲菲 -2013-9-27 21:08:32 | 显示全部楼层
我是来刷分的,嘿嘿
会跳舞的鞋 -2013-9-27 21:13:43 | 显示全部楼层
我要学习了,不错
忧郁者 -2013-9-27 21:42:26 | 显示全部楼层
写脚本的工具还有个叫Sublime的是不是?好像在哪见过介绍。
ssplyh -2013-9-27 22:21:05 | 显示全部楼层
如果有代码的部分,可以详细介绍下代码的意思吗?谢谢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则