调研报告之三维开发

标签: 三维 分类: Gis 创建时间:2019-12-12 01:16:05 更新时间:2023-10-20 11:23:28

前言

在百度北京无人车可视化团队招3d研发一个招聘信息中,有如下的:热爱计算机图形学;熟悉图形学基本原理;熟练掌握opengl和shader;深入分析过任一开源引擎源码,如cocos OGRE OSG Delta3D等;有商业引擎使用经验,如unity3d ue4等;有c++或者安卓平台开发经验;本科及以上学历。

对于一个普通的三维开发选手,需要知道的基本知识主要包括哪些?已经需要具备的基本素质有什么,这都需要知道。

参考文章:
1.如何看待 Three.js / WebGL 等前端 3D 技术? Three.js、Babylon.js、Filament、KickJS、ClayGL、PlayCanvas、WebGLStudio.js和Litescene.js、Luma、A-Frame、X3DOM,这个问答中的第二个人倒是说的很明白。
2.exportToThree 这里是一个三维工厂的例子。

1.数据格式

gltf、fbx、obj和3ds,是常用的三维数据格式,各个格式的优缺点以及使用的场景,需要有基本的了解。

gltf

glTF格式本质上是一个JSON文件。这一文件描述了整个3D场景的内容。它包含了对场景结构进行描述的场景图。场景中的3D对象通过场景结点引用网格进行定义。材质定义了3D对象的外观,动画定义了3D对象的变换操作(比如选择、平移操作)。蒙皮定义了3D对象如何进行骨骼变换,相机定义了渲染程序的视锥体设置。

参考文章:
1.glTF格式详解(glTF格式基本结构) 这里对于gltf文件的各个部分讲述的还是比较详细的。
2.glTF 2.0 使用blender加载gltf文件。
3.【CAD开发】glTF和b3dm文件格式读取三(Python, JS)

2.数据处理

1.CAD图

传统的工程图,大多是以cad图的形式进行提供的,而我们最终想要的结果就是在网页上显示三维立体的管线,这里不讨论使用倾斜三维摄影及点云等高科技手段直接生成三维影像的技术(讨论,我也不会啊,等以后还是要请高人指点一二的)。于是我就在网络上进行了简单的提问:作为一个刚入门的三维开发人员,我想知道,从模型的制作到最终的web显示,这一系列的过程中,都用到过哪些技术。比如在web上显示三维可以使用Cesium,数据库格式可以是3dtile,也可以是其他的obj等。制作3dtile模型可以通过将3dmax中的模型导出为obj,然后使用人工模型切片的方式生成3dtile。如果我只能拿到一张管线的二维cad图,我可以在arcmap中进行空间校正,将其空间话,但是如何从一张cad图,生成三维管线呢?这个流程是如何的。希望能得到大佬的解答。

网上的网友给的答案:

(1) 第一步你得想办法把cad转成真正得管子,一般要借助一些工具人工操作,比如revit,max,或者arcgis pro 
(2) 第二步在这些工具里把管子导出常规模型类似obj等,(如果revit,可以借助lab得clm导出器导出)
(3) 第三步,使用lab得模型切片工具转3dtiles

2.三维管网

从shp文件到三维管线,有下面的步骤,借助于蚂蚁参数化建模工具,将shp文件转为obj模型,然后利用cesiumLab实验室工具,将obj模型转为3d tiles,最后使用cesium.js加载3d tiles模型数据。

参考文章:
1.C2——cesium加载城市级三维管网模型的方案 (这篇文章讲了使用蚂蚁建模工具、cesiumlab以及cesium加载城市级管网的示例)
2.蚂蚁管网参数化三维建模方案 (这是一个使用shp生成三维管网的软件)

3.建模软件

桌面端的三维建模软件,我就不说了,常见的比如3Dmax,CAD,机械零件建模的SolidWork,一些三维的城市建模软件,比如cityengine(Esri出品),还有houdini(这个我不清楚,刚刚知道这么一个名词)等。

参考文章:
1.十九个国内外主流的三维GIS软件(转) (这里列举了十几个桌面三维软件,但是很多我们平常连见都没有见过)
2.blender Blender是一款免费开源三维图形图像软件,提供从建模、动画、材质、渲染、到音频处理、视频剪辑等一系列动画短片制作解决方案。
3.免费极速实景三维模型浏览器

4.Web3D引擎

