Halo Reach Effects Tech
link:http://cmpmedia.vo.llnwd.net/o1/vault/gdc2011/slides/Chris_Tchou_Programming_Halo_Reach_Effects.pptx
halo reach的一些特效技术:
particles
首先提到bungie老的particle系统基于一个很大的uber shader,uber shader的一个坏处也体现的比较好,就是没法很精确的去保证每一个particle都按照其最精简的方式运行。
bungie的选择也很棒,就是用额外的一些系统来补充,一般的particle system用老的,新式的(带反弹功能的)就用新的particle。
这个看似简单的选择,结合之前的一些文章来看,其实不容易,不够老练的选手常常是想另立门户,然后写了很长时间,一切顺利的话,写出一个和原来差不多的东西。
新的particle系统擅长处理这样一类particle:
- 数量多
- 面积小
- 生命期短
- pixel shader简单
bungie使用28个byte就把这一类particle的信息表达清楚,并在build time存到texture里面。
在render particle的时候是cpu直接issue一个drawcall,gpu去sample texture,sample出来的值是particle 的property,根据这些在vs,ps里面去渲染。
当然quad实在vs里产生。
particle collision
使用depth buffer和normal buffer来碰撞particle,屏幕外的就不管了。
好像会很有问题,但是事实证明是可行的而且给力的。
ShieldEffect
这部分一些小技巧效果还很棒,赶紧实现个,组里同事还挺喜欢的。
这个我比较喜欢:使用depth信息调解下透明度就可以达到,很棒!
LowResolutionTransparency
使用1/4buffer来渲染透明物件由来已久了,bungie也采用了这个办法。
在360平台上,bungie使用了4xmsaa的技巧来做。
另外也不是所有的particle都放在quater buffer里就是最好,一些小的近的直接全分辨率就好。
然后文中提到一个transition的问题让我有点晕,不知道是什么的transition,high/low resolution的还是其他的什么。
远的大的可以低分辨率,这个就涉及到一个低高分辨率的转换问题。
暂且理解为resolution的transition吧,看起来只有这个是和depth相关的。
总之是把particles进行了分group的划分来做的,这一块不是很懂目前,有哪位看的很明白麻烦指教一下。
最后务虚部分提到了
- 程序员不要埋头猛做,需要看下项目需要什么
- 质量和速度是可以互相转换的,有时候就是要牺牲一些质量,
- 君不见cod那大量的粗糙的大normalmapping和particle一样赢得了玩家的心么?