跳转到主要内容
Computer Graphics Jun 21, 2022 2 tags

04.游戏引擎中的渲染实践

04.游戏引擎中的渲染实践

cover

图示

了解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裁剪更往前了一步

要记住的

  1. 游戏引擎的工程系统深度依赖现代图形硬件的理解;
  2. 模型材质之间的关系(Mesh、SubMesh);
  3. 尽可能通过运算把绘制的东西减到越少越好,把性能释放刀最大;
  4. 把较多的工作给GPU来分担CPU的负担

Related Articles

继续阅读