目录

返回至教程第 3 部分:

不必要的高分辨率纹理很容易成为移动游戏中的瓶颈,造成硬件效率降低。

因此,您不仅需要确认场景中所用纹理是否采用压缩格式,而且还需要核实您已经选中 Generate Mip Maps 复选框,以支持 MIP

贴图处理。 除纹理分辨率之外,MIP 贴图处理类似于之前讨论的 LOD 系统。如果您绘制的任何对象距离摄像头太远,那么不必使用 1024 x

1024 纹理获取其细节,因为该对象可能只有几个像素。

图 44.在选定纹理的 Inspector 选项卡上压缩纹理和生成 MIP

您可在 GPA 中进行帧捕获,并查看Texture选项卡了解您想要调查的绘制调用,以确认纹理得到压缩,且生成了 MIP。需要注意的是,生成 MIP 贴图将产生更多数据,因此实际上在有些情况下会导致性能下降。请您一如既往地在应用中确认这一选项。

图 45.在帧分析器中查看纹理的第 4 MIP 层和格式。

当您在移动应用中使用存储着色器时,需要切换至 Unity 提供的移动版副本,以确保使用精确度较低的浮点值和移动特定优化。 选择您的材料,并在下拉菜单中找到 Mobile 部分,以在应用中进行试用(图 41)。

图 46.Unity 中的存储着色器

批处理将着色相似的几何图形整合至单绘制调用中。这能够减少通常额外调用造成的驱动程序开销。 您可通过选择 File->Build

Settings>Player Settings 并勾选所列“Static Batching”选项打开静态批处理。Unity

现默认支持这些设置。

图 47.Other Settings 中 Rendering 下的 Static Batching 和 Dynamic Batching 复选框

对于所有不会迁移的游戏对象,勾选静态复选框。这可支持将静态批处理功能用于共享一种材料的多个相似对象。

图 48.基于对象的批处理勾选

确保您使用 Renderer.sharedMaterial,而非 Renderer.material,以保证材料共享。

尽可能地将同一材料所用的多个纹理(漫射、凹凸高光等)整合至一个纹理图集中,以增加批处理对象的数量。

大多数时候,静态批处理可为您的应用提供巨大优势,但在有些情况下最好不要使用它。

如果您需要减少内存使用,那么最好不要使用静态批处理。

事实上,共享几何数据的对象必须将各个实例顶点/索引数据的副本整合至绘制调用的顶点和索引缓冲区内。 Unity

举例说明了静态批处理在密林场景中可能出现问题的情形。在这种极端环境中,您需要在发出调用之前,将所有使用相同材料的树木整合至相应缓冲区中,但这可能

导致性能问题。

动态批处理虽与静态批处理的概念相同,但主要针对动态对象(可移动对象)进行绘制调用批处理。

动态批处理仅适用于总顶点属性低于 900 的对象(可能随时更改)。

接收实时阴影的对象将无法进行批处理。

如果您使用延迟渲染技术获得了具有 HDR 效果的场景(例如爆炸和燃烧),那么通过勾选 Camera 设置中的 HDR

选框,您将发现绘制调用大幅减少。 需要注意的是,每个摄像头都有其自己的 HDR 复选框。 在使用带有延迟渲染的 DirectX 10

或更高版本时,最好使用 HDR。 HDR 与片段着色器之间有着最紧密的关联。 如果您想要使用 HDR 效果,那么请遵循以下准则:

使用延迟渲染

针对需要 HDR 产生效果的各摄像头,勾选 HDR 选框(图 44)

图 49.Camera 设置中的 HDR 选项

为您的应用选择最佳渲染路径在很大程度上依赖于您想要完成什么工作。以下内容简要概述了 Unity

提供的各个渲染路径及其优劣。希望通过这些信息,您能够了解根据您项目的具体情况,您应选择哪种路径,但与其余这些优化一样,始终需要对各个选项进行测

试! 了解哪种渲染路径最适合您的游戏的绝佳方式是使用代码编写一个开关。您只需按下开关按钮即可改变渲染路径,然后通过 Unity 分析器和 GPA

实时观察每个路径的效果。

顶点光照渲染

图 50.通过顶点光照路径渲染的场景最终渲染目标

优点

仅按照每顶点,而非每像素,进行照明计算

将对带有 1024 个顶点的模型(覆盖 4k 显示器的整个全屏窗口)进行照明计算:

使用每顶点照明方法,计算 1024 次

使用每像素照明方法,计算 8294400 次

可显著提高移动性能

简化分析。在基础通道中完成一切。

缺点

不支持实时阴影及其他每像素效果

低质量照明(图……)

图 51.顶点光照渲染路径细分(全部在基础通道中)

正向渲染

图 52.通过正向路径渲染的场景最终渲染目标

优点

通过每像素、每顶点及球谐技巧组合完成照明

支持实时阴影及其他每像素效果

