本文是冯乐乐著的《Untiy Shader 入门精要》的读书笔记第一篇。主要是记录一些读书中的知识点,请配合图书一块食用。
一、渲染流水线
1. 概述
由一个三维场景出发,渲染一张二维的图像。
2 . 概念渲染流水线
《Real-Time Rendering,Third Edition》将渲染流程划分为三个部分。
应用阶段 -> 几何阶段 -> 光栅化阶段
- 应用阶段:开发者可以自由主导的阶段,通常由 CPU 负责。开发者主要通过以下 3个 主要任务,输出渲染需要的几何信息,即 渲染图元。
- 布置好场景。模型、相机和光照的摆放。
- 粗粒度剔除(culling)。将被遮挡,不可见的物体剔除出去。
- 设置模型的渲染状态。包括材质、纹理、shader等。
- 几何阶段: 通常在 GPU 中进行。对输入的渲染图元进行多步处理,将输出屏幕空间二维顶点坐标,没个顶点包含深度值、着色等信息。
- 光栅化阶段: 通常在 GPU 上运行。主要是决定每一个渲染图元中那些像素应该绘制到屏幕上。需要对几何阶段得到的顶点数据进行插值,然后逐像素处理。
3. CPU 和 GPU 之间通信(应用阶段)
应用阶段的起点是 CPU。主要分为三部分。
- 应用阶段
- 把数据加载到显存中:所有需要渲染的数据,需要从硬盘中加载到内存中,再将网格、纹理等信息加载到 GPU 显存中。
- 设置渲染状态:定义了场景中网格是被怎么渲染的。使用哪个顶点着色器/片元着色器、光源属性、材质等。
- 调用 Draw Call:CPU 通知 GPU 对一个被需要渲染的图元列表进行渲染。
4. GPU 流水线(几何阶段 + 光栅化阶段)
GPU 接受到了 CPU 的 Draw Call 指令。会按照顺序执行下面的步骤
- 几何阶段
- 顶点着色器(Vertex Shader):完全可编程。顶点变换、着色等功能。
- 曲面细分着色器(Tessellation Shader):可选着色器,用于细分图元。
- 几何着色器(Geometry Shader):可选着色器。用于逐图元的着色,或生成更多的图元。
- 裁剪(Clipping):可配置。将不在摄像机内的顶点裁剪掉,并剔除某些三角图元的面片。
- 屏幕映射(Screen Mapping):不可配置和编程。负责将图元坐标转换到屏幕坐标系中。
- 光栅化阶段
- 三角形设置(Triangle Setup):固定函数
- 三角形遍历(Triangle Traversal):固定函数
- 片元着色器(Fragment Shader):完全可编程。逐片元着色。
- 逐片元操作(Per-Fragement Operations):可配置。能够修改颜色、深度缓冲、进行混合等。
5. 常见问题:OpenGL 和 DirectX
这俩个都是图像应用编程接口。应用程序通过这些接口发送渲染命令,接口将把命令发送给显卡驱动,驱动将会把命令翻译成 GPU 指令,进行真正的渲染。
OpenGL:左下角为原点(0,0)
DirectX:左上角为原点(0,0)
显卡商为了让显卡支持 OpenGL 和 DirectX,就必须提供支持两个接口的

本文是《Unity Shader 入门精要》的读书笔记,详细介绍了渲染流水线的三个阶段:应用阶段、几何阶段和光栅化阶段,讲解了CPU与GPU的通信、OpenGL与DirectX的区别,以及HLSL、GLSL和Cg着色器语言。此外,还探讨了Unity Shader的基础,包括4种模板和ShaderLab。在数学基础部分,涵盖了坐标系、矢量、矩阵以及坐标空间的转换,是学习Unity Shader的重要理论基础。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



