正文内容 评论(0

3D流程指南Part3@ET
2001-07-02 14:56:00  出处:快科技 作者:Rookie 编辑:Rookie     评论(0)点击可以复制本篇文章的标题和链接

Extremetech推出了3D流水线指南文章的第三部分,毫无疑问,这篇技术性极强的文章获得我的"Damn Cool"文章推荐奖。以下是ET对Z-buffer过程的深入讲解:

“在现在的消费级3D架构中,GeForce 2/3, ATI's Radeon和STMicro's Kyro II对于交替的Z-buffering方法,都有相应的解决方案,而且三者的方案不大相同。

但是在3D图形学中一个大原则就是“不做不需要做的工作”,人们努力的目标就是使Z-buffering检测在其他工作之前进行,特别是在纹理映射之前进行,这样就可以避免不必要的渲染工作。人们已经形成共识,z-Buffering并不是决定可见性的唯一方法。

一个非常简单的Z-buffering技术叫做画家算法,顾名思义,画家算法首先画出背景,然后画出所有前景,包括场景中被遮挡的物体。这和画画的顺序是一样的,简单说,就是先后再前。在大多数场合,这个技术可以用来对景深进行排序,但是这个算法效率很低,而且在多边形重叠时可能会导致错误,更重要的是,它的成本很高,因为一个象素要多次渲染。

在3D引擎完全由CPU来运行的年代,因为还没有Z-buffer,画家算法还经常使用。但是在3D图形卡出现之后,Z-buffer已经称为标准功能,画家算法就几乎不再使用了。

在场景中对一个象素的多次渲染称为重复渲染(overdraw),重复渲染实际上和景深复杂度是一个概念,用以定义场景中物体有"几层"。通常游戏中景深复杂度在2.5-3之间。

我们在屏幕上看到的3D空间实际上是将2D图象映射到屏幕坐标后的结果,而Z值几乎在所有的流水线过程都被互相传输使用。

现在所有的3D卡都有Z-buffer,所以人们更喜欢用Z值检测方法,因为它更有效,结果更准确。在开始设置Z-buffer时,为了对下一帧动画进行Z值检测,Z-buffer中的Z值都会清除,只有ZMax得以保留。

这里还有一个例子,其他的方法也可以达到同样的目的,一个程序可以用正Z值或是负Z值来设置Z-buffer。

在我们的例子中,Zmin是在剪切平面的近端,而正Z值显然在摄象机视角远端。其实我们不用Z-buffer是怎么设置的,景深测试就是象素-象素的逻辑测试:这个象素之前有没有东西?如果有,那么当前这个象素被舍弃,如果没有的话,那么将象素颜色写回颜色缓存(后台缓存),而Z-buffer的Z值也将更新为当前象素的位置。”

阅读全文

另外你还可以参看我原来的32-Bit Z/Stencil Buffer文章

【本文结束】如需转载请务必注明出处:快科技

责任编辑:

  • 支持打赏
  • 支持0

  • 反对

  • 打赏

文章价值打分

当前文章打分0 分,共有0人打分
  • 分享好友:
  • |
本文收录在
#快讯

  • 热门文章
  • 换一波

  • 好物推荐
  • 换一波

  • 关注我们

  • 微博

    微博:快科技官方

    快科技官方微博
  • 今日头条

    今日头条:快科技

    带来硬件软件、手机数码最快资讯!
  • 抖音

    抖音:kkjcn

    科技快讯、手机开箱、产品体验、应用推荐...