[GLES] 固定管线与可编程管线的差别

材质球素材来自CSDN的u010345749所撰写的常用的光照模型Shader Models


1 什么是渲染管线

渲染管线又称渲染流水线,它是图形图像从数据一步一步形成最终输出的画面所要经历的各种操作过程。数据经过一个操作后,被处理成下一个步骤需要的数据,最终一步一步整合成拼凑最终画面的元素。
通常来讲,以下两个大步骤是必要:

  • 顶点渲染:用于渲染出形状
  • 像素渲染:在形状中填充色彩

所以你可以简单地认为,渲染管线就是:


1.1 顶点渲染

顶点渲染就是把顶点中的各种数据变换、过滤、插值......成最终要显示要画面上形状的过程。
顶点中包含:

  • 位置
  • 纹理坐标(可选)
  • 顶点颜色(可选)
  • 法线(可选)
    复杂的顶点数据就是我们常见的模型,如下图展示出来的三个模型:立方体、Open文字、GL文字


    原始模型

最常见的一个顶点渲染操作就是把模型上的位置和MVP矩阵相乘,得到最终显示在画面的模型点:
V' = V * MVP
MVP矩阵的作用就是把一个处于自身坐标系中的模型的每个点都按照相同的方式依次偏移到新的位置上去,让模型看起来被移动、旋转、缩放甚至变形了。 模型按照一定规则被移动、旋转、缩放甚至变形新的位置上后,我们称这个模型被MVP矩阵变换了。
举个例子,上图中的三个原始模型经过变换后,重新排列了它们的位置、大小和角度,形成了下图中新的造型:

变换后的模型

当模型上所有的点都变换到矩阵指定的位置上后,这些位置上的点所组成的面就形成了下一步需要被填充色彩的形状。这个形状严格意义上来讲是看不见的,因为它们只是些形状的边界,就像下图这样,等待像素渲染阶段来为这些边界中的部分上色。


顶点渲染后
1.2 像素渲染

对顶点渲染中形成的形状进行色彩填充的过程就是像素渲染。在这个过程中,被填充的色彩可以来自于顶点颜色、纹理甚至是通过某些数值计算出来的色彩(如光照)。
渲染颜色时,我们通常需要材质和光照来作为色彩的来源,然后通过某种光照模型(光照公式)来计算材质和光照在模型上的不同位置会形成什么样的颜色。顶点渲染之后产生的形状被上色后,可以被涂抹成下图的样子,基本上这就是我们最终在屏幕上看到的样子了。


像素渲染后

像素渲染时,通常会使用光照模型来模拟出模型被光线照射后的样子,常见的光照模型有:

  • Phong
    用于计算表面光滑的材质的表面色彩
  • Lambert
    用于计算具有磨砂表面的材质的表面色彩
  • Bline
    用于计算具有高高反射率或折射率的材质的表面色彩
  • Cook-Torrance
    用于计算皮革等容易混合自身材质颜色且非漫反射色到高光中的材质的表面色彩
  • Strauss
    用于计算金属球表面亚光的表面色彩
  • ANisotropic
    用来计算类似猫眼石或者金属拉丝的高光反射、折射效果
  • Constant
    用于计算只使用漫反射的颜色的材质的表面色彩

光照模型中,对光的来源也有具体的描述,通常我们需要光照中包含:

  • 光的颜色
  • 光的亮度
  • 光的衰减系数
  • 光源的位置
  • 光的照射方向
  • 光的照射范围

模型的材料会对不同的光照产生不同的反应,所以对模型的材质的描述通用会包含:

  • 顶点颜色
    定义模型的颜色,也可认为它是漫反射色或自发光色
  • 漫反射色
    定义模型被自然光照射时反射的颜色PHong
  • 高光色
    定义模型被自然光照射时,光滑部分反射出来的高亮光颜色
  • 高光系数
    定义模型表面的光滑程度,系数越高越光滑,高光就越集中越亮
  • 反射率
    定义模型表面对光照的反射程度
  • 折射率
    定义模型材质对光线的折射率,从而得出透射光和反射光的强度
  • 透明度
    定义模型的透明程度

不同的光照模型(光照公式)会取用不同的参数来计算模型上每个点组成的面中的每个像素的颜色,最终组成一幅能够在屏幕上显示的画面。下图展示了不同的光照模型使用一些典型的光照和材质后渲染出来的样式:


光照模型

2 渲染管线的种类

根据渲染管线的类型,OpenGLES可以被分为两类:

  • 固定管线
  • 可编程管线
2.1 固定管线

固定渲染管线的OpenGLES不需要也不允许你自己去定义顶点渲染和像素渲染的具体逻辑,它内部已经固化了一套完整的渲染流程,只需要开发者在CPU代码端输入渲染所需要的参数并指定特定的开关,就能完成不同的渲染。

OpenGLES 1.x版本就是固定渲染管线的版本。现有的OpenGLES 1.x版本有:

  • OpenGLES 1.0
  • OpenGLES 1.1

下图是固定渲染管线的流程图,OpenGLES内部从取到数据开始,会经历下列的步骤最终形成可显示的画面。图中橘色的部分在可编程渲染管线中会被替换成可编程的顶点渲染部分(Vertex Shader)和像素渲染部分(Fragment Shader)。

2.2 可编程管线

可编程渲染管线的OpenGLES版本必须由开发者自行实现渲染流程,否则无法绘制出最终的画面。开发者可以根据自己的具体需要来编写顶点渲染和像素渲染中的具体逻辑,可最大程度的简化渲染管线的逻辑以提高渲染效率,也可自己实现特定的算法和逻辑来渲染出固定管线无法渲染的效果。具有很高的可定制性,但同时也对开发者提出了更高的要求。

OpenGLES 2.0及其以上的版本则为可编程渲染管线的版本。目前具体的OpenGLES版本有:

  • OpenGLES 2.0
  • OpenGLES 3.0
  • OpenGLES 3.1

下面OpenGLES管线流程图中展示的橘色部分就是必须由开发者自行编程的部分,顶点渲染部分(VertexShader)用于处理模型的形状给后续的步骤输出一个用于填充色彩的像素区域,像素渲染部分(Fragment Shader)用于在模型的每个面上(经过顶点渲染处理过的面)逐像素填充色彩。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容