1、地形修改工具。先做个一个大面积的地形平整用左右箭头的那个工具右键提取一个样本高度平整。
2、Moveit。框选你要平整的所以东西、点击竖着的那三个按钮第三个对齐地面高度。
这是一款城市经营模拟游戏,登录steam后输入citites:skylines,然后在游戏界面点击添加至购物车之后根据提示购买,购买好后安装到电脑。
《城市:天际线》是对经典城市模拟类游戏的现代演绎。该游戏引入了全新的游戏玩法元素,让玩家切身体会到创造和维持一座真正城市的兴奋和艰辛,同时扩展了城市建设体验中的一些经久不衰的主题。
⚠️本文在cesium 1520下测试
cesium目前支持的格式有下面的两种地形格式,分别是:
在 heightmap 10 terrain format 说明页面上,官方明确指出这种格式已经废弃了,推荐使用 quantized-mesh ,关于两种格式的对比,推荐阅读 这篇文章 。
在Cesium 1520下测试, Cesium 还是支持 HeightMap 格式的,未来的Release版本有可能还会继续支持。
鉴于历史原因,项目之前一直使用 HeightMap ,最近才迁移成 Quantized-Mesh ,但构建离线的地形服务流程基本一致。
基本的构建流程为:
如果没有Docker环境,首先安装docker环境,建议安装Docker for Mac / Windows,不推荐使用Docker Toolbox。
这里以构建 Quantized-Mesh 为例,首先获取image。
在一个新的容器中执行。
合并tiffs,生成vrt文件。
创建一个terrain文件夹存储切割后的瓦片,运行ctb-tile生成瓦片,这个步骤可能时间较长,可以出去喝杯咖啡。
创建Cesium layerjson描述文件。
到此,cesium Quantized-Mesh 的地形瓦片就生成完毕。
最后在程序中使用:
注:使用Node编写server的时候,需要额外的header设置。
选取一个43的矩形区域作为数据源:
采用的流程都是先将上述12个tif合并成一个vrt文件,然后使用ctb-tile来进行切割。从最终得到的数据集的大小来看,Quantized-Mesh更节省空间,运行时会更节省内存:
效果对比:
Terrain 是Unity自带的地形编辑器工具。
在 Hierarchy面板 中右键-> 3D Object -> Terrain ,创建一个Terrain(地形)
同时会在 Assets 文件夹中创建一个默认名为 New Terrain 的文件, 用于保存 Terrain 的相关数据 。后缀为 " asset " 。
Settings 是 Terrain 的参数设置面板。
由于每一次改变地形,unity 默认都会自动生成光照贴图,导致性能减弱。
可以在 windows 菜单-> rendering -> lighting setting ->取消勾选最下面的 auto Generate
使用:
从调色板 Brushes 中选择一个画笔,然后单击左键并将其拖动到 Terrain对象上 以 提高地形高度 直到最大高度 Terrain Height 。在按住Shift键的同时单击左键并拖动以 降低地形高度 降低地形高度直到0。
使用:
使用“ Set Height” 工具绘画时,单击左键在 Terrain 上拖动,它将降低当前高于 目标高度 的地形区域,并升高低于 目标高度 的区域。
注意:
作用:
“ Smooth Height” 工具可以平均附近区域,使景观柔和并减少突然变化的外观;它不会显着提高或降低地形高度。
使用包含高频图案的画笔绘画后,平滑处理特别有用。这些笔刷图案倾向于将尖锐的锯齿状边缘引入到景观中,但是您可以使用 “Smooth Height” 工具来软化该粗糙度。
使用:
使用 “ Smooth Height” 工具绘画时,单击左键在 Terrain 上拖动,
作用:
使用 “Paint Texture” 工具将诸如草,雪或沙之类的 纹理 添加到 Terrain 中。它使我们可以将平铺纹理的区域直接绘制到 Terrain上 。在 Inspector 面板中,单击“ 绘制地形” 图标,然后选择从 “ Brushes ” 工具列表中 绘制纹理 。
使用:
注意:
作用:
选择工具后,Unity会突出显示所选“地形”图块周围的区域,指示您可以在其中放置新的连接图块的空间。
使用:
左键单击区域,将自动生成一片空白的 Terrain ,并在 Assets 文件夹中生成一个新的 assets 文件。
注意:
作用:
如果使用 “Brushes” 来创建自定义画笔,该 “纹理” 表示具有特定地质特征(例如山丘)的高度图,则 Stamp Terrain 很有用。
使用:
1使用 Stamp Terrain 工具,您可以选择现有的画笔并单击以选用它。在 Terrain 中每次单击都会引发 Terrain 中出现所选笔刷形状的 “ Stamp Height ” 。要将 Stamp Height 乘以百分比,请移动 Opacity 滑块以更改其值。例如, Stamp Height 为200, Opacity 为50%,则将每个 Stamp 的高度设置为100。
2 Max <–> Add 让我们选择是将 Stamp 的高度添加到地形的当前高度,还是取两者中的最大高度。
作用:
将树刷入到 Terrain 里面。
添加树:
点击 Edit Trees … -> Add Tree -> 选择
使用:
Settings:
作用:
一个 地形 可能有草丛和其他小物体(例如岩石)。用 Paint Details 来刷细节。
添加细节物体和草:
最初,地形没有可用的草或细节。在检查器中,单击“ 编辑细节”按钮以显示带有“ 添加草纹理”和“ 添加细节网格”选项的菜单。单击任一选项以打开一个窗口,您可以在其中选择资产以添加到地形以进行绘制。
使用:
添加窗口:
注意:
注意:
我们从下面去观察cesium是怎样执行primitive的渲染命令的
1,初始化cesium场景时候会默认执行CesiumWidget类里面的startRenderLoop方法,该方法的作用是
调用浏览器requestAnimationFrame方法循环执行widgetrender方法进行渲染,我们再看看
CesiumWidget里面的rander方法,这个方法调用了sceneinitializeFrame()进行初始化一帧,Clocktick()方法触发时钟更新当前时间,Scenerender方法进行渲染。我们再看看Scenerender方法
该方法大致做了以下几件事,更新帧数,预先更新3dtiles数据,预先更新相机飞行的3dtiles数据,调用render方法等
我们看看Scenerender方法,该方法内部调用SceneupdateAndExecuteCommands方法
SceneprototypeupdateAndExecuteCommands方法根据frameStatemode变量判断是否是3d场景然后执行executeCommandsInViewport方法渲染视口内的图元,
调用Scene类里的executeCommands方法执行绘制命令
executeCommands方法内先执行和环境相关的,例如天空盒,太阳,月亮等渲染指令。
接着根据遍历视锥体数组,依次执行单个视锥体的渲染命令。
先PassGLOBE(椭球体),接着PassTERRAIN_CLASSIFICATION(贴地形),接着PassCESIUM_3D_TILE(3dtiles),PassCESIUM_3D_TILE_CLASSIFICATION(贴着3dtiles),接着PassCESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW,接着PassOPAQUE(不透明的),PassTRANSLUCENT(透明的),PassOVERLAY(遮盖物)
然后会触发DrawCommandprototypeexecute方法
进入Centextdraw方法
该方法先设置帧缓冲区,渲染状态,uniform变量,然后调用beginDraw方法
在beginDraw方法绑定帧缓冲区,应用渲染状态(例如开启深度测试,模板测试,混合等),绑定着色程序,并限制最大纹理单元数量。
然后执行continueDraw方法
设置模型矩阵,设置uniform变量,绑定顶点数组,根据绘制的实例数量和是否有顶点索引来决定使用context_gldrawElements,contextglDrawElementsInstanced,context_gldrawArrays,contextglDrawArraysInstanced其中一种方法
一、CesiumTerrainProvider介绍
前面的文章中,我们介绍了很多地形相关的知识,本章中我们来一起了解下CesiumTerrainProvider,我们在WebGL中如果希望添加带有地质起伏的地形,都会使用这个类,它同时支持高度图和TIN地形两种格式。不过目前高度图的技术路线已经不在推荐使用,所以我们本章主要介绍TIN地形的加载,本章中我们以STK全球地形和SuperMap的TIN地形缓存为例,来使用CesiumTerrainProvider。
SuperMap iClient3D for WebGL将Cesium原生的CesiumTerrainProvider进行了再次封装,我们来对比下原生参数和封装过的参数
相比Cesium原生,SuperMap iClient3D for WebGL多了两个参数isSct和isShowGlobe,其他参数都大致相同。
与EllipsoidTerrainProvider不同之处是CesiumTerrainProvider支持水面效果,不支持法向量,我们在后面实际应用时可以看下效果。
另外这里提及一句,目前WebGL和Cesium原生在一个场景中都仅之处一个地形图层,意味着我们只能进行地形的替换而不能进行两个地形的叠加显示。
二、构造CesiumTerrainProvider
1、url,地形图层的服务地址,这个是必填参数。
2、requestVertexNormals,是否请求法线,在sceneglobeenableLighting = true;时能看到效果
3、requestWaterMask,是否请求水面,这个目前stk的地形是支持水面波光粼粼的效果的。
4、ellipsoid,参考椭球,前面的文章已经提到,不在介绍。
5、isSct,重要参数,如果是使用SuperMap iServer发布的TIN地形缓存,此参数必须设置为true。
6、isShowGlobe,是否剔除无效的区域,默认是全球显示。
三、实战CesiumTerrainProvider
1、添加stk全球地形服务,由于国外的stk服务地址(//assetsagicom/stk-terrain/world)有时候访问慢或直接访问不到,所以我们使用SuperMap iServer进行了一次转发,效果和stk一样。
我们开启了场景光照,法向量和水面特效
地形服务源自SuperMap iServer发布时需设置isSct为true,另外说明一点requestVertexNormals 法向量是在生成缓存的时候需要勾选带法线才能支持,否则就算是设置requestVertexNormals 为true也没有光照的效果,而且如果勾选了带法线,默认地形就是请求法向量的。
polygon高度的2个参数具体含义:
height:是指polygon距离地面的高度
extrudedHeight:是指polygon拉伸后的面距离地面的拉伸高度
只有当extrudedHeight大于height时才会呈现挤出高度的效果,且polygon的厚度就是两者的差值。
Cesium支持多种服务来源的高精度影像地图数据的加载和渲染。图层支持排序和透明混合。每个图层的亮度(brightness),对比度(contrast),gamma,hue,and saturation都可以动态修改。
可以在Viewer构造时传参进行设置
baseLayerPicker 底图图层控件显隐
imageryProviderViewModels 可选底图图组(baseLayerPicker:true)
terrainProviderViewModels 可选地形组(baseLayerPicker:true)
imageryProvider 底图设置(baseLayerPicker:false)
terrainProvider 地形设置(baseLayerPicker:false)
在地球构造后可通过viewersceneimageryLayers(ImageryLayerCollection类)来控制
首先说明dem数据是高程数据,需要结合底图使用。
公司也是初步在做这部分内容,刚开始由数据处理同事发布的geoserver图层,tif文件发布的,刚开始了解不多,不能用,或者采用wms加载出来为一张灰度图。查cesium api和教程,正确步骤:
1dem数据拿到之后,基本上是tif文件,需要处理为terrain文件,题主用的是cesiumlab,免费的功能即可满足
>
以上就是关于moveit调整至地形高度全部的内容,包括:moveit调整至地形高度、build cesium offline terrain、10.Unity2018中的地形——Terrain(一)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)