
渲染管线
了解GPU
SIMD:单指令多数据运算(一个加法指令,同时计算xyzw)
SIMT:单指令多线程运算(一个核做得很小,一次能算"100"个)
GPC:图形处理集群 / SM:流处理器
"数据在计算机间流动是有成本的" —— 尽可能传递单向数据
"缓存Cache对计算机性能的影响远超想象"
可渲染物体
插值计算法线方向在折线处会出问题,所以要单独定义每个顶点的法线方向。
Mesh分解为Submesh子模型用于区分模型对应不同的材质。
现代游戏中使用Instance实例化,建立POOL统一管理Mesh、Shader、Texture。
可视化裁剪
通过Bounding Box检测各个顶点是否在视锥体之内决定是否要绘制。
各种形式的包围盒,Sphere效率最高
四叉树划分结合Bounding Box判断:"该区域最大的物体是否在视锥体内"
BVH
PVS 潜在可见性设置
站在7号房间观察只需要渲染6123房间。
纹理压缩
游戏引擎使用的纹理都会被压缩,普遍使用block-based算法。
取像素中的最大值和最小值,通过距离关系利用插值近似表达颜色。
建模工具
点线面、卡线、由粗到细
Zbrush雕刻型工具
扫描
程序化建模
基于集群的模型管线
雕刻工具创造无数的细节。
面对一个极为精细的模型时,拆分成每一个小Mesh,再计算。
Mesh Shader核心想法:通过算法基于数据凭空生成几何,可以根据距离相机的远近选择精度。
基于集群的GPU裁剪 GPU Culling in Cluster-Based Mesh
UE5的Nanite是基于集群的GPU裁剪更往前的一步。
要记住的
- 游戏引擎的工程系统深度依赖现代图形硬件的理解
- 模型材质之间的关系(Mesh、SubMesh)
- 尽可能通过运算把绘制的东西减到越少越好
- 把较多的工作给GPU来分担CPU的负担