当前位置: 首页 > news >正文

Unity 性能优化之图片优化(八)

提示:仅供参考,有误之处,麻烦大佬指出,不胜感激!

文章目录

  • 前言
  • 一、可以提前和美术商量的事
    • 1.避免内存浪费(UI图片,不是贴图)
    • 2.提升图片性能
  • 二、图片优化
    • 1.图片Max Size修改(内存优化)
      • 压缩格式需要对应平台来选择:
      • 下面图片的对比,节约了256k的内存。当图片数量多了,也是相当可观的。
    • 2.Read/Write Enabled 勾选情况判断
    • 3.Filter Mode 选择
    • 3.Aniso Level
    • 4.Generate Mip Maps
  • 三、使用Sprte Atlas图集(减少Draw Call)
    • 1.导入2D Sprit
    • 2.启用Sprte Atlas
    • 3.创建图集
    • 4.图集添加图片
    • 5.代码动态加载并使用
  • 四、SpriteAtlas 优缺点
  • 总结


前言

图片资源一般都是美术给我们的,但是作为一个程序员我们应该大致要知道怎么调整图片,达到最好利用率。不然美术给什么用什么,一定会造成性能上和内存上的困扰。

一、可以提前和美术商量的事

首先美术在做一张图之前,我们可以找他商量一下(说话声音温柔一点),有主见也显得自己很懂得样子(哈哈…)。当然实际得商量内容也和美术人员得制作习惯息息相关。

1.避免内存浪费(UI图片,不是贴图)

共用得某个图片(几个地方都会用到),如果可以不要设计得太复杂,因为可能会做不了9宫格拉伸,因为拉伸了就改变了图片本来得样子了,那不是我们想要得结果。

2.提升图片性能

1.(仅移动端有效)如果这张图片是应用在移动端的,确保每条边的长度都是2的正整数次方个像素,例如:2、4、8、16…256、512、1024、2048、4096…。
图片源文件分辨率为2次幂,在此分辨率下Unity内置的压缩机制就会生效,压缩效率很高;
2.减少透明和阴影的设计;

二、图片优化

1.图片Max Size修改(内存优化)

对于许多移动端的游戏, 2048x2048或1024x1024足以满足纹理图集的要求,而512x512足以满足应用于3D模型的纹理的要求。
比较:因为这张图片本身大小是512*512,一般情况我们不会这样子压缩,因为会导致图片模糊失真,一般用1024,具体情况需要参考压缩后的效果是否接受,来确定压缩程度

压缩格式需要对应平台来选择:

在这里插入图片描述

下面图片的对比,节约了256k的内存。当图片数量多了,也是相当可观的。

Max Size:2048
大小:341.4k
在这里插入图片描述
压缩后:
Max Size:256
大小:85.4k
在这里插入图片描述

2.Read/Write Enabled 勾选情况判断

如果图片不需要代码去读写,则可以取消勾选Read/Write Enabled,如果勾选可能导致双倍的内存占用。
在这里插入图片描述

3.Filter Mode 选择

Filter Mode一般选择Bilinear即可
在这里插入图片描述

Bilinear,平衡 性能和视觉效果
Point(no filter),则视觉效果不太行,但性能开销也小
Trilinera,则视觉效果最好,但性能开销最大

3.Aniso Level

Aniso Level一般选择1,只有个别比较重要的图片才需要设置为大于等于2的值。

4.Generate Mip Maps

图片导入Unity后,会默认生成Mip Maps格式。
理解:
当摄像机到这幅贴图距离近,则显示最原始的图片,当摄像机距离这幅贴图的距离远,则这幅贴图会变模糊,以此降低渲染的性能消耗。
但由于之前显示的一幅图,现在变成了有多幅1所以这样会略微增加内存消耗。如果确定本游戏的摄像机到图片的距离几乎不怎么变化,则可以禁用这个功能。
点击该贴图,在Inspector面板的Advanced中取消勾选Generate Mip Maps,这样就不会生成Mip Maps,增加游戏性能。
如果是2D游戏则可以禁用这个功能。如果是UI图,也可以禁用这个功能。

三、使用Sprte Atlas图集(减少Draw Call)

1.导入2D Sprit

在Window–>Package Manager-Packages:Unity Registry–>中搜索并安装2D Sprite–>点击Install
在这里插入图片描述

2.启用Sprte Atlas

Edit–>Project Settings–>Editor–>Mode–>Sprite Atlas V1 - Always Enabled
如下图所示:
在这里插入图片描述
默认是关闭的,不做修改,创建图集时会出现下面提示
在这里插入图片描述

3.创建图集

右键Assets文件夹存储的位置—>Create–>2D–>Sprite Atlas
在这里插入图片描述

4.图集添加图片

点击+号添加即可,点击Pack Preview,就完成了。
在这里插入图片描述