三维引擎,这里我简单梳理一下web端可以使用到的技术,当然WebGL是目前所有三维渲染引擎的基础。我看了很多的文章,鲜有提到白鹭引擎的,不知道为什么,

参考文章:
1.3D可视化创业如火如荼,ThingJS, three.js, Unity3D哪家强? (这里对比了三家的引擎,很显然,Unity3D不适合做web的二次开发)
2.游戏引擎Unity, Unreal, CryEngine的比较和扫雷
3.四大开源3d游戏引擎探究 (这里就没有什么特别的了,因为很多,可以说我一个都没有听过)
4.如何选择 WebGL 框架和引擎? (这里分类三大模块WebGL 封装、渲染引擎以及游戏引擎,每一种都包含了很多的分类和js代码库,最后也进行了相应的总结和推荐,当然有些东西我没听过,也有我知道的比如Three.js和Babylon.js以及Unity3d,除了比较各种技术之外,还对WebGL为什么没有火起来,以及下一代渲染引擎做了研究)
5.WebGPU 开发状态与计划 (英特尔中关于WebGPU的开发状态和计划,这个PPT内容,也是对WebGPU的简单的介绍,里面还包括了很多的技术和组织,让人不禁开始期待下一代WebGL的到来了)
6.WebGPU学习(一): 开篇 (虽然WebGPU还没有正式发布,但是已经有人开始写教程了,可见还是有很多的人,在不断的学习,学习和学习中)
7.51WORLD (虽然不知道这家公司在干啥,但是有智慧城市、智慧交通等的案例介绍)
8.Web3D引擎技术白皮书 (这是浙江的一家公司自己开发的,反正我没有听过这个公司,但是能自主研发c++三维引擎,他的技术带头人的能力应该还是很牛逼的了)
9.WebGL、ThreeJS、BabylonJS、SceneJS和Cesium框架对比及简介
10. webgl图库研究(包括BabylonJS、Threejs、LayaboxJS、SceneJS、ThingJS等框架的特性、适用范围、支持格式、优缺点、相关网址) 和上面的主要内容是一样的。

three.js

这个是比较火的一款三维开发threejs。

baylon.js

微软支持并开发的主要用来做游戏的web开发工具

参考文章:
1.babylonjs (类似于three.js的三维WebGL引擎)
2.游戏开发 - Babylon.js: 构建 Web 基本游戏 (微软文档中关于Babylon的入门)

Oasis Engine

Oasis Engine 是引擎一款以 Web 为先,移动为先的互动/创作平台。使用组件系统架构,并且追求易用和轻量。Oasis Engine 主要包含 Oasis Runtime、Oasis Editor 和 Oasis Store 三部分。

参考文章:
1.五福背后的 Web 3D 引擎 Oasis Engine 正式开源 (手机支付宝上集五福的引擎,从基础的板块开始说起,到性能的评测,我感兴趣的是Oasis引擎的前世今生,也就是所谓的黑铁、青铜、白银时代,在其中也还是有很多的知识点可以借鉴和学习的)

Sisyphus引擎

SVE SDK (Sisyphus引擎)是浙江永拓信息科技有限公司基于C++作为底层自主研发的3D渲染引擎,该产品拥有完全自主知识产权,是一款轻量级的、移动WEB优先的3D数据可视化框架。框架基于Webassembly和TypeScript开发,具有体量轻、加载速度快、运行效率高等优势。

Egret Engine

白鹭引擎Egret Engine 是一款使用 TypeScript 编写的 HTML5 游戏引擎,包含渲染、声音、用户交互、资源管理等诸多功能

unrealengine

参考文章:
1.虚幻引擎unrealengine (这是一个从没有玩过的船新的品牌,打造一个虚幻世界引擎。虚幻引擎是全球最开放、最先进的实时3D创作平台。经过持续的改进,它已经不仅仅是一款殿堂级的游戏引擎,还能为各行各业的专业人士带去无限的创作自由和空前的掌控力。无论是前沿内容、互动体验还是沉浸式虚拟世界,一切尽在虚幻引擎。)

Mars3D

这个其实是在Cesium基础上进行的二次封装的。Mars3D三维可视化平台 是火星科技 (opens new window)研发的一款基于 WebGL 技术实现的三维客户端开发平台,基于Cesium (opens new window)优化提升与B/S架构设计,支持多行业扩展的轻量级高效能GIS开发平台,能够免安装、无插件地在浏览器中高效运行,并可快速接入与使用多种GIS数据和三维模型,呈现三维空间的可视化,完成平台在不同行业的灵活应用。

