Unity中基于高度图的地形系统总结

Unity中基于高度图的地形系统总结Unity中基于高度图的地形系统总结一、高度图        什么是高度图?从狭义上来理解,高度图是一张带有灰阶的图片,图片中的每个像素具有不同的灰度值,这些灰度值代表了不同的高度:像素的灰度值越大,表示对应的高度越高;像素的灰度值越小,表示对应的高度越低。从编程的角度来理解,高度图是一个二维数组。因为从高度图映射到一个地形,需要创建一个与高度图大小相同的顶点网格,所谓大小相同指的是

Unity中基于高度图的地形系统总结

一、高度图

         什么是高度图?从狭义上来理解,高度图是一张带有灰阶的图片,图片中的每个像素具有不同的灰度值,这些灰度值代表了不同的高度:像素的灰度值越大,表示对应的高度越高;像素的灰度值越小,表示对应的高度越低。从编程的角度来理解,高度图是一个二维数组。因为从高度图映射到一个地形,需要创建一个与高度图大小相同的顶点网格,所谓大小相同指的是高度图中的每个像素对应顶点网格中的一个顶点。这个代表高度图的二维数组,其中的索引值用来定位不同的顶点,而对应的存储值则表示了顶点对应的高度,也就是像素的灰度值。如图1所示是一个顶点网格,X-Z维度分别对应了高度图的两个维度:

Unity中基于高度图的地形系统总结

图1

 

二、Unity中的地形系统与高度图

         高度图有一个重要的属性,就是它的像素分辨率。像素分辨率表示了高度图在长和宽两个方向上的像素数量。在Unity中,当我们选中一个地形对象时,选择Terrain->Set Resolution选项,就可以在其中设置该地形对应的高度图的分辨率。之所以说高度图的分辨率十分重要,是因为该分辨率与地形对象的顶点网格的细节表现具有对应关系。总的来说就是:在地形对象大小不变的前提下(世界单位中),对应的高度图分辨率越大,则顶点网格中的顶点越密集,顶点之间的间距越小,所能表现的细节越强,反之同理。顶点之间的间距可表示为图1中的Block Scale属性。如图2所示,在Unity中设置高度图的分辨率:

Unity中基于高度图的地形系统总结

图2

 

         在Unity中,高度图分辨率的最小值为33,并以32的倍数为差值增加,具体表现为33、65、129、257、…等。其中的Terrain Width、Height、Length属性,分别表示了在世界单位下地形对象在X、Y、Z三个维度下的大小。因为分辨率的大小影响了一个地形系统变化的精细程度,也就是改变了地形顶点网格中相邻顶点间的距离属性。该属性在Unity中对应了TerrainData.heightmapScale变量,每个高度图采样的大小。该属性并未在上图中显示出来,不过可以通过打印输出来查看,如图3所示,是与图2设置所对应的地形对象的一些属性的打印输出,Scale即表示了顶点间的距离:

Unity中基于高度图的地形系统总结

图3

 

        当你在Unity中修改地形时,在Scene视图中切换到wireFrame显示模式下,针对同一个地形对象,设置不同的高度图分辨率,便会清楚地看到地形顶点网格在不同分辨率下的精细程度变化,如图4、5所示:

Unity中基于高度图的地形系统总结

图4(分辨率为33所对应的块大小)

 

Unity中基于高度图的地形系统总结

图5(分辨率为65所对应的块大小)

 

       最后,在Unity中,你还可以导入或者导出地形的高度图,如图6所示:

Unity中基于高度图的地形系统总结

图6

 

        以上是自己总结的一些高度图的基本知识,以及高度图在Unity的地形系统中的基本应用。后续自己还会把一些基于地形系统的应用继续总结,若有不对的地方欢迎大家的批评指正: )

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/34719.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注