5.代码动态加载并使用

SpriteAtlas atlas = Resources.Load<SpriteAtlas>("New Sprite Atlas");//图集名称
Images01.sprite = atlas.GetSprite("0");//“0”就是图集中要加载图片的名字

四、SpriteAtlas 优缺点

Sprte Atlas用于制作图集,即把多张图片打包成一整张图集。
Sprte Atlas的优点:
1、减小资源文件所占的大小。
2、打包到同一个Sprte Atlas图集中的图片会共享相同的纹理数据,减少了重复的存储,往往能起到优化内存的作用。
3、可以减小DrawCall,提高游戏的渲染性能。
Sprte Atlas的缺点:
1、需要手动将图片添加到Sprte Atlas,增加了额外的工作量。
2、当加载图集中的任意一张图,则会先加载整个图集。如果把一些不常用的图打包到同一个图集中,则会浪费内存。
3.图集里面的图,尽量让同一时期渲染的图制作成在一个图集里(这一点很重要,不然就失去了优化的意义了)

总结

好记性不如烂笔头!
上一章:链接: Unity 性能优化之光照优化(七)
下一章:Unity 性能优化之UI优化(九)

相关文章:

Unity 性能优化之图片优化(八)

提示&#xff1a;仅供参考&#xff0c;有误之处&#xff0c;麻烦大佬指出&#xff0c;不胜感激&#xff01; 文章目录 前言一、可以提前和美术商量的事1.避免内存浪费&#xff08;UI图片&#xff0c;不是贴图&#xff09;2.提升图片性能 二、图片优化1.图片Max Size修改&#x…...

C++类细节,面试题02

文章目录 2. 虚函数vs纯虚函数3. 重写vs重载vs隐藏3.1. 为什么C可以重载&#xff1f; 4. 类变量vs实例变量5. 类方法及其特点6. 空类vs空结构体6.1. 八个默认函数&#xff1a;6.2. 为什么空类占用1字节 7. const作用7.1 指针常量vs常量指针vs常量指针常量 8. 接口vs抽象类9. 浅…...

Stylus的引入

Stylus是一个CSS预处理器&#xff0c;它允许开发者使用更高级的语法来编写CSS&#xff0c;并提供了一些额外的功能来简化和增强CSS的编写过程。以下是关于Stylus的详解和引入方法的详细介绍&#xff1a; 一、Stylus的详解 特点和功能&#xff1a; 变量&#xff1a;允许你定义…...

前端框架-echarts

Echarts 项目中要使用到echarts框架&#xff0c;从零开始在csdn上记笔记。 这是一个基础的代码&#xff0c;小白入门看一下 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" co…...

【StarRocks系列】 Trino 方言支持

我们在之前的文章中&#xff0c;介绍了 Doris 官方提供的两种方言转换工具&#xff0c;分别是 sql convertor 和方言 plugin。StarRocks 目前同样也提供了类似的方言转换功能。本文我们就一起来看一下这个功能的实现与 Doris 相比有何不同。 一、Trino 方言验证 我们可以通过…...