不会因需要在延迟路径中构建图形缓冲区而产生内存成本

缺点

如果不注意的话,将造成许多涵盖相同像素的绘制调用

通道细分

基础通道

首先,为最亮的平行光保留每像素光线。

然后,绘制最多另外 3 条标记为重要的每像素光线。 如果没有标记为重要的光线,那么选择场景中的其次最亮的 3

条。如果有更多标记为重要的光线,超过了 Project->Quality 中的“per-pixel light

count”设置值,那么这些在其他通道中完成。

接下来,每顶点渲染最多 4 条光线。

最后,使用球谐计算绘制剩余光线(始终计算这些值,因此本质上在 GPU 上不固定)。

每像素照明通道

适用于基础通道处理后所剩各条每像素光线的另一通道。

半透明对象通道

适用于半透明对象的另一通道。

图 53.通过正向路径渲染的场景最终渲染目标

延迟着色

图 54.通过延迟路径渲染的场景最终渲染目标

优点

照明效果与场景复杂度无关

用很有可能受到内存限制的更高内存使用量换取大量照明计算 (FLOPS)

支持实时阴影和每像素效果

缺点

不直接支持半透明渲染。 这些对象可通过一条额外的正向通道进行绘制

因构建图形缓冲区而造成内存使用量提高

不支持抗锯齿

不支持网格渲染器的接收阴影标记

通道细分

图形缓冲区通道

渲染所有不透明的对象,以构建图形缓冲区。布局如下:

渲染目标 0: ARGB32 – RGB 通道中的漫射颜色和阿尔法通道中的遮挡数据

渲染目标 1: ARGB32 – RGB 通道中的高光颜色和阿尔法通道中的粗糙度

渲染目标 2: ARGB2101010 – RGB 通道中世界空间是常态,阿尔法通道未使用

渲染目标 3: ARGB32(非 HDR)或 ARGBHalf (HDR) – 发射、照明、光照映射及反射探测缓冲区

深度及模板缓冲区

照明通道

使用图形缓冲区通道生成的纹理进行每像素照明计算。 Unity 将对几何包围盒进行 Z 测试,支持轻松检测遮挡/部分遮挡光线。

通过保存漫射照明值的 RGB 通道产生纹理,阿尔法通道包含高光单色。

光线应用通道

最后的通道再次绘制所有对象,使用照明通道生成的纹理将照明应用到每个对象。

半透明对象通道

需要额外的正向通道。

图 55.通过延迟路径渲染的场景最终渲染目标

如前所述,正向渲染路径将根据编辑器质量设置部分下显示的“Per-Pixel Light Count”设置,对影响您几何图形的各条光线发出额外的绘制调用。标记为重要的光线将首先用在这些调用中,但如果没有重要标记光线,那么 Unity 将选择其次最亮的光线。 在有些情况下,这可能造成大量不必要的开销,尤其是可选择合并光线时。以下 GPA 捕获截图显示了基础绘制及另外 3 种颜色。如果需要避免以下情况,最好合并光线或在质量设置中减少每像素光线数量。

图 56.GPA 捕获显示描绘这一占用 55.3% 的场景 GPU 持续时间的地面需要 4 个绘制调用。

图 57.对于绿、红、蓝光线所需的额外正向通道,查看 GPA 中的颜色缓冲区。

最新 Unity 版本能够产生一个胖二进制,或将该二进制拆分成单独的 ARM 和 x86 部分。 您可使用同一流程选择 x86 或 ARM,以测试部署的各个方面。 评估压缩、代码及其他细节支持您排除故障,甚至对您的构建项目进行基准测试。

构建 FAT APK 不会显著增加二进制大小。 您只需选择 x86 或 ARMv7 即可构建瘦二进制;但必须维持 2 个单独的构建项目。

在 Player 设置中 (File>Build Settings > Player Settings):

打开/扩展其他设置

在 Configuration 中,找到 Device Filter 并选择: FAT (ARMv7+X86)。 参见图 51。

图 58.Other Settings 中的 Configuration。 Device Filter 中所示 3 个选项。

选择构建(在 Build Settings 界面上),开始创建选定二进制的流程。

就这么简单! 您现可在 Unity Android 游戏部署中支持 x86。

面向 Unity x86 开发人员的页面现已上线:www.intel.com/software/unity,点击获取更多支持。

优化工作本身有助于提高您图形密集型游戏的性能。以上技巧的组合可帮助您大展拳脚。使用这些工具能够让您获得更深入的了解,并进一步作出调整。

