【Unity3D】移动端中的Graphics API与相关扩展——Vulkan、OpenGL ES、DirectX

渲染器

目录

为什么有这篇文章,是因为MuMu模拟器上面的【显卡渲染模式】有两个选项,分别是Vulkan模式和DirectX模式。

说明

这里主要介绍三个渲染器:

  1. Vulkan
  2. DirectX
  3. OPGLES3

应用场景

不同图形学API的特点:

  1. OpenGL ES 3.0:主要关注兼容性和高级渲染特性
  2. Vulkan:侧重性能和跨平台支持
  3. DirectX:表现更好,运行流畅,但是Windows独占
  4. Metal:苹果独占

如何选择图形学API:

  1. 发布Windows应用时,使用DX方案
  2. 发布苹果电脑应用时,使用Metal方案
  3. 发布移动平台应用时,使用OpenGL ES或Vulkan方案
  4. 发布网页应用时,使用WebGL方案

Vulkan

说明

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的兼容性比较好)

优势

  1. 高性能和效率:采用了更高效的架构,CPU开销降低;通过新优化策略提高CPU性能
    • Vulkan是跨平台的(编写一下代码,能在多平台运行)
    • Vulkan具有多线程处理
    • Vulkan允许开发者直接管理GPU内存。
  2. 其他:具有无绑定API、光线追踪。(OpenGL ES没有这些共功能)

扩展

  1. 无绑定API

    理解Vulkan资源绑定(Resource Binding) - 知乎 (zhihu.com)

    • 无需依赖于传统的绑定机制来管理GPU资源(如纹理和缓冲区)。
      • 传统的图形API通常需要将资源绑定在某个特定的“槽”上,以便于GPU可以访问这些资源进行渲染。
      • 绑定机制可能在性能上花费一定的开销,尤其是在需要频繁切换资源的情况。
      • 不同的管线阶段和每种资源类型都有绑定点的数量限制
    • Vulkan无绑定API允许通过描述符直接引用资源,无需显式绑定
    • 如果你在一个渲染帧中使用多个不同的纹理,在传统API中,每次渲染之前都需要绑定相应的纹理。
  2. 低级别控制

    • 低级别并不是指这个渲染器不够高级。XD
    • 低级别的意思是,开发者可以通过该渲染器直接访问和操作硬件资源,如GPU内存、渲染管线和计算资源
      • 可以理解为,降低硬件操作的权限,开发者能够直接访问操作
    • 低级别控制提供了更加灵活和更细粒度的优化能力
  3. Auto Graphics API

    • 如果在Unity的打包设置(Other Settings)中选择Auto Graphics的话,Unity将默认使用Vulkan(安卓平台)。
      • 当设备不支持Vulkan的时候,Unity就会回退到GLES3.2、3.1或3.0。

OpenGL ES

说明

  • OpenGL ES其实是移动端的OpenGL
    • OpenGL ES是OpenGL的一个简化版本,删除了桌面版不常用或计算开销较大的特性。
  • OpenGL ES是一个面向嵌入式系统(移动设备、游戏机、汽车娱乐系统)优化的图形API。主要用于在资源受限的设备上进行2D和3D图形渲染。
  • OpenGL ES同样支持跨平台

优势

  1. 兼容性强。几乎所有的移动设备和游戏主机都支持OpenGL ES
  2. 易移植。OpenGL ES是OpenGL 的简化版本,但仍然保留了许多OpenGL的核心概念和功能,使得OpenGL迁移到OpenGL ES相对简单

DirectX

说明

DirectX是微软开发的一套API,主要用于多媒体和游戏变成,主要应用在Windows平台。

为什么推出DirectX?

  • 早期的时候,游戏安装后并不是直接就可以玩的,比如声音需要进行多种设置(I/O、声卡等)。
  • 这个时候的开发者需要收集市面上所有声卡的硬件数据,然后根据不同的API来写不同的驱动程序。
  • 后来微软为所有厂家推出了一个共同的应用程序接口DirectX,只要是基于DirectX来开发的,不管显卡、声卡型号,统统都能玩。(前提是使用的显卡、声卡的驱动程序必须支持DirectX才行)
  • 总而言之就是为硬件厂商统一了一套标准,方便程序开发。

优势

  1. 多线程支持。允许多个线程同时提交图形指令。
  2. 低级别硬件访问。允许开发者直接控制GPU资源和图形管线。
  3. DirectX通过减少CPU与GPU之间的开销,其性能也比较好。
  4. 虽然没有Vulkan的无绑定API,但是引入了新的资源绑定模型,从而使得资源管理更加灵活高效,减少了状态变更的开销

补充

  • DirectX是Windows平台独占的API(XBox也有)
    • 这里说说独占的好坏处:独占可以使得开发者有针对性地进行深度优化,坏处就是其他系统不支持。
  • 安卓是不支持DirectX的
  • DirectX 9没有低级别控制,所以无法实现复杂的装箱技术。
    • 因为其设计目的是简化开发,而不是提供高性能更多的GPU资源管理

Metal

说明

  • Metal是苹果独占的

补充

  • 苹果系统不止有Metal渲染器,还有OpenGL ES

其他问题

  1. 为什么模拟器上面有Vulkan和DirectX两个选项,该怎么选?

android显卡效果吗,安卓模拟器显卡渲染模式中DirectX和OpenGL两个有什么区别?-CSDN博客

  • DirectX能使模拟器更加流畅,运行速度更快,但是cpu的使用率相对变高,适合单开的场景
  • Vulkan就没有DirectX那么流畅,但是占用的资源少,适合多开的场景
  1. MUMU模拟器上的显卡渲染选项,DirectX有时候会导致渲染出错。
    • DX模式下,模拟器是通过将安卓渲染的API翻译到DX的API,所以有时候可能会出现一些问题
      • 比如可能不支持GPU装箱
      • 抓帧下来的结果可能不对
      • 黑屏等

扩展阅读

  1. 一种基于Metal、Vulkan多线程渲染能力的渲染架构 - 知乎 (zhihu.com)
  • 33
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值