`
dogasshole
  • 浏览: 842371 次
文章分类
社区版块
存档分类
最新评论

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一样赢得了玩家的心么?

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics