unityshader学习笔记1
渲染流水线中的3个概念阶段:
一.应用阶段:
通常由CPU负责实现,拥有绝对控制权.主要有3个任务:
1.准备好场景数据 : 如摄像机的位置、视锥体、场景中包含的模型、光源等等.
2.粗粒度剔除 : 为提高渲染性能,需要把不可见的物体剔除出去.
3.设置好模型的渲染状态 : 材质、纹理、shader等等
这一阶段最重要的输出的渲染所需的几何信息,即渲染图元.渲染图元可以是点、线、三角面等.这些渲染图元将会被传递给下个阶段.
应用阶段大致可分为下面3个阶段:
(1) 把数据加载到显存中
(2) 设置渲染状态
(3) 调用Draw Call
二.几何阶段:
通常在GPU上进行.几何阶段用于处理所有和我们要绘制的集合相关的事情.如,决定要绘制的图元是什么,怎样绘制,在哪里绘制.
几何阶段负责和每个渲染图元打交道,进行逐顶点、逐多边形的操作.
几何阶段最重要的任务就是把顶点坐标变换到屏幕空间中,再交给光栅器处理.
通过对输入的渲染图元进行多步处理后,将会输出屏幕空间的二维顶点坐标、每个顶点对应的深度值、着色等相关信息,并传递给下个阶段.
三.光栅化阶段:
GPU上进行,将会使用上个阶段传递的数据来产生屏幕上的像素,并渲染出最终的图像.
光栅化的任务主要是决定每个渲染图元的哪些像素应该被绘制在屏幕上,它需要对上一个阶段得到的逐顶点数据(如纹理坐标、顶点颜色等)进行插值,然后再进行逐像素处理.
GPU渲染过程:
绿色 : 完全可编程控制
黄色 : 可配置,不可编程
蓝色 : 由GPU固定实现,开发者没有控制权
实线 : 该shader必须由开发者编程实现
虚线 : 该shader可选
顶点着色器 : 完全可编程,通常用于实现顶点的空间变换、顶点着色等.
曲面细分着色器 : 可选,用于细分图元.
几何着色器 : 可选,可以用于执行逐图元的着色操作,或产生更多的图元.
裁剪 : 可配置,将不在摄像机视野内的顶点裁减掉,并突出某些三角图元的面片.可以使用自定义的裁剪平面来配置裁剪区域,也可以通过指令控制裁剪三角图元的正面还是背面.
屏幕映射 : 不可配置不可编程,负责把每个图元的坐标转换到屏幕坐标系中.
三角形设置 : 计算光栅化一个三角网格所需的信息.
三角形遍历 : 检查每个像素是否被一个三角网格所覆盖.如果被覆盖,将会生成一个片元.
(片元并不是像素,而是包含了很多状态的集合,这些状态用于计算每个像素的最终颜色)
片元着色器 : 完全可编程,用于实现逐片元的着色操作.
逐片元操作 : 可配置不可编程,负责执行很多重要操作,如修改颜色、深度缓冲、进行混合等.
模板测试:通常用于限制渲染的区域
深度测试:将像素的深度与深度缓冲的深度进行比较。如果通过了深度测试,就有机会去改写深度缓冲的对应值;否则该像素会被舍弃。(总的来说,用于剔除遮挡的内容)
混合:用于生成透明对象