|
实现Tesslleation性能提升的方法有很多种,别忘了这个技术是ATI先提出并实现的,我认为NV增加了 R/W L2 CACHE来提升这个性能是弊大于利,它主要的目的还是兼容C++,NV要考虑的事情太多了,以前只有ATI跟它竞争的时候,它什么事都不用想,只需要考虑把游戏里的桢数从30提升到60就行了。
goodayoo 发表于 2010-6-2 01:14 ![]()
Tessellation 在模型上的应用其实就是一个几何压缩的手段而已,这个东西并非 ATI 提出,相关的技术其实早就有了,在 RADEON 8500 之前的大多数建模软件都具备 Tessellation,Quake 3、MotoGP 这两个游戏是 PC 上最早采用软件 Tessellation 技术的游戏,在游戏转载场景的时候,透过预定义的参数,更改场景中的曲面细节度(Quake 3 中�**啊?otoGP 的赛道)。
RADEON 8500 (R200)的 Tessellation 是基于 N-Patch 的,三角面的 Tessellation 是很难控制的,在 R300 的时候这个东西已经被抛弃,改用软件实现。
中间 Matrox Parhelia 有实现过 Tessellation,同样是基于三角面,当时和 R200 相比,它实现了 vertex texture fetch,能更好的控制几何面形状。
在 NV30 的时候,NVIDIA 已经引入了 quad patch,非常适合于 Tessellation,只是后来的驱动将该技术封闭掉。
Xenos 和 R600 的 Tessellator 其实是同一代的东西,限制基本上一样,例如它们对每个元线段的分解倍数都是一样的。Xenos 和 R600 的 Tessellator 支持的控制几何图元对象比 R200 好多了,不过说实在的,只有一家实现而且缺乏标准的技术,下场都是不了了之,现在没几个游戏使用到 R600 的 Tessellator,情况实际上比当年的 R200 还惨。
Tesslleation 会几何级增加几何处理的需求,而在单个图形芯片上实现硬件 TnL 从而实现几何处理性能飞跃的是 NVIDIA,几何处理的加速方面 NVIDIA 是老手。
也就是说,你可以弄上 xx 个 Tessellator,但是如果几何图形性能跟不上,依然谈不上什么 Tessellation 性能。
Cypress 的 Tessellator 有两个,Setup 单元也有两个,但是它的作用是把大三角形拆开成两个来处理,因此几何处理能力实际上依然是 1 primitive input/output。
NVIDIA GF100 的几何处理性能不仅在 Tessellation 的时候起效,在固定的几何处理时也能发挥作用,能够实现 4 primitive input/output(实际测试是 3.2 左右)。
GPU 能实现高速的图形处理,核心就是并行,因为图形是非常容易实现并行处理的,在 GPU 上这些并行处理都是以若干个像素块为单位交给流水线执行的,当然流水线的不同阶段,这个像素块的大小可能不一样,例如在 pixel shader 阶段,都是所谓 quad,大致上就是 16 个像素的大小。
GPU 的渲染方式是逐个三角形来画的,例如屏幕上一帧画面有 100 万个三角形,对于几何处理阶段来说,不考虑 HSR等动作,就得对这 100 万个三角形逐个处理。
对于传统的 1 primitive input/output GPU 来说,这个过程其实还是没啥风险的,逐个画就是了,但是如果是 n primitive input/output,就可能涉及到 primitive 捞过界的问题(因为是光栅化的时候为了高效期间都是一次在一小块投影空间上进行处理的,如果是多个三角形同时话就可能出现叠扰),如果不理会,这个画面就会乱七八糟,但是如果都把中间结果写到主内存里,将是非常大的带宽开销。
GF100 引入 L2 RW cache 就能把部分处理好三角形存起来并画上次序标记,这样可能跨界的三角形就能得到高速的缓存,进行下一步的处理。
当然,L2 RW 的作用不仅于此,还有可以作为寄存器溢出缓存、加速 Directcompute/Pixel Shader 状态切换以及各种需要高速中间缓存的应用场合,部分 RADEON HD 5870 明显落后于 GeForce GTX 480 的游戏例如 Battlefrge、Stalker COP、Metro 2033 都说明了 Directcompute 上前者的不足。 |
|