» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


发新话题
打印

[其他] 推荐一篇近期难得的实用技术文

TG业界区液内高玩众多,个人不敢私藏

但未经作者允许,所以就直接贴链接了:

http://bbs.a9vg.com/thread-3549729-1-1.html

简单易懂,态度客观中立,更新速度也很良心。和作者聊了下,作者更希望各位去阿9聊,所以有兴趣的,可以去PM他~


转一部分自己比较喜欢的章节


第七天 深度缓冲(Depth buffer或者Z-buffer)、帧缓冲(Framebuffer)以及像素填充率(Fillrate)


大家是不是很好奇?为什么顽皮狗在神秘海域1中搞不定手雷烟雾的半透明效果?

为了解答这个问题,我们必须引出一个概念,叫做深度缓冲(Depth buffer或者Z-buffer)。

首先,这个深度缓冲是啥呢?

我们在屏幕上看到的一个一个像素,它们除了有颜色的RGB值以外,还有一个深度值(Depth Value)。

这个深度值是什么呢?大家想想看,3D游戏的物体都是有三维坐标的,对不对?那投射到屏幕上肯定也是一个三维坐标,对不对?比如说,树木在前面,就会挡住人物。

这里我们暂时不讨论3D电视。因此,我们的屏幕都是二维的,要想存储一个像素所有的信息,就必须要有额外的信息,那就是深度值。

而所谓的深度缓冲,就是帧缓冲(Framebuffer)中的所有像素的深度值。

那什么又是帧缓冲呢?我先从最简单的情况入手吧。

在高清游戏主机中,帧缓冲的内容,就是你在屏幕上看到的所有像素的颜色值和半透明值(Alpha value)。

对于大多数的情况,像上面这样理解就可以了,完全没有问题。

不过,在比较传统的主机中,帧缓冲和屏幕上的像素还是有点区别的。因为主机的帧缓冲会比屏幕范围稍微大一点。实际显示的区域,要比显存中的帧缓冲要小一点。

对了,帧缓冲和深度缓冲都是在显存里面的。这是一个重要的事实。

世嘉青:那楼主我太感谢你了啦!你在分析土星机能的时候,居然没有把Framebuffer算进去耶!这样就能存更多的四边形了啦!

可不是我偏袒SS啊,因为SS有专门的两块存储器(2 X 256KB)来放帧缓冲,所以那块512KB的显存就可以专门用来放3D数据了。

细心的玩家肯定发现了:居然有两个framebuffer!

通常情况下,会有两到三个的。以后我们讲到垂直同步的时候,再详细聊一聊吧。

好,现在大家来复习一下:帧缓冲(Framebuffer)里面有什么?深度缓冲(Depth buffer或者Z-buffer)里面有什么?


现在要进入正题了。这个深度缓冲到底有什么用呢?

大家想象一下,我们先画了一个人物。如果一棵树也在同一个像素位置有像素,那么GPU就会比较两者的深度值。如果这个像素在人物后面,就不用画树的像素了;如果在人物的前面,在帧缓冲里面,这个新像素的颜色值就会替代人物像素的颜色值,深度值也会更新。

比较近的物体遮挡比较远的物体。这个显卡处理的硬件优化过程叫作Z消隐(Z-culling)。

以后,等我讲到排序(Sorting)的时候,就会讲到一个重要的事实。大家暂时先记住:
Z消隐(Z-culling)这个优化,只能应用在没有半透明的场景里。

如果所有物体都没有半透明效果的话,那么可以保证屏幕上的像素基本没有任何重画。屏幕上有多少像素,显卡就需要画多少像素。

如果物体有半透明的效果,那么显卡的工作就会繁重很多了。这个物体在屏幕上占据多少像素,这个区域所有的像素都需要重新计算一遍。

神秘海域1里面的手雷烟雾,经常是会占据一大半屏幕的。假如有半透明效果的话,屏幕上的像素就都需要处理两三遍。这就击中了PS3的显卡RSX的一个很大的软肋,像素填充率(Fillrate)太低。

所谓像素填充率,就是显卡画像素的速度。

严谨的说,并没有一个统一的标准来衡量它。究竟是画一块单色的像素的速度呢?还是画一块有纹理有光照的像素呢?它们之间的区别很大。

但是经过实践,业界是有共识的。RSX处理有纹理有半透明效果的像素,速度确实不理想。

因为,即便是顽皮狗,也只好让烟雾没有半透明效果。这样子,RSX就可以做Z 消隐了。

PS Vita的显卡,虽然运算速度不如RSX,但是,它却没有像素填充率的软肋!所以,包括我在内的很多游戏开发者,都松了一口气。

那么,在神秘海域2中,这个问题是怎么得到解决的呢?这就是CELL处理器的威力了,等我们以后解析PS3的时候,再说吧。


明天我们应该会开始光照的入门话题,大家明天见!


TOP

第六节的内容一直提示非法内容所以无法转载。。。

最后的小妞爱好者可以关注一下六七节



TOP

发新话题
     
官方公众号及微博