MAX SDK之插件概述(一)

来源:互联网 发布:产品运营数据分析报告 编辑:程序博客网 时间:2024/06/04 19:58

一、MAX 插件概述

1.1 插件的功能

      所谓插件,就是开发者自己开发的一组程序用以扩展MAX的功能。如果使用过3DS MAX,我们会发现,MAX的每组功能都封装在某一类插件中,如创建物体,修改器等等。MAX为了支持其更大的扩展性,允许程序员根据自己的需要,创建新的插件,同MAX系统进行交互,完成一些特定的功能。

      在SDK中,提供了许多类供程序员使用,通过这些SDK类,程序员可以创建不同的插件。主要的插件类型有:过程对象插件、修改器插件、命令面板插件、材质/纹理插件、图像处理插件、导入导出插件、渲染插件以及其他插件。后面将逐个对这些插件进行一些简要的解释。

       在介绍各类型插件之前,我们简单介绍一下SDK类的特点。在MAX SDK中,大多数类都是从三个抽象基类中继承下来的,这三个基类分别是:(1)Animatable类,动态类,该类是根类,包括其他两个基类也继承于此根类;(2)ReferenceMaker类,引用创建者类,创建引用的物体会对引用目标存在依赖性;(3)ReferenceTarget类,引用目标类,当被引用的物体发生改变时,它通知创建引用的物体,以告知其自己发生的变化,以便创建引用的物体做相应的调整。引用关系在MAX中的地位非常重要,后面我们还要对它进行详细的说明。

1.2 过程对象插件

      过程对象是指用户可以在视口中创建和操作的物体,比如摄像机、灯光、长方体或球体等几何物体,以及其他一些复杂的虚拟物体。过程对象可以有自己的一些自定义属性,以球体为例,可以定义它的半径以及分段数等等。具体来说,过程对象包括一下对象:

      (1) 基本几何体(Primitive Geometry)

           在MAX中,存在两种基本几何体,一种是标准基本体(Standard Primitives),扩展基本体(Extends Primitives),标准基本体包括长方体、圆锥体、球体、几何球体、圆柱体、管状体、圆环、四棱锥、茶壶和平面等,扩展基本体包括异面体、环形结、切角长方体、切角圆柱体、油罐、胶囊、纺锤、L-Ext、球棱柱、C-Ext、环形波、棱柱、软管等等。显然,扩展基本体是标准基本体的一种扩展。

      (2) 复合对象(Compound Objects)

           所谓复合对象就是说通过几个对象的组合创建一个新的对象,例如布尔、变形、散布、连接、一致、图形合并等等。

      (3) 面片栅格(Patche Grids)

           用户可以在3DS MAX中创建三角面片和面片栅格,即通常说的三角形面片和四边形面片。

      (4) NURBS曲面

           NURBS曲面是非均匀有理B样条曲面,包括点曲面和CV曲面(控制顶点曲面)。

      (5) 辅助对象(Helper Objects)

           辅助对象用来辅助建模的对象,包括虚拟对象、群组、代理、栅格、卷尺、量角器、指南针等等。

      (6) 基本形状(Primitive Shapes)

           基本形状包括线。圆、弧、椭圆、矩阵、圆环、多边形、圆环、星型、文本、螺旋线、截面。

      (7) 过程形状(Procudural Shapes)

           所谓过程形状是一组可以被编辑的形状,一般来说,它们可以被编辑样条线修改器、曲面修改器或面挤压修改器编辑。例如过程线段、文本。

      (8) 粒子系统(particles)

           粒子系统插件包括雪、粒子云、粒子阵列等等。开发者可以开发过程粒子对象系统插件,比如基于烟火、爆炸和水波等过程运动的粒子,或者根据对象表面变化而起伏的粒子,比如电场或火焰等对象表面的粒子。

      (9) 灯光(Lights)

           开发者可以开发自定义灯光插件,比如点光源、线光源、聚光灯等。跟灯光插件相关的是明暗插件。

      (10) 摄像机(Cameras)

           可以开发自定义摄像机。MAX中已有的摄像机是目标摄像机和自由摄像机。

1.3 修改器插件

      修改器分为两类,一种是对象修改器,主要应用在对象的局部空间,例如弯曲、锥化、拉伸等变形修改器,还有挤压和曲面修改器。另一种是编辑修改器,这类修改器可以编辑指定类型的对象,例如编辑网格修改器可以作用于那些能够转换为三角面片网格的对象;编辑面片修改器可以作用于那些可以将自己转换为面片的对象。编辑修改器一般可以选择对象的子对象,并且对子对象进行平移、缩放、旋转等操作,它们还可能支持一些扩展操作,比如编辑网格修改器中的挤压选项。

