废物程序员做梦都在写Shader(一)

本文介绍了Unity中渲染的基本流程,包括渲染流水线的各个阶段,如顶点着色器、片元着色器、逐片元操作等。详细讲解了模板测试、深度测试和颜色缓冲的合并,以及OpenGL和DirectX的区别。通过理解这些概念,初学者能更好地掌握Shader的编写和游戏渲染技术。
摘要由CSDN通过智能技术生成

废物程序员做梦都在写Shader(一)

学习用,编者死废物一个



一、渲染

1.渲染流水线

渲染流水线从CPU开始,大致可分为3个阶段:
(1)把数据加载到显存中
(2)设置渲染状态
(3)调用Draw Call

2.渲染状态

定义渲染方式

3.Draw Call

Draw Call是一个由CPU发起的命令,由GPU接收。这个命令仅仅会指向一个需要被渲染的图元列表,而不会包含任何材质信息。

注意,当Draw Call使用过多时,会造成CPU负载过大,导致CPU过载,所以Draw Call中造成性能问题是CPU的锅

4.GPU流水线

当GPU从CPU得到渲染命令后,就会进行一系列流水线操作,最终完成渲染。

5.顶点着色器

顶点着色器是流水线的第一个阶段,他的输入来自CPU。顶点着色器的处理单位是顶点,也就是说,输入进来的每个顶点都会调用一次顶点着色器。顶点着色器本身和顶点没有操作空间(指get不到信息,也没法操控)。但正是这样的相互独立性,GPU可以利用本身的特性并行化处理每个顶点,这意味着处理速度很快。

6.裁剪和屏幕映射

裁剪指摄像机视野范围外的场景物体的顶点不会被渲染,这可以有效减少不必要的负担。
屏幕映射是吧每个图元的x和y坐标转换到屏幕坐标系下。屏幕坐标系是一个二维坐标系,和屏幕的分辨率有很大关系。
OpenGL把屏幕左下角作为窗口的最小坐标值,但DirectX则是定义了窗口的左上角为最小的窗口坐标值

7.三角形设置,三角形遍历

三角形设置指的是计算光栅化一个三角形网格所需的信息。具体来说,上一个阶段输出的都是三角网格的定点,即我们得到的是三角形网格每条边的两个端点。而这个阶段就要得到三角形的完整数据。三角形遍历中会检查每个像素是否被一个三角网格所覆盖。如果被覆盖的话,就会生成一个片元。
这个过程就是三角形遍历,也被称为扫描变换。
一个片元并不是真正意义上的像素,而是包含了很多状态的集合。

8.片元着色器

片元着色器是另一个非常重要的可编程着色器阶段。
前面的光栅化阶段实际上并不会影响屏幕上每个像素的颜色值,而是会产生一系列的数据信息,用来表述一个三角形网格是怎样覆盖每个像素的。而每个片元就负责储存这样一系列数据。
片元着色器的输入时上一个阶段对顶点信息插值得到的结果,是根据那些从顶点着色器中输出的数据插值得到的。而它的输出是一个或多个颜色值。
这一阶段可以完成很多重要的渲染技术,最重要的技术之一就是纹理采样。为了在片元着色器中进行纹理采样,我们通常会在顶点着色器阶段输出每个顶点对应的纹理坐标,然后经过光栅化阶段对三角网格的3个顶点对应的纹理坐标进行插值后,就可以得到其覆盖的片元的纹理坐标了。
片元着色器的局限在于,它仅可以影响单个片元。也就是说,当执行片元着色器时,它不可以将自己的任何结果直接发送给它的邻居们。

9.逐片元操作

这是渲染流水线的最后一步。逐片元操作时OpenGL说法,在DirectX中被称为输出合并阶段。这一阶段重在合并,而且是对每一个片元。
这一阶段的几个重要任务:
(1)决定每个片元的可见性。
(2)如果一个片元通过了所有的测试,就需要把这个偏远的颜色值和已经储存在颜色缓冲区中的颜色进行合并,或者说是混合。
逐片元操作阶段是高度可配置性的,我们可以自定义每一步的操作细节。
这个阶段首先要测试,测试对象是每个片元,来验证片元是否适格,适格者才配和GPU交流。如果不适格,就寄了,会被舍弃掉。

1.模板测试

与之相关的是模板缓冲。实际上,模板测试和我们经常听到的颜色缓冲、深度缓冲几乎是一类东西。如果开启了模板测试,GPU会首先读取(使用读取掩码)模板缓冲区中该片元位置的模板之,然后将该值和读取的参考值进行比较(开发者指定)。不管有没有通过模板测试,我们都可以根据模板测试和下面的深度测试结果来修改模板缓冲区,这个操作也是由开发者指定的。

2.深度测试

这个测试同样是高度配置的。如果开启了深度测试,GPU会将该片元的深度值和已经存在于深度缓冲区中的值进行比较。和模板测试不同的是,如果该片元没通过深度测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值