复杂度极高算法效率要求高光栅化主要流程
顶点着色器完成像素着色器中对每个像素进行着色计算(纹理映射、光照计算、后处理等)。

SIMD:单指令多数据的数学运算,渲染中有大量的向量、矩阵运算,因此SIMD是非常重要的(CPU GPU都可)
SIMT:单指令多线程,一条指令可以在多个核上做同样的运算
SIMD+SIMT可以让计算速度比单指令单数据快很多。如:一个加法指令c = a + b,在100个核心上同时进行,每个核心又是4个分量同时计算,则速度快400倍
CPU与GPU的数据交换非常的慢,因此衍生出几个原则
Cache的重要性
逻辑上的GO是由多个不同的组件组合起来的,其中一个让这个GO变得可见的组件叫 网格绘制组件。
Mesh包含哪些东西?
为什么每个顶点都要定义法线?
叉乘得出,这样会产生一个问题如下左图所示。面的交接线处的顶点法线是斜着的,这样计算着色就会出问题,但看cube的任何一个表面,表面周围的法线有了梯度,根据这样插值出来的法线逐像素着色计算完成后,这个边就不硬!尽管我们的模型是方方正正非常硬的,但他着色后就看起来不硬

现代的材质模型中,纹理(Texture)起着非常重要的作用,可以说是决定性作用
比如下面这个生锈的球是怎么表现出来的?
纹理/贴图:定义球面上每个点的属性

着色器(Shader)
数据 来使用如何让一个对象的不同部位表现出不同的材质呢?
子网格subMesh,对每个submesh应用不同的shader和texture即可
课上讲的是 Mesh对应一个大的模型,sub mesh 对应这个模型的不同部位。现代引擎都是这个逻辑但是命名规则可能不同。有些是一整个模型叫Model,而一个Model由不同的Mesh组成。
如果游戏中有100个小兵GO,我们难道要为每个小兵都存储一套Mesh(几何模型)和Material(纹理、shader)?这样明显太浪费内存,因为所有的小兵Mesh、纹理、shader都是一样共用的,因此提出了 资源池 的概念。即同一个GO的Mesh、shader、Texture都分别用一个Resource Pool来管理,不同的实例(instance)只需要用指针去引用这些资源即可

根据材质来分类Submesh ,在绘制的时候,材质相同的submesh一起绘制,这种方法在工作量上并没有减少,但是速度会更快。因为不用频繁的更改GPU的状态,比如绘制一个小兵就要切换比如5次shader、绑定5次纹理、切换5次submesh几何数据。绘制下一个小兵又要重复这个过程,这样会非常慢。

GPU Batch Rendering
一个新的表达模型的管线,主要思想是:将高精度模型分成多个多个mesh块进行渲染。以前只能对单个物体进行可见性裁剪,现在能够对物体的mesh块进行裁剪。

UE5-Nanite系统


重复的知识就不写了…很多渲染基础知识可以看GAMES101的课程学习,也可以看笔记,甚至可以不用学