刨根问底!曲面细分技术到底是个啥?
文字写道这里,相信大家应该明白,曲面细分技术确实可以帮助用户获得更好的画面质量,简单的说,是个有用实用的好技术。但是很多好技术,由于在实际运用中遇到了种种问题,最后也是无疾而终,曲面细分是否也会遇到同样的问题而夭折呢?特别是对于游戏开发商而言,一个技术是否容易被使用才是他们更关心的,容易使用和好效果之间,开发商往往选择前者,特别是PC游戏开发商,大部分都是在工期+预算的双重压力下赶工,好用可能是他们评价一种新技术的唯一标准,因为你不能指望到处都是暴雪,到处都是山内一典的《GT5》。
前文我们明确了曲面细分能带给来的两种提升画质的方式,在下面的章节中我们将分开阐述这两种方式中可能遇到的问题,以及曲面细分能否解决或者如何解决。
从容易使用的角度看,曲面细分自动生成大量的多边形数量去实现模型的圆滑效果,这个对于开发人员而言应该是非常容易使用的,所以开发商接受起来并不难。
但是这里产生了一个很有趣的问题,由于产生多边形是自动的,可以说产生圆滑效果也是自动的,如何控制哪里不产生圆滑效果反而是开发人员需要考量的问题,看似可笑,实际上这样的问题确实存在,并且扼杀过一些曲面细分的早期版本。
如果是对于显卡发展比较了解的用户可能会记得AMD在RADEON 8500时代推出的Truform技术,实际上这也是一种曲面细分技术,只不过它仅仅是只能自动生成多边形而已,缺乏相对应的控制手段。在AMD的演示中,Truform确实可以把一些看起来见棱见角的模型进行优良的圆滑处理,但在实际游戏中,这种“地毯式”的圆滑处理就暴露出了问题。
当时最知名的Truform BUG就是在《英雄萨姆》中,将本开线条硬朗的机枪“圆滑”了,使得我们的英雄端着一把很有喜感的圆肚冲锋枪周旋于满屏幕的怪物中。也正是由于这个原因,Truform失败了。
而DX11中的细分曲面技术,在开发阶段就已经看到了前人翻船的水坑,最大限度的避免同类问题发生。这也就是在DX11渲染管线中不仅仅增加了Tessellator单元,还在之前加入了Hull Shader的作用。Hull Shader作为一个控制器,可以根据开发者的意图,去判断哪里需要增加多边形达到圆滑的效果。
这种判断实际上也并不困难。在细分曲面出现前,一个多边形数量不高,但又需要圆滑效果的模型,一般都是用软边(Soft Edge)、硬边(Hard Edge)的方式去实现。实际上,也就是通过对发现的操作达到圆滑显示的效果。
我们可以通过上图去说明这是如何实现的。同样的一个模型,多边形数量并不多,左侧的模型进行了软边处理,使得模型看上去圆滑了很多;右边的是原始的,或者说是硬边处理的模型,能清楚的看到模型上的棱角。
在很早以前,游戏中就已经采用了这种技术,而软边和硬边的操作在法线上是不同的,而Hull Shader就可以根据程序员的指令去判断这种差异,并告知Tessellator该为哪个模型或者模型的哪个部分去进行曲面细分,从而达到可控圆滑模型的效果。可控性成为了DX11曲面细分胜于之前同类技术的关键。