渲染
渲染的过程:投影和光栅化,计算(阴影,纹理采集)
GUP(显卡)
SIMD and SIMT
GPU中的SIMT体系结构相对于CPU的SIMD中的概念。为了有效地管理和执行多个单线程,多处理器采用了SIMT架构。此架构在第一个unified computing GPU中由NVIDIA公司生产的GPU引入。单个指令执行多个操作(空间坐标的xyz轴相加)
不同于CPU中通过SIMD(单指令多数据)来处理矢量数据;GPU则使用SIMT,SIMT的好处是无需开发者费力把数据凑成合适的矢量长度,并且SIMT允许每个线程有不同的分支。 纯粹使用SIMD不能并行的执行有条件跳转的函数,很显然条件跳转会根据输入数据不同在不同的线程中有不同表现,这个只有利用SIMT才能做到。多个核执行相同指令。
显卡的算力远远大于cpu就是因为SIMT这种结构(多个核执行相同代码)
显卡结构造成的原则
基本架构
数据要从cpu到GPU,尽量不要在GPU中读取数据。 尽可能减少CPU和GPU之间的数据传输。
缓存:数据尽量在缓存中,如果数据不在缓存在内存中,会大量时间去寻找这个数据。
Mesh Render Component 网格渲染组件
Vertex and Index Buffer
存放三角形的定点数据,而不是一个一个三角形的存放数据,三角形的顶点很多是共用的。可以大大提高效率,减少内存的数据。
渲染模型
渲染模型的纹理和材质不会只有一个,因此在mesh中会分割很多子mesh。相当于一个大布上分割很多小布,然后一一对应相应的颜色。
在游戏中会出现很多相同的游戏对象,为了节约资源,一般是建立一个库来存放这些mesh,shader等。在现代的游戏引擎中一般都是渲染的计算让gpu做。
pvs(把整个场景分成几个场景(加载))
纹理
压缩方法 bcn和astc都是有损压缩,jpeg也是,都无法还原的
制作模型的方法
现在的模型大多数都是利用GPU的结构特点,通过多个小核来运算各个分割后的模型。(模型通过不断的细化分割出多个小模型。)
Nanite
众所周知,现代GPU在处理资源时分了两条流水线,一条处理三角形网格,一条处理纹理图像。
一切卡点的原因在于:纹理的信息是规则的,而三角形网格的结构是不规则的,因此无法直接用硬件表达和随机存取,需要复杂的算法来动态构建。
UE5 Nanite的做法:
几何图像: 就是直接对三角形网格进行曲面参数化,即用RGB表示顶点位置,像素排列表示顶点组成三角形的关系,生成几何图像。
虚拟纹理技术: 将当下所有纹理融合成一张巨大的纹理图像,覆盖整个游戏世界,用四叉树管理每一个分割成同样大小的page,动态加载当前渲染场景所需要的page。
总结
1.游戏引擎的设计与硬件体系结构设计有着深刻的联系
2.采用子网设计来支持多物料模型
3.使用剔除算法绘制尽可能少的对象。
4.随着gpu功能的增强,越来越多的工作被转移到gpu中,称为gpu驱动。