link:
http://developer.amd.com/media/gpu_assets/Andersson-TerrainRendering(Siggraph07).pdf
dice的主力 johan Andersson带来的一个关于terrain render 一个文章。
地形一般是有低精度的,unique的color map和高精度的tiling的detail map组成。
这文章的时候是在battlefield2之后了,dice表示对bf2的地形(traditional terrain)很不爽,要来点给力的。
这里讲的估计也是battlefield3的吧。
使用了procedural技术来生成texture(当然不是所有的texture),比如slope area的texture就有procedure技术的:
为参数。
slope terrain部分毕竟是比较特殊,所以使用mask来区别那里是有slope的(mask也可以做别的)。
slope的mask也可以在shader里面计算出来。
管理sparse mask texture
每个material一个mask texture来存储。
把mask texture有用的部分按照32x32存到一个个patch里面,把这些patch再atlas到一个大的texture里。
因为大部分情况一个material在terrain上使用率是比较低的,所以这是一个big win。
有一个index texture来存某一个地方使用了那一个的mask patch。
这样在shader里面就先sample index texture,然后根据sample出来的index来取texture mask patch。
material mask
用来保存很多信息,这个每个engine可以根据自己需求来定义,dice是做一些比如slope area, undergrowth等标识。
而且也不用担心太多,mask一般就占所有的%5--%15,非常可以接受。
而且可以对这种情况做一些优化,使用sparse quadtree texture来存储,将texture切成tile(32x32),然后atlas。
quadtree来管理,但这个只是当时的解决方案,后来的方案是grid+multithreading:link
lod之间是用t-junction,这个算法只需一图:
undergrowth
小结
可以说整个部分的亮点是procedure技术,这个的确是趋势所在: