开创DX11宏图霸业!镭HD5870权威评测
第三章/第四节 2007年R600:Tessellation卧薪尝胆
现在看来,R600核心是一款非常失败的产品,功耗高、发热大、性能低、AA效能差,但是当R600(320SP)的架构扩充至RV770(800SP)的规模时,就没人敢轻易对这套体系架构评头论足了。事实上R600的失败在于冒险采用80nm工艺、512Bit环形总线、以及Shader AA,而其核心架构的运算能力并不输给竞争对手,因而一直被沿用至RV670、RV770还有如今的RV870身上。
R600除了完全按照DX10和统一渲染架构设计外,还整合了一个特殊的模块:Programmable Tessellator,可编程拆嵌器。由于这个可有可无的模块占用晶体管并不多,因此AMD之后的全系列DX10 GPU中都集成了可编程拆嵌器。
这个可编程拆嵌器可要比XBOX360高明很多,R600核心能够根据3D模型中已经有的顶点,根据不同的需求,按照不同的规则,进行插值,将一个多边形拆分成为多个多边形。而这个过程都是可以由编程来控制的,这样就很好的解决了效率和效果的矛盾。
现在我们就更容易理解Tessellation技术是怎么回事了,它是一种能够在图形芯片内部自动创造顶点,使模型细化,从而获得更好画面效果的技术。Tessellation能自动创造出数百倍与原始模型的顶点,这些不是虚拟的顶点,而是实实在在的顶点,效果是等同于建模的时候直接设计出来的。
R600的Tessellation技术支持多种决定插值顶点位置的方法来创造各种曲面:
1. N-Patch曲面,就是和TRUFORM技术一样,根据基础三角形顶点的法线决定曲面。
2. 贝塞尔曲面,根据贝塞尔曲线的公式计算顶点的位置。
3. B-Spline, NURBs, NUBs 曲线(这三种曲线均为CAD领域常用曲线,在Maya中均有相应工具可以生成)
4. 通过递归算法接近Catmull-Clark极限曲面。
有了多种无比强大的曲面生成技术,在加上可编程的设计,程序员在开发游戏之初就能根据需要制定相关模型采用何种细分法则,从而避免出现变形和失真的问题。
而且,Tessellation过程被安排在了顶点着色之前,这就意味着Tessellation所创造出来的顶点全都可以参与Vertex Shader的处理和运算。这些顶点所带来的所有细节,将具备所有特效。
拆嵌后再辅以各种阴影及着色效果,从而以很小的代价达到CG级别画面
在R600发布时,AMD拿出了一款CG级别实时渲染的Demo,其中被积雪所覆盖的山体就是由Tessellation生成的。以往的演示Demo都是片面注重对主角的修饰,而背景往往只使用简单的纹理贴图,而R600的这个Demo其背景和环境的精细程度甚至超越了主角Ruby。
可惜,时至今日,只有ATI的官方Demo使用了自家的Tessellation技术,还没有任何一款PC游戏支持这项被孤立于DX10之外的非主流技术,看来仅靠AMD还是孤掌难鸣的。