GAMES104----LECTURE 04: Rendering on Game Engine

GAMES104_Lecture04.pdf
点击查看【bilibili】


Take Away

  1. The design of game engine is deeply related to the hardware architecture design
  2. submesh design is used to support a model with multiple materials
  3. Use culling algorithms to draw as few objects as possible
  4. As GPU become more powerful, more and more work are moved into GPU, which called GPU Driven

渲染概述:

渲染的进步

image.png

基于物理的渲染

image.png

未来四节课的课程安排

游戏渲染的挑战

image.png
有成千上万的游戏对象在一个容器中需要同时渲染

image.png
引擎与硬件的适配与交互

image.png
渲染的稳定性

image.png
运算的负载

image.png

本节课不会包含

image.png
更多信息查看202的课程


渲染流水线

将顶点数据进行光栅化的过程
image.png
image.png

着色

image.png
在着色的时候我们需要对某些常量进行访问,比如说屏幕的长宽像素,访问一些自定义的常数,然后会需要计算光照的算法如简单地Phong模型或者光追的算法;此外还有纹理采样和一些插值。这些计算对于计算资源的消耗是恐怖的。
image.png

MIPMAP(多级渐远纹理)

用于防止游戏对象在摄像机镜头内由近及远的移动时,产生的走样现象。MIPMAP会额外小号原本的内存空间的[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Boohg67L-1649668038419)(https://cdn.nlark.com/yuque/__latex/5b5c1d91565b7e2f4f6701c758a28cdf.svg#card=math&code=1%2F3&id=bnQT3)].
通常为了防止走样现象会在相邻层级的MIPMAP间进行插值,而像素间也会需要进行插值(三线性插值)。详见101课程。

GPU处理上述的繁杂计算

image.png


GPU的基础概念

SIMD和SIMT

image.png SIMD(Single Instruction Multiple Data)

单指令并行处理预算数据

SIMT(Single Instruction Multiple Threads)

单指令多线程

GPU架构——以Fermi架构为例

image.png

GPC(图形处理集群)

一种专门用来处理计算,光栅化,着色,纹理处理的专用的硬件块

SM(流式多核处理器)

GPU中运行CUDA的部分

Texture Units

纹理处理单元,用于采样和过滤纹理

CUDA 核心

语序不同处理器同时处理数据的并行处理器

数据流从CPU到GPU的开销

运算:运数据+算数据

image.png
CPU到GPU的数据流动

  • 高负载
  • 有限的带宽
  • 尽量只让数据单向流动从CPU到GPU

缓存Cache

image.png
预算前检测缓存是否被命中

  • Cache hit
  • Cache miss(将等待缓存重新被读取,等待的时间相对于计算将非常漫长)

GPU 的限制和性能

image.png
一个应用的性能表现取决于

  • 内存读取的限制
  • 算法的限制
  • 纹理采样的限制
  • 带宽的限制

现代的硬件流水线

image.png
image.png

primitive:图元


Renderable可渲染的物体

MESH

image.png
image.png
image.png
上图中的这种存储方式并不高效
OpenGL的教程中我们可以发现一般来说顶点数据的存储都是先把所有的顶点存储了以后,
对于每个三角形都使用顶点的索引来储存。
image.png
要对每个三角形的顶点单独定义其法向
image.png

Materials

不同的材质

image.png

不同的光照模型

image.png

  • Phong模型
  • PBR
  • ……
纹理Texture

image.png

Shader

image.png

Coordinate System and Transformation

详情参考GAMES101视频
image.png


Object with Many Materials

image.png

SubMesh

image.png
定义一个偏移量(Offset)就可以自动生成副网格,将一个大的顶点数据分成若干个副网格,以便于后续对不同部位的计算

大量相同的GO资源如何处理?

image.png

Resource Pool 资源池

方便相同的数据复用
image.png

Instance(实例化)

将美术资源实例化为多个GO
image.png
image.png
我们将可重用的资源按照材质分类好放在一个资源池里面,然后将这个资源池传入GPU。
image.png
许多子物体都是相同的,在一次DRAWCALL中我们可以用上面提到的方法,避免将重复的Vertex Buffer和Index Buffer 多次传入GPU


Visibility Culling (可见性剔除)

只对视锥中的物体进行绘制
image.png
例如用AABB(Axis-aligned bounding box )包围盒与做求交运算

不同的包围盒

image.png
OBB(Oriented Bounding Box)

层级视锥剔除(BVHC)

image.png
从最大的包围盒开始向下级的包围盒作Culling
image.png
对于提升Culling的效率非常明显,被广泛运用
但在对于动态物体:需要权衡使用BVHC的优势与构建BVH数据结构的开销权衡。

PVS算法

image.png
image.png
PVS的思想可以用于动态加载场景
image.png

GPU Culling

image.png


Texture Compression (纹理压缩)

image.png
一般的高效的图像压缩格式不支持随机访问。

image.png
举例:现在只需要知道原先的图片中动态范围的极大极小,然后运用极大极小值其余的像素一个插值的坐标,就可以得到原先的图片


Authoring Tools of Modeling

建模

image.png
可以用不同的DCC软件来生成数字化资产

雕刻

image.png
Zbrush用于雕刻模型

三维重建

image.png
扫描

程序化生成

image.png

image.png


Cluster-Based Mesh Pipeline(新的模型管线)

image.png

  • 模型面数越来越多
  • 开放世界

image.png
将一个高模,按照一定规律以每64个面片为1簇细分出来
有如下优点

  • 可以对随机的簇进行drawcall
  • 新的GPU剔除形式
  • 根据深度对深度进行排序

image.png

Nanite

image.png
Nanite就是上述思想的工业化体现


关于PILOT引擎

我直接泪目了,致敬所有图形学路上的布道者!!!!
image.png

image.png

源码下载

Pilot-main.zip

build

image.pngimage.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值