GAMES104_Lecture04.pdf
点击查看【bilibili】
Take Away
- The design of game engine is deeply related to the hardware architecture design
- submesh design is used to support a model with multiple materials
- Use culling algorithms to draw as few objects as possible
- As GPU become more powerful, more and more work are moved into GPU, which called GPU Driven
渲染概述:
渲染的进步
基于物理的渲染
未来四节课的课程安排
游戏渲染的挑战
有成千上万的游戏对象在一个容器中需要同时渲染
引擎与硬件的适配与交互
渲染的稳定性
运算的负载
本节课不会包含
更多信息查看202的课程
渲染流水线
将顶点数据进行光栅化的过程
着色
在着色的时候我们需要对某些常量进行访问,比如说屏幕的长宽像素,访问一些自定义的常数,然后会需要计算光照的算法如简单地Phong模型或者光追的算法;此外还有纹理采样和一些插值。这些计算对于计算资源的消耗是恐怖的。
MIPMAP(多级渐远纹理)
用于防止游戏对象在摄像机镜头内由近及远的移动时,产生的走样现象。MIPMAP会额外小号原本的内存空间的[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Boohg67L-1649668038419)(https://cdn.nlark.com/yuque/__latex/5b5c1d91565b7e2f4f6701c758a28cdf.svg#card=math&code=1%2F3&id=bnQT3)].
通常为了防止走样现象会在相邻层级的MIPMAP间进行插值,而像素间也会需要进行插值(三线性插值)。详见101课程。
GPU处理上述的繁杂计算
GPU的基础概念
SIMD和SIMT
SIMD(Single Instruction Multiple Data)
单指令并行处理预算数据
SIMT(Single Instruction Multiple Threads)
单指令多线程
GPU架构——以Fermi架构为例
GPC(图形处理集群)
一种专门用来处理计算,光栅化,着色,纹理处理的专用的硬件块
SM(流式多核处理器)
GPU中运行CUDA的部分
Texture Units
纹理处理单元,用于采样和过滤纹理
CUDA 核心
语序不同处理器同时处理数据的并行处理器
数据流从CPU到GPU的开销
运算:运数据+算数据
CPU到GPU的数据流动
- 高负载
- 有限的带宽
- 尽量只让数据单向流动从CPU到GPU
缓存Cache
预算前检测缓存是否被命中
- Cache hit
- Cache miss(将等待缓存重新被读取,等待的时间相对于计算将非常漫长)
GPU 的限制和性能
一个应用的性能表现取决于
- 内存读取的限制
- 算法的限制
- 纹理采样的限制
- 带宽的限制
现代的硬件流水线
primitive:图元
Renderable可渲染的物体
MESH
上图中的这种存储方式并不高效
在OpenGL的教程中我们可以发现一般来说顶点数据的存储都是先把所有的顶点存储了以后,
对于每个三角形都使用顶点的索引来储存。
要对每个三角形的顶点单独定义其法向
Materials
不同的材质
不同的光照模型
- Phong模型
- PBR
- ……
纹理Texture
Shader
Coordinate System and Transformation
详情参考GAMES101视频
Object with Many Materials
SubMesh
定义一个偏移量(Offset)就可以自动生成副网格,将一个大的顶点数据分成若干个副网格,以便于后续对不同部位的计算
大量相同的GO资源如何处理?
Resource Pool 资源池
方便相同的数据复用
Instance(实例化)
将美术资源实例化为多个GO
我们将可重用的资源按照材质分类好放在一个资源池里面,然后将这个资源池传入GPU。
许多子物体都是相同的,在一次DRAWCALL中我们可以用上面提到的方法,避免将重复的Vertex Buffer和Index Buffer 多次传入GPU
Visibility Culling (可见性剔除)
只对视锥中的物体进行绘制
例如用AABB(Axis-aligned bounding box )包围盒与做求交运算
不同的包围盒
OBB(Oriented Bounding Box)
层级视锥剔除(BVHC)
从最大的包围盒开始向下级的包围盒作Culling
对于提升Culling的效率非常明显,被广泛运用
但在对于动态物体:需要权衡使用BVHC的优势与构建BVH数据结构的开销权衡。
PVS算法
PVS的思想可以用于动态加载场景
GPU Culling
Texture Compression (纹理压缩)
一般的高效的图像压缩格式不支持随机访问。
举例:现在只需要知道原先的图片中动态范围的极大极小,然后运用极大极小值其余的像素一个插值的坐标,就可以得到原先的图片
Authoring Tools of Modeling
建模
可以用不同的DCC软件来生成数字化资产
雕刻
Zbrush用于雕刻模型
三维重建
扫描
程序化生成
Cluster-Based Mesh Pipeline(新的模型管线)
- 模型面数越来越多
- 开放世界
将一个高模,按照一定规律以每64个面片为1簇细分出来
有如下优点
- 可以对随机的簇进行drawcall
- 新的GPU剔除形式
- 根据深度对深度进行排序
Nanite
Nanite就是上述思想的工业化体现
关于PILOT引擎
我直接泪目了,致敬所有图形学路上的布道者!!!!