固定功能GPU中的着色器

时间:2015-09-07 15:55:27

标签: opengl graphics shader gpu direct3d

我一直在阅读有关GPU架构的更多信息,有点让我感到困惑。大多数资源定义着色器"作为一段代码,在图形管道的各个部分中运行,以投影3D场景的最终渲染。较旧的GPU架构是固定功能" ...这是否意味着图形程序员实际上无法控制滤镜和效果如何应用于3D场景?

现在有人可以和我确认我们有#34;可编程GPU"这是否意味着着色器功能/程序被发送到GPU?

这引出了另一种想法,如果图形程序员无法控制,那么术语“固定功能”是什么? GPU意味着这些着色器是在硬件上实现的(通过晶体管/门)?对不起,我是硬件新手,所以我的术语可能不正确。

2 个答案:

答案 0 :(得分:4)

传统'固定功能'在现代GPU着色器意义上,管道不是完全可编程的。在最早的时候,它是一个带有一些参数的软件渲染器,但在90年代后期,它被称为"硬件变换&光"对于顶点和"多纹理"对于Direct3D 6/7中的像素。要控制固定功能管道,请设置ton of state以对其进行各种操作配置。换句话说,它是可配置但不是可编程

传统'固定功能'现代GPU上的管道由可编程着色器模拟,您可以看到这些着色器在Direct3D FixedFuncEMU样本中的外观示例。因为它无论如何都是为Direct3D 9及更早版本模拟的,所以Direct3D 10及更高版本根本不支持传统的固定功能管道。

即使在现代GPU上,管道的某些方面也是固定的功能'由可配置状态而不是可编程着色器控制,例如三角形光栅化,渲染目标alpha混合,纹理采样,深度/模板测试等。这里的权衡不太通用,非常快速和廉价的硬件实现,允许轻松复制这些功能单元

答案 1 :(得分:3)

  

较旧的GPU架构是“固定功能”......这是否意味着图形程序员无法控制滤镜和效果如何应用于3D场景?

没有。这意味着你必须要有创造力,如何实现效果。有些影响绝对不可能实施。对于其他效果,某些近似值是可能的。

最大的区别在于,使用可自由编程的GPU(着色器模型2或更高版本),可以将程序流控制到像素级;我认为它能够在Photoshop或类似程序中使用一些画笔工具进行选择性绘制。

使用固定功能GPU,你可以做的就是完全等同于使用整个层;你可以混合它们,将几个层叠在一起,做多个渲染过程等等。有了一些创造力,你可以实现相当疯狂的事情我个人最骄傲的成就是使用GeForce2类GPU(内置于1999年)实现了水波纹效果(完全采用近似折射和反射)。

  

这引出了另一个想法,如果图形程序员无法控制,GPU的术语“固定功能”是否意味着这些着色器是在硬件上实现的(通过晶体管/门)?

没有。这意味着根本没有着色器!

基本上,GPU在屏幕上绘制明显纹理的三角形时所执行的操作,将一组固定的操作应用于传入的几何体,以将其转换为位置并确定局部照明值。有几个开关你可以选择,哪些特定的计算应该发生,例如你可以加载一些纹理(在最新的固定功能硬件中最多8个)并选择所谓的“寄存器组合器”,选择这些纹理的方式应与其他东西“混合”。例如,你可以将一个法线贴图纹理作为点积与光方向矢量混合来调制照明(凹凸贴图);您也可以使用普通纹理来确定立方体贴图的纹理坐标,以便给出反射印象。

即使在今天的现代GPU上,仍有一些方面不能完全编程(仅仅因为它很难实现高性能)。例如混合。实际的混合操作并不是那么昂贵;问题是,它必须以某种方式组合像素,这会引入大量的同步延迟,如果确切的操作没有固定下来。

相关问题