cocos2d-x 3D 建模规范及注意事项

  1. 使用导出插件(fbx-conv)时应避免出现中文目录。
  2. 模型必须有材质且要给“漫反射通道“赋予贴图,没有材质的模型会在导出时被忽略或产生异常,没有贴图的材质载入时目前引擎无法处理。
  3. 导出的材质中贴图默认寻址模式为GL_REPEAT模式,此时贴图尺寸要保持为2的N次幂大小,否则程序载入时会出警告,进而导致错误。
  4. 导出时勾选fbx导出界面的Include->Geometry->Triangulate选项进行三角化。
  5. 动画方面,支持骨骼动画的导出,其他动画形式,如Morph动画,节点帧动画目前不支持。另外动画要做到一个文件中,然后通过不同的帧间隔来区分。
  6. FBX中只能包含单个骨骼动画对象而且只能有一套骨架。
  7. 蒙皮的骨骼数量要注意,建议不要超过最大值40根骨骼,而且越少越好,默认情况下每超过40根骨骼会增加一次drawcall,当然你也可以在导出的时候加 -n参数来修改最大骨骼数,因为GPU寄存器有限制,60多个骨骼蒙骗已经快到极限了,还要留出一些寄存器做其他用,所以这里我们默认限制40,把这个值改大会有风险。
  8. 支持导出多个静态模型,你可以导出一个静态场景。
  9. 最后生成的模型要需要使用“可编辑网格”(Editable Mesh)。
  10. 如果制作的是IK动画,需要烘焙成普通骨骼动画,导出时勾选Include->Bake Aniamtion->Bake Aniamtion选项。
  11. 不要修改模型的本地坐标系。
  12. 顶点的纹理坐标不能超过4个(最大是 VERTEX_ATTRIB_TEX_COORD3,3DMax中可通过“工具->通道信息”来查看),如图:
  13. 如果发现模型位置有偏差,可以对模型进行“重置变换”->“重置选中内容”, 然后“XForm”->“全部塌陷”,通常为了稳妥,在模型进行蒙皮之前最好进行一次这个操作,如图:

14.有些情况下,模型显示为黑色,这可能是贴图格式设备不支持,例如 dds图片 pixelformat为s3tc_dxt3 格式在酷派8720L上就不支持,如图

15.支持透明贴图:有的时候美术需要给模型赋予“透明贴图”来实现特定的效果,例如:翅膀,裙摆等 如图:

目前引擎支持透明贴图的使用,你需要在max中创建带透明通道的材质,如图:

透明通道(Opacity)贴图需要跟漫反射通道(Diffuse Color)贴图相同,是一个带透明度的贴图。
另一个需要注意的地方是,我们只需要给需要透明的mesh部分赋予“带透明通道的材质”,其他部分赋予不带透明通道的材质,这里可以应用“多维材质”来处理,这一点很重要
因为不这么做透明部分与非透明部分进行blend的时候很容易渲染错误。

16.模型的mesh不要放到骨骼节点下 如图:

应该改为下图这样即可:

把mesh001提出来。

推荐使用FBX文件格式作为模型导出的中间格式。

以上是关于cocos2d-x 3D 模型制作和导出时的一些注意事项,供大家参考。

其它资源下载:

  1. 模型查看器下载地址:https://github.com/songchengjiang/cocos2d-x-ModelViewer-bin
  2. *fbx-conv 代码地址:**https://github.com/lvlonggame/fbx-conv 下载后打开samples文件夹可以找到测试模型。
1赞

顶顶顶顶顶顶顶顶顶顶顶顶

那么多 必须 。。。只支持。。。 不要。。。:10:

:2::2::2:

Mark。 3D暂时还是不成熟,静观其变。

:14::14::14:吕同学的头像大亮了

请问,第4条中,怎么才能通过不同的帧间隔来区分?

全是过来人总结的坑啊,必须顶:14:

可以给一些模型的例子,说明什么样的模型是ok的,什么样的要怎么调。可能更直观一些。

美术把所有的动画都做到一起,美术规定 0~60帧是“跑”,61~121帧是“攻击”,在代码中以对应的帧区间来创建3D动画就可以了,具体使用方法可以参考cpp-tests 中的 Node:Sprite3D 例子。

谢谢分享哦 我全部认真看了

mark:7::7::7:

情景:
3DMAX里建了2个模型,分别是载体A和炮台B,这2者都有骨骼动画。炮台B在载体A上,设对接点attachPoint。

问题:
把A和B以FBX格式转换出来后,加载到引擎,发现炮台B悬空在A上。(在3DMAX里2者是对接在一起的)
加载A、B的坐标值是根据3DMAX的坐标设置的。

加载A、B的伪代码:
A->setPositon3D(Vec3(0,0,0));
B->setPosition3D(Vec3(0,20,10)); (这个坐标是根据3DMAX得到的:把B放在A上)

疑问:
3DMAX建模的比例单位和引擎不一样吗?
如果是,如何解决和避免这种问题?

问题延伸:
如果有2个3D模型A和B,想把B对接在A模型上的某一点,怎么解决?(除了attachNode)
(一个比较麻烦的方法是找到3DMAX建模时,MAX和模型在引擎中的单位转换关系)

建议在导出之前,把模型 “重置变换” 如下图:

然后选择“X变换”->邮件“塌陷全部” 如下图:

这也太坑了吧,每个模型可能都不一样,需要额外的配置去管理。另外,3D动作中有么有帧事件?

模型变黑 怎么回事呢 不是在设备上

没有贴图么?

同个MAX文件下有多个模型,导出后位置都不一样,做成多维子材质结果也一样,我都塌陷过了的。

还有就是为什么有些模型会半透?

顶 好贴留名