有了开篇的渲染管线和渲染流水线的基本概念,接下来先从原理上看看渲染流水线是怎么运作的,然后再看看UnityURP是对应是怎么实现的,最后再看UnityURP是怎么构建渲染管线,逐层探索剖析。本篇作为渲染流水线的主线文章,将列举渲染流水线中的各个阶段,将数据到图像的每一步处理步骤都列出,每个阶段的具体的详细讨论在后续相应的文章链接中展开详解。
【从UnityURP开始探索游戏渲染】专栏-直达
(对渲染的探索是个持续不断完善的过程,记录这个过程将零散的内容整理起来,其中肯定会有理解偏差和问题,如果哪里有问题,欢迎在评论区探讨和指出)
基于URP默认的渲染路径:前向渲染Forward 来讲解基本的渲染流水线
渲染路径 概念在最后会讲解,默认的前向渲染路径就是最通用的复合常规的渲染流水线中的流程,其他路径都是优化特定情况而出现的,先用前向的学习后再看其他的渲染路径。
**渲染流水线(Rendering Pipeline)**中可编程或可配置阶段,按顺序执行:
应用阶段 -〉几何阶段 -〉 光栅化阶段 -〉逐片元阶段 -〉输出
**应用阶段(CPU)**包括(包围盒裁剪、遮挡剔除、其他裁剪算法等)
**几何阶段(GPU)**包括(顶点着色器(可编程)、细分着色器(可选)、几何着色器(可选)、图元装配(固定)、裁剪(固定)、归一化设备坐标(透视除法;固定)、屏幕映射(固定))
**光栅化阶段(GPU)**包括(光栅化(三角形设置、三角形遍历;固定)、片元着色器(可编程))
**逐片元阶段(GPU)**包括((可见性测试Scissor、多重采样测试)透明度测试、模版测试、深度测试、深度写入、混合)(全可配置)
接下来详细列出渲染流水线的阶段索引
应用阶段
- 包围盒裁剪
- 遮挡剔除
- 其他裁剪算法
- 渲染命令队列和其中的渲染指令(drawcall)、渲染状态设置
几何阶段
- 关键顺序:
- 顶点着色器输出齐次裁剪坐标(如
UnityObjectToClipPos
返回值)。 - GPU执行裁剪(依赖
w
分量的动态范围)。 - 透视除法触发归一化,生成NDC坐标供屏幕映射
模型空间 →(Model矩阵)→ 世界空间 →(View矩阵)→ 观察空间 →(Projection矩阵)→ 裁剪空间→(透视除法)→ NDC空间 →(视口变换)→ 屏幕空间
- 其中模型空间到裁剪空间是在顶点着色阶段运算的。(在顶点着色器中手动用MVP矩阵进行左乘计算)
- NDC空间是归一化时做的 (GPU自动计算)
- 屏幕空间是屏幕映射阶段做的 (GPU自动计算)
- 顶点着色器(Vertex Shader)
- 可选阶段:曲面细分着色器(Tessellation Shader)
- 可选阶段:几何着色器(Geometry Shader)
- 图元装配
- 裁切
- 归一化设备坐标(Normalized Device Coordinates, NDC)
- 屏幕映射
光栅化阶段
- 光栅化
- 片元着色器(Fragment Shader)
逐片元阶段
- 逐片元操作(Per-Fragment Operations)
- 深度偏移(Slope Scale Depth Bias)
- 渲染顺序与层级
Unity中基于SRP的URP渲染管线
- SRP提供的核心功能与架构
- URP在SRP上的具体实现
- URP对SRP的扩展与简化
- 对URP的扩展
- URP中的渲染路径选择
其他
URP中实时阴影计算流程
计算着色器(Compute Shader):GPU 通用计算,可并行处理非图形任务(需单独编写)。
后处理(Post-Processing):屏幕空间特效(如 Bloom),通过 URP Renderer Feature 添加。
投影Projector。
平面阴影
【从UnityURP开始探索游戏渲染】专栏-直达
(欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,🙏)
共同學習,寫下你的評論
評論加載中...
作者其他優質文章