图形管线 Graphics Pipeline(实时渲染管线)
图形管线 Graphics Pipeline(实时渲染管线)
本文整理自GAMES101计算机图形学课程,详细介绍了图形渲染管线的工作原理和Shader着色器的使用。从3D场景到2D图像的转换过程,以及顶点着色器和片元着色器的功能和应用,都得到了深入的讲解。
本专栏内容整理了GAMES101的计算机图形学课程的主要内容,作为我学习计算机图形学的一份复习备份或叫做笔记。内容中如有错误,或有其他建议,欢迎大家指出。
附上GAMES101计算机图形学课程:https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html
GAMES101-现代计算机图形学入门-闫令琪:https://www.bilibili.com/video/BV1X7411F744
图形渲染管线是什么
图形渲染管线是一个复杂的过程,它负责将3D场景转化为我们在屏幕上看到的2D图像。那么结合我们前面几篇文章讲到的,着色模型,着色频率,加上三维模型和光照条件,就已经可以得到一个对三维场景渲染的结果。将这些(着色模型,着色频率,加上三维模型和光照条件)过程都合在一起的一个流程就叫做图形管线。
图形管线做了什么
那么我们看一下,一个3d场景到一个2d的图片这中间到底经历了什么样的过程
图形管线流程图
首先,我们得到一些三维空间中的点。
第一步,我们将三维空间中的点投影到屏幕上。得到屏幕空间上的点。
第二步,我们将这些顶点连接起来,得到屏幕空间上的一些三角形。
第三步,使用光栅化将这些三角形离散为Fragment,或者说离散称为一个个像素。这个阶段将几何数据转换成像素数据,确定哪些像素将被渲染。
第四步,进行着色,为每一个像素填充上对应的颜色,在这里,每个像素的具体颜色和纹理将被计算出来。
最后,所有的像素数据将被合成到一起,形成最终的图像输出到屏幕上。
我们再讲这些步骤分为三大模块。
第一块就是把三维空间中的模型映射到屏幕空间中去。涉及到的有:初始的数据处理,比如顶点的数据处理。如何组合这些顶点去行成正确的一些三角面。还有将顶点投影到屏幕上的一投影变换。
第二块就是光栅化,涉及到怎么样去采样,怎么去做深度测试,把屏幕上实际能显示出来的像素去找到。
第三块就是着色,涉及到着色模型和着色频率
shading这个过程涉及到有两个阶段,一个是顶点处理,一个是片元(像素)处理。因为,如果着色频率是逐顶点,那么我们的着色就需要在顶点处理阶段去做。如果是phong-shading 逐像素的着色,自然就是发生在片元处理阶段。
在这套渲染管线中,有些部分是允许编程的(shader)。
顶点处理阶段的着色就可以使用顶点作色器进行编程。片元处理阶段就可以使用片元着色器进行编程。由程序员编写这两个着色器,决定该如何对顶点和像素进行着色,由程序猿决定着色的结果。
在上图的三角形内部,每个像素要渲染的内容都是应当对应木头纹理上面的某一个点。这里就不能用插值的方法去对顶点着色。这里就需要使用纹理映射方法去着色。
Shader 着色器
shader本质上是一个能在GPU上执行的一些代码。Shader是应用在每一个顶点上或者每一个像素上该如何进行着色的代码。也就是说在Shader 着色器中,我们不需要去遍历每一个顶点,每一个像素。我们只需要去管一个顶点或者一个像素该怎么着色就可以了。GPU会自动对每一个顶点,每一个像素都运行同样的代码。
用于顶点着色的Shader就叫做 Vertex Shader 顶点着色器
顶点着色器是图形渲染管线中的一个关键组件,它负责处理每个顶点的数据。顶点着色器的主要任务包括:
- 位置计算:计算顶点在屏幕上的最终位置。
- 数据传递:将顶点的其他属性(如颜色、纹理坐标、法线等)传递给下一个管线阶段。
顶点着色器对每个顶点独立运行,这意味着它不能共享或传递信息给其他顶点。它通常用于执行如下操作:
- 变换:将顶点从一个坐标空间转换到另一个坐标空间,例如从模型空间到世界空间,再到视图空间和投影空间。
- 光照计算:在顶点级别上进行简单的光照效果计算。
- 视图变换:根据相机的位置和方向调整顶点位置。
用于像素着色的Shader就叫做 Fragment Shader 片元着色器
片元着色器(Fragment Shader)是图形渲染管线中的一个重要组件,它负责为每个片元(即像素的候选者)生成最终颜色和其他像素属性。在光栅化阶段之后,每个片元都会传递给片元着色器进行处理。片元着色器的主要任务包括:
- 颜色计算:根据材质、光照、纹理等信息计算片元的颜色。
- 纹理应用:将纹理映射到几何图形上,为片元提供详细的外观。
- 光照效果:模拟光线如何影响物体表面,包括漫反射、镜面反射等效果。
上图是一个片元着色器的代码片段。着色器使用的语言是GLSL。是OPGL的一个着色器语言 。该着色器执行纹理查找以获得此时曲面的材质颜色,然后执行漫反射照明计算。
附上一个Shader 学习的网站 http://shadertoy.com/view/ld3Gz2