渲染流水线
概念流水线的三个阶段
应用阶段、几何阶段、光栅化阶段
应用阶段
输出渲染图元(点、线、三角面等)
此阶段对于开发者来说的任务有:
几何阶段
光栅化阶段
CPU与GPU的通信
把数据加载到显存中
数据从硬盘加载到内存,然后网格和纹理等数据又被加载到显卡的存储空间,即显存里
设置渲染状态
调用Draw Call
Draw Call:每次CPU准备数据并调用图形绘制API通知GPU的过程就称之为一个DrawCall
所谓Draw Call,就是一个命令,发起方是CPU,接收方是GPU,仅仅指向一个需要被渲染的图元(点线面)列表,不包含任何材质信息(材质信息已经加载到了显存中)
GPU流水线
几何阶段和光栅化阶段可以分成若干个更小的流水线阶段。这些流水线阶段由GPU来实现,每个姐u但GPU提供不同的可配置性和可编程性
顶点着色器:实现顶点空间变换、顶点着色功能。把顶点坐标从模型空间转换到齐次裁剪空间(类似于归一化)
曲面细分着色器:用于细分图元
几何着色器:用于执行逐图元的着色操作,或者用于产生更多图元
裁剪:将不在摄像机视野内的顶点裁剪掉,剔除某些三角图元的面片
屏幕映射:负责把每个图元的坐标转换到屏幕坐标系中
// 在Unity中,屏幕坐标系是以屏幕左下角为原点,向右为 x 正方向,向上为 y 的正方向,相机世界坐标中 z 坐标的负方向为正方向的坐标系
三角形设置:固定函数阶段,计算光栅化一个三角形网格所需的信息
三角形遍历:固定函数阶段,检查每个像素是否被一个三角网格所覆盖,是的话就生成一个片元
// 一个片元并不是真正意义上的像素,只是包含要渲染的像素所需要的信息的集合,用于计算每个像素的最终颜色
片元着色器(像素着色器):实现逐片元的着色操作
逐片元操作(合并阶段):修改颜色、深度缓冲、进行混合等
输出:屏幕图像
着色器语言
HLSL
GLSL
CG
小总结
Shader 所在的阶段就是渲染流水线的一部分,更具体来说 Shader 就是GPU流水线上一些可编程的部分。而着色器编译出来的代码最终是在GPU上运行的
Unity Shader基础
Unity 中提供了方便管理着色器、代码以及渲染设置的 Unity Shader
- 标准表面着色器(Standdard Surface Shader):包含标准光照的表面着色器模板
- 无光照着色器(Unlit Shader):不包含光照的基本顶点/片元着色器
- 图像效果着色器(Image Effect Shader):实现各种屏幕后处理效果
- 计算着色器(Compute Shader):产生一个特殊的Shader文件,旨在利用GPU并行性进行一些与常规渲染流水线无关的计算
- 光线追踪着色器(Ray Tracing Shader): 执行与光线追踪相关的计算
流程
创建一个材质(Material),创建一个着色器(Shader),将Shader赋予到材质上,再把材质赋予给游戏对象,在材质面板中调整属于以达到满意的效果。
ShaderLab
ShaderLab 是 Unity 中用于编写着色器的特定语言csharp Shader"_ShaderName" { Properties{ //属性} SubShader{ //子着色器} SubShader{ //子着色器} Fallback "VertexLit" //SubShader都无法使用时调用Fallback }
暂无评论内容