[sig07][dice]Terrain Rendering in Frostbite using Procedural Shader Splatting

link:

http://developer.amd.com/media/gpu_assets/Andersson-TerrainRendering(Siggraph07).pdf

http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=E186596C09CC8E696BD79A02DBA080CC?doi=10.1.1.161.8979&rep=rep1&type=pdf

dice的主力 johan Andersson带来的一个关于terrain render 一个文章。

 


地形一般是有低精度的,unique的color map和高精度的tiling的detail map组成。

 

 


这文章的时候是在battlefield2之后了,dice表示对bf2的地形(traditional terrain)很不爽,要来点给力的。

这里讲的估计也是battlefield3的吧。

 

  • 高精度texture做heightmap,16bit的
  • vertex shader texture生成高度
  • shader calculated normal

使用了procedural技术来生成texture(当然不是所有的texture),比如slope area的texture就有procedure技术的:

  • height 
  • slope
  • normal

为参数。

 

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

  • instancing
  • procedural on demand----只是存一些描述,然后生成
  • 按照16*16这样的virtual cell为单位(terrain是32*32)来管理

 


 

小结

 

可以说整个部分的亮点是procedure技术,这个的确是趋势所在:

  • 更加灵活的lod,in game的lod控制或是不同机器配置都可以做的更好
  • 对存需求小
  • realtime的耗时可能多可能少,因为现在越来越多的bottleneck在内存上,降低内存消耗的往往也能降低时耗

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值