先分享一个autodesk的导出教程文档
http://images.autodesk.com/adsk/files/3ds_max_game_export_programming_guide.doc

记录一下遇到的几个问题:
1.导出空间的问题.
IGameMesh::GetVertex() 可以选择导出对象空间还是世界空间的坐标.
本来以为对象空间是正确的选择.
后来发现,"对象空间"是指单个Node的对象空间,所以渲染出来的身体部件散乱分部在原点附近...

2.UV坐标的问题.

   //coordinatesIGameConversionManager* cm = GetConversionManager();//Blade uses right handed coordinates, like OGLcm->SetCoordSystem( IGameConversionManager::IGAME_OGL );

  本来使用如上方式(OGL的坐标系),但是发现V坐标反了,突然想起我的UV坐标系是DX的坐标系, (另外向量为行向量,矩阵为行主矩阵,旋转系是右手系)
但使用的是右手系, 只能通过UserCoord手动定义了,

   despite right handed coordinates,Blade uses consistent Direc3D style UV(texture coordinates) (images are flipped if needed)//UserCoord uc;//uc.rotation = 1;//right handed//uc.xAxis = 1; //right//uc.yAxis = 2; //up//uc.zAxis = 5;    //out//uc.uAxis = 1;   //right//uc.vAxis = 1; //down//cm->SetCoordSystem(IGameConversionManager::IGAME_USER);//cm->SetUserCoordSystem(uc);

结果发现uv坐标V值仍然是反向的. 甚至尝试直接用D3D坐标系,仍然如此.
最后只能手动修改V = 1.0 - v...

                  for(int ch = 0; ch < maxChannel; ++ch){DWORD mapIndex[3];mesh->GetMapFaceIndex(texMaps[ch], face->meshFaceIndex, mapIndex);Point3 uvw = mesh->GetMapVertex(texMaps[ch], mapIndex[k]);v.uv[ch] = Vector2(uvw.x, 1.0f - uvw.y);}

  是我对Max SDK理解有误? 还是取UV的方法错了(还有一个方法是GetTexVertex() )? 但我的用法跟IGame的一样啊...
搞了一天没有任何收获,目前暂时的解决办法是: OGL坐标系+手动取反, 这样也勉强跟我的坐标系完全匹配.

3.导出贴图的问题
如果一个特定的Map直接包含对应的bitmap,这样导出没有问题,但是如果改Map有子Map,Max导出需要跳过去,
因为GetBitMapFileName返回的是乱字符串,这个之前没发现,后来参考MaxSDK的IGame的sample, 调用IsEntitySupported()即可.
但是目前包含子贴图的这个贴图项无法导出(暂时不做这个,没仔细研究, 可能需要跳过IGame,访问Max对象获取子贴图).
比如有一个max模型,材质中的NormalBump不是一个真正的贴图,点开后包含两项:Normal和Bump,Normal项才真正包含bitmap,目前处理方法是在Max里手动把子Map覆盖到父Map,这样可以导出.

4. 切空间计算的问题: 需要注意的是,同样需要翻转V纹理坐标.
还有一个问题,之前说的按UV镜像,把顶点分组的问题, 问题就是法线不能分组,分了以后焊接处的顶点有两个不同的法线,所以仍然有缝.
应该是焊接点处的顶点有唯一法线,而有不同的切线和副切线.

还有UV镜像相关的切空间问题.
虽然已经UV的镜像值,已经保存在quaternion的w分量中,而且导出过程中确实发现有uv镜像,但发现最后shader中的向量不需要按镜像取反.
因为模型和贴图是从别处获得的,而且目前不怎么懂3DS Max,所以猜测可能是法线贴图已经做了处理? 这个后面会继续研究下.

5.其他.
因为在准备写导出插件的时候,根本没有模型系统.所以其实是一边设计模型系统(文件格式,查看器,渲染管线集成等),一边做相关的导出插件.
没有骨骼动画的模型相对来说还是很好导出的,后面有空会继续研究骨骼动画的导出.

最后贴张导出后的渲染截图(diffuse+normal):

原始max模型在这里下载: http://www.cgmodel.cn/forum.php?mod=viewthread&tid=113044&highlight=%B4%BA%C0%F6

转载于:https://www.cnblogs.com/crazii/archive/2013/04/18/3024543.html

引擎设计跟踪(九.2) 3DS MAX 导出插件 继续相关推荐

  1. 引擎设计跟踪(九.14.2i) Android GLES 3.0 完善

    最近把渲染设备对应的GLES的API填上了. 主要有IRenderDevice/IShader/ITexture/IGraphicsResourceManager/IIndexBuffer/IVert ...

  2. 引擎设计跟踪(九.6) 地形最近更新

    1.FastDXT 前两天没事profiling了一下,发现squish的DXT压缩速度很慢,单块压缩速度是解压的10倍... 网上搜了一个用SSE intrinsics优化的DXT压缩库(好像Id ...

  3. 引擎设计跟踪(九.8) Gizmo helper实现与多国语言

    最近把gizmo helper的绘制做好了. 1.为了复用代码,写了utility来创建sphere, cube, cylinder, plane, ring(line), circle(solid) ...

  4. 3D MAX导出插件编写

    文章版权归博客园 BigCoder所有,转载请于明显位置标明原文作者及出处,以示尊重!! 原文出处:http://www.cnblogs.com/csyisong/archive/2009/09/01 ...

  5. 3D MAX导出插件编写I

    3D MAX导出插件编写I 想想研究3D MAX 的SDK已经有了不短的时间,真正算起来也有两个月了吧,但是讲到收获,确实不大.作为一个3D MAX二次开发的学习者,我首先学习了导出插件的编写,网上有 ...

  6. D5周报|第8期:D5画质优化版本即将上线;3Ds Max 工作流插件重构内测、Revit 工作流教程

    地产营销动画丨作者:闪电 作者:JJJ-YS02 Araroaca + 大楼|作者:dnmorato 盘山公路|作者:LINK 盘山公路|作者:dreamboxdesignstudio 该场景由 @曲 ...

  7. 3ds max导出fbx模型出现破裂

    自己做的模型在3ds max中模型动作显示正常,导出fbx后模型莫名其妙破裂了,如下图 为此找了好几种方法,都无法解决,最后瞎试 层次面板,仅影响轴,重置轴,再导出fbx格式,就解决了.具体为什么可以 ...

  8. 3DS MAX导出M3G动画

    1.用3D Studio Max或者Maya的插件h3texporter导出的文件格式是.h3t的文件..h3t的文件是一个文本文件,可以用记事本,写字板或者其他的文本编辑工具打开..h3t文件描述了 ...

  9. 3ds Max导出带贴图的obj模型

    先找一块大理石地板的贴图 接着在3ds Max中画一个最简单的立方体,要薄一点像地板 点击菜单栏中的渲染,选择精简材质编辑器 在材质编辑器面板里随便点一个球,然后按照下图所示的1和2步骤分别点击漫反射 ...

  10. 关于Max导出插件的七七八八

    介绍几个东西,如何在Max插件里使用.net来做界面,怎么为插件增加maxScript的脚本接口以及命令行参数来直接测试导出插件. 先说第一个,首先是visualstudio的项目设置里开启clr的支 ...

最新文章

  1. 为什么indexOf在数组IE8上不起作用?
  2. SAP实战中Submit的常见用法-调用标准程序
  3. java方法6_6. java 方法
  4. java第一章Java语言概述和入门程序
  5. android ColorDrawable的使用
  6. canvas简单五子棋
  7. 从一个简单的Java单例示例谈谈并发
  8. Druid 配置及内置监控,Web页面查看监控内容 【我改】
  9. ActiveMQ 权限
  10. java图片色差_java – JPEG图像的颜色错误
  11. pythonclass使用教程_【Python 1-15】Python手把手教程之——详解类Class以及类的使用...
  12. 计算机模拟的实例,计算机模拟实例模拟的概念-read.ppt
  13. 压缩软件Bandizip
  14. 餐厅预订APP多少钱一套?餐厅预订APP如何收费?
  15. 每周一品 · 扬声器(喇叭)中的磁性材料
  16. 百度目前开放的AI平台
  17. Lecture 07 08 RNN---Hinton课程
  18. 把超星阅览器的文件转换为PDF文件
  19. java 文件打包下载
  20. Kubernetes - Kubernetes 组件

热门文章

  1. 万字长文 | 线性代数的本质课程笔记完整合集!
  2. wireshark未响应
  3. PyTorch学习—15.PyTorch中TensorBoard的使用
  4. 机器学习算法基础1-数据的特征工程
  5. 高可用MySQL:构建健壮的数据中心
  6. 分享程序员成长故事 解析IT职场困惑
  7. PyTorch:数据读取2 - Dataloader
  8. 推荐系统:基于内容的推荐
  9. pandas小记:pandas数据规整化-缺失、冗余、替换
  10. 力扣-191 位1的个数