渲染流水线

渲染流程的3个阶段:应用阶段,几何阶段,光栅化阶段

渲染流水线的3个概念阶段

应用阶段:由开发者主导,CPU负责实现。

3个任务:a.准备场景数据(模型,光源,摄像机等) b.剔除(提高渲染性能) c.设置渲染状态(材质,纹理,shader)。这一阶段最重要是输出渲染所需的几何信息,就是渲染图元(包括点线面等)

几何阶段:在GPU上处理几何相关事情,进行逐个顶点,多边形操作(如绘制的图元是什么,怎么绘制,在哪绘制)

重要任务:把顶点坐标变化到屏幕空间里,输出屏幕空间二维顶点坐标,每个顶点对应的深度值,着色相关信息。

光栅化阶段:GPU运行。使用几何阶段数据,产生屏幕像素,渲染最终图像。

2个主要任务:a.计算每个图元覆盖了哪些像素 b.为这些像素计算它们的颜色。

CPU和GPU通信3个阶段:数据加载到显存,设置渲染状态,调用DrawCall

数据加载至显存中:渲染数据从硬盘加载到内存,再加载至显存。显卡对RAW没有直接访问权限,显卡对显存访问更快。

设置渲染状态:定义场景中网格怎么被渲染(如使用哪个shader,light,material)


同一种渲染状态,3个不同网格模型

调用Draw Call :CPU调用图像编程接口,命令GPU进行渲染操作。

GPU流水线(几何阶段+光栅化阶段)


几何阶段和光栅化阶段小流水线若干

顶点着色器 Vertex Shader  :顶点着色器是完全可编程的,通常用于实现顶点的空间变换、顶点着色等功能。

GPU第一阶段,输入来源于CPU。处理单位是顶点。本身不可创建和销毁顶点。独立性,处理速度快。

主要任务:1,坐标变化 2,计算顶点颜色。


曲面细分着色器 Tessellation Shader :曲面细分着色器是一个可选的着色器,用于细分图元。

几何着色器 Geometry Shader :几何着色器是一个可选的着色器,用于执行逐图元着色操作,或产生更多图元。

裁剪 Clipping : 图元和摄像机的视野3种关系。是将那些不在摄像机视野内的顶点剪裁掉,并剔除某些三角图元的面片。


屏幕映射 Screen Mapping :屏幕映射是不可配置和编程的,负责把每个图元的坐标转换到屏幕坐标系。实际就是一个缩放过程。


注意:OpenGL和DX是反的


三角形设置 :计算光栅化一个三角网格所需的信息,它的输出是为下一步骤做准备。

三角形遍历:找到哪些像素被三角网格覆盖的过程。对应像素会生成一个片元,而片元中的状态是对三个顶点的信息进行插值得到的。


扫描变换

片元着色器 Fragment Shader(DX:Pixel Shader) :输入是上一步对顶点信息插值得到的结果,输出是颜色值(着色)


输出颜色

补充:片元着色器这一步骤可以完成很多重要的渲染技术,比如 纹理采样:在顶点着色器阶段输出每个顶点对应的UV坐标(也叫纹理坐标),然后经过光栅化阶段对三角网格的3个顶点对应的UV坐标进行插值后,就可以得到覆盖的片元的UV坐标了。

可以这样理解贴图:不妨把纹理图片想象成一片弹性很好的橡皮薄膜,贴图就相当于用钉子把橡皮薄膜固定在与其纹理坐标相对应的顶点上。

逐片元操作:OpenGL中的说法,在DX中,叫输出合并阶段。

该阶段的任务:

决定每个片元的可见性。涉及了很多测试工作,例如模板(Stencil)测试(小于或者大于等于模板缓冲区中该片元的模板值就舍弃该片元,通常用于限制渲染区域。)、深度(Depth)测试(大于等于深度缓冲区中该片元的深度值就舍弃该片元)等;

如果一个片元通过了所有测试,就需要把这个片元的颜色值和已经存储在颜色缓冲区中的颜色进行混合,最后再写入颜色缓冲区中。也就是将片元的颜色值一个个地堆叠起来。

总结:只需要在一个Unity Shader中设置一些输入、编写顶点着色器和片元着色器、设置一些状态就可以达到大部分常见的屏幕效果。

CPU、OpenGL/DirectX、显卡驱动和GPU之间的关系图:


OpenGL/DirectX是图像应用编程接口,架起了应用程序和GPU沟通的桥梁。应用程序向这些接口发送渲染指令,而这些接口会依次向显卡驱动发送渲染命令。显卡驱动就是显卡的操作系统,它知道如何和显卡中的GPU打交道,并将渲染命令翻译成GPU能理解的机器语言。

优化:批处理可以有效减少Draw Call。Draw Call造成性能问题的元凶是CPU 。很简单的一个道理:10000个1kb的小文件和1个10M的大文件同时传输,肯定是1个10M的文件传得快许多。

为避免我们看到正在光栅化的图元,GPU采取双重缓冲的机制,渲染发生在后置缓冲中,渲染结束后,GPU就会交换后置缓冲区和前置缓冲区中的内容。

最后附上万大的神图:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容