镶嵌已被吹捧为诸如DirecX 11之类的新型图形API的主要功能之一,并且在现代图形管道中被显示为独立阶段。

与硬件和软件的关注度相比对于此功能,它似乎并未在实时图形中大量使用。因此,这似乎不是图形需求所产生的功能。

然后为什么细分化成为如此突出的功能?满足非实时渲染的需求?作为异构计算中的通用并行处理器,GPU体系结构日新月异的副作用?还是随着具有细分功能的GPU变得越来越普遍,将在图形中使用的具有前瞻性的功能?

#1 楼

历史:ATI在其第一代中引入了PN三角形(镶嵌的基本方法)以包括可编程硬件-因此它的历史与可编程硬件着色器差不多。它在ATI的下一代产品中已被弃用,但在HW中恢复了细分化,该硬件成为Xbox 360的基础(一些ATI演示在PC上展示了它)。微软随后将该功能整合到了DX11中(尽管与ATI / AMD现有的硬件不兼容),从而使细分化成为所有GPU制造商事实上的要求。

评论


$ \ begingroup $
这似乎并没有真正解决实际问题。
$ \ endgroup $
–克里斯蒂安·劳(Christian Rau)
16年5月10日在9:51

$ \ begingroup $
我将其添加为评论,原始提问者要求我将其推广为答案。请参阅下面的发问者的评论...
$ \ endgroup $
–丹尼尔·格塞尔(Daniel M Gessel)
16年5月10日在14:28



$ \ begingroup $
我的问题是,为什么像tesselation这样的看似未得到充分利用的功能吸引了如此多的API注意力。 RichieSams的答案更多地讨论了镶嵌化是什么,而不是解释它如何变得如此重要。上面的答案是到目前为止我得到的最好的答案。
$ \ endgroup $
– ApoorvaJ
16年5月11日下午4:52

$ \ begingroup $
另一个方面是,几何体着色器(足够灵活以实现细分效果,并且在DX10中可用)在硬件中很难高效实现。我的理解是主要问题是每个输入基元的输出的顺序处理意味着并行执行几何着色器需要大量缓冲。固定功能细分器效率更高。
$ \ endgroup $
–丹尼尔·格塞尔(Daniel M Gessel)
16年5月11日在16:52

#2 楼

镶嵌的主要目的是提高网格的分辨率,同时仅传输少量的三角形数据。此外,曲面细分允许您动态更改网格的LOD,从而可以优化着色器调用。

因此,我们可以传递GPU(例如3000个三角形)并将其镶嵌到300000个三角形。我们实质上是在交换存储空间/带宽来获得计算能力。由于GPU拥有大量计算,而且内存有限/缓慢,因此这是一个很好的折衷。

关于“在实时图形中不大量使用”。我有些不同意。许多AAA游戏在很长一段时间以来一直在使用细分。也就是说,镶嵌细分很难正确实现。如果做错了,镶嵌可能会导致很多问题,例如破裂或细分成亚像素三角形,这会破坏您的填充率。

这些问题加在一起,使它们难以快速实现。为您的日常对象细分。因此,如今您看到的镶嵌细分的大多数用途是在AA或AAA游戏,游戏引擎和离线渲染工具中。

那,正在进行积极的研究,试图更好地利用镶嵌硬件,使其更易于使用。例如:使用自适应四叉树对细分曲面进行高效的GPU渲染

最后,细分是一个很棒的功能,但是很难做到正确

评论


$ \ begingroup $
这是一个非常有用的信息,但是丹尼尔(Daniel)的答案更多地是关于历史背景下的镶嵌效果,这正是我的问题。但是,谢谢你的回答。 :)
$ \ endgroup $
– ApoorvaJ
16年5月7日在10:07