fanvanzh / 3dtiles

The fastest tools for 3dtiles convert in the world!
Apache License 2.0
1.94k stars 591 forks source link

关于此项目的感受与建议 #147

Open orangeforjava opened 4 years ago

orangeforjava commented 4 years ago

首先,这个项目起到了很好的抛转引玉的作用,为作者点赞。我刚开始做3dtiles编译的时候参考了一些实现思路,后来随着对3dtiles的深入了解,特此对项目有些改进建议(当然如果有可能时间允许的话,我会开源一些我的成果)。

顾名思义,3dtiles主要是组织三维模型的一种方式,底层承载的3D模型的标准,cesium选择的是gltf/glb,gltf这类模型是个开放的3d模型,也可以说是开放联盟的主流吧,选择这个当然没有问题。接下来的问题就是如何组织这些三维模型,提高效率自然要考虑分级分块,分级就是3D里面经常说的LOD,就是在不同级别下展示不同精细程度的模型,如何使用代码自动的进行模型的化简,是一个关键技术吧,有些开源参考,但至今我还没有找到特别好用的,当然本来对不同模型的化简方式都有些不同的,譬如对地形的化简,本来就是有独立的算法。至于分块,也要考虑引用场景,大范围场景还是建议使用固定的分块方式,不应采用局部四叉树方式。这里主要考虑局部更新以及不同层级的独立性问题。

此实现中间使用了osg,是个不错的实现方式,作者从osg到gltf的转换有一些bug,细节我现在记不清了,就是考虑不是很周全。兼容性不是很好,采用osg的一个好处是复用osg组织模型的算法以及他的loader,可以起到一些模型加载、解析的作用,但是也有其缺点,osg本来说实话也不是太友好,我非常烦他的插件模式的loader方式,而且osg对OpenGL跨平台新特性也很不好。而且库比较大,编译起来比较困难,这些都不说了,实际上如果到某些具体的三维模型,基本上都有独立的工具,直接转换到gltf,osg另外的一些简单模型的生成,可以参考,自己实现一下,这样整个工程比较轻便一些。

对3dtiles的标准支持,咱们这个工程跟官方的正式版本有一些细微的差异,是被官方废弃掉的,可以参考官方3dtiles标准修正。

不建议使用Rust,如果为了跨平台的操作系统相关的功能,建议使用Poco,这样没有Rust里面羁绊,降低整个工程的复杂度。

一些标准的启用,比如Draco压缩编码的支持其实挺重要的,对尺寸影响比较大。我是自己在tiny_gltf基础之上扩展的。

cesium里面的光照与gltf的材质关系一直没太搞明白,就是如何具体控制cesium的光照让gltf模型与预想的效果一致。

总之,工程挺好,欢迎大家一起交流。

fanvanzh commented 4 years ago

非常感谢您的建议。

我现在在某个996组织工作,并且内容和这个项目也没什么关系。所以也没精力来维护改进。

希望大家不吝啬自己的研究成果,多多贡献。

cesium里面的光照与gltf的材质关系, 应该是 cesium 里定义光照强度、方向、颜色等变量和 gltf 里的着色器变量匹配吧,没看过 Cesium 实现代码,瞎猜。

kallr commented 4 years ago

作者在这个项目上花了很多功夫,对倾斜摄影的处理效果非常好;很适用 如果能加上在对非地形大场景模型进行3dTiles 处理,就更好了;想过使用vcg进行模型简化;但是对动辄上万个对象的场景管理还没有很好的思路;希望作者和其他开发者能提供好的建议

onsummer commented 3 years ago

非常感谢您的建议。

我现在在某个996组织工作,并且内容和这个项目也没什么关系。所以也没精力来维护改进。

希望大家不吝啬自己的研究成果,多多贡献。

cesium里面的光照与gltf的材质关系, 应该是 cesium 里定义光照强度、方向、颜色等变量和 gltf 里的着色器变量匹配吧,没看过 Cesium 实现代码,瞎猜。

996 过于真实,国内想做开源太缺土壤

will428 commented 1 year ago

希望这个项目可以维护下去,可以增加大场景下gltf/fbx模型分级、分块处理,希望一起努力。