1、入门概述
Shader是整个渲染流程中的一个子部分,需要了解整个渲染流程是如何进行的。
Shader更多地是面向GPU的工作方式,所以它的一些语法对我们来说并不那么直观。
#基础篇
1-1 渲染流水线
1-2 Unity Shader基础
1-3 数学基础
#初级篇
2-1 开始Unity Shader
2-2 Unity中的基础光照
2-3 基础纹理
2-4 透明效果
#中级篇
3-1 更复杂的光照:光照衰减、阴影计算等
3-2 高级纹理
3-3 让画面动起来:纹理动画、顶点动画
#高级篇
4-1 屏幕后处理效果:高斯模糊、边缘检测
4-2 使用深度和法线纹理
4-3 非真实感渲染:卡通渲染、素描风格扽
4-4 使用噪声
4-5 Unity中的渲染优化技术
#扩展篇
5-1 Unity的表面着色器探秘
5-2 基于物理渲染
5-3 图形学
2、渲染流水线
渲染流水线的最终目的在于生成或者说是渲染一张二维纹理,即屏幕效果,它的输入是一个虚拟摄像机、一些光源、一些Shader以及纹理等。
渲染流程分成三个阶段——应用阶段(输出渲染图元)、几何阶段(输出屏幕空间的顶点信息)、光栅化阶段
#应用阶段:
准备好场景数据、粗粒度剔除工作、设置好每个模型的渲染状态
这一阶段最重要的是输出渲染所选的几何信息,即渲染图元,可以是点、线、三角面等。
该阶段由开发者决定的。
#几何阶段:
负责对每个渲染图元进行逐顶点、逐多边形的操作,通常在GPU上进行。
重要任务是把顶点坐标变换到屏幕空间中,再交给光栅器进行处理。
这一阶段将会输出屏幕空间的二维顶点坐标、每个顶点对应的深度值、着色等相关信息,并传递给下一个阶段
#光栅化阶段
光栅化的任务主要是决定每个渲染图元中的哪些像素应该被绘制在屏幕上。
它需要对上一个阶段得到的逐顶点数据(纹理坐标、顶点颜色等)进行插值,然后在进行逐像素处理。
3、CPU和GPU通信——硬件实现流水线
#渲染流水线起点在CPU,即应用阶段:
(1)把数据加载到显存中
(2)设置渲染状态
(3)调用Draw Call(CPU发给GPU的渲染命令,需要被渲染的图元列表)
#GPU流水线
流程:顶点数据——(顶点着色器-曲面细分着色器-几何着色器-裁剪-屏幕映射)——(三角形设置-三角形遍历-片元着色器-逐片元操作)——屏幕图像
顶点着色器:实现顶点的空间变换、顶点着色等功能
曲面细分着色器:细分图元
几何着色器:执行逐图元的作色操作。或者用于产生更多的图元
片元着色器:实现逐片元的着色操作
逐片元操作:例如修改颜色、深度缓冲、进行混合等,不可编程,但具有很高的可配置性。
4、专业术语
#OpenGL和DirectX
图像应用编程接口,渲染二维三维图像,搭建上层应用程序与GPU的沟通桥梁。
一个应用程序向这些接口发送渲染命令,这些接口依次向显卡驱动发送渲染命令,显卡驱动是真正和GPU通信的角色
#HLSL、GLSL、Cg
着色语言是专门用于编写着色器的,常见的着色器语言有DirectX的HLSL、OpenGL的GLSL以及NVIDIA的Cg
#固定管线渲染
固定函数的流水线,也简称为固定管线,通常是指在较旧的GPU上实现的渲染流水线。
比较形象的比喻是使用固定管线进行渲染时,像控制电路上的多个开关,我们可以选择或关闭一个开关,但永远无法控制整个电路的排布。
如果不是为了对较旧设备进行兼容,不建议继续使用固定管线的渲染方式。