6.OtherSettings-Rendering 其他设置-渲染

6.Unity打包安卓-设置相关-OtherSettings-渲染


6.1 知识点

Color Space 色彩空间(重要)

Color Space 色彩空间可以在此切换 Unity 中用于渲染的色彩空间 Gamman(伽马)和 Linear(线性)。

区别:

纹理倾向于保存在伽马颜色空间中,而着色器期望使用线性颜色空间。因此,在着色器中对纹理进行采样时,基于伽马的值会导致不准确的结果。我们可以选择线性色彩空间,然后通过纹理中的 sRGB 选项决定是用伽马还是线性,勾选 sRGB 是伽马,取消勾选是线性。

如何选择:

线性渲染的效果相对较好一些,但并不是所有平台都支持线性渲染。支持的平台为:Android、iOS、WebGL、Windows、Mac OS X 、Linux。当设备不支持线性渲染时,不会退回到伽马控件,而是自动退出。在 Android 上,线性渲染至少需要 OpenGL ES 3.0 图形 API 和 Android 4.3。在 iOS 上,线性渲染需要 Metal 图形 API。在 WebGL 上,线性渲染至少需要 WebGL 2.0 图形 API。确定你的应用程序运行的主流设备是否支持,如果支持则选择线性,不支持选择伽马。

参考链接:

Unity 文档 - 线性光照

图示参考:



什么是 Vulkan?(重要)

Vulkan 是一个跨平台的 2D 和 3D 绘图应用程序接口。在 2015 年游戏开发者大会(GDC)上发表。是 OpenGL 的下一代版本,旨在提供更低的 CPU 开销与更直接的 GPU 控制。

Auto Graphics API(重要)

自动图形接口(建议选择自动)。

勾选:

Unity 会自动尝试使用对应图形 API 接口进行图形处理。默认使用 Vulkan,如果设备不支持 Vulkan,Unity 会退到 GLES3.2、GLES3.1 或 GLES3.0。

不勾选:

可以列表中自己对使用的图形 API 接口进行排序,设置使用优先级。

下方的副选项 ES3.1、ES3.1+AEP、ES3.2 是三个额外的用于配置最低 OpenGL ES 3.X 次要版本的:

  • Require ES3.1: 要求使用 ES3.1
  • Require ES3.1 + AEP: 要求使用 ES3.1 + AEP
  • Require ES3.2: 要求使用 ES3.2

注意:

只有当 GLES2 不在列表中时,Unity 才会讲额外的三个选项要求添加到 Android 应用清单中,在这种情况下,如果你的应用发布到 Google Play 应用商店,它将不会显示在不受支持的设备上。

Color Gamut

色域可以添加或删除 Android 平台用于渲染的色域。色域定义了可用于给定设备(如监视器或屏幕)的可能颜色范围。sRGB 色域是默认(也是必需的)色域。当定位具有宽色域显示的设备时,请使用 DisplayP3 来利用完整的显示功能。

一般的手机使用 sRGB 即可,如果是 PC 主机游戏,可以考虑添加 DisplayP3。

Multithreaded Rendering(重要)

多线程渲染。启用此选项可将图形 API 调用从 Unity 的主线程移动到单独的工作线程。这有助于提高主线程上 CPU 使用率较高的应用程序的性能。

Static Batching(重要)

静态批处理会将静态物体合并处理DC,提升性能。

Dynamic Batching(重要)

动态批处理可以动态的合并DC,提高性能。当可编程渲染管线(SPR)处于活动状态时,也就是启用了URP或者HDRP时,动态批处理

不起作用。在使用FairyGUI时,就需要开启它,FairyGUI的DC将得到优化。

Compute Skinning(重要)

计算蒙皮。启用此选项可启用 DX11/ES3 GPU 计算蒙皮,从而释放 CPU 资源。图形接口的版本要求较高,PC上DX11、移动设备ES3。

Graphics Jobs (Experimental)

图形作业。启用后,Unity 将渲染循环的图形任务移到其它 CPU 内核上运行的工作线程,可以减少在主线程上花费的时间。

Texture Compression Format(重要)

纹理压缩格式可以在 ASTC、ETC2、ETC 之间进行选择。

Normal Map Encoding(重要)

法线地图编码。选择 XYZ 或 DXT5nm 样式以设置法线映射编码。这会影响用于法线贴图的编码方案和压缩格式。DXT5nm 样式的法线贴图质量更高,但在着色器中解码成本更高。

Lightmap Encoding(重要)

光照贴图编码。选择“正常质量”或“高质量”以设置光照贴图编码。此设置会影响光照贴图的编码方案和压缩格式。

Lightmap Streaming(重要)

光照贴图流。是否对光照贴图使用 Mipmap 流式处理。

Streaming Priority

设置 Mipmap 流式处理系统中所有光照贴图的优先级。Unity 在生成光照贴图时会将此设置应用于所有光照贴图。正数表示更高的优先级。有效值范围为 –128 到 127。

Frame Timing Stats

帧时序统计。启用此属性可收集 CPU 和 GPU 帧时间统计信息。需要和摄像机上的动态分辨率设置结合使用(Camera 组件下的 Allow Dynamic Resolution 选项),以确定应用程序是受 CPU 还是 GPU 限制。

OpenGL: Profiler GPU Recorders

是否启用 OpenGL 的探查 GPU 记录器。在 OpenGL 上,探查 GPU 记录器 会 禁用 GPU 探查器。

