渲染管线、OpenGL、DirectX,给技术小白的计算机科普系列

“渲染管线是干什么用的?”

“OpenGL、DirectX和渲染管线的关系?”

“渲染管线谁来开发?”

“为什么一些游戏引擎厂商也在做渲染管线?”


这是笔者在研究时曾碰到过的一些问题。看了大神们的解答,理解如下。理解可能略有浅薄,之后会不断学习持续更新:


1. 渲染管线(render pipeline)是什么

告诉GPU怎么进行图形渲染的架构

    GPU是什么?专门用来处理图像的芯片。CPU作为计算机的大脑调度事情+处理事情,一个人搞不定了,出现GPU帮助CPU分担一部分事情

分为3个大步骤,应用阶段(CPU把要处理的数据发给GPU)、几何阶段(处理模型,加光影、剪裁等)、光栅化阶段(把3D模型“像素化”,使其能在屏幕是显示出来)

具体步骤细节详见“猴子也能看懂的渲染管线(Render Pipeline)”

1)应用阶段:CPU把要处理的数据(渲染图元)发给GPU

2)几何阶段:输出顶点信息

    什么是顶点信息(Vertex)?任何3D模型都是由三角形/四边形构成。顶点信息=每个三角形/四边形的顶点的xyz坐标。知道顶点坐标,连线,就能画出3D模型

    包括~7个子步骤:

CPU把一部分图元信息存起来,用于非渲染场景(例如一面墙,发给GPU渲染,还要留着用于计算物体碰撞)。发Draw Call指令给GPU,让GPU开工。

②顶点着色器,进行模型转化与相机转换。顶点的坐标用于描述在一个“世界”中它的位置,但是为了“拍摄”这个模型,需要告诉计算机这个模型相对摄像机的位置。需要坐标的转化,把之前的世界坐标转化为相对摄像机的坐标。还可以进行光照处理,给模型加上光影。

(source: https://juejin.cn/post/6844904144277340174)

曲面细分着色器(Tessellation Stage):给模型多加些顶点,使模型更圆滑。或者增加细节,比如把圆球变成陨石。

几何着色器(Geometry Shader):改、删顶点。(和上一步区别by我的理解,请大佬指正:曲面细分着色器更细节,改细节形状,比如表面凹凸;几何着色器改大的形状,比如圆球变成一半)。

投影:把3D图形2D化,降维~。从而使其能显示在我们的2D屏幕上。

剪裁:把屏幕“看”不到的部分去掉,不用渲染,节省资源

屏幕映射:屏幕是由尺寸去别的,调整模型坐标系

3)光栅化阶段:即”像素化“。屏幕由像素构成,要让模型显示在屏幕中。


包括  个子步骤

图元组装:把点连成线,组成三角形。

三角形遍历(Triangle Traversal):确定填色的区域/像素点。

③片元着色器:确定每块(片元)填什么颜色。

④逐片元操作(Per-Fragment Operations):测试(Test)并合并片元,完成上色。测试过程中会进行剪裁、深度测试(设置渲染物体之间的遮挡关系)


2. OpenGL、DirectX和渲染管线的关系?

OpenGL、DirectX是实现渲染管道的一套API。整个渲染管线需要调用很多应用程序。使用OpenGL、DirectX后,程序员无需自己写代码,直接调用即可(例如烟雾效果不用自己写,直接调就行)

二者的区别?

OpenGL是Khronos开发的

DirectX是微软开发的

二者的管线流程、允许开发者配置的部分略有不同。二者各有优劣,暂不展开


3. OpenGL、DirectX和GPU硬件的关系?

渲染管线包括两部分,和硬件GPU强相关的,开发者不能改的;以及开发者可配置的部分。前一部分需要硬件厂商基于OpenGL/DirectX调整配置

OpenGL/DirectX会提供“说明书”(OpenGL规范)给GPU厂商(NVIDIA等)


4. 谁来开发渲染管线?渲染管线涉及到哪些公司?

- GPU公司:需要根据OpenGL/DirectX,调整硬件

- 微软、Khronos:运营维护OpenGL/DirectX

- 游戏开发者:基于自己需求,用OpenGL/DirectX等开发游戏


遗留问题:

- 渲染管线和游戏引擎商的关系?

- 渲染管线和OS厂商的关系?


参考资料:感谢各位大神答疑!

- 猴子也能看懂的渲染管线(Render Pipeline)

- [中英双字]科普 图形是怎么渲染到屏幕上的 @游核网

- 《OpenGL编程指南(原书第9版)》——1.1 什么是OpenGL

你可能感兴趣的:(渲染管线、OpenGL、DirectX,给技术小白的计算机科普系列)