加载中…
个人资料
FusioN
FusioN
  • 博客等级:
  • 博客积分:0
  • 博客访问:861,691
  • 关注人气:1,488
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

CGFusion从零开始——编写RenderMaster (四)环境模板

(2012-08-18 16:23:32)
标签:

一键渲染

从零开始

渲染大师

脚本编写

maxscript

杂谈

四.环境模板


    从这一章开始正式进入脚本编写阶段,为了适应初学者,将以逐个拆解的方式进行。这里不能给你灌输完整的脚本编写知识,但将会给你演示一个完整的编写流程。无论你多高手,在海量的maxscripts语法中,你不可能也没必要记住所有的代码和用法,所以必须参考《MAXScript Reference》官方帮助文档,在3dsmax中,先按F11再按F1,就能打开。在本套教程以后的内容中,如果你遇到代码编写上的疑问,可以在帮助文档中检索相关参考信息。

1.编写前的准备
    通常在我们编写一些需要调用相关素材的脚本时,需要先为其建立一个文件夹,并进行相应的目录规划,以便之后把素材分类存放在其中供脚本调用。
我把“渲染大师”的素材目录放在3dsmax根目录的Scripts文件夹中。
CGFusion从零开始——编写RenderMaster <wbr>(四)环境模板
2.界面编写
我个人编写脚本习惯从界面开始,为什么?因为界面的设定能体现出脚本的运作流程和功能参数,把中心的想法,画成界面,思路就基本清晰了,然后就是给每个控件编写代码,建立他们之间的信息传递联系。如下图
CGFusion从零开始——编写RenderMaster <wbr>(四)环境模板
    经过了几天的使用测试,后来我将“预置环境模板”这一块从“渲染大师”中分离出来,做成独立的插件,可单独启动,也可以通过渲染大师启动,这样的好处是,可以让用户只调用HDRI环境模板,而不使用渲染大师的其它个性化功能,不启动渲染大师,不使用它的LWF工作流等等。

    预置环境模板UI是一个RolloutFloater,即浮动卷展栏。可以这样理解,整个窗体是一个Floater,它是一个载体!窗体的名称是左上角的标题“预置环境模板”,而其中的卷展栏“清晨”“黄昏”等等就是rollout。打个比方说就,RolloutFloater是一个展柜,rollout是陈列在其中的展品,可任意添加。
    首先打开“ MAXscripts listener”和“MAXscripts Editor”。
CGFusion从零开始——编写RenderMaster <wbr>(四)环境模板
创建RolloutFloater:
输入如下代码,按Ctrl+E执行观察结果。
CGFusion从零开始——编写RenderMaster <wbr>(四)环境模板
代码解释
以下解释顺序是计算机执行代码时的逻辑顺序
10行:作用是创建一个RolloutFloater。其中"HDRIFloater"是RolloutFloater的变量名(变量名,是用来给计算机去识别它的,而不是给用户看的),“预置环境模板”则是显示给用户看的名称。“200 200”为RolloutFloater的初始尺寸。
11行:在创建的浮动窗"HDRIFloater"中添加一个卷展栏"Env1roll"。至此不难发现,让计算机去识某样东西,用的都是变量名!变量名的命名规则可以查看相关资料。
1-4行:设置“Env1roll”卷展栏和编写相关代码,在这个rollout中,“Env1roll”是变量名(name),“清晨”是显示的名字(caption)。“width”“height”是卷展栏展开后的尺寸。2-4行括号内则是这个rollout里的编写代码内容。
6-9行:这几行其实是这段代码中最先被执行运算的。当我们在重复运行同一个脚本时,每执行一次就会弹出一个UI面板,这几行代码的作用就是用来解决这个问题,当我们重复执行这段代码时,先检查是否该UI已打开,如果打开了,则会自动关闭,再打开新的UI面板。

在rollout里加入ImgTag控件:
   有了roloutfloater这个载体之后,接着开始为其添加内容。
   简单说一下“渲染大师”中的环境模板功能:预置环境模板是按不同时段划分HDRI环境模板的,当我们将鼠标放在UI中的缩略图中时,会自动弹出一个更大的预览窗口。当鼠标右击缩略图时,则会将HDRI模板应用到场景中。

