游戏开发44课 性能优化3

news2024/9/22 17:29:35

 

2.4 模型

模型特别是带有骨骼动画的模型在性能消耗中占据非常大的比重,它们会显著增加CPU/GPU/内存/显存的负担。所以,模型的优化尤为重要。模型涉及的数据比较多,包含了顶点/索引/材质等,而顶点又可能包含pos/color/uv/normal/tagent/skin等数据,我们可以从这些数据着手优化。

上图的模型顶点包含了pos/color/uv/normal/skin等数据。

2.4.1 模型数据

  • 模型的顶点数据通常包含pos/uv,但color/normal/skin等数据视不同类型的物件区分对待。比如,对于静态物体,可以去除skin;如果无需顶点变色,则可以去除color。
  • 模型内pos.xyz/uv.xy/color.rgba等等数据默认用32位浮点数存储,它们的数据表示范围远远超出大多数游戏的应用场景,可以将它们压缩至16位浮点数。
  • 模型的索引数据存储了三角形引用的顶点序号,默认用32位unsigned int存储,但绝大多数模型不可能超出16位unsigned short的范围,故用16位整型足矣。
  • Unity引擎在Model的Import面板可设置优化参数(下图)。

2.4.2 模型辅助工具

美术制作出的模型通常是高精度模型,虽然效果好,但往往在中低端机不需要这么高的精度,这时候就要借助一些工具进行优化。下面主要介绍Unity的工具,其它引擎应该有类似的工具。

  • MeshBaker:模型合并插件,可以对多个模型合成一个模型,从而减少模型个数,降低Draw Calls。多用于静态物体合并,比如场景和地面静态物体。
  • SimpleLOD:模型减面库,可以离线或运行时给模型进行减面优化,也可以方便地做成批处理工具。

2.4.3 模型美术规范

一个模型尽量只用一个材质,材质使用的贴图大小要合理,太大浪费内存,太小画质会模糊。建模时,剔除模型内部等不可见的顶点和三角面,合并重叠或相邻的顶点,减少模型的顶点数和面数。为防止美术制作的模型精度过高,有必要对模型的顶点和面数做限制。若模型带骨骼动画,需对骨骼数量做限制,单个模型的骨骼数量最好限定70个以内,否正很多低端设备无法支持GPU蒙皮。对模型进行分类,重要模型骨骼数可以多一些,次重要或不重要的更少骨骼数。游戏Z对各类模型的限制如下表:

2.5 场景

  • 地形若是不复杂(比如王者荣耀/LOL的战斗场景),尽量不用Terrain,用简易模型代替,地表细节可用一张纹理表示,地表纹理取合适大小,通常不超过1024x1024。

  • 地形网格和地面静态物体去掉阴影,如果某些物件确实需要阴影,可以让美术在制作地表纹理时加上阴影。

  • 地形有很多不可见的地方,可以删减那里的模型网格。

  • 地面通常有很多装饰物和特效,要关注它们的面数等规格是否超出了限制。

  • 一个场景只用一个平行光,实时像素光不要超过一个。用Lighting Map代替实时光,Lighting Map纹理尺寸不宜太大。

  • 对场景的面数和物体数量做限制。使用合批工具离线将地表相似的静态物体合并,减少场景复杂度。

  • 对场景使用画质分级策略,比如低画质下,用最低模的场景,隐藏场景特效等。

  • 地表如有导航网格,导航网格可以采用更精简的模型,复杂的边缘可以简化成简单的几何多边形。

上图展示的是游戏Z的一个场景,虽然地表物体比较复杂,但地形网格(绿线所示)很简单,用少量的三角面表示了复杂的地表构造。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/79629.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Docker】Docker是什么?Docker从介绍到Linux安装图文详细教程

本期目录1. Docker介绍1.1 Docker解决的问题2. Docker和虚拟机的区别2.1 虚拟机的缺点2.2 Docker的优点2.3 比较3. Docker架构3.1 镜像和容器1)镜像2)容器3.2 Docker和DockerHub3.3 整体结构及底层通信原理4. 安装Docker4.1 安装条件4.2 卸载旧版本4.3 y…

【Windows环境下载安装MySQL、IDEA连接数据库】

MySQL安装配置一、Windows环境下载安装MySQL1.下载合适的MySQL安装包2.本地安装配置MySQL二、IDEA连接MySQL数据库1.设置数据库连接2.测试连接3.连接结果一、Windows环境下载安装MySQL 1.下载合适的MySQL安装包 官网链接https://www.mysql.com/,选择合适的版本&am…

JVM方法区的内部结构

