IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 移动应用程序3D美术优化 -> 正文阅读

[游戏开发]移动应用程序3D美术优化

原教程地址(涵盖Unity官方的示例demo)
该课程专为技美和内容创作者制作(特为程序员写此篇,哈哈)

一、为什么要进行优化?

对游戏性能分析和优化可以给玩家带来更好的体验。
优化过程步骤:
1.性能分析;工具:Unity内置的Profiler、Frame Debugger。教程推荐的Arm Streamline。
2.分析数据;
3.应用优化;
4.验证优化;
5.重复上述步骤。

二、针对几何体进行优化

几何体(多边形网格)是构成3D对象点(vertices)、线(edges)、面(triangles)的集合。
Unity中网格索引缓冲区的格式决定3D对象可以使用的最大顶点数:
1.16位最多支持65535个;
2.32位最多支持40亿个。

  • 尽可能在实际发布设备上查看或测试应用程序。移动设备屏幕小于计算机的屏幕,因此看不到大量三角形的使用细节(模型制作时,针对移动端适当减少模型面数和顶点数)。
  • 根据与摄像机的距离,制作不同精度的模型,较远端的模型甚至可以使用烘培贴图替代。
  • 重要部位的细节处理可以使用更多的三角形,不常显示的区域则使用较少的三角形。
  • 使用纹理和发现贴图实现精细的细节,而不是用高密度三角形网格建模。

三、使用LOD进行优化

Level of Detail,可以根据对象与摄像机的距离控制场景中3D对象渲染的顶点数量。
使用建议:
1.减少三角形数量时,要衡量细节与性能;
2.Mipmap可与模型配合使用;
3.在平坦区域移除更多多边形;
4.不仅网格,也可作用于优化纹理和着色器;
5.静态对象或较少多边形对象不应使用LOD。

创建LOD网格,有3ds Max的ProOptimizer、Maya的Generate LOD Meshes;Unity自带的LOD Group;插件AutoLOD。

官方教程demo可详细查看with LOD和 no LOD两种情况下的各种数据情况。

四、针对网格进行优化

  • 使用平滑组或自定义顶点法线定义边缘的硬度和改变模型的外观。
  • 使用网格拓扑创建3D资源。
  • 适度夸大对象某些部位提高其可见性。
  • 使用Mesh.CombineMeshes()将多个网格合并成一个,减少渲染绘制次数。相同材质则设置mergeSubMeshes为true。
  • 导入不包含动画数据的fbx网格时,将Animation Type设置为None,确保不会生成Animator组件。
  • 未在运行时修改的模型,不要打开Read/Write Enabled,以免在内存中保留网格数据副本。
  • 静态/动态批处理。

五、针对纹理进行优化

纹理是3D模型表面的图像,赋予模型细节和真实性。

  • 推荐使用包含许多网格共享的多个纹理的大型纹理图集。
  • 较粗糙的可以适当减小纹理大小。
  • 纹理不作为颜色信息使用就不要使用sRGB颜色空间,会导致材质出现错误视觉效果。
  • 针对Android的纹理压缩多个选项:ASTC(自适应可伸缩纹理压缩)、ETC1/ETC2(Ericsson纹理压缩),推荐使用Arm开发的ASTC,必须要快速部署游戏则使用ETC。
  • 合理的选用纹理过滤组合。
  • UV展开保持笔直,可以获得更好的质量。
  • 将UV接缝放在可遮挡住的地方。
  • 创建纹理只包含可以看到的细节。
  • 将多个纹理打包成一个纹理可以节省内存。
  • 使用闲置通道存储Alpha遮罩可将漫反射纹理保持为16位,减小文件大小。
  • ASTC压缩可减少内存,降低GPU带宽需求。

六、针对着色器进行优化

创建着色器时,你可以决定材质将如何对光做出反应。大多数着色器可归类位光照着色器和五光照着色器。

  • 光照不影响无光照着色模型。渲染成本更低,或者渲染更快。
  • 卡通风美术设计可与五光照着色良好配合。
  • 光照着色器可能是当今移动游戏中最常用的着色模型。
  • 尽可能使用最简单的着色器,避免使用不必要的功能。
  • 使用转为粒子设计的Unity内置着色器。
  • 减少游戏中粒子数量/大小,减少过度绘制。
  • 尽量减少速度较慢的数学运算。
  • 使用urp的SRP Batcher。

七、针对材质进行优化

渲染具有透明度的对象总是会使用更多的GPU资源,在移动平台上,尽可能使用不透明材质。

Alpha测试和Alpha混合时最常用的在着色器中实现透明度的方法。
Alpha测试使材质完全不透明或完全透明,它会禁用GPU中某些优化功能,因此不必要时尽量避免使用Alpha测试。
Alpha混合使材质具有一定范围的透明度。对于移动平台,Unity推荐使用Alpha混合。

八、针对光照进行优化

1)烘培光照(baked)
运行游戏前将光照数据存储在纹理贴图中的过程就是烘培。

  • 光照和阴影被烘培到光照贴图,因此在运行时无法修改。但此处理在创建光照时完成,不影响运行时性能。
  • 如果游戏中有动态或移动对象,阴影可能会显得很奇怪。
  • 烘培光照模式是这三种中计算成本最低的方法。

2)混合光照(mixed)
混合光照模式可以视为烘培光照和实时光照的混合体。

  • 提供动态的直接光照和阴影。
  • 混合光照类型的光源可以参与静态物体的光照贴图烘培过程。
  • 光源会影响动态物体,包括为其生成阴影。
  • 可在运行时更改强度,并且仅更新直接光照。
  • 混合光照模式是一种代价高昂的计算方法。

3)实时光照(real-time)

  • 实时光照模式提供动态或可移动的光照,可在运行时修改。
  • 实时光照模式是这三种中计算成本最高的方式。
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-08-16 12:04:02  更:2021-08-16 12:04:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 18:15:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码