【2024最新华为OD-C卷试题汇总】URL拼接 (100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; 文章目录 前…...

【ARM 嵌入式 C 字符串系列 23.7 -- C 实现函数 isdigit 和 isxdigit】

请阅读【嵌入式开发学习必备专栏 】 文章目录 isdigit 和 isxdigit C代码实现实现 isdigit实现 isxdigit使用示例 isdigit 和 isxdigit C代码实现 在C语言中&#xff0c;isdigit和isxdigit函数用于检查一个字符是否分别为十进制数字或十六进制数字。以下是这两个函数的简单实现…...

三分钟了解计算机网络核心概念-数据链路层和物理层

计算机网络数据链路层和物理层 节点&#xff1a;一般指链路层协议中的设备。 链路&#xff1a;一般把沿着通信路径连接相邻节点的通信信道称为链路。 MAC 协议&#xff1a;媒体访问控制协议&#xff0c;它规定了帧在链路上传输的规则。 奇偶校验位&#xff1a;一种差错检测方…...

数据结构===堆

文章目录 概要堆2条件大顶堆小顶堆 堆的实现插入元素删除堆顶元素 堆代码小结 概要 堆&#xff0c;有趣的数据结构。 那么&#xff0c;如何实现一个堆呢&#xff1f; 堆 堆&#xff0c;有哪些重点&#xff1a; 满足2条件大顶堆小顶堆 2条件 2条件&#xff1a; 堆是一个…...

AAA、RADIUS、TACACS、Diameter协议介绍

准备软考高级时碰到的一个概念&#xff0c;于是搜集网络资源整理得出此文。 概述 AAA是Authentication、Authorization、Accounting的缩写简称&#xff0c;即认证、授权、记帐。Cisco开发的一个提供网络安全的系统。AAA协议决定哪些用户能够访问服务&#xff0c;以及用户能够…...

Nacos高频面试题及参考答案(2万字长文)

目录 Nacos是什么?它的主要功能有哪些? Nacos在微服务架构中扮演什么角色?...

CMakeLists.txt语法规则:条件判断中表达式说明四

一. 简介 前面学习了 CMakeLists.txt语法中的 部分常用命令&#xff0c;常量变量&#xff0c;双引号的使用。 前面几篇文章也简单了解了 CMakeLists.txt语法中的条件判断&#xff0c;文章如下&#xff1a; CMakeLists.txt语法规则&#xff1a;条件判断说明一-CSDN博客 CMa…...

Hive概述

Hive简介 Hive是一个基于Hadoop的开源数据仓库工具,用于存储和处理海量结构化数据. 它是Facebook在2008年8月开源的一个数据仓库框架,提供了类似于SQL语法的HQL(HiveSQL)语句作为数据访问接口. Hive可以做复查统计分析之类的工作; 利用hdfs的存储空间,进行结构化数据的存储; 利…...

buuctf-misc-33.[BJDCTF2020]藏藏藏1

33.[BJDCTF2020]藏藏藏1 题目&#xff1a;藏了很多层&#xff0c;一层一层的剥开 常规思路&#xff0c;先使用010打开一下看看 binwalk不行用foremost 发现是pk文件也就是压缩包&#xff0c;并且包含了docx文件 这不binwalk分离一下文件&#xff1f;虽然可以看出有隐藏文件&…...

golang 基础知识细节回顾

之前学习golang的速度过于快&#xff0c;部分内容有点囫囵吞枣的感觉&#xff0c;写gorm过程中有很多违反我常识的地方&#xff0c;我通过复习去修正了我之前认知错误和遗漏的地方。 itoa itoa自增的作用在编辑error code时候作用很大&#xff0c;之前编辑springboot的error c…...

递归陷阱七例

目录 栈溢出 无限递归 大常数参数 递归深度过大 重复计算 函数调用开销 递归与迭代的选择 总结 递归是一种强大的编程技术&#xff0c;它允许函数调用自身。递归在很多情况下可以简化代码&#xff0c;使问题更容易理解和解决。然而&#xff0c;递归也容易导致一些常见的…...

【3D基础】坐标转换——地理坐标投影到平面

汤国安版GIS原理第二章重点 1.常见投影方式 https://download.csdn.net/blog/column/9283203/83387473 Web Mercator投影&#xff08;Web Mercator Projection&#xff09;&#xff1a; 优点&#xff1a; 在 Web 地图中广泛使用&#xff0c;易于显示并与在线地图服务集成。在…...

颈椎锻炼方式

1. 颈部伸展运动&#xff1a;坐直&#xff0c;慢慢将头向前伸展&#xff0c;直到感到轻微的拉伸&#xff0c;保持数秒钟&#xff0c;然后缓慢放松。重复10次。 2. 颈部旋转运动&#xff1a;坐直&#xff0c;慢慢将头向一侧转动&#xff0c;直到感到轻微的拉伸&#xff0c;保持…...

测试环境搭建:JDK+Tomcat+Mysql+Redis

基础的测试环境搭建&#xff1a; LAMPLinux(CentOS、ubuntu、redhat)ApacheMysqlPHP LTMJLinux(CentOS、ubuntu、redhat)TomcatMysql(Oracle)RedisJava 真实的测试环境搭建&#xff1a;&#xff08;企业真实的运维&#xff09; 基于SpringBoot&#xff08;SpringCloud分布式微…...

(delphi11最新学习资料) Object Pascal 学习笔记---第11章第1节(混合引用中的错误)

11.1.3 混合引用中的错误 ​ 在使用对象时&#xff0c;你通常应该只使用对象变量或接口变量来访问它们。混合使用这两种方法会破坏对象 Pascal 所提供的引用计数机制&#xff0c;并可能导致极难跟踪的内存错误。在实践中&#xff0c;如果你决定使用接口&#xff0c;你可能应该…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决

问题&#xff1a; pgsql数据库通过备份数据库文件进行还原时&#xff0c;如果表中有自增序列&#xff0c;还原后可能会出现重复的序列&#xff0c;此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”&#xff0c;…...

PydanticAI快速入门示例

参考链接&#xff1a;https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...

VSCode 没有添加Windows右键菜单

关键字&#xff1a;VSCode&#xff1b;Windows右键菜单&#xff1b;注册表。 文章目录 前言一、工程环境二、配置流程1.右键文件打开2.右键文件夹打开3.右键空白处打开文件夹 三、测试总结 前言 安装 VSCode 时没有注意&#xff0c;实际使用的时候发现 VSCode 在 Windows 菜单栏…...