CGFusion从零开始——编写RenderMaster <wbr>(四)环境模板
代码解释:
3行:定义一个全局变量(global),用于之后创建一个新的窗口来放大查看HDRI图像。
4行:定义一个局部变量(local),用于打开HDRI的缩略图,“Env1_1_pr”是这个位图的变量名,之前提及过,要让计算机识别某样东西,用的是变量名,没有身份东西是会被忽视的。注意看位图的路径,前面用的是“$Scripts”,他的意思是自动识别当前3dsmax的根目录位置,因为脚本编写出来,不可能只在本机上使用,要在其它机器上运行不出错,应该使用相对路径,而非绝对路径。
5行:创建一个“ImgTag”控件,变量名为“Env1_1”,它相当于一个按钮,而之前定义的位图,用于贴在它上面当图标,因为它不需要向用户显示名字,所以名字为空""。
关于全局变量和局部变量的区别,可以查看相关资料,大部分编程语言定义类似。代码编写到这里,零基础的朋友也不难发现,编程的顺序都是,先将需要用到的内容设定好,再执行最终的调用运算。

特别注意:
A:请不要使用大像素的图片作为图标和放大预览,如果使用4000像素甚至更高的图片用来做图标,在脚本启动后,你的电脑会很卡的。我是另外做了一个600*300的尺寸做图标和放大预览图的。
B:有的朋友可能会发现,启动脚本后,发现预览图比原来要暗得多,其实这个是系统gamma设置的问题,把系统gamma调成2.2就能以图像原来的亮度明显,在以后的章节中会有解释怎么用代码去自动调整这些问题。


为ImgTag添加事件(Event):
事件1:当鼠标放在图标上时,自动弹出放大预览图
CGFusion从零开始——编写RenderMaster <wbr>(四)环境模板
CGFusion从零开始——编写RenderMaster <wbr>(四)环境模板
代码解释:
7行:当!鼠标放置在变量名为“Env1_1”的控件上时,干!“mouseover”,即事件。语句“on....do....”意思是“当什么什么时,干!”执行下面括号中的内容。
9-14行:createdialog即创建对话框,destroydialog为关闭对话框。当写完一段rollout代码后,如果不加一行如“createdialog hdriview 600 264”的代码,执行脚本后,他是不会弹出相应对话框的。此处的“hdriview”就是之前定义的预览窗口的全局变量名,他是一个rollout。
“try destroydialog hdriview catch()”这句的作用,和检查RolloutFloater面板是否已打开相同,如果这个面板已经在打开,则先关闭它,再创建新的面板。
“try .....catch()”是条件判断语句,在max脚本编写中使用很频繁,用于尝试去执行某个操作,如果不行,则运行catch()括号中的代码,他能有效的避免因为运算错误而导致脚本崩溃,假死。

事件2:当鼠标右击图标时,应用当前HDRI环境模板
CGFusion从零开始——编写RenderMaster <wbr>(四)环境模板
代码解释:
18-20行:当我们在替换模板时,当然是需要删除上一个模板的,而这里的"ClaireIsMylove""ClaireAndMe""ClaireLoveMe",这三个名称分别是我制作环境模板时的三个东西,球天,VrayDomeLight,Vraysun。所有模板的设定都相同的。使用名称去访问物体使用的是“$”+"对象名称"。
当然如果你的HDRI模板制作方法不同,可以使用别的方法删除上个模板。
导入模板使用的是MAX的merge命令。代码如第21行,这里使用的同样是相对路径。调用的正是之前绑定制作的HDRI环境模板max文件。"#useMergedMtlDups"为合并文件时的材质设置,我这里使用的是合并材质。如果想使用其它方法可以在《MAXScript Reference》里检索“merge”

按ctrl+E运行以上代码试试,鼠标放在图标上,会弹出缩略图,鼠标右击,会合并HDRI环境到场景中。
CGFusion从零开始——编写RenderMaster <wbr>(四)环境模板
HDRI环境模板的编写方法到此为止,有精力研究《MAXScript Reference》的朋友可以在编写中加入更丰富的功能。

上的是一个rollout的制作方法,只做了“清晨”,如果需要做其它分栏,就如法炮制,定制多个rollout。可以参与以下代码:
CGFusion从零开始——编写RenderMaster <wbr>(四)环境模板


0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有