[GLES]|[GLES] 固定管线与可编程管线的差别
材质球素材来自CSDN的u010345749所撰写的常用的光照模型Shader Models。1 什么是渲染管线
渲染管线又称渲染流水线,它是图形图像从数据一步一步形成最终输出的画面所要经历的各种操作过程。数据经过一个操作后,被处理成下一个步骤需要的数据,最终一步一步整合成拼凑最终画面的元素。
通常来讲,以下两个大步骤是必要:
- 顶点渲染:用于渲染出形状
- 像素渲染:在形状中填充色彩
文章图片
1.1 顶点渲染 顶点渲染就是把顶点中的各种数据变换、过滤、插值......成最终要显示要画面上形状的过程。
顶点中包含:
- 位置
- 纹理坐标(可选)
- 顶点颜色(可选)
- 法线(可选)
复杂的顶点数据就是我们常见的模型,如下图展示出来的三个模型:立方体、Open文字、GL文字
文章图片
原始模型
V' = V * MVP
MVP矩阵的作用就是把一个处于自身坐标系中的模型的每个点都按照相同的方式依次偏移到新的位置上去,让模型看起来被移动、旋转、缩放甚至变形了。 模型按照一定规则被移动、旋转、缩放甚至变形新的位置上后,我们称这个模型被MVP矩阵变换了。
举个例子,上图中的三个原始模型经过变换后,重新排列了它们的位置、大小和角度,形成了下图中新的造型:
文章图片
变换后的模型
当模型上所有的点都变换到矩阵指定的位置上后,这些位置上的点所组成的面就形成了下一步需要被填充色彩的形状。这个形状严格意义上来讲是看不见的,因为它们只是些形状的边界,就像下图这样,等待像素渲染阶段来为这些边界中的部分上色。
文章图片
顶点渲染后 1.2 像素渲染 对顶点渲染中形成的形状进行色彩填充的过程就是像素渲染。在这个过程中,被填充的色彩可以来自于顶点颜色、纹理甚至是通过某些数值计算出来的色彩(如光照)。
渲染颜色时,我们通常需要材质和光照来作为色彩的来源,然后通过某种光照模型(光照公式)来计算材质和光照在模型上的不同位置会形成什么样的颜色。顶点渲染之后产生的形状被上色后,可以被涂抹成下图的样子,基本上这就是我们最终在屏幕上看到的样子了。
文章图片
像素渲染后 像素渲染时,通常会使用光照模型来模拟出模型被光线照射后的样子,常见的光照模型有:
- Phong
用于计算表面光滑的材质的表面色彩 - Lambert
用于计算具有磨砂表面的材质的表面色彩 - Bline
用于计算具有高高反射率或折射率的材质的表面色彩 - Cook-Torrance
用于计算皮革等容易混合自身材质颜色且非漫反射色到高光中的材质的表面色彩 - Strauss
用于计算金属球表面亚光的表面色彩 - ANisotropic
用来计算类似猫眼石或者金属拉丝的高光反射、折射效果 - Constant
用于计算只使用漫反射的颜色的材质的表面色彩
- 光的颜色
- 光的亮度
- 光的衰减系数
- 光源的位置
- 光的照射方向
- 光的照射范围
- 顶点颜色
定义模型的颜色,也可认为它是漫反射色或自发光色 - 漫反射色
定义模型被自然光照射时反射的颜色PHong - 高光色
定义模型被自然光照射时,光滑部分反射出来的高亮光颜色 - 高光系数
定义模型表面的光滑程度,系数越高越光滑,高光就越集中越亮 - 反射率
定义模型表面对光照的反射程度 - 折射率
定义模型材质对光线的折射率,从而得出透射光和反射光的强度 - 透明度
定义模型的透明程度
文章图片
光照模型 2 渲染管线的种类
根据渲染管线的类型,OpenGLES可以被分为两类:
- 固定管线
- 可编程管线
OpenGLES 1.x版本就是固定渲染管线的版本。现有的OpenGLES 1.x版本有:
- OpenGLES 1.0
- OpenGLES 1.1
文章图片
2.2 可编程管线 可编程渲染管线的OpenGLES版本必须由开发者自行实现渲染流程,否则无法绘制出最终的画面。开发者可以根据自己的具体需要来编写顶点渲染和像素渲染中的具体逻辑,可最大程度的简化渲染管线的逻辑以提高渲染效率,也可自己实现特定的算法和逻辑来渲染出固定管线无法渲染的效果。具有很高的可定制性,但同时也对开发者提出了更高的要求。
OpenGLES 2.0及其以上的版本则为可编程渲染管线的版本。目前具体的OpenGLES版本有:
- OpenGLES 2.0
- OpenGLES 3.0
- OpenGLES 3.1
文章图片
推荐阅读
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片
- 光栅化|光栅化,着色器,渲染管线的理解
- 高效能慢生活18天
- FFmpeg|FFmpeg 开发(07)(FFmpeg + OpenGLES 实现 3D 全景播放器)
- js生成固定时间间隔的时间值-每秒递增-分钟递增-分小时递增
- 矩阵堆栈操作
- eyoucms|eyoucms arclist循环中,判断如果是第一个li,则添加固定的css,否则不加
- Excel2013表格将日期格式转为固定的XXXX年XX月XX日形式
- LINUX(CENTOS6.8固定ip方法)附录win方法
- Codeforces Round #643 (Div. 2) C. Count Triangles 题解(思维)