1.4 命令面板插件

      命令面板插件主要包括空间扭曲、控制器、系统。

      (1) 空间扭曲(Space Wraps)

          空间扭曲是最基本的对象修改器,它作用于对象所在的世界坐标系而不是局部坐标系,所以又称之为世界空间修改器。空间扭曲是一种非渲染对象,它影响场景中位置与方向与其相关的对象,例如波形空间扭曲修改器使用正弦波影响其周围的对象。其他类型空间扭曲如爆炸、旋风、重力场等。

          空间扭曲在创建命令面板的分支面板中创建,这使得它与其他的修改器略有不同,因为它综合了空间扭曲对象和空间扭曲修改器。

          空间扭曲同样可以影响粒子系统,例如一个力场可以通过空间扭曲作用于粒子系统,力场可以实现空间定位、测速和受力时间,然后计算粒子的加速度以修改粒子的方向。

          碰撞也能通过空间扭曲影响粒子系统,碰撞检测粒子的位置和速度,确定在下个时间周期是否会与之发生碰撞,如果发生碰撞,它将修改粒子的位置和方向。

      (2) 控制器(Controller)

          控制器主要用来控制动画,根据控制数据的不同,分为不同类型的控制器。最常见的控制器是插值控制器和关键帧控制器,其他控制器包括位置、旋转、缩放控制器,数学公式控制器和噪声控制器。

      (3) 系统(System)

          系统是多于一种类型对象,并协同控制器、修改器和空间扭曲的基本组合体。这些插件可以提供更高阶的参数控制,比如Biped系统就是使用了过程对象,主/从式控制器和环形数组的系统。

1.5 材质/纹理插件

     (1) 材质插件(Materials)

          该插件是开发者自定义的附加材质类型,比如标准材质、混合材质和复合材质。

     (2) 明暗插件(Shader)

          该插件与新的标准材质类型共同作用,它允许开发者往下拉列表中添加新的明暗算法(目前已有Constant, Phong, Blinn, Metal等),这仅仅用于写一个完整的材质插件。

     (3) 纹理插件(Texture)

          过程纹理插件定义2维或三维的函数,这些函数可以作为材质编辑器内明暗树结构中的贴图,贴图可以指定为环境光贴图、漫反射贴图、高光贴图、反光贴图、反光强度贴图、自发光贴图、透明度贴图、过滤色贴图、凹凸贴图、反射贴图、折射贴图。这些函数能随着时间的变化产生动态效果。纹理插件包括二维过程纹理、三维过程纹理、纹理合成器和颜色修改器。

     (4) 颜色修改器(Color Modifier)

         已经开发了3D Stdio/DOS SXP和相应的3ds max纹理插件的开发者需要研究一下Tex3D类,它提供了一种方法,该方法可以在3DS文件被导入并检测到相应的SXP时,自动创建纹理插件的实例。

     (5) 采样插件(Sampler)

         采样插件与标准材质共同工作,采样插件决定了像素在哪个区域内需要计算明暗和纹理采样。采样插件的接口在Super Sampling卷展栏的Sampler下拉列表中。

1.6 图像处理插件

     (1) 过滤器(Filter)

         过滤器可以对视频发送的数据流中的图像进行修改,该插件可以操作单一图像也可以组合两幅图像组合生成新图像。包括两种过滤方式:

         • 单向过滤(One Pass Filter) 该插件用某种方式调整视频发送流中的单一图像。

         • 层过滤(Layer Filter) 该图像将两个图像合成创建一个新图像。

     (2) G-缓冲(G Buffer)

         G缓冲用来存储每个像素的相关几何信息,在视频发送中所有插件都需要各式各样的G缓冲组件,当视频发送调用渲染器时,它占用全部的请求特权并要求渲染器创建G缓冲,开发者利用这些信息去创建没有G缓冲就实现不了的效果。

1.7 文件导入导出插件

     (1) 文件导入(File Import)

         这些插件允许3D几何体和其他场景数据以非3ds max的格式从外部文件导入到场景中。

     (2) 文件导出(File Export)

         这些插件允许3D几何体和其他场景数据以非3ds max的格式导出到外部文件中。

     (3) 图像装载和保存插件(Image Loading and Saving)

         图像的载入和保存插件使得3ds max载入保存的图像格式更加多样化,JPEG导入/保存插件就是一个例子,设备驱动也是从该类(BitmapIO)继承的。

