赞
踩
原本开头介绍了几种实现方式,结论就是各有优缺点。。。也就是全是废话。。。既然是废话,就全删了吧 (ʃƪ ˘ ³˘)
其他不多说,原因有一大堆,结论就是想自己写个球 (ノ´▽`)ノ♪
一开始写起来特别顺,就是那种遇到bug感觉可能是这里的问题,然后随便改改想先定位问题,结果运行下发现修复了ヽ●*´∀`*●ノ
直到加载真实的DEM数据,无论怎么修复永远都有缝隙,泪流满面啊 (╥╯﹏╰╥)ง
一步步排查:卷积核没问题,卷积没问题,加载没问题,坐标变换没有问题,shader没有问题~~最后没办法直接从显存数据中看,当然使用了取巧的办法:运行,选取两张相邻瓦片,提取显存数据到本地,丢到PS里比对,修正采用参数,重复以上步骤~~终于在第3152*3152/(197*197)-11=245次修正后消除了缝隙,再以此特解反推出通解,搞定第一步。第二步叠加残差时又对不上,懒得搞了直接加了个遮罩反正底图已经无缝o(´^`)o。。。于是乎,uv偏了10/197≈0.05。。。。后面再说吧,改DEM就已经改了一个月了 (`ȏ´)
海拔
修完DEM后发现海拔与视频号发布的不一样,比如视频号里台湾山的高度都快超过台湾最宽处了。。。研究了半天发现都没问题,搜了下发现台湾东西宽度最宽有144公里,最高点是海拔高度3952米的玉山主峰,也就是说山的高度放大36.437倍才能有视频的效果。。。所以,被坑了啊 ~~o(>_<)o ~~
缺点:由于偷懒,没修正残差,导致uv偏了大约0.05,等换管线时再一起改了。还有个比较严重的问题,内陆许多地方海拔低于海平面,导致地面被海洋覆盖,需要地形编辑功能调整下。
植被
目前在 geometry shader 里加了9个点,简单搞了个面片树。。。是不是太敷衍了 φ(>ω<*) 。其实在这基础上移除低于海平面的树,位置加点随机偏移好像还凑合。
优点:写起来太快了;
缺点: geometry shader会降低地形性能,特别是复杂3D树;
路线:从地形中抽离,专门添加植被层,尽可能兼容 Speed Tree。
月球
目前是使用天空盒实现的。
优点:是不用在渲染一个球,节约性能;
缺点:就是无法遮挡地球,且远距离看位置不对 (尝试修正过,但因为获取不到天空盒半径算不出准确向量);
路线:方向1. 尝试修正位置,成功的话再加个小球就能实现遮挡地球;
方向2. 月球改成地球这样。
图形API
目前是同时适配 DX、OpenGL和Vulkan的,不过正因为如此,坐标系搞的有点乱。。。乱到什么程度呢:当前版本我觉得是错的但运行后没问题,尝试修正后反而无法运行了,以后暴雷了再说吧,反正要重构 ⊙﹏⊙|||
OpenGL:除了Z轴与Unity相反其他没什么问题;
Vulkan:性能比其他两个低10帧左右,兼容性可能有问题比如天空盒的cubemap采样在这里就报错 (因为地球是没问题的所以没花太多时间去处理);
DX:和Vulkan类似,拿过来没怎么改就能用,没有OpenGL和Vulkan的问题,可惜跨平台是硬伤;
路线:之后不打算适配多个图形API了。按道理用Vulkan最好,不过vulkan性能和兼容性问题需要先处理,后面再说吧。
Unity问题
Scene窗口:由于scene窗口的相机智能设置简单参数,所以只能运行后在Game窗口看到球
float精度问题:引擎的精度已经提升到了double,但是shader的精度依然是float,不知道能不能扩展,或许Vulkan可以吧。隔壁虚幻新版本已经将shader扩展成了double类型,要是Unity也扩展了就没这么多弯弯绕绕了。。。当然也就没我什么事了 ヾ(o´∀`o)ノ
ECS插件:本来想直接用这个的,不过好像还不稳定,暂缓。
其他问题
DOM需要校验:主要是校验经纬度,图源的问题导致经纬度可能有偏移。
图源清晰度不够:目前图源来自网络分享,好像是7级DOM和12级的DEM,等图像预处理工具写完自己去处理卫星图。
大气(高优先级)
大气层缺失,目前只是颜色叠加,未创建大气层。
云(高优先级)
方案1:直接贴上云图,不管他模糊不模糊了,应该会很丑
方案2:以四叉树加载云。。。好麻烦,不知道效果怎么样
内置渲染管线升级为通用渲染管线(高优先级)
当前是内置管线实现,本来无所谓管线,但想到现在不改以后加上水、路等移植起来更麻烦,所以列为最高优先级。
水、路网(中优先级)
需要地形编辑功能,所以先不管吧。
坐标变形工具(中优先级)
正常模型需要变形为球面模型来贴合地表,小模型或许不需要,但大模型需要,所以后面可以写个变形工具。
后处理(中优先级)
后处理还是要的,比如现在的太阳还是个圆粑粑,怎么的也得搞个光晕吧 (* ̄︶ ̄)
多线程(中/低优先级)
渲染球时多线程优先级高;
加载图像多线程优先级偏低:因为现在已经实现GPU加载纹理,只是当前数据是压缩的,只能CPU解码。看情况,如果以后还是CPU加载就需要多线程,如果提前解压数据就直接GPU加载了。
天空盒的大气(中优先级)
地表看天空需要渐变:白天是蓝天,夜晚是星空。。。有点麻烦,切换太生硬的话效果可能不好。
渲染线条和点(中优先级)
数字孪生里常用。
物理碰撞(中优先级)
这个比较坑了,远景取视点就行,近景不好处理。坐标是GPU算的,GPU射线检测不知道能不能实现。。。或者将坐标计算提取到 Computer Shader 中,一份传给CPU,一份继续渲染,这样可能出问题吧。。。或者渲染个深度图查询?。。。后面再找找论文看看有没有更好的解决方案。
夜景(低优先级)
夜晚灯光纹理,需要先完成原始素材预处理工具。
模型/资源导入器(低优先级)
fbx、obj:需要查手册来解析;
点云、倾斜摄影:需要查手册来解析;
shp:运行时加载shp文件 (以前项目写过编译器版本,源代码没保存。。。)
网络分发图像(低优先级)
将图像放云端,使用时在线获取。
实现虚幻Natite材质(低优先级)
网上已经有很多该技术解析文章了,有时间研究下看看能不能集成进来
(个人习惯叫他纳米材质,因为翻译成纳米材质十分贴切,没必要非说这个单词是虚幻造的不存在;或许我错了,但是我就是不改(。ì _ í。))
地形编辑(无/低优先级)
由于地形高低起伏,模型不一定能与地形贴合,所以需要笔刷编辑功能,不过个人觉得用起来不方便,可以直接读取模型信息对地形自适应。(模型加个地基,地形围绕地基自动修正?)
本不打算加这功能,但是路网、水流可能需要。
安卓版(低优先级)
看Vulkan怎么样吧,如果可以那就搞,不可以就算了,懒得再看OpenGLCE了。
出于性能考虑,可能再将double换回float,做个简单版?或者先缩放个1000倍看看效果。
多星球(低优先级)
把所有行星都做一遍然后集成进来。
优点:好玩;
缺点:工作量有点大;需要增加个原点转换;可能超出double范围;
路线:需要先写卫星图片处理程序来预处理图像数据
WebGL/WebGPU(不考虑)
暂不考虑web,因为该平台源代码明文不加密
写了快半年了,每天晚上下班后梳理思路写功能测试Demo,周六周日整合代码。。。黑眼圈都出来了,不行了,先歇一歇,反正能用了。。。后面慢慢迭代版本吧。。。
本来是打算录个视频在网上展示一下的,还没录呢就想着先写个简介 ~~~ 然后又想着顺便梳理下思路,简单列个功能列表防止遗忘 ~~~ 之后觉得写都写了,再补充个首尾吧~~~简介就成这样了。。。太长了,干脆发布成文章吧 ヾ(o・ω・)ノ
Google地球截图
个人作品截图 (海拔放大了5倍)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。