渲染器
目录
为什么有这篇文章,是因为MuMu模拟器上面的【显卡渲染模式】有两个选项,分别是Vulkan模式和DirectX模式。
说明
这里主要介绍三个渲染器:
- Vulkan
- DirectX
- OPGLES3
应用场景
不同图形学API的特点:
- OpenGL ES 3.0:主要关注兼容性和高级渲染特性
- Vulkan:侧重性能和跨平台支持
- DirectX:表现更好,运行流畅,但是Windows独占
- Metal:苹果独占
如何选择图形学API:
- 发布Windows应用时,使用DX方案
- 发布苹果电脑应用时,使用Metal方案
- 发布移动平台应用时,使用OpenGL ES或Vulkan方案
- 发布网页应用时,使用WebGL方案
Vulkan
说明
- Vulkan是用来取代OpenGL ES的,OpenGL ES在Android上仍然支持,但是已经不再进行更新了。
- Android7(API 24)开始的设备就已经支持Vulkan了,所有搭载了Android10(API 29)及以上的设备都支持Vulkan1.1
- 为什么在移动端推荐使用Vulkan?
- 因为在OpenGL ES中进行绘制调用的成本较高,进行大量绘制并使用OpenGL ES的游戏可能会出现大量的驱动程序开销。
- 使用OpenGL ES的游戏可能会遇到CPU性能瓶颈,因为在图形驱动程序中花费大量帧时间而受到CPU限制
- 使用Vulkan渲染器的游戏,其CPU与功耗优势都要高于OpenGL ES,如果场景复杂,无法有效利用实例化来减少DC次数的话,使用Vulkan是更好的选择
- 一些设备可能不支持Vulkan,所以目标平台是一些较老的设备的时候,推荐将OpenGL ES渲染支持作为后备选项(因为OpenGL ES的兼容性比较好)
优势
- 高性能和效率:采用了更高效的架构,CPU开销降低;通过新优化策略提高CPU性能
- Vulkan是跨平台的(编写一下代码,能在多平台运行)
- Vulkan具有多线程处理
- Vulkan允许开发者直接管理GPU内存。
- 其他:具有无绑定API、光线追踪。(OpenGL ES没有这些共功能)
扩展
-
无绑定API
理解Vulkan资源绑定(Resource Binding) - 知乎 (zhihu.com)
- 无需依赖于传统的绑定机制来管理GPU资源(如纹理和缓冲区)。
- 传统的图形API通常需要将资源绑定在某个特定的“槽”上,以便于GPU可以访问这些资源进行渲染。
- 绑定机制可能在性能上花费一定的开销,尤其是在需要频繁切换资源的情况。
- 不同的管线阶段和每种资源类型都有绑定点的数量限制
- Vulkan无绑定API允许通过描述符直接引用资源,无需显式绑定
- 如果你在一个渲染帧中使用多个不同的纹理,在传统API中,每次渲染之前都需要绑定相应的纹理。
- 无需依赖于传统的绑定机制来管理GPU资源(如纹理和缓冲区)。
-
低级别控制
- 低级别并不是指这个渲染器不够高级。XD
- 低级别的意思是,开发者可以通过该渲染器直接访问和操作硬件资源,如GPU内存、渲染管线和计算资源
- 可以理解为,降低硬件操作的权限,开发者能够直接访问操作
- 低级别控制提供了更加灵活和更细粒度的优化能力
-
Auto Graphics API
- 如果在Unity的打包设置(Other Settings)中选择Auto Graphics的话,Unity将默认使用Vulkan(安卓平台)。
- 当设备不支持Vulkan的时候,Unity就会回退到GLES3.2、3.1或3.0。
- 如果在Unity的打包设置(Other Settings)中选择Auto Graphics的话,Unity将默认使用Vulkan(安卓平台)。
OpenGL ES
说明
- OpenGL ES其实是移动端的OpenGL
- OpenGL ES是OpenGL的一个简化版本,删除了桌面版不常用或计算开销较大的特性。
- OpenGL ES是一个面向嵌入式系统(移动设备、游戏机、汽车娱乐系统)优化的图形API。主要用于在资源受限的设备上进行2D和3D图形渲染。
- OpenGL ES同样支持跨平台
优势
- 兼容性强。几乎所有的移动设备和游戏主机都支持OpenGL ES
- 易移植。OpenGL ES是OpenGL 的简化版本,但仍然保留了许多OpenGL的核心概念和功能,使得OpenGL迁移到OpenGL ES相对简单
DirectX
说明
DirectX是微软开发的一套API,主要用于多媒体和游戏变成,主要应用在Windows平台。
为什么推出DirectX?
- 早期的时候,游戏安装后并不是直接就可以玩的,比如声音需要进行多种设置(I/O、声卡等)。
- 这个时候的开发者需要收集市面上所有声卡的硬件数据,然后根据不同的API来写不同的驱动程序。
- 后来微软为所有厂家推出了一个共同的应用程序接口DirectX,只要是基于DirectX来开发的,不管显卡、声卡型号,统统都能玩。(前提是使用的显卡、声卡的驱动程序必须支持DirectX才行)
- 总而言之就是为硬件厂商统一了一套标准,方便程序开发。
优势
- 多线程支持。允许多个线程同时提交图形指令。
- 低级别硬件访问。允许开发者直接控制GPU资源和图形管线。
- DirectX通过减少CPU与GPU之间的开销,其性能也比较好。
- 虽然没有Vulkan的无绑定API,但是引入了新的资源绑定模型,从而使得资源管理更加灵活高效,减少了状态变更的开销
补充
- DirectX是Windows平台独占的API(XBox也有)
- 这里说说独占的好坏处:独占可以使得开发者有针对性地进行深度优化,坏处就是其他系统不支持。
- 安卓是不支持DirectX的
- DirectX 9没有低级别控制,所以无法实现复杂的装箱技术。
- 因为其设计目的是简化开发,而不是提供高性能更多的GPU资源管理
Metal
说明
- Metal是苹果独占的
补充
- 苹果系统不止有Metal渲染器,还有OpenGL ES
其他问题
- 为什么模拟器上面有Vulkan和DirectX两个选项,该怎么选?
android显卡效果吗,安卓模拟器显卡渲染模式中DirectX和OpenGL两个有什么区别?-CSDN博客
- DirectX能使模拟器更加流畅,运行速度更快,但是cpu的使用率相对变高,适合单开的场景
- Vulkan就没有DirectX那么流畅,但是占用的资源少,适合多开的场景
- MUMU模拟器上的显卡渲染选项,DirectX有时候会导致渲染出错。
- DX模式下,模拟器是通过将安卓渲染的API翻译到DX的API,所以有时候可能会出现一些问题
- 比如可能不支持GPU装箱
- 抓帧下来的结果可能不对
- 黑屏等
- DX模式下,模拟器是通过将安卓渲染的API翻译到DX的API,所以有时候可能会出现一些问题