Virtual Texturing

虚拟纹理。可在场景中具有很多高分辨率纹理时减少 GPU 内存使用量和纹理加载时间。它将纹理拆分为瓦片,然后在需要时将这些瓦片逐步上传到 GPU 内存中。注意:虚拟纹理和安卓设备不兼容。

Shader Precision Model

着色器精度模型。控制着色器中使用的采样器的默认精度。

360 Stereo Capture

360 度立体捕捉。Unity 是否可以捕获立体 360 度全景图像和视频。注意:360 度立体捕捉与 Android 不兼容。


6.2 计算机图形程序接口

计算机图形程序接口概述

计算机图形程序接口(Graphics API)对于游戏开发程序员来说是非常重要的知识,是学习图形学时必不可少的内容。

计算机图形程序接口是一套可编程的开放标准,不管做2D还是3D游戏都需要这部分的底层API支持。

它本质上是软件,并不是硬件,是前辈们提前为你写好的调用系统硬件(GPU)绘制图形的代码。我们甚至可以把它简单理解成是显卡厂商定义的一系列的底层的进行图形操作的加速API接口。

Unity程序员必了解的图形程序接口

OpenGL(Open Graphics Library)

中文翻译过来是开放图形库,它定义了一个跨平台、跨语言的编程接口规格的专业图形程序接口,可以用于3D、2D图形渲染,是一个功能强大、调用方便的底层图形库。由于它跨平台、跨语言、出现时间早,因此它的应用极其广泛!

OpenGL ES(OpenGL for Embedded Systems)

中文翻译过来是用于嵌入式系统的开放图形库,它是OpenGL的子级,主要针对手机、游戏主机等嵌入式设备而设计,免授权费、跨平台、功能完善。

GLES2.0、GLES3.0 指的就是OpenGL ES这套标准,他们也是Android和IOS手机上常用的图形处理标准。

Unity在移动平台进行图形渲染处理时,就包含了OpenGL ES方案

Vulkan

“下一代”开放的图形显示API,是与DX12能够匹敌的GPU API标准。它有一套最新的图形加速API接口,目标是提供更灵活和丰富的底层操作接口,以替代OpenGL 和 OpenGL ES接口,可以把Vulkan看做是OpenGL的升级版,目前新版本的Unity支持使用Vulkan方案。

Directx(Direct eXtension)

中文翻译过来是直接拓展,简称DX。它是由微软公司创建的多媒体编程接口。它不跨平台,只针对微软的相关产品,被广泛使用于Windows操作系统、xBox游戏主机的图形应用程序开发中。

其中的D3D算是DX一部分,是对标OpenGL的图形程序接口

WebGL(Web Graphics Library)

中文翻译过来是网页图形库,它是针对Web端(网页)的3D绘图协议,这个标准允许把JavaScript和OpenGL ES 2.0结合在一起,网页开发人员可以借助系统显卡在浏览器里流畅的展示3D场景和模型,可以在网页里进行3D图形开发。

Metal

中文翻译过来是金属,它是苹果公司为游戏开发者提供的图形技术,该技术能够为3D图像提高10倍渲染性能,但是它不支持跨平台,主要针对IOS、macOS苹果自家的操作系统,只有苹果手机、电脑能够使用。

对于我们的意义

了解这些图形程序接口的基本概念对我们有什么意义呢?

我们从他们的简单介绍中需要知道,他们主要支持的平台为

  • Windows电脑:DX、OpenGL、Vulkan
  • 苹果电脑:Metal、OpenGL、Vulkan
  • 安卓手机:OpenGL ES、Vulkan
  • 苹果手机:OpenGL ES、Vulkan、Metal
  • 网站网页:Web GL

如果不通过游戏引擎,我们想要在这些平台上开发游戏,那么就必须要针对不同平台学习对应的图形程序接口相关的知识。你会发现OpenGL的身影在各主流平台中都占有一席之地,由于它出现早、跨平台、跨语言,所以也是为什么在学习计算机图形学时,OpenGL是必学的内容。

我们现在使用游戏引擎开发游戏,在绝大多数情况下,不需要直接和图形程序接口打交道,但是我们在Unity当中发布应用程序时,经常会看到和他们相关的一些设置,你必须要了解了他们的基本概念,才能清楚我们在设置什么。

因此本篇文章的主要作用就是让你了解他们,并且可以为你指明学习计算机图形学时的一些学习方向。

你还需要知道的是,这些图形程序接口还有不同的版本,比如DX10、DX11、DX12,比如OpenGL ES 2.0、OpenGL ES 3.0。不同的设备、不同的操作系统他们支持的版本也是不同的。比如我们进行手机游戏开发时,我们可以去查询主流移动设备支持的图形程序接口的版本,来决定在发布时,对于图形程序接口版本的兼容选择。这样才能保证我们发布的应用程序能够支持更多的移动设备。

总结

对于Unity来说,它针对你发布的不同平台,会进行图形程序

接口方案的切换

比如:

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

我们不需要掌握对应图形程序接口方案的相关知识,也能利用Unity进行游戏开发,因为引擎已经把图形渲染的核心内容封装起来,不需要我们直接操作他们。

但是长远考虑,随着你的能力提升,计算机图形学还是游戏开发程序员的必学知识,他可以帮助你理解渲染相关的原理,让你升职加薪,走得更远。



转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