shader入门精要读书笔记01 流水线 和 CPU与GPU之间的通信

读书笔记《Unity shader 入门精要》—— 冯乐乐
太喜欢这个作者了,讲的通俗易懂又带劲。

一、渲染流水线及相关专业词汇解释

1.渲染流水线3个阶段:
应用阶段、几何阶段、光栅化阶段。

2.应用阶段输出 渲染图元 ,几何阶段输出 屏幕空间顶点信息 。

3.应用阶段由开发者主导,主要有3个工作:
(1)准备好场景数据,摄像机,视锥体位置,光源模型等。
(2)为提高渲染性能,进行 粗粒度剔除(culling),把不可见的物体剔除,这样就不需要再移交给几何阶段GPU进行处理。
(3)设置每个模型的渲染状态,包括不限于材质(漫反射颜色、高光反射颜色)、纹理、使用的Shader等。

4.渲染图元指的是 点、线、三角面等。这些图元被传递给下一阶段——几何阶段。

5.几何阶段主要用于处理所有和我们需要绘制的几何相关的事情。(需要绘制的图元是什么,怎么绘制,在哪绘制)此一阶段通常在GPU上进行。

6.几何阶段作用:这个阶段负责和每个渲染图元打交道,进行逐顶点、逐多边形的操作。
几何阶段重要任务:把顶点坐标变换到屏幕空间,再交给光栅器处理。
这一阶段输出屏幕空间的二维顶点坐标、每个顶点的对应的深度值、着色等相关信息后继续传给下一阶段。

7.光栅化阶段,此阶段使用上个阶段传递过来的数据产生屏幕上的像素,并渲染出最终图像。这一阶段同样是在GPU上进行的。
光栅化主要任务是决定每个图元上的哪些像素应该被绘制在屏幕上。他需要对上一个阶段得到的逐顶点数据(纹理坐标、顶点颜色等)进行插值,然后再进行逐像素处理。

二、CPU和GPU之间的通信

1.应用阶段,
再复习下上面的应用阶段的三个工作:首先准备场景,再进行粗粒度剔除,后设置渲染状态。
说到通信,需要先从应用阶段说起,应用阶段大概可分为3个阶段:
(1)将数据加载到显存
(2)设置渲染状态
(3)调用Draw Call

2.数据加载过程
渲染过程数据加载过程:需要渲染的所有数据 从 硬盘(HDD)加载到 系统内存(RAM),之后网格、纹理等数据再被加载到显卡上的存储空间 显存(VRAM)。
原因:显卡对于显存的访问速度更快,并且大多数显卡(也可粗略的说成GPU,查了下:可以这样简单理解,GPU是显卡上的芯片,是显卡中的一部分)对于RAM没有直接的访问权利。
除此之外,被加载到显存中的数据还有一些位置信息、法线方向、顶点的颜色、纹理坐标等等。
数据被加载到显存后RAM中数据,有些会删除有些不会删除。举例,比如CPU需要访问网格数据进行碰撞检测,那么就不会删除网格数据(因为从HDD加载到RAM非常费时),此时仍然需要进行访问。

3.设置渲染状态
渲染状态理解:这些状态定义了场景中网格是怎样被渲染的。
例如:使用哪个顶点着色器(Vertex Shader)/片元着色器(Fragment Shader)、光源属性、材质等。
如果不更改渲染状态,那么所有的网格都会使用同一种渲染状态。

4.Draw Call调用
准备好前面的所有工作之后,CPU就会调用一个渲染命令来告诉GPU可以按照我的设置进行渲染了,这个命令就是Draw Call。
它是一个命令,发起方是CPU,接收方是GPU。
这个命令指向一个需要被渲染的图元列表(其内已经设置好了每个部分需要的详细材质等信息)。
GPU根据 渲染状态(材质、纹理、着色器等) 和所有的顶点数据来计算,最终在屏幕上显示漂亮的像素。

补充:查了下着色器、顶点着色器(Vertex Shader)、片元着色器(Fragment Shader)
着色器替代了传统的固定渲染管线,可以实现3D图形学计算中的相关计算,由于其可编辑性,可以实现各种各样的图像效果而不用受显卡的固定渲染管线限制。

着色器(Shader)是用来实现图像渲染的,用来替代固定渲染管线的可编辑程序。其中Vertex Shader主要负责顶点的几何关系等的运算,Pixel Shader(查了下可以粗略说成就是片元着色器,片元是一个更好的叫法)主要负责片源颜色等的计算。

顶点着色器分为输入和输出两部分,负责的功能是把输入的数据进行矩阵变换位置,计算光照公式生成逐顶点颜⾊,⽣成/变换纹理坐标。并且把位置和纹理坐标这样的参数发送到片元着色器。

片元着色器的作用是处理由光栅化阶段生成的每个片元,最终计算出每个像素的最终颜色。归根结底,实际上就是数据的集合。这个数据集合包含每一个像素的各个颜色分量和像素透明度的值。

看到凌晨,觉得前面这些基础理论还是要好好了解下,所以写的很详细。
明天看GPU流水线。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值