Mars3D平台可用于构建无插件、跨操作系统、 跨浏览器的三维 GIS 应用程序。平台使用 WebGL 来进行硬件加速图形化,跨平台、跨浏览器来实现真正的动态大数据三维可视化。通过 Mars3D产品可快速实现浏览器和移动端上美观、流畅的三维地图呈现与空间分析。

Verge3d

Orillusion

Orillusion 次时代 WebGPU 引擎。

其他

参考文章:
1.次世代3D游戏引擎Layabox官方网站| 2D\3D\AR\VR | 浏览器 (做游戏的引擎,介绍中显示,追求极致的性能)
2.3D探索——Web 3D哪家强?

5.云渲染

根据不同的技术实现方式,又分为了本地渲染和云渲染两种,云渲染相关的概念,就是像素流推送。通过云渲染,将服务器渲染出的三维场景通过视屏流的方式推送到前端。

参考文章:
1.实时云渲染技术应用之三维可视化部署
2.什么是云渲染?又如何衡量云渲染平台是否靠谱?
3.点量云 点量软件长期专注核心技术的研发,在视频与传输技术上持续耕耘,同国内数百家企事业单位在视频、传输等技术领域均有合作,为多家企事业单位提供技术解决方案和产品服务。点量软件将坚持贡献点滴力量、点亮科技未来的初衷,在云流化(实时云渲染、像素流)领域,提供更优秀的产品和服务。
4.Unreal实时云渲染原理与搭建流程 webrtc,unreal
5.一篇文章理解WebRTC原理

6.像素流(PixelStreaming)

像素流是UE给出的云渲染方案。

参考文章:
1.UE4.26像素流公网访问linux和win两种实现方式 因为像素流访问时可能使用到0-65535中的任意一个端口,所以必须开启所有端口号,或者关闭防火墙。这个是非常重要的点,再次强调一遍:必须开启所有端口号!这也是我折腾了好久,很多次没成功的原因。
2.UE4【使用PixelStreaming功能】
3.UE4 像素流推送
4.ubuntu 14.04 下实现浏览器接收UDP视频流
5.ue4云渲染——像素流送实践 基于ue4的云渲染目的在与将ue4实时渲染图像帧通过视频流的方式一帧一帧的传到浏览器端,主要是因为基于web的三维渲染效果不佳,通过ue4的强大渲染能力与各种功能的支持能力使得网页端也可以实时看到好的效果。这个过程服务之间使用的是反向代理的机制,过程大概分为三个应用: 前端——(控制命令与视频流)node信令服务——–ue4视频流服务。
6.UE4实时云渲染需要服务器配置什么显卡? UE4官方虽然给出了像素流解决方案的插件,但是在实际项目中很多都需要深入摸索才能应用到。
7.UE4-PixelStreaming的最佳实践(云渲染)

7.WebGPU

参考文章:
1.WebGPU vs 云渲染到底谁才是下一代Web3D技术? 现在两种技术都在进一步发展成熟,但是每种技术方案都存在一定的优势和劣势,未来在GIS 3D应用场景下应该会逐渐走向融合
2.Drawsee从底层自研 专注性能和渲染效果 Drawsee数据性能优势明显,光影渲染高速细腻,对于Bim项目,Cesium已经全面落伍

8.二次开发

Mars3D

Mars3D 这个基于Cesium进行二次开发的接口,功能还是非常的全面的,提供了 示例,里面的东西还是挺多的,还有些智慧城市的例子。mars3d 仓库的汇总。像 《Mars3D智慧园区系统》 只需要 6800 块钱就可以得到源码了,但是不包括SDK,要是使用SDK,也还是需要多付一份SDK的钱,其实要是有两百万的项目,这个钱出的也是值得的,mars3d-vue-project-zhyq。要是有这么个项目,其实我觉得还是不错的。

EarthSDK

earthsdk 这不能算是一个严格意义上的平台,充其量就是一款基于Cesium的开源免费三维地球二次开发包,一款开源免费的三维地球二次开发包,是配套于 CesiumLab 使用的一个工具,也提供了在线的例子

他们家主要卖的是CesiumLab这个工具,EarthSDK没有显示收费的地方。

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。