计算机图形学-渲染管线

渲染管线

一、流水线的概念

  • 流水线最终目的:生成或渲染一张二维纹理,输入是一个虚拟像机,光源,Shader,纹理等。

  • 硬盘 –>> RAM –>> 显存

  • CPU发指令从硬盘到RAM内存,GPU将要显示的缓存发到显存

二、GPU渲染管线

  • 渲染管线功能:决定在给定虚拟相机、三维物体、光源、照明模式,以及纹理等诸多条件的情况下生成或绘制一幅二维图像过程。

  • 流水线三个概念阶段:应用阶段、几何阶段、光栅化阶段

    1、应用阶段:

    • 将需要在屏幕上显示出来的几何体,也就是绘制图元,比如点、线、矩形等输入到绘制管线的下一个阶段。输出图元的顶点数据、摄像机位置、光照纹理等参数。
  • 将数据加载到显存中:(硬盘–>内存RAM –>显存–> VRAM)

    • 设置渲染状态:使用哪个着色器、光源属性、材质等
  • 调用DrawCall:一个命令,CPU调用GPU的命令,一个DrawCall指向需要渲染的图元列表

    2、几何阶段:

    • 需要将顶点数据最终进行屏幕映射,输出屏幕空间二维顶点坐标,顶点对应的深度值,颜色等相关信息。
    • 将各个图元从模型坐标系转换到世界坐标系中,也就是模型变换
  • 根据光照纹理等计算顶点材质的光照着色效果

    • 根据摄像机位置、取景进行观察变换和裁剪
  • 进行屏幕映射,也就是把三维模型转换到屏幕坐标系

    3、光栅化阶段:

    • 输入是经过变换和投影后的顶点、颜色以及纹理坐标,工作是给每个像素正确配色,以便绘制整幅图形。
    • 由于输入的是三形顶点,所以需要根据三角形表面的差异,逐个遍历三角形计算各个像素的颜色值。之后根据其可见性等进行合并得到最后的输出。

三、几何阶段

  • 顶点着色器:(可编程)模型变换(模型空间到世界空间)、视图变换(世界空间到观察空间)、逐顶点光照着色
  • 几何、曲面细分着色器:(可编程)顶点增删,曲面细分,增加点使曲面更光滑
  • 裁剪:(可配置)规范化投影变换(观察空间到规范化观察空间)、裁剪
  • 屏幕映射:(固定)(规范化观察空间到屏幕坐标系)

四、光栅化阶段

  • 三角形设置:(固定)将顶点设置成三角形
  • 三角形遍历:(固定)遍历三角形,通过顶点的深度插值得到深度,得到三角形的每一个片元,片元是状态的集合,用来计算每个像素的最终颜色。状态包括屏幕坐标、深度信息、顶点信息、法线、纹理坐标等。
  • 片元着色器:(可编程)根据上面状态的集合对三角形的每一个片元计算颜色值
  • 逐片元操作:(可配置)模板测试、深度测试、颜色混合、帧缓存

五、CPU到GPU

应用程序调用CPU去显示,CPU从硬盘加载渲染需要的数据到内存,然后从内存里取到顶点数据传给显存。

CPU再通过Shader语言调用显卡驱动来调用GPU,GPU取得显存里的顶点数据等来计算得到要显示到屏幕的帧缓存。

六、Shader 语言

OpenGL语言是GLSL(OpenGL Shading Language):优点是跨平台没有提供着色器编译器,由显卡驱动来完成着色器编译工作。依赖硬件而非操作系统层级的。

DirectX语言是HLSL(High Level Shading Language):由微软控制着色器编译,支持平台受限。

NVIDIA的CG(C for Graphic):真正的跨平台,会编译成相应的中间语言,因为跟微软合作,所以语法很像HLSL。

HLSL、GLSL、Cg是高级语言,会被编译成汇编语言,也就是中间语言(Intermediate Language,IL),然后中间语言交给显卡驱动来翻译成真正的机器语言,即GPU可以理解的语言。

顶点着色器:Vertex Shader

几何着色器:Geometry Shader

曲面细分着色器:Tessellation Shader

片元着色器:Fragment Shader

EBO(Element Buffer Object也叫IBO(Index Buffer Object))索引缓冲区对象,这个缓冲区主要用来存储顶点的索引信息。

VBO(Vertex Buffer Object)顶点缓冲区对象,主要用来存储顶点的各种信息。好处:模型的顶点信息放进VBO,这样每次画模型时,数据不用再从CPU的内存取,而是直接从GPU的显存里取,提高效率。

VAO(Vertex Arrary Object)顶点数组对象,保存了所有顶点数据属性的状态结合,存储了顶点数据的格式以及顶点数据所需的VBO对象的引用。本身并没有存储顶点的相关属性数据,这些数据是存储在VBO中的,VAO相当于是对很多个VBO的引用,把一些VBO组合在一起作为一个对象统一管理。

posted @ 2020-06-01 15:45  学习使我进步  阅读(1052)  评论(0编辑  收藏  举报