

了解GPU

SIMD:单指令多数据运算(一个加法指令,同时计算xyzw,例如:矩阵,坐标变换……)
SIMT:单指令多线程运算(一个核做得很小,一次能算“100”个)做运算尽可能用同样的代码,分别访问不同的数据

GPC:图形处理集群 SM:流处理器

“数据在计算机间流动是有成本的”尽可能传递单向数据

“缓存Cache对计算机性能的影响远超想象”
可渲染物体

插值计算法线方向在折线处会出问题,所以要单独定义每个顶点的法线方向

Mesh分解为Submesh子模型用于区分模型对应不同的材质


现代游戏中有许多内容使用是重复共用的(例如大量的群集士兵),这时主流做法是建立一个POOL,把需要的Mesh、Shader、Texture存储在一起统一调用,这便是运用Instance实例化。
Instance实例化这个理念并不只用于渲染,而是贯穿整个游戏引擎。
GPU批量渲染GPU Batch Rendering
可视化裁剪


通过Bounding Box检测各个顶点是否在视锥体之内决定是否要绘制


四叉树划分结合Bounding Box判断
“该区域最大的物体是否在视锥体内,不在则不用绘制,在的话进一步划分”

站在7号房间观察只需要渲染6123房间
纹理压缩
在游戏引擎的绘制里面不能使用类似BMP等优秀的压缩算法,因为这些算法不能随机访问,计算复杂度高。普遍使用block-based算法。
取像素中的最大值和最小值,通过距离关系利用插值近似表达颜色
建模工具
基于集群的模型管线(现代模型管线)
面对一个极为精细的模型时,拆分成每一个小Mesh,再计算,此时计算是完全一致的(实例化?批处理?)
Mesh Shader核心想法:通过一个算法基于数据凭空生成很多几何,可以根据距离相机的远近选择精度;优势在于可以创作无数的细节。
UE5的Nanite则是基于集群的GPU裁剪更往前了一步
要记住的
- 游戏引擎的工程系统深度依赖现代图形硬件的理解;
- 模型材质之间的关系(Mesh、SubMesh);
- 尽可能通过运算把绘制的东西减到越少越好,把性能释放刀最大;
- 把较多的工作给GPU来分担CPU的负担