Height Map Terrain

我在做飞行模拟游戏的时候,有这样的需求:飞机在高空中俯瞰地表。

这时我遇到两个问题:

1.飞机飞十分钟会飞出上百公里,那么这个地表模型谁来做?需要多长时间?

2.这个地表模型有多少面,GPU能扛得住吗?

对,如果我们按照传统思维实现这个功能的话,一定会遇到这两个问题,第二个问题也许还好点,毕竟我们有lod系统,但是第一个问题- -#

那么今天我给大家提供一个新的思路:用shader实现基于高度图的地形系统,我给它命名为“Height Map Terrain”。

先上个效果图:

基本原理如下:

1.输入一张高度图和一张地表贴图。

2.在fragment shader中根据uv映射取地表贴图的颜色,并调整成自己想要的整体色调。

3.在fragment shader中根据uv映射取高度图中的高度值,并经过光照计算出软影子。

4.将2和3混合。

5.输出到屏幕或者Quad。

这个方法有如下几个优点:

1.支持无限大地图

2.不需要人工制作复杂的地形,只要用ps生成高度图和地表贴图即可。

3.没有vertex的计算开销,最多只渲染两个三角形。

实现方法:

1.在场景中创建一个Quad。

2.创建一个空的shader再把附件中的代码考进去。

3.把附件中的水贴图和噪音图考到项目中,并指定给上面创建的shader。

4.把shader拖到上面创建的Quad中。

5.运行。

附件:

Leave a Reply

Your email address will not be published. Required fields are marked *