ysl免费网站建设,广州文化网站模板,微信官网下载安装微信,企业网络营销策划方案费用文章目录 概览#xff1a;游戏引擎中的渲染系统四个课时概览 一#xff0c;渲染管线流程二#xff0c;了解GPUSIMD 和 SIMTGPU 架构CPU到GPU的数据传输GPU性能限制 三#xff0c;可见性Renderable可渲染对象提高渲染效率Visibility Culling 可见性裁剪 四#xff0c;纹理压… 文章目录 概览游戏引擎中的渲染系统四个课时概览 一渲染管线流程二了解GPUSIMD 和 SIMTGPU 架构CPU到GPU的数据传输GPU性能限制 三可见性Renderable可渲染对象提高渲染效率Visibility Culling 可见性裁剪 四纹理压缩Texture Compression五Cluster-Based Mesh Pipeline总结 概览游戏引擎中的渲染系统 游戏渲染面临的挑战 渲染量大、算法复杂、all in one对于不同硬件显卡的适配和优化实时性60fps、120fps和分辨率1080p、4K、8K要求CPU带宽和内存限制游戏逻辑、网络、动画物理等都是CPU处理的 这块是一个实践性、工程性知识与纯理论相对因此技术更新换代非常快
四个课时概览 一渲染管线流程
流程参照101和图形基础
二了解GPU
SIMD 和 SIMT
单指令多数据SIMDSingle Instruction Multiple Data运算对多个数据同时进行同一种运算指令级并行一般用于矩阵计算单指令多线程SIMTSingle Instruction Multiple Threads运算多线程处理运算相当于GPU多线程版SIMDGPU的线程数是比CPU多得多因此处理简单计算快
GPU 架构
GPU上的运算是分到一个个的流式多核处理器SMStreaming Multiprocessor里计算的SM用于运行CUDA并行处理器。计算时不仅可以并行相互间还可以交换数据硬件加速这是现代GPU最重要的架构最先进的引擎一直在更新比如逐渐能够使用compute shader、mesh shader等等以及一些优化比如Tile-Based这些都跟硬件架构息息相关如果能先了解下显卡硬件的工作原理有助于学习这些后续知识~艺术家也一样
CPU到GPU的数据传输
现代引擎中一般绘制和逻辑是不同步的但如果某帧绘制需要逻辑运算的数据时就可能出现不同步的延迟。并且CPU与GPU之间的数据传输非常慢因此默认原则尽可能用CPU-GPU的单向传输而不从GPU读取数据。缓存Cache效率在GPU中非常重要如果计算时要加载数据不在缓存里就会出现Cache miss读取到时Cache miss情况这时候如果想去内存读取甚至会花费一百多个时间周期处理效率大大降低
GPU性能限制
内存瓶颈Memory Bounds算术逻辑单元ALU Bounds纹理贴图单元TMU(Texture Mapping Unit) Bound带宽瓶颈BW(Bandwidth) Bound
三可见性
Renderable可渲染对象
Mesh储存每个点的位置、法线、uv、权重等和三角形的点索引Materials经典模型Phong Model、PBR Model等Texture有时候比材质还要重要Shadersshader在引擎中不算是源码而是“数据”shader graph连连看SubMeshMesh根据材质不同分为不同子网格即SubMesh
提高渲染效率
多个模型的多个submesh重复了怎么提高效率呢 可以建立一个资源池Resource Pool将同一种资源储存到统一的资源池中并建立缓存Instance实例化相当于先定义一个物体的Renderable然后再将该数据实例化并渲染游戏中相同材质的submesh也可以把场景物体按照材质排序把相同材质的物体group到一起然后只需设置一次材质减少GPU等待数据再进一步GPU Barch Rendering可以在一次drawcall里一次性设置并渲染大量同材质物体
Visibility Culling 可见性裁剪
基础原理是通过包围盒判断优化用BVH Culling之类的算法尤其是动态东西很多的时候或者PVS思想。PVS(Potential Visibility Set)先用BSP-tree将空间进行划分每个小格子之间用Portal传送门连接绘制时只绘制当前各自及其能看到的其他格子的内容即可用于动态载入场景并且每个格子的可见性是预设好的随着硬件升级更多使用的是GPU Culling用GPU快速计算出每个物体的包围盒是否可见搭配preZ等技术 四纹理压缩Texture Compression
常见的图片格式如JPG、PNG等都是一种压缩格式它们压缩率高但是无法实现随机访问且算法复杂。而在引擎中的纹理需要有高效压缩和解压、随机访问、压缩率高质量好的特性因此一般采用块压缩Block Compression的技术比如bxt格式是把图片分为4X4的小格子并且只记录像素最大最小值和各个像素在这两个值之间的插值。「相当于用64位表示原本需要384位(24*16)的16个像素32位用565格式记录2个颜色32位记录每个像素的索引除两个像素颜色外只支持2种插值共4种用10的组合作为索引记录其他颜色丢失」
在PC上常用BC7最新和DXTC格式手机上常用ASTC最新和ETC/PVRTC格式 五Cluster-Based Mesh Pipeline
随着发展玩家在一个场景里对模型精度、细节要求越来越高带来的GPU渲染负荷也增大因此引擎侧逐渐向Cluster-Based Mesh Pipeline方向发展。
管线核心思想将非常精细的模型分为一个个的小Cluster比如64个三角形分一个然后以Cluster为单位进行渲染剔除和深度排序也是基于Cluster bound而不是整个物体。natine就是该思想拓展细分到像素级别想想曲面细分不就是一个三角形分成更多个然后统一渲染吗这也对程序员提出了更高的要求。 总结
游戏引擎的设计与硬件架构密不可分要做好一个图形程序就得了解显卡架构游戏引擎的一个核心问题是Mesh、Materials等数据之间的关系submesh就是一个很好的解决方法大师do nothing—用Culling算法使得引擎绘制尽可能少的东西CPU、GPU做的事越少越好GPU代替CPU计算–GPU Driven