搞图形的人都知道3D MAX,而3D MAX SDK就是在该软件基础上的一套软件开发包.至于该不该将3D MAX SDK归纳为中间件,不要在意这细节了,反正我觉得SDK和中间件就差不多是一个东西.实际上我看网上有些文章将中间件与插件混为一谈.在我看来,中间件是用于做软件开发的,插件则是已经开发好的软件产品.对于插件我们经常听到的是浏览器插件,OCX插件.游戏外挂也属于插件的一种.插件嵌入到另外的执行程序中,或扩展其功能,或篡改其功能,或进行恶意破坏.一般情况下,插件并不好写,它需要其宿主程序提供一套接口支持.例如我写的软件:WhyEngine游戏合集就有点插件的思想.

扯了些插件,貌似有点跑题了.其实我使用3D MAX SDK所做的事件就是写MAX导出插件.MAX导出插件只是其插件的一种类型,有导出也就会有导入插件.我感觉很多MAX自身的功能也是用插件写的.3D MAX SDK是一套博大精深的开发包.我虽然搞过很长时间的MAX导出插件,但却不敢说自己熟悉MAX SDK,甚至不敢说了解.只要看过MAXSDK的文档就会发现,这东西是个硕大的坑.我之所以将MAX SDK放到"我所遭遇过的中间件"这个系列文章的最后,又之所以迟迟没有写它,就是因为这个原因.

使用中间件是件苦逼的事情,写插件也是件苦逼的事情,那么最苦逼的事情莫过于使用MAX SDK写MAX插件了.你想:使用中间件是软件开发的底层一头被堵住了,插件是软件运行的一头被堵住了,那么使用MAX SDK写MAX插件绝对是件两头堵的事情.写的时侯总是处处受限,有数不尽的潜规则要注意,有数不尽的坑要去躲避,总会有莫名其妙又难以调试的BUG出现.有没有比写MAX插件更苦逼的事情?有,是维护一套已经开发好的,架构十分混乱的MAX插件.这就是我刚入行时干的事情.

话说这套MAX导出插件的历史可以追溯到十年前,期间有若干个人接手.给我的感觉是每当来了新人之后,就将它转交给新人去打理,当新人上手后,就迫不急待地交给更新的人去打理.而我运气不太好,前前后后维护了它两年多.这套代码给我的感觉就是,维护性极差,每次要修改功能,添加功能什么的,都非常费事.就连查找一个具体功能的代码都要找很久.在我维护的期间经历了无数次的BUG修改,无数次的功能添加,无数次与美术的扯皮.期间也无数次的想将其完全重构一遍,但始终没能实现.2012年的时候,重写引擎特效模块,于是也顺代着新写了一个特效导出的MAX插件,也算是给自己一个交待.这个特效导出的MAX插件是个很全面的东西,包括MESH模型导出,骨骼动画,材质动画,BILBOARD,刀光,拖尾,帖地.

与MAX SDK相应的还有一套MAX脚本系统.给我的感觉是MAX SDK能做的事情,MAX脚本全能做.同样可以使用MAX脚本写MAX导出插件.有些事情使用MAX脚本更合适,比如写一套文件批量导出的逻辑,还有MAX脚本的属性是可以保存到.max文件中的.当模型后在导出时需要设置一些选项,在没有使用MAX脚本之前,美术人员每次导出时都需要设置一遍导出配置,而使用了MAX脚本便可以将这些配置保存到max文件中.

最后写点对大家有用的东西:

(1)

MAX插件的界面不能使用: #include <afxwin.h>  而是使用: #include <atlwin.h> 也就是对话框对象的类定义为: class CDlgColorSet : public CDialogImpl<CDlgColorSet>而不是: class CDlgColorSet : public CDialog. 至于为什么,我也不知道,我写的MFC的程序也不多,总之就当它是龟腚吧.

(2)
     MAX中的数据组成为NODE的树形结构,遍历其数据元素时,从根结点开始,写个递归一层层的处理.而MAX提供给用户两套访问其数据的接口,一套是早期的,另一套是以IGame开头的.我印象中两套接口返回的数据可能会有不同,具体什么情况记不清了.我记得MAX8版本中IGame的返回切线副法线数据的接口是错的,之后的版本就好了.

(3)
      MAX骨骼动作建模.从MAX中拖BIP角色其骨骼的父子关系有几根是错的.如果动作文件中不记录每一帧的骨骼位移数据,则会出现错误.比如两个肩膀的父骨骼应该是胸,而MAX却给的是脖子.腰部的父子关系也不对,这个不容易发现.这个问题的解决办法是写一个简单的MAX脚本,重设这几根骨骼的父子关系.当然也可以在导出插件中用程序写死.

(4)

MAX中为Z轴向上的右手坐标系,而通常游戏中使用Y轴向上的左手坐标系,所以在导出文件要做坐标系变换.
      MAX的导出的骨骼其本地坐标系是左手还是右手?这个让我觉得很混乱,因为我发现导出的骨骼有左手坐标系的,也有右手坐标系的.因为这个问题不影响其对蒙皮的渲染,所以我也没去深究.

(5)
      从IGame接口获得一个MESH顶点的法线,切线,副法线.这三个是正交的吗?不是,我的测试发现,只有切线,副法线是正交的.一直觉得可以将顶点数据的副法线删去,但始终没办法删除.

