Unity中基于高度图的地形系统总结
来源:互联网 发布:天天特价淘宝网衣服 编辑:程序博客网 时间:2024/06/04 15:45
Unity中基于高度图的地形系统总结
一、高度图
什么是高度图?从狭义上来理解,高度图是一张带有灰阶的图片,图片中的每个像素具有不同的灰度值,这些灰度值代表了不同的高度:像素的灰度值越大,表示对应的高度越高;像素的灰度值越小,表示对应的高度越低。从编程的角度来理解,高度图是一个二维数组。因为从高度图映射到一个地形,需要创建一个与高度图大小相同的顶点网格,所谓大小相同指的是高度图中的每个像素对应顶点网格中的一个顶点。这个代表高度图的二维数组,其中的索引值用来定位不同的顶点,而对应的存储值则表示了顶点对应的高度,也就是像素的灰度值。如图1所示是一个顶点网格,X-Z维度分别对应了高度图的两个维度:
图1
二、Unity中的地形系统与高度图
高度图有一个重要的属性,就是它的像素分辨率。像素分辨率表示了高度图在长和宽两个方向上的像素数量。在Unity中,当我们选中一个地形对象时,选择Terrain->Set Resolution选项,就可以在其中设置该地形对应的高度图的分辨率。之所以说高度图的分辨率十分重要,是因为该分辨率与地形对象的顶点网格的细节表现具有对应关系。总的来说就是:在地形对象大小不变的前提下(世界单位中),对应的高度图分辨率越大,则顶点网格中的顶点越密集,顶点之间的间距越小,所能表现的细节越强,反之同理。顶点之间的间距可表示为图1中的Block Scale属性。如图2所示,在Unity中设置高度图的分辨率:
图2
在Unity中,高度图分辨率的最小值为33,并以32的倍数为差值增加,具体表现为33、65、129、257、…等。其中的Terrain Width、Height、Length属性,分别表示了在世界单位下地形对象在X、Y、Z三个维度下的大小。因为分辨率的大小影响了一个地形系统变化的精细程度,也就是改变了地形顶点网格中相邻顶点间的距离属性。该属性在Unity中对应了TerrainData.heightmapScale变量,每个高度图采样的大小。该属性并未在上图中显示出来,不过可以通过打印输出来查看,如图3所示,是与图2设置所对应的地形对象的一些属性的打印输出,Scale即表示了顶点间的距离:
图3
当你在Unity中修改地形时,在Scene视图中切换到wireFrame显示模式下,针对同一个地形对象,设置不同的高度图分辨率,便会清楚地看到地形顶点网格在不同分辨率下的精细程度变化,如图4、5所示:
图4(分辨率为33所对应的块大小)
图5(分辨率为65所对应的块大小)
最后,在Unity中,你还可以导入或者导出地形的高度图,如图6所示:
图6
以上是自己总结的一些高度图的基本知识,以及高度图在Unity的地形系统中的基本应用。后续自己还会把一些基于地形系统的应用继续总结,若有不对的地方欢迎大家的批评指正: )
- Unity中基于高度图的地形系统总结
- Unity 地形高度图生成方法
- Direct3D学习(五):基于高度图的地形生成
- 基于高度图的3D地形渲染
- Unity中将角色对齐地形高度的方法
- 基于高度图的三维地形生成算法入门篇 —— 均匀网格地形生成算法
- 基于高度图的三维地形生成算法入门篇 —— 均匀网格地形生成算法
- 基于高度图的三维地形生成算法入门篇 —— 均匀网格地形生成算法
- 基于高度图的三维地形生成算法入门篇 —— 均匀网格地形生成算法
- unity地形高度图进行外部处理问题
- 基于高度差的地形LOD与平截头体剪裁
- 高度图生成地形
- 高度图构造地形
- 在unity内置的地形中使用凹凸贴图
- unity中地形Terrain明显闪烁的解决办法
- 使用高度图生成地形
- Unity 3d地形系统自定义画笔
- Unity中动态修改Terrain地形
- 用TDD开发可能会更省时间
- WPF报表控件(折线图、柱状图、饼状图)
- 我的android(第八天)
- 【黑马程序员】C语言学习笔记之错题集
- flex编程之基础搭建
- Unity中基于高度图的地形系统总结
- Android.AsyncTask
- Linux 搭建SVN 服务器
- 如何在ios中简便地判断内存是否泄露
- ngx_event_pipe_write_to_downstream分析
- 团队建设的几点体会-----之二
- poj1700过河问题(贪心)
- LDO和BUCK降压稳压器对比
- Android - 组件工具箱(widget tool box)