百科问答小站 logo
百科问答小站 font logo



【图形渲染-引擎】软光栅真的这么强?为何ue5之前的引擎做不到? 第1页

  

user avatar   netwarm007 网友的相关建议: 
      

并不是。

历史上是先有的光栅化算法,再有的硬件加速。显卡的前身叫图形加速卡,就是因为软件太慢,用硬件固化的方式来加速的。如果软光栅无条件比硬光栅快,恐怕世界上就不会有GPU这个东西了。

在同一代技术同等晶体管数目的前提下,ASIC(专用芯片)永远是比通用ALU(计算逻辑部件)+程序效率高的。这是因为通用的电路需要考虑很多情况,需要支持可编程、调度、分支预测等等,这些都会消耗相当多的硬件资源(晶体管)。而且程序也是数据,放在内存上要读进来,这个延迟很高的。(随随便便就是几百个时钟周期)

这也是为什么谷歌会用FPGA甚至是TPU代替GPGPU进行深度学习方面的计算,因为任何时候针对特定应用固定算法,进行针对性硬件设计,都能大大提高效率。

但是题目所引文章里的数据是基本可信的。UE5的表现大家也有目共睹,这是为什么呢?

原因其实是在于边界条件,也就是特定的应用场景和设计选择上。

首先,正是因为纯硬件的光栅化模块效率很高,到目前为止,在大部分游戏当中现代GPU的性能瓶颈很少出现在光栅化这个环节,加上shader日趋复杂,GPU花在跑shader上的时间越来越多,所以近代GPU在设计的时候,光栅化模块的性能设计都是根据到目前为止的经验,对于典型运用场景“够用”的情况下,尽可能节省。(留出芯片面积给其它,特别是堆flops)

具体来说,无论是N卡还是A卡,相对于庞大的计算核心阵列和RB(渲染后端),光栅化模块在芯片上的面积其实小得可怜。数量也很少,一般就是2个到4个左右。

这是因为当代游戏当中,特别是PBR(基于物理的渲染)流行起来之后,顶点上面附属十几个属性已经家常便饭,ps绑10来张贴图也是屡见不鲜。在这种情况下,就这点光栅化性能就绰绰有余了。

但是题目当中的文章,以及UE5 Nanite的展示,演示的是什么呢?文章当中的软光栅,只是完成了一个对深度缓冲区的输出,也就是类似于阴影贴图的渲染。而UE5到目前为止演示最多的,就是沙石材质的土堆和模型。

并且两者都采用了面数非常高的,不透明的静态模型。因为面数高,所以单个三角形面积很小。

简单来说就是高面数+极少属性+简单材质。

这恰恰是当今GPU硬件光栅化管线所最不擅长的情形。因为这种运用场景,是在当代GPU设计想定范围之外的:它从一开始就没有针对这样的应用场景进行设计优化。

或者说,这其实正是DX10以来,抛弃DX9固定管线,导入更多可编程模块所牺牲的部分。

事实上,如果有稍微了解一下UE5的实现,会知道其第一步构建visibility buffer的时候,用的是几乎不带任何属性(除了位置信息)的几何数据。而在后面,也只是对小三角形使用软光栅化,大三角形依然是采用硬件光栅化。

而且UE5的nanite是完全嵌入到传统管线里面的一个子过程:你可以单独为每个mesh打开关闭nanite。这其实不就是在暗示着什么么。

就如已经有别的回答提到的,即便是题目所引文章当中的场景,把FOV调节一下,让大三角多一些,你就会看到完全不一样的结论。硬件光栅化处理小三角形性能低下的主要原因在于其2x2像素的离散化方式:也就是无论三角形多小,最少它都会离散出4个像素,只不过最后通过mask将其中几个像素标志为无效。但是这些无效像素依然会进入管线的下游,跑完几乎全程。(这就是管线,进了管子,就只能一路跑到出口)

以及,现有硬光栅化模块在离散的同时会处理所有附属在顶点上的属性,并未将几何体的处理单独提取出来。

所以,除了大量小三角形(非常高面数的模型)这种极端情况之外,大部分“通常”的情况,硬件光栅化都是比软件光栅化快的。

但是,在现有GPU管线结构下,硬件光栅化必须通过vs/gs来喂数据。而软件光栅化可以在cs当中直接完成。因为vs/gs工作在顶点/primitive级别,所以无法/很难实现cluster/meshlet甚至是sub-object级别的culling,因此虽然硬件光栅化性能好,但是对于复杂场景实际上是做了很多无谓的工作,离散了很多对画面根本就不会有影响的像素出来。而基于cs的软光栅则天然可以在光栅化之前通过自定义mesh的数据格式实现子对象/子网格级别的高效剔除,从而整体浪费大大减少,最终在性能上胜出。

而mesh shader则是根据cs软光栅的这一优点,同时旨在解决cs无法直接连接硬光栅这一局限推出的,介于cs和gs/primitive shader之间的东西。其单纯的性能同样其实是不及vs/gs的,但是因为可以支持自定义mesh格式,更有效地执行更高级别的剔除,对于复杂场景是有可能胜出的。

总结一下的话,就是并非是软光栅化性能高,而是因为其能够方便地实现更为高效的剔除算法,以及在大量小三角形等特定情况下具有优势。

其实大部分性能优化问题均是如此。除了基础技术的飞跃,在同等条件下的优化一般都是拆东墙补西墙,根据具体应用场景寻求最佳平衡而已。脱离了具体场景论优劣是没有意义的。

UE5的伟大之处,其实和谷歌苹果什么的很多产品很像,并不是创造了什么高深莫测的技术,而是将技术恰到好处地,在正确的时间用正确的方式,展现了出来。




  

相关话题

  为什么《轩辕剑七》试玩版的画面看起来缺乏立体感? 
  主流的游戏引擎都是如何解决Alpha Blending问题的呢? 
  如何正确的入门Vulkan? 
  实时光线追踪(real-time ray tracing)技术还有哪些未攻克的难题? 
  Mac系统下有什么适合图形学的C++IDE?Clion还是VS? 
  3d引擎开发需要那些技能储备? 
  计算机图形学领域还有哪些没有啃到肉的问题? 
  如何看待Amazon基于Cryengine开发的新引擎? 
  计算机图形学和有限元仿真的区别是什么? 
  实时光线追踪(real-time ray tracing)技术还有哪些未攻克的难题? 

前一个讨论
袁崇焕的成绩有哪些?
下一个讨论
用GPU加速转码压片比3900X还快正常吗?





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利