书籍名称:《Unity shader入门精要》
作者:冯乐乐
前言:
- 通过这本书能够学到什么?
读者可以建立一个渲染流程的整体体系 - 学习这本书需要哪些基础?
1.一定的编程经验
2.熟悉Unity的基本操作
3.能够保持一定的耐心
4.有一定的数学基础(如基本的代数运算、三角运算、线性代数、微积分等)
基础篇(共4章)
目录:
1.欢迎来到Shader的世界
2.渲染流水线
3.Unity Shader基础
4.学习Unity Shader所需的数学基础
初级篇(共4章)
目录:
5.开始Unity Shader的学习之旅
6.Unity中的基础光照
7.基础纹理
8.透明效果
中级篇(共3章)
目录:
9.更复杂的光照
10.高级纹理
11.让画面动起来
高级篇(共5章)
12.屏幕后处理效果
13.使用深度和法线纹理
14.非真实感渲染
15.使用噪声
16.Unity中的渲染优化技术
扩展篇(共4章)
目录:
17.Unity的表面着色器探秘
18.基于物理的渲染
19.Unity 5 更新了什么
20.还有更多内容吗
第一章 欢迎来到Shader的世界
1.1程序员的三大浪漫之一: 图形学
用代码编写出一个绚丽多姿的世界
-
什么是shader?
专门用来渲染3D图形的一种技术;
shader 是在GPU上运行的程序,作用是通过数学计算将各种属性 (如颜色、光照、纹理等)输出成物体表面可见的状态。
第二章 渲染流水线
-
关于学习shader的一些提醒:
shader只是整个渲染流程的一个子部分,所以要学习shader,就必须了解整个渲染流程是怎样进行的,并且由于shader是面向计算机GPU的,所以它的一些语法相较于C++等高级语言会更难理解一些,因此不能只讲语法而不讲渲染框架 -
渲染流水线的最终目的:
从一个三维场景出发,生成(或者说渲染)一张二维纹理(即我们在电脑屏幕上看到的所有效果)(它的输入是一个虚拟摄像机、一些光源、一些shader以及纹理等)
既然学习shader需要知道什么是渲染流水线,So now,让我们看看 “流水线是什么” 吧!
-
什么是流水线?
类比:真实生活中的流水线——工厂用流水线大大提高了生产效率 -
什么是渲染流水线?
计算机需要将一系列信顶点、纹理信息转换成人眼可见的图像,这个过程就类似于工厂的流水线生产(不过这里的“工人”是CPU和GPU) -
渲染流水线的三个阶段:
应用阶段(输出渲染图元)——>几何阶段(输出屏幕的顶点信息)——>光栅化阶段
1.应用阶段:
通常由CPU实现,开发者具有对这个阶段的绝对控制权
三个主要任务: 准备场景数据,然后完成粗粒度剔除,最后设置好模型的渲染状态(包括材质、纹理、使用的shader等),最重要的任务:输出渲染所需的几何信息——即渲染图元(渲染图元是点、线、三角面等),接下来这些渲染图元便会传到下一阶段2.几何阶段:
通常在GPU上进行,处理所有和我们要绘制的几何相关的事情(如:绘制什么?怎么绘制?在哪里绘制?)
主要任务: 把顶点坐标变换到屏幕空间中,输出屏幕空间的二维顶点坐标、每个顶点的深度值、着色等信息,再交给光栅器来处理
处理对象:渲染图元3.光栅化阶段:
主要在GPU上运行,使用上阶段传递的数据产生屏幕上的像素,并渲染出最终的图像
主要任务: 决定每个渲染图元中的哪些像素应该被绘制在屏幕上
处理手段:对上一阶段得到的逐顶点数据(如纹理坐标、顶点颜色等)进行插值,然后进行逐像素处理
注释:插值是什么?
百科答案:在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点
以上为三个阶段的基本介绍,这三个阶段只是概念流水线,要与马上要讲到的GPU流水线(用于实现概念流水线的真正流水线)区分;
上述每个阶段实际上还可以划分为更细的流水线阶段
2022.5.5记
CPU和GPU之间的通信
-
应用阶段(在CPU上进行)的更细划分
(1)把数据加载到显存中 (为什么?因为显卡对显存的访问速度更快,并且大多数显卡对内存RAM没有直接访问权利)
数据的流向: 硬盘——>内存——>显存(2)设置渲染状态
定义场景中的每个网格是怎样被渲染的 (如果不更改那么所有网格都将使用同一种渲染状态,它们看起来就会像是同一种材质)(3)调用Draw Call
它是一个命令,由CPU发起,传给GPU,告诉它去根据设置好的渲染状态来渲染一个被指定的图元列表;然后GPU就会根据设置好的渲染状态和传送过来的数据进行计算,最后输出成屏幕上的像素点(分号后的这句话是下一节的内容——GPU流水线)
GPU流水线
- 什么是GPU流水线——就是GPU渲染的过程
- 为什么要设立GPU流水线——为了加快渲染速度
(注意我们前面提到了概念阶段的后两个阶段都是在GPU上进行的)
(开发者无法完全控制这两个阶段,但GPU开放了一些控制权,具体的可配置性与可编程性环节参考书籍)
2022.5.9记
接下来将有大量篇幅来讲解几何阶段和光栅化阶段的GPU渲染过程的具体细节