下一个游戏项目可能会选择3D题材,这几天有点时间,先来用creator 3.0踩踩坑,发现一些对3D模型方面的槽点,所以来这里吐吐槽,说说自己的想法,和官方交流一下,也欢迎各位论坛小伙伴踊跃参与。
1、3D模型的资源管理。
开始的时候想着3D模型资源fbx和gltf的区别,毕竟如果做小游戏的话,对包体资源大小非常敏感。然后去看了一下wx支持的文件格式,发现没有支持.gltf的,就想找一下ccc是怎么处理的。然后发现了:
fbx和gltf其实没区别,都是creator里对资源进行转化了的,我们以为的在asserts文件夹里的fbx或者gltf文件,其实并没有直接被引用,都是经过转化,转化成了具体的ccc的资源文件的
如上图所示,表面上我们以为的是资源保存在fbx文件里,实际上资源已经被转化了一层,保存在了library文件夹里了。
只要简单的右键资源,点击在Library中查看即可。
如果你打开Library里对应的json文件,即可发现,其实这些json文件也就是cc.mesh, cc.material, cc.prefab, cc.animationClip等文件。
那么问题来了,我们应该如何才能【动态加载】fbx里的这些资源文件,比如这样一个场景:
希望在游戏运行时动态加载并改变一个skinnedMeshRender的mesh
经过半天的琢磨,我找到了如何做到,但是这个操作实在有点绕。具体操作如下,先把fbx文件制作成对应的prefab【注意这个prefab和显示在fbx内部的prefab还不是同一个】,然后游戏中加载这个prefab,最后从prefab中获取到想要的mesh。
前面说了那么多,都是为了表达一个想法【建议】,既然library里都是直接采用的转化后的资源,assets里的fbx和gltf文件只是作为数据源存在,那么,能不能在将fbx导入ccc编辑器的时候,直接就在asserts里转化并保存具体的模型资源。
这样需要官方支持才行,因为需要设计两种或以上的资源文件类型,如下图所示,从ccc里直接保存的就是mesh文件和skeleton文件。
因为从skinnedMeshRender里我们看到,其实是存在.mesh .skeleton格式的资源的!
2、3D模型资源的灵活改造
以下我们结合两个案例来讨论一下:【这两个案例在unity里是完全可实现的】
1、实现《舞动的绳》这样的效果,绳索随着物理系统做出反应,摆动,摇摆,扭曲等
想要做到这种效果,需要能够在ccc编辑器里对mesh进行蒙皮,即先创建骨骼,再对vertix刷权重。后面只要物理系统对骨骼所在的节点进行操纵,即可实现mesh对物理系统的反应,从而实现想要的效果。
2、程序动态生成地形mesh,保存成mesh文件后再进行后续处理
对一些rougelike类的游戏,可能需要动态的生成地形,但实时生成又不好,即可编辑器里预生成,然后保存成单独的mesh文件,后面再单独进行渲染等处理。
以上两个案例,其实都很需要题目1里所说的,官方支持两种新型的文件类型,即mesh文件以及skeleton骨架文件。
3、小游戏包体大小吐槽
由于小游戏的包体限制,3D游戏对游戏模型,动画等资源的文件大小实在是太敏感了。非常想吐槽的是,我们以为的asserts里的fbx和gltf文件的大小,并不是实际上游戏里的资源文件大小【因为转化成了library里的对应资源了】,一般而言都会增大一些,这样就导致资源管理的时候总感觉怪怪的,心里怪没底的。
资源文件很多时候还很容易重复,因为导出fbx和gltf的时候,实际上要想复用是可以,但要遵循一定的规则。 由于编辑器里是以fbx和gltf为资源单位的,实际上要对比的是里面具体的资源,比如skeleton, animationClip 这些,那么其实还是要非常小心翼翼的在建模工具里就要保证它们是兼容的,非常不好用。
4、 期许
以上说了那么多,其实都还是一个建议而已,就是官方有没有计划去支持.mesh .skeleton这样的文件格式? 希望官方人员看到以后,无论有没有这样的计划,都请回个帖。因为如果没这样的计划的话,后续我所想要做的游戏就不会定需要程序灵活处理的玩法了。