使用基于GPU的Geometry Clipmap渲染地形(下)

本文档的下篇详细介绍了如何利用GPU的浮点计算能力,结合Shader和混合技术,实现高效地渲染大规模地形。通过Geometry Clipmap技术,解决了传统方法在处理大量地形数据时的性能瓶颈,确保了细节层次的平滑过渡。
摘要由CSDN通过智能技术生成

使用基于GPUGeometry Clipmap渲染地形(Terrain Rendering Using GPU-Based Geometry Clipmaps)(下)

 

翻译:clayman
clayman_joe@yahoo.com.cn
仅供个人学习使用,勿用于任何商业用途,转载请注明作者^_^

1.3.5 Vertex Shader

         我们使用同一个vertex shader来渲染之前描述的所有2D footprint。首先,对于给定的footprint坐标(x,y)来说,shader通过简单的缩放和变换来计算它的世界坐标(x,y)。接下来,从顶点纹理中读取高度值z。这里不需要任何过滤器,因为顶点和纹理采样是一一对应的。

         为了平滑的过渡,vertex shader将对两个不同层次边界的顶点进行几何混合(blend)。根据顶点(x,y)相对于观察点(VxVy)的位置来计算混合参数alpha。这里:

alpha = max( alphax,alphay):

alphax = clamp(( | x – Vx ) – ( (n-1)/2 – w – 1)) /w , 0, 1)

         使用类似的方法计算alphay

         这里,所有的坐标都以clipmap网格范围内[ 0….n-1]之间的值来表示,w是交换区域的宽度(这里选择了 w= n/10)。我们希望除了交换区域外,alpha值都为0,而在交换区域内,值线形的从0增加到1,当达到外围的层次时值为1。下图的蓝色部分即为交换区域。

         对于几何混合来说,我们对同一位置(x,y)在不同层次之间的高度值Zf(较好层次的高度值)和Zc(教粗糙层次的高度值)之间进行线形插值。

Z’ = ( 1 – alpha)Zf + alpha * Zc

         一般情况下,采样点位于较粗糙网格的边缘,Zc则通过对较粗糙层次边缘两个采样点的均值来计算。我们可以在运行时来完成这一步计算,但这将会导致3次顶点纹理查找(Zf一次,Zc = Zc1 + Zc2/2 两次),而对于现在的显卡来说,读取顶点纹理的代价还是很大的。

         因此,我们把计算Zc作为更新clipmap的一部分来实现,把ZfZc打包为同一个单通道的浮点纹理(pack both Zf and Zc into the same 1-channel floation-point texture)。我们把Zf作为浮点数的整数部分,而差值Zd = Zc – Zf则保存为小数部分。这个打包的步骤将在pixar shaderupsampling的时候完成(详见 1.4.1 )。

         以下是实现clipmap渲染的vertex shader的部分

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值