JVM 中方法区的大致区域浏览图: 《深入理解 Java 虚拟机》书中对方法区( Method Area) 存储内容描述如下:它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码缓存等。 类型信息 对每个加载的类型(类 cla…

chatGPT 辣么火,你却不会注册

chatGPT 是什么? 一款目前超级火的 AI 对话聊天工具,只是不同于其他的智能聊天机器人那样,他非常的智能。 可以回答你的技术问题、帮你写代码、还能帮你写小说等等,发挥你的想象力,让他干点啥都行。 比如让他帮你用…

Spring循环依赖问题分析

文章目录一、什么是循环依赖?二、Spring内部解决的是那种情况下的循环依赖?三、一级、二级、三级缓存保存的是什么?四、如何使用三级缓存解决循环依赖?五、为什么是三级缓存,二级缓存不行么?六、二级缓存的…

小米AX6S刷OpenWrt,和刷回官网固件

文章目录背景刷成 OpenWrt刷回官网固件Ref简 述: 闲暇,折腾下新购 小米AX6S ,刷下 OpenWrt,初次接触记录下。 本文初发于 “偕臧的小站”,同步转载于此。 背景 miwifi_rb03_firmware_3e872_1.0.54.bin [官方 2022.08.24] miwifi_r…

17. 权重衰退(weight_decay)

之前描述了过拟合的问题,现在介绍一些正则化模型的技术。 正则化:凡事可以减少泛化误差而不是减少训练误差的方法,都可以称作正则化方法。 我们总是可以通过去收集更多的训练数据来缓解过拟合。 但这可能成本很高,耗时颇多&#x…

【OpenCV-Python】教程:4-7 BRIEF( Binary Robust Independent Elementary Features)特征

OpenCV Python BRIEF ( Binary Robust Independent Elementary Features) 【目标】 学习 BRIEF 算法理论 【理论】 我们知道SIFT使用128维向量作为描述符。因为它使用的是浮点数,所以需要512字节。类似地,SURF也需要最少256字…

堪称零瑕疵!仅用了365页直接封神,我要吹爆这份RocketMQ笔记

RocketMQ 是阿里巴巴在2012年开源的分布式消息中间件,作为经历过多次阿里巴巴双十一这种“超级工程”的洗礼并有稳定出色表现的国产中间件,以其高性能、低延时和高可靠等特性近年来已经也被越来越多的国内企业使用。 谁使用ApacheRocketMQ? …

【不知道发啥】Win7网页版使用方法

文章目录网站使用方法测试总结🌈博客主页:Minecraft__Him 💌欢迎关注🎉点赞👍收藏⭐️私信📝评论 网站 https://win7simu.visnalize.com/ 使用方法 如果是蓝屏那就等一下, 等它跳到这个界面 …

硕士毕业进入阿里三年半,离职申请N+3,到手20多万,跳槽到下家涨薪50%,感谢阿里!...

最近这段时间的负能量帖子太多了,今天说点正能量的事。一位前阿里员工说:硕士3.5年,校招进入阿里供应链后端,月初离职,申请拿了n3,一共给了20多万,跳槽的package涨了50%,感谢阿里&am…

当我和ChatGPT聊Everything as Code

以下是我和ChatGPT的聊天原文。一开始还有点惊喜,震惊。越到后面,越感到失望。网络上大肆宣传ChatGPT要代替人类的文章,我怕是专门炒流量赚钱的吧?我个人觉得,它离代替人类,还远着呢。Everything as Code 的…

Stimulsoft Reports.NET 2023.1.0 Crack

Stimulsoft Reports.NET 是一种为在 Windows 窗体应用程序中集成和工作而创建的报告工具。使用我们的报告工具,您可以创建、编辑、查看、导出和打印任何复杂程度的报告。该产品包括一个功能强大、直观易懂的报表设计器和一个交互式查看器。 最大功能 Stimulsoft Rep…

光储直柔———助力实现零碳电力的新型建筑配电系统

光储直柔———助力实现零碳电力的新型建筑配电系统(2021) [引用本文]江亿.光储直柔———助力实现零碳电力的新型建筑配电系统[J].暖通空调,2021, 21(10): 112. 光储直柔PSDF(phot…

记一次CTF测验(web)

目录 01.php 签到题目 题目描述: 解题: 02.php 11? 题目描述: 解题: 03.php get拿来吧你 题目描述: 解题: 04.php 你从哪里来我的朋友 题目描述: 解题: 05.p…

功能测试(九)—— adb命令、Charles手机抓包

目录 目标 一、APP命令格式 1.1 查看已连接的设备列表 1.2 断开连接设备 1.3 无线连接设备 1.4 开启adb服务 1.5 关闭adb服务 1.6 安装软件包 1.7 卸载软件包 1.8 获取包名 1.9 获取当前窗口(注意大小写区分) 1.10 清除缓存 1.11 启动/停止应用 1.12 获取手机日志…

Verilog语法之条件编译指令`ifdef, `ifndef,`else, `elsif, `endif

0、前言 一般情况下,C语言中的每一行代码都要参加编译。但有时候出于对程序代码优化的考虑,希望只对其中一部分内容进行编译,此时就需要在程序中加上条件,让编译器只对满足条件的代码进行编译,将不满足条件的代码舍弃&…

Canal-1-安装-代码

1总体简介 1 mysql需要开启binlog binlog分类 1.1)statement: 语句级别,binlog 会记录每一次执行写操作的语句。相对于row模式节省空间,但是会产生数据不一致性,例如:update aa set create_timenew(); 如果用binlo…

Java学习笔记7.2.2 事件处理 - Swing常用事件

文章目录零、本讲学习目标一、Swing常用事件二、窗体事件(一)窗体事件概述(二)窗体事件类API概述(三)窗体事件使用方法(四)窗体事件案例演示三、鼠标事件(一)…

【进阶】C语言第一课:深度剖析数据在内存中的存储

目录 前言: 一、数据类型详细介绍: 1.相关知识回顾: 2.类型的基本归类: 整型家族: 浮点型家族: 构造类型: 指针类型: 空类型: 二、整形在内存中的存储: …