GPU渲染流水线是硬件真正体现渲染概念的操作过程,也是将图元绘制到2D屏幕上的阶段。GPU流水线覆盖了渲染过程的几何阶段和栅格化阶段,但对于开发人员来说,只有顶点和片段着色器具有可编程控制,其他不可编程。如下图:
简单总结一下GPU流水线。在这个阶段,我们主要操作原语。首先将应用阶段加载到视频内存中的顶点数据(drawCall指定后)作为输入传递给顶点着色器。然后,顶点着色器首先为图元的每个顶点设置模型视图变换和投影变换(即右乘法MVP矩阵),然后根据摄像机视锥的定义(即透视投影或正投影)裁剪变换后的顶点,去除不在视野中的顶点,并消除一些三角形面片。最后,屏幕映射到几何阶段负责将修改后的图元的坐标转换到屏幕坐标系中(即投影到屏幕上)。
到栅格化阶段,这个阶段的主要目的是将每个图元转换成多个片段,并生成多个片段的位置,片段着色器负责计算每个片段的颜色值。同时,在这个阶段,片段着色器通常需要纹理的输入,以便每个片段都可以被着色和映射。每个片段在发送到帧缓冲区之前,都会经历一些操作,这些操作可能会修改片段的颜色值,包括深度测试、模板测试、像素所有权测试、在与当前缓冲区相同的位置混色等。
最后,帧缓冲区的内容被交换到屏幕上进行显示。
下面将详细分析和理解每个阶段的每个知识点。
1.顶点着色器
顶点着色器是类似于C语言(即OpenGL的GLSL,或者只支持微软的HLSL的CG,或者Unity的Cg)的程序,由程序员提供,在GPU上执行,对每个顶点执行一次操作。顶点着色器可以使用顶点数据来计算顶点的坐标、颜色、光照和纹理坐标。在渲染管道中,每个顶点都是独立执行的。原因是顶点着色器本身无法创建或删除顶点,也无法获取顶点之间的关系,例如,它无法知道两个顶点是否属于同一个三角形网格。由于这种独立性,GPU可以并行处理每个顶点,提高了处理速度。
顶点着色器最重要的功能是执行坐标转换和逐顶点照明。坐标变换是改变顶点的位置,将顶点坐标从model 空变换到齐次裁剪空(即把局部坐标系变换到裁剪坐标系)。很多炫酷的着色器效果可以通过改变顶点位置来实现,比如模拟水面,布料等。在这里,我们将添加一些例子来详细解释。顶点着色器的另一个功能是在后续阶段为片段着色器提供一组可变变量进行插值计算。
第二,原始装配
顶点着色器程序输出顶点坐标后,根据绘图命令(DrawArrays或DrawElements)中的图元类型参数和顶点索引数组,将每个顶点组装成图元,并执行如下图所示的图元操作:
裁剪时,视觉椎体外的实体将被丢弃,如果实体与视觉椎体相交,则会发生裁剪,生成新的实体,如下图所示:
请注意,透视裁剪是一个影响性能的过程,因为每个元素都需要与6个裁剪平面相交才能生成新元素。因此,通常,在屏幕之外的x轴和y轴(由glViewPort定义),当视口改变时,这些顶点被更有效和直接地丢弃,而不产生新的像素。
在OpenGL中,相应的大小结构可以通过gluPerspective来定义。在Cocos2dx引擎中,Director类的setProjection方法定义了Cocos渲染中使用的视锥。你可以阅读相应的代码来学习。
切掉可视椎体后的顶点坐标用透视法(即硬件透视分割)分离,得到范围为[0,1]的归一化设备坐标,最后映射到屏幕或视口。
第三,片段着色器
注意:其实在栅格化之前,需要判断图元的朝向是面向观察者还是背向观察者,从而决定图元是否需要丢弃。在OpenGL中,可以通过glFrontFace指令来决定哪个方向为正,哪个边需要glCullFace来保留(在调用glEnable指令(GL_CULL_FACE)之前不要忘记打开拒绝状态设置);)。这种设计的好处是可以减少一些不必要的绘制,减少GPU的浪费。
回到主题,片段着色器和上面提到的顶点着色器是一样的,只是它的对象是每个片段,并且是着色和映射的。像素着色器的输入是根据顶点着色器输出的数据进行插值的,其中最重要的渲染技术之一是纹理采样。在顶点着色器阶段,输出每个顶点对应的纹理坐标。然后,在光栅化阶段之后,插值三角形网格的三个顶点的纹理坐标,然后获得覆盖面片的纹理坐标,从而在面片着色器中执行纹理采样。如下图:
第四,一点一点操作
这里出于篇幅的原因,不一一分析每个测试操作,可以通过看书了解相应的用途。下面我们来分析一下混音操作。下图是简化的流程图:
对于不透明对象,可以直接关闭混合混合操作,以便着色器计算的颜色值直接覆盖更新缓冲区的颜色值。但是对于半透明的物体,需要开启混合操作,使物体看起来透明。之所以在开发过程中得不到透明效果,往往是因为没有打开混音功能。
来源:http://www.cnblogs.com/pyqLoner/p/8471259.html
1.《opengl渲染gpu怎么设置 GPU渲染之OpenGL的GPU管线》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《opengl渲染gpu怎么设置 GPU渲染之OpenGL的GPU管线》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/tiyu/1267537.html