[gpu pro2]LargeScaleTerrainRenderingForOutdoorGames
来源:互联网 发布:php study 编辑:程序博客网 时间:2024/04/29 23:01
同事提及这个文章,果然很不错,讲地形渲染的一个比较有新意和实用性。
geometry
地形的uv使用uv relaxing,也就是会随着地形的变高进行uv伸展,这样通过在uv上的变化来处理拉伸情况。
这个的确是可以节省不少计算
material
- 每个像素点只能2层材质混合
- 使用dxt5的alpha通道记录一个index值,index值不完全是一个整数,可以是代表2.5这样的数,就代表是第二个material和第三个material。
- 把多张material pack到一个大的texture里面,也就是atlas的方法,然后使用index信息,读取两个(最多)材质的信息,然后混合
- 这里处理使用linear filter sample atlas贴图的时候有一些需要注意的地方,在下面说到了
- [good]每个像素点的读取贴图的数量,对比常规的material mask的多层贴图sample,要少不少
- [bad]
- 不像常规做法,某个像素点可以有多层混合的情况
- 由于只能是邻近的两个tile进行混合,所以如果混合的情况比较复杂,就需要repeat sub texture,导致atlas的利用率不那么高,进而限制材质的种类
- atlas里面的贴图需要同一个resolution的,某些情况就是需要更大的resolution,这个也造成了问题
texture atlas sampling
这里面关于atlas sample的部分挺不错
- atlas的mipmap生成需要做一些处理,也就是不要默认的通过linear filter这样去生成mipmap而是每一个部分的mipmap生成好再合成一个大的atlas,在mipmap低到一定程度的时候,就不要生成mipmap了,否则就不得不出现多个sub texture合并的情况了
- sampling的时候和其他的一样,通过限制uv的方法来避免linear filter取到其他subtexture的情况
- 但是这种会导致在边缘处,ddx,ddy特别大,进而总是取到mip0的情况,这种情况的处理就是自己手动来计算mipmap,然后使用tex2dlod来自己指定mip
- 其他无需多言,直接代码吧
效率:
在xbox360上面,一共消耗了14mb来存10km的地图,渲染时间大约6ms。
也做了一些block的划分,避免不得不使用u32的index,同时也便于kdtree的management
- [gpu pro2]LargeScaleTerrainRenderingForOutdoorGames
- [gpu pro2]FastSoftShadowsWithTemporalCoherence
- [gpu pro2]volume decals
- [gpu pro2]PracticalAndRealisticFacialWrinklesAnimation
- [gpu pro2]pre integrated skin shading
- [gpu pro2]使用曲面细分技术渲染地形和海水
- PRO2-Day2
- PRO2-Day3
- PRO2-Day4
- PRO2-Day5
- PRO2-Day6
- PRO2-Day7
- GPU
- gpu
- GPU
- GPU
- GPU
- gpu
- SQL2008 相关函数
- java通过生日得到星座
- vs上面不显示项目里的自定义的控件
- Linux中如何新建用户
- led驱动中未实现brightness_get函数所引起的问题。
- [gpu pro2]LargeScaleTerrainRenderingForOutdoorGames
- X window manager
- android 4.0.4系统下实现apk的静默安装和启动
- INNO Setup 使用笔记
- ibatis命名空间(namespace)使用
- 一个从UIImageView中获得Image位置的函数
- CListCtrl使用技巧小全
- ubuntu 包管理
- BNUOJ 1098 Tower