(6)
      骨骼动作帧的导出,调用MAX的接口,是做采样,通常每秒采样30帧.游戏中对采样出的动作通常做线性插值处理,而在MAX中动作的变换为非线性的,所有总有人说游戏中的动作没有MAX的有力度,反正我是看不出来.这是个很难搞的问题,曾经纠结过很久,最后也不了了之.

我所遭遇过的中间件--3D MAX SDK的更多相关文章

  1. 我所遭遇过的中间件--VTK

    我所遭遇过的中间件--VTK Vtk是我接触的第一款软件开发包,它引导我对图形学的入门.我是先学的VTK,后学的OpenGL和D3D.VTK是专为图形学开发,特点是接口清晰,好上手,又含有大量的图像处 ...

  2. 3D MAX在立方体的使用

    3D  MAX不会“复用”立方体的顶点-----它直接计算该立方体需要12个三角面,每个三角面需要3个顶点,这样一共是36个顶点-----其实有大量顶点的位置是相同的,但3D  MAX不管这些.它认为 ...

  3. 3d max export for unity3d

    3d max export for unity3d @by 广州小龙 1.单位问题 建模的时候,设置unity的Units Setup的单位是Meters,导出FBX文件的时候,单位为厘米(Centi ...

  4. 3D MAX脚本教程1

    本文转载自http://jiurong995294.blog.163.com/blog/static/195133243201192531546490/ 方便以后须要时候使用 为什么要学习3D MAX ...

  5. 3d角色模型 制作 全过程 。3d max 。3d role model making process.3d Max

    3d角色模型 制作 全过程 .3d max 3d role model making process.3 d Max 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134 ...

  6. 转:3d max 2013 安装教程,凭着一种互联网精神提供给广大朋友

    看到有人在ps区咨询如何安装3d max教程,当你进行第一步之前,请先断开网络连接第一步:运行安装程序 第二步:接受安装协议,点击下一步会提示输入序列号 第三步:你会看到已经安装完成了的界面 第四部: ...

  7. 3D max导出的设置选项

    一3D max导出的设置选项

  8. 在3D Max中查看模型引用的贴图

    需求 假如在Max中有一个模型,想查看贴图 操作步骤 1.右上角点击 2.在弹出材质编辑器中 点击吸管 3.把吸管点击在角色模型上,然后点击M 4.点击查看图像 5.就能查看到模型使用的贴图

  9. 3d max地形建造

    这里来记录一下max里面建造一个地形. 1.创建一个平面,调节平面的属性,包括长宽,和分段 2.然后建造一个道路 然后选择样条线工具,调节线条的轮廓. 3.使用合并工具,将线条和地面进行合并成为一个物 ...

随机推荐

  1. 9-1 A Spy in the Metro uva1025 城市里的间谍 (DP)

    非常有价值的dp题目  也是我做的第一题dp    真的效率好高 题意:某城市的地铁是线性的 有n个车站 从左到右编号为1-n  有m1辆列车从第一站开始往右开 还有m2辆列车从第n站开始往左开  在 ...

  2. MongoDB图形化管理工具Toad Mac Edition

    昨天介绍了在Mac上安装MongoDB,安装好并配置环境变量后,在终端上用mongo命令就可以进入MongoDB的命令行管理界面,但我更习惯在图形化界面下管理数据库,这样更直观.今天我再介绍一款在Ma ...

  3. js判断某年某月有多少天

    function getCountDays(ym) { var curDate = new Date(ym); /* 获取当前月份 */ var curMonth = curDate.getMonth ...

  4. 启动win8.1时提示 api-ms-win-crt-runtime-l1-1-0.dll丢失

    电脑里没有安装windows的更新KB2999226 到微软官网 https://www.microsoft.com/zh-cn/download/details.aspx?id=49081 下载对应 ...

  5. Top 5 SSH Clients for Windows (Alternatives of PuTTY)

    这篇博文列举了可以替代putty的5个工具,有些实现了putty没有实现的一些功能.如下: PuTTy is the most popular SSH clients for Windows-base ...

  6. alpha冲刺阶段博客集合

    作业格式 课程名称:软件工程1916|W(福州大学) 作业要求:项目Alpha冲刺(团队) 团队名称: 那周余嘉熊掌将得队 作业目标:作业集合 团队信息: 队员学号 队员姓名 博客地址 备注 2216 ...

  7. python opencv3 grabcut前景检测

    git:https://github.com/linyi0604/Computer-Vision import numpy as np import cv2 import matplotlib.pyp ...

  8. 机器学习之路: python 支持向量机 LinearSVC 手写字体识别

    使用python3 学习sklearn中支持向量机api的使用 可以来到我的git下载源代码:https://github.com/linyi0604/MachineLearning # 导入手写字体 ...

  9. 分分钟搞定Python之排序与列表

    排序时程序中用得比较多的方法了.在Python中,最简单的排序方法摸过与使用内置的sorted(list)这个函数了,该函数一一个列表作为参数返回一个新的列表,只不过是把旧列表中的元素排过序了.原列表 ...

  10. [POJ2337]Catenyms

    题目大意: 定义一个catenym是一对单词,满足第一个单词的末尾字符与第二个单词的开头字符相等. 定义复合catenym是一些单词,满足第i个单词的末尾字符与第i+1个单词的开头字符相等. 给你n个 ...