1.7 渲染插件

     (1) 渲染器(Renderer)

         渲染器插件都是从Render类派生的,标准的3DS MAX扫描线渲染器也是从这个类派生的,从某种意义上来说,创建一个渲染器只需要实现很少的几个方法:Open(), Render(), Close(), ResetParams(), CreateParamDlg()。

     (2) 抗锯齿过滤插件(Anti-Aliasing Filter)

          该插件用来对图像进行过滤和抗锯齿处理。

     (3) 渲染效果(Rendering Effects)

         这是渲染菜单下面的一个新的选项,它显示一个Rendering Effects对话框,在这个非模态对话框中,用户可以选择和使用一个新的插件,叫作"Rendering Effect",它是一个渲染后的图像处理效果,它允许用户使用图像处理方法而不通过发送视频流。此插件具有一些附加的优点,即允许动态参数和对场景对象的动态引用。

     (4) 大气效果(Atmospheric effects)

         这些插件用来生成大气效果。3ds max中的雾和Volumn是两种大气插件,某些粒子效果利用大气插件可以更加有效地完成,比如,火的效果不是通过粒子系统来完成,而是通过三维空间内的一个函数(燃烧插件就是最好的例子)。用户无需渲染粒子,只需要通过射线求解一个函数即可。这些插件与等效的粒子系统相比,使用更少的内存。这些插件还可以参考场景中的其他物体。(比如3ds max 中的Volumn参考了场景中的灯光)

     (5) 明暗生成器(Shader Generator)

        这种插件可以方便地生成明暗效果,标准的3ds  max 贴图明暗和光线跟踪明暗效果都是这种形式。还有一个很方便的类叫作ShadBufRenderer,用来创建明暗贴图缓冲。目前还没有这种类型的插件实例,但是,这种插件还是可以通过Visual Studio的向导生成可用的模板。

1.8 实用工具插件

     (1) 工具插件(Utility) 这些插件对于执行一些模态过程非常有用,例如3D画图,动态过程等。这些插件可以从命令面板的工具页中找到。

     (2) 全局工具插件(Global Utility) 这些简单的工具在启动的时候就装载,也有在初始化后,但在消息循环之前仍然装载,这就是新的3ds max COM/DCOM接口的执行方式。

     (3) 轨迹视图(Track View) 这些插件通过工具栏上的"Track View Utility"图标来运行,点击该按钮可以弹出一个对话框,该对话框包含了系统里所有初始化了的轨迹视图工具。大多数工具是非模态的浮动对话框,但也有模态的工具对话框。这些工具提供了常见的作用于关键点、时间轴和功能曲线的实用功能。

1.9 其他插件

     (1) 捕捉插件(Snap) 这个类型的插件允许向3ds max捕捉系统提供自定义的点信息,比如一个门插件提供自定义的方式来捕捉铰链中心。

     (2) 声音插件(Sound) 声音插件可以控制3ds max中的声音和音乐制作。这些插件不仅可以控制它们自己生成的声音,而且可以控制系统时钟,因此它们可以调整伴随动画的外部声音输入/输出设备的时间点。声音插件生成的接口可以作为轨迹视图的一部分。

     (3) 颜色选择器(Color Selector) 该类型插件提供一种自定义的颜色拾取器,无论何时当标准的3ds max颜色样本面本被点击时,该拾取器就会出现。这些插件可以在首选项对话框中的通用标签中选择,颜色拾取器的选择将被保存到3DS MAX.INI文件中的"Color Section"部分,所以这种选择会一直维持,如果被选择的颜色拾取器DLL无效,则会恢复到默认的颜色拾取器。

     (4) 前端控制器(Front End Controller) 这些插件允许开发者完全接管3ds max用户接口,包括工具栏、下拉式菜单、和命令面板。

     (5) 动作捕捉输入设备(Motion Capture Input Device) 可以为动作捕捉系统编写动作捕捉输入设备的插件。

     (6) 图像浏览器插件(Image Viewer) 3ds max的File菜单下有一个图像浏览器,开发者可以替换该图像浏览器的DLL以扩展图像浏览的功能。

     (7) 通知程序(Notification Program) 这个程序在max sdk的/MAXSDK/HOWTO/UTILITIES/NOTIFY/NOTIFY.CPP文件中,该程序被网格管理者调用来控制网络进程通知。开发者可以为任意一种类型的通知属性编写另一个“Notify”程序。注意这个"Notify"程序可以是exe文件、bat文件、cmd文件等可执行文件,这就说明用户可以创建一个简单的脚本文件而不需要去编写一个二进制文件。当前使用的"Notify.exe"非常简单,因为它仅仅作为一个示范。它为每一事件播放一个声波文件。如果不是通过命令行调用该程序,它将弹出一个对话框询问用户以定义三个声波文件,对话框上有浏览按钮来为每一个声波文件选项选择文件,同时旁边存在播放按钮来测试声波文件。