unity android x86,Unity3d面向英特尔 x86 平台的 Unity* 优化指南: 第 4 部分相关推荐

  1. Unity3d面向英特尔® x86 平台的 Unity* 优化指南: 第 3 部分

    目录 编辑器优化 遮挡剔除 LOD:细节级别 阴影 使用一个摄像头 渲染队列排序 光照贴图 针对复杂模型,使用简单的碰撞器代替网格碰撞器 返回至第 2 部分教程: 面向英特尔® x86 平台的 Uni ...

  2. Unity3d面向英特尔 x86 平台的 Unity* 优化指南: 第 2 部分

    目录 优化 脚本优化 脚本视锥剔除和协同例程 智能内存管理 缓存频繁使用的对象和组件 使用 Unity 物理系统的最佳实践 禁用完全透明对象 返回至教程第 1 部分: 面向英特尔 x86 平台的 Un ...

  3. 面向 Android* Jelly Bean 的英特尔® 凌动™ x86 映像安装说明 — 推荐

    介绍 本文介绍了如何安装面向 Android* Jelly Bean 的英特尔® 凌动™ x86 映像,可用于开发英特尔 x86 架构. 前提条件 Android x86 模拟器映像要求安装 Andr ...

  4. 需要编写支持英特尔 x86 的 Android* 游戏应用? 此处的样本可为您提供帮助!

    作者:Tao Wang 随着越来越多搭载 Intel Inside ® 的智能手机在全球范围内普及以及英特尔安卓系统映像(Ginger Bread.ICS 以及 Jelly Bean 4.1 和 4. ...

  5. 在英特尔® 架构平台上开发和优化基于 NDK 的 Android 游戏应用

    作者:杜伟 Android 原生开发套件 (NDK) 是 Android SDK 的附带工具.借助该工具,您可以使用诸如 C 和 C++ 等本地代码语言实现部分应用. 您可以从以下网址下载该 NDK ...

  6. 为Android运行新的英特尔模拟器

    本文翻译自:Running the new Intel emulator for Android Lately Google and Intel have published a new way to ...

  7. 苹果 M1带起ARM,英特尔 x86 霸主地位遭威胁

    整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 提问:今年双十一你"剁手"-不是,你知道是什么日子吗?答:苹果 M1 一周年了! 还记得去年 11 月 11 日,苹 ...

  8. 有了性能超92%笔记本电脑的A12X Bionic,苹果可以和英特尔x86处理器分手了?

    继九月的iPhone XS发布会之后,苹果在10月30日又举行了一场发布会,更新了许久没有更新的产品,比如Macbook Air和Mac mini.当然也发布了新一代iPad Pro,除了外观屏幕的变 ...

  9. 怎么禁用计算机的可信执行,英特尔®融合安全和管理引擎、英特尔®服务器平台服务、英特尔®可信执行引擎和英特尔®主动管理技术咨询 (intela-sa-00185)...

    你能给我一个英特尔 sa-00185 的简短摘要吗? 英特尔®融合安全和管理引擎 (英特尔®csc).英特尔®服务器平台服务(英特尔®sms).英特尔® 可信执行引擎 和英特尔®主动管理中的多个潜在安 ...

最新文章

  1. 黑马程序员的课程不如兄弟连兄弟会好
  2. Cracking Wifi Wpa-Wpa2 in 5 second——Dumpper V.80.8 +JumpStart+WinPcap
  3. 凹入表形式打印树形结构_【树形立方体】立方体有哪些特性?
  4. python的加减乘除运算_python实现四则运算
  5. c语言编写劫持dll,c语言-----劫持自己02
  6. mysql mof提权原理_[原创]WEB安全第六章提权篇12 mof提权
  7. 他人笑我太疯癫 我笑他人看不穿
  8. 关系抽取---(三)基于文本的卷积神经网络(Text-CNN)的关系抽取
  9. ●POJ 1228 Grandpas Estate
  10. 关键路径例题图解_图解!九大常见数据结构被24张图给安排的明明白白
  11. Java开发需要的官方文档
  12. 基于51单片机的密码锁设计
  13. 网页背景音乐播放器html代码
  14. mysql数据库约束和默认
  15. 哔哩哔哩谷歌浏览器助手Mac版分享来了
  16. 34.ADC基本原理与配置
  17. 特殊教育学校计算机教学计划,2017年特殊教育学校教学计划
  18. C++ TCP 网络编程与数据通信
  19. Notepad++文本比较
  20. 苹果手机如何关闭自动续费_手机APP会员自动续费怎么办?教你一招快速关闭!...

热门文章

  1. 为何人工智能用Python这门编程语言?
  2. 自定义闪屏页广告倒计时view
  3. centos7Squid 代理服务器(传统代理)
  4. 一个简单问题,Java里,如何得到一个月有多少天???
  5. JOHNSON计数器,环形计数器,普通计数器
  6. Xposed模块开发入门,实现修改微信钱包显示的余额
  7. 服务器禁用账号登录,服务器如何防止被爆破账号密码
  8. python模块之HTMLParser简介
  9. decode() missing 1 required positional arguement: 'output'
  10. Code Clinic: Python 代码诊所:Python Lynda课程中文字幕