Answers:
您已经清楚地知道什么是GPU渲染...让我回答您似乎要问的问题。
传统上,硬件渲染带有非常复杂的污名。这在很大程度上归因于应用程序编程接口(API)的设计,而这些应用程序并未很好地掩盖复杂性。也就是说,学习曲线很陡。部分原因是由于了解到,编写这些API的3D应用程序要比编写2D应用程序复杂得多。关于接口的复杂性,我指的是OpenGL和DirectX之类的接口。关于3D与2D,我指的是构建3D场景所涉及的数学和几何,以及未经训练的头脑可以解决2D问题的简单性。
但是,近年来,不仅学习材料变得更加可用,而且包装了这些接口的底层复杂性的许多库也变得可用,并降低了进入门槛。由于可视化,流畅的用户界面和低功耗设备的性能越来越重要,所有这些都反馈到人们越来越感兴趣的周期中。
因此,软件渲染和2D渲染对于那些刚接触图形和/或想要创建产品的人来说,是不错的切入点和重点领域。至少在2D方面仍然适用;技术已在很大程度上弥补了将2D渲染引入GPU的空白。
这里有一些非常好的答案,因此仅作补充。
功能是软件渲染背后的主要推动力。答案之一中提到了这一点,但是我要提出相反的观点:软件渲染实际上比硬件渲染更有能力,而不是更少。
尽管使用OpenGL的人可以对许多硬件中可能不存在的功能进行软件仿真,但是使用硬件通常会受限于硬件本身的功能。这意味着,如果您尝试使用Feature X但硬件不支持它,则将发生以下两种情况之一:您将退回到软件仿真(典型的OpenGL方案),或者不了解完全使用它(典型的D3D场景)。
使用软件渲染,您可以自己编写代码。您可以操纵事物并完全控制发生在像素级别的事件。举一个过去爆炸的例子,Quake早在1996年就在软件中实现了像素着色器,当时3D卡(当时不被称为“ GPU”)几乎不能光栅化数十个纹理三角形。
当前的GPU也是这种情况,但是图形流水线的重要部分仍然以固定功能公开(甚至根本不公开)。
软件渲染可以更好地扩展。直到最近,我们才看到多GPU设置变得切实可行,但是软件可以跨许多服务器中的许多CPU内核进行扩展。您可以拥有专用于此的整个服务器场,而专业渲染场仍将使用软件渲染。
软件可以公开不同的渲染范例。当前的硬件非常关注于三角形/顶点/片段/栅格化范例。这是选择一件事并对其进行优化直到它发出怜悯之声的情况。对于例如光线追踪,GPU仍然是一个糟糕的选择,光线追踪通常在软件中实现。
当然,当直接进行苹果之间的比较时,只要我们在比较GPU更强大的领域,GPU就会在一周的任何一天击败软件。但这并不是说它们在每个领域都更加强大。尽管如此,就本SE网站而言,使用硬件通常是可行的方法,但请注意,有一些用例也可以使用软件。
我认为这是一个非常好的问题。
我能想象的是:
VRAM比一般RAM存储器受到更多限制。在GPU渲染的情况下-每个纹理都是一个问题。您可以在RAM中平均存储大约4到8倍于VRAM的数据。当然,此方案假设没有系统负责从RAM / VRAM中释放/推送未使用/所需的纹理。
在多线程方面,使用软件渲染要容易得多-无需共享上下文
如果要进行2D图形处理-通常大多数框架都进行脏矩形评估的实现-解决许多性能问题的方法。
尽管如此,使用OGL / D3D进行渲染仍可提供更多性能和可能性。着色器可以完成令人惊奇的事情,而使用软件渲染几乎是不可能的。
但是诸如使用颜色键的blitting之类的技术却具有自己的感觉,就好像您是计算机图形世界的起源一样。
我认为了解软件渲染至少是件好事。这确实是一个非常令人兴奋的世界,更不用说这是我们今天所看到的一切的根源。