固定管线和可编程管线

在知乎上看到一个回答,觉得很有帮助,因此转过来方便查看。
作者:王天祺
来源:知乎
链接:https://www.zhihu.com/question/28024422/answer/39097192

渲染管线做的事情就是让计算机完成图形功能,而图形功能其实就是做了下面图里这件事情。
这里写图片描述

有了光源、房子和相机,然后计算相机上面拍出的照片到底是什么样子的。这个任务比较复杂,然后大家就把它分成了几个步骤来完成
这里写图片描述
这里面几何部分处理的都是顶点,而光栅部分处理的都是像素,比如说下面这个飞机这里面几何部分处理的都是顶点,而光栅部分处理的都是像素,比如说下面这个飞机
这里写图片描述几何部分的时候,算来算去处理的都是1,2,3,4这样几个顶点的信息,而到了后面光栅部分,经过光栅化就成了这样
这里写图片描述
这也就是最早的固定管线,上面的每一个步骤(比如光照、贴图等)里面都会有一些参数(比如光照模式,纹理模式等等),整个渲染的过程就好像是在流水线上的每一道工序上面都有几个可选的开关,然后你要想实现不同的渲染效果,那就去花式扳开关就好了。这也就是最早的固定管线,上面的每一个步骤(比如光照、贴图等)里面都会有一些参数(比如光照模式,纹理模式等等),整个渲染的过程就好像是在流水线上的每一道工序上面都有几个可选的开关,然后你要想实现不同的渲染效果,那就去花式扳开关就好了。比如这个是固定管线的OpenGL ES 1.1的样子
这里写图片描述
这个时候的API比较典型的都是这样的这个时候的API比较典型的都是这样的
这里写图片描述
可以看出来,这就是让大家花式扳开关的节奏可以看出来,这就是让大家花式扳开关的节奏但是大家的欲望是无限的,这么有限的扳开关的模式,渲染的效果实在是不理想,后来大家就把模式换成了流水线上坐着几个工人(Shader),然后给工人下命令(可编程)的方式了,这样的话只要工人忙得过来,那我就可以自己定义各种光照模型,贴图方式了,程序员的可发挥空间就大得多了。比如到了OpenGL ES 2.0以后就变成了这样
这里写图片描述
可以看到这里面灰色的两个Shader就是两个有智商的工人了,API也就变成了给工人下命令(编译、链接着色器代码)就像下面这样可以看到这里面灰色的两个Shader就是两个有智商的工人了,API也就变成了给工人下命令(编译、链接着色器代码)就像下面这样
这里写图片描述
再到后来大家发现这样分成几个Shader的话,可能会出现任务分配不均的问题,有的时候处理顶点的那个工人忙的要死,然后处理片段的那个在磨洋工,有的时候就反过来。然后大家决定取消工种划分,统一调度劳动力,这个就是Unified Shader了,就像这样
这里写图片描述不过这个只是硬件的变化,程序员是不可见的,此为后话了。不过这个只是硬件的变化,程序员是不可见的,此为后话了。说了这么多,再补一点可编程和固定管线效果上的区别吧,顺便也可以看出两种管线编程时的不同。以下是PowerVR SDK里面的一个例子这个是固定管线的效果
这里写图片描述
这个是可编程的效果这个是可编程的效果
这里写图片描述
固定管线时就像下面这样花式设参数
这里写图片描述
到了可编程的时代就可以自己写代码来设置各种光照模型了到了可编程的时代就可以自己写代码来设置各种光照模型了
这里写图片描述
这里写图片描述
这里写图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值