跳转到主要内容
games104 2 tags

游戏引擎中的渲染实践

GPU架构、可渲染物体、裁剪与纹理压缩

cover

渲染管线

渲染管线

了解GPU

GPU架构

SIMD:单指令多数据运算(一个加法指令,同时计算xyzw)

SIMT:单指令多线程运算(一个核做得很小,一次能算"100"个)

GPC和SM

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

数据流动
"数据在计算机间流动是有成本的" —— 尽可能传递单向数据
缓存
"缓存Cache对计算机性能的影响远超想象"

可渲染物体

法线插值

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

SubMesh

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

Instance Instance Pool

现代游戏中使用Instance实例化,建立POOL统一管理Mesh、Shader、Texture。

可视化裁剪

裁剪 视锥体裁剪

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

包围盒

各种形式的包围盒,Sphere效率最高

四叉树

四叉树划分结合Bounding Box判断:"该区域最大的物体是否在视锥体内"

BVH

BVH

PVS

PVS 潜在可见性设置

PVS房间

站在7号房间观察只需要渲染6123房间。

纹理压缩

纹理压缩

游戏引擎使用的纹理都会被压缩,普遍使用block-based算法

block-based

取像素中的最大值和最小值,通过距离关系利用插值近似表达颜色。

建模工具

传统建模

点线面、卡线、由粗到细

Zbrush

Zbrush雕刻型工具

扫描

扫描

程序化建模

程序化建模

基于集群的模型管线

雕刻细节

雕刻工具创造无数的细节。

Cluster

面对一个极为精细的模型时,拆分成每一个小Mesh,再计算。

Mesh Shader

Mesh Shader核心想法:通过算法基于数据凭空生成几何,可以根据距离相机的远近选择精度。

GPU Culling

基于集群的GPU裁剪 GPU Culling in Cluster-Based Mesh

Nanite

UE5的Nanite是基于集群的GPU裁剪更往前的一步。

要记住的

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

Related Articles

继续阅读