什么是Draw Call?为什么Draw Call 多了会影响帧率?
demi 在 周三, 10/23/2019 - 09:52 提交
Draw Call 本身的含义很简单,就是CPU调用图像编程接口,如OpenGL 中的glDrawElements 命令或者DirectX 中的DrawlndexedPrimitive命令,以命令GPU 进行渲染的操作。
GPU渲染是一种利用图形处理器(GPU)来生成图像的技术。相比于传统的中央处理器(CPU)渲染,GPU渲染能够并行处理大量的计算任务,使得图像渲染速度更快、更高效。它被广泛应用于游戏开发、动画制作、虚拟现实以及科学可视化等领域,通过硬件加速实现复杂的图形和视觉效果。
Draw Call 本身的含义很简单,就是CPU调用图像编程接口,如OpenGL 中的glDrawElements 命令或者DirectX 中的DrawlndexedPrimitive命令,以命令GPU 进行渲染的操作。
TBDR是现代移动端gpu的设计架构,它同传统pc上IR架构的gpu在硬件设计上是差别很大的。手游正是运行在这些移动端的TBDR架构上,所以手游的渲染优化在硬件的角度上讲有其独特之处,甚至一些特点和优化点与PC是大相径庭的,基于硬件的优化是应用程序优化很重要的一部分,最近阅读了一些tbdr的硬件设计的文档,本文试图对TBDR的特点做些介绍并基于这些特点的优化做个简单的总结。
相信很多机友在“开发人员选项”设置里都见到了“强制进行GPU渲染(在应用程序中使用2D硬件加速)”这个功能,很显然GPU是显卡的意思,那么这个功能具体有什么作用呢?开启之后有什么好处呢?一起来一探究竟吧!
渲染流水线可以分为三个概念性阶段:应用阶段,几何阶段,光栅化阶段。游戏场景中的物体渲染都是基于可编程流水线实现的,其实就是把绘制的3D物体通过可编程流水线绘制在2D的屏幕上的过程。渲染简单的理解可能可以是这样:就是将三维物体或三维场景的描述转化为一幅二维图像,生成的二维图像能很好的反应三维物体或三维场景.
GPU流水线主要分为两个阶段:几何阶段和光栅化阶段
几何阶段
顶点着色器 ——> 曲面细分着色器(可选)----->几何着色器(可选)----->裁剪——>屏幕映射
顶点着色器
流水线的第一个阶段,输入来自于CPU,处理的基本单位为单个顶点,输入的每个顶点都会调用一次顶点着色器。
主要工作是:坐标变换(比如改变顶点位置模拟水面、布料等)和逐顶点光照,并输出后续阶段需要的数据(常见的输出路径是经光栅化后交给片元着色器处理)。
曲面着色器
一个可选的着色器,用于细分图元。
几何着色器
用于执行逐图元操作,或者用于产生更多的图元
裁剪
将不在摄像机视野的顶点裁剪掉,并剔除某些三角图元的面片(主要处理一部分在视野内另一部分在视野外的图元。
GPU的渲染流水线的主要任务是完成3D模型到图像的渲染(render)工作。常用的图形学API编程模型中的渲染过程被分为几个可以并行处理的阶段,分别由GPU中渲染流水线的不同单元进行处理。GPU输入的模型是数据结构(或语言)定义的对三维物体的描述,包括几何、方向、物体表面材质以及光源所在位置等;而GPU输出的图像则是从观察点对3D场景观测到的二维图像。在GPU渲染流水线的不同阶段,需要处理的对象分别是顶点(vertex)、几何图元(primitive)、片元(fragment)、像素(pixel)。
如图1-6所示,典型的渲染过程可以分为以下几个阶段:
1.顶点生成
图形学API用简单的图元(点、线、三角形)表示物体表面。每个顶点除了(x,y,z)三维坐标属性外还有应用程序自定义属性,例如位置、颜色、标准向量等。
2.顶点处理
GPU渲染机制:
CPU 计算好显示内容提交到 GPU,GPU 渲染完成后将渲染结果放入帧缓冲区,随后视频控制器会按照 VSync 信号逐行读取帧缓冲区的数据,经过可能的数模转换传递给显示器显示。
GPU屏幕渲染有以下两种方式: