UnityShader1:渲染流水线

需要先了解简单的线性代数/数学知识,以及OpenGL/DirectX至少一种

一、渲染流水线

三个阶段:应用阶段 → 几何阶段 → 光栅化阶段

应用阶段(起点为CPU,目标为GPU):

  1. 把数据加载到显存中:显卡对于显存的访问速度更快,而且大多数显卡对于 RAM 没有直接的访问权利,加载到显存后对于原先在 RAM 中的数据可以选择性的移除
  2. 设置渲染状态:确定使用的着色器,材质等
  3. 调用 Draw Call:Draw Call 是 CPU 发送给 GPU 的一个命令,告诉 GPU 可以开始绘制工作,之前的 OpenGL 和 DirectX 就是上层应用程序与底层 GPU 之间的沟通桥梁,尽可能的减少 Draw Call 次数是一个非常重要的优化方向

几何阶段 & 光栅化阶段:

GPU开始渲染工作,对应渲染管线:https://blog.csdn.net/Jaihk662/article/details/105560152(OpenGL基础3:渲染管线)

二、基础渲染环节

空间变换:https://blog.csdn.net/Jaihk662/article/details/106237306

顶点着色器 & 片段着色器:https://blog.csdn.net/Jaihk662/article/details/105954230

深度测试 & 模板测试:https://blog.csdn.net/Jaihk662/article/details/107100249

https://blog.csdn.net/Jaihk662/article/details/107109788

扫描二维码关注公众号,回复: 12476364 查看本文章

……

三、扩展

GPU 和 CPU 是如何并行工作的:

流水线模式,命令缓冲区(Command Buffer)包含了一个缓冲队列,CPU向其中添加命令,而GPU从中读取命令,添加和读取过程是相互独立的

为什么 Draw Call 多了会影响帧率? 

在每次调用 Draw Call 时,CPU 需要进行非常多的工作,包括但不限于发送状态命令和数据,检查渲染状态等,一般其提交速度要低于GPU的渲染速度,会出现性能瓶颈

HLSL、GLSL、CG 着色器语言

  • GLSL:OpenGL 的着色器语言,由显卡驱动来完成着色器的编译工作,依赖硬件而不依赖操作系统
  • HLSL:DirectX 的着色器语言,由微软控制着色器的编译,因此往往只支持微软平台的产品
  • CG:真正意义上的跨平台,它会根据平台的不同编译成相应的中间语言,是与微软的合作项目,与 HLSL 高度相似

在 Unity Shader 中,可以选择使用 "CG/HLSL" 或者 "GLSL"

猜你喜欢

转载自blog.csdn.net/Jaihk662/article/details/109752529