首页 > 系统相关 >资源内存占用

资源内存占用

时间:2024-10-18 10:21:18浏览次数:1  
标签:占用 纹理 Mesh Tangent 内存 资源

在一个较为复杂的大中型项目中,资源的内存占用往往占据了总体内存的70%以上。因此,资源使用是否恰当直接决定了项目的内存占用情况。一般来说,一款游戏项目的资源主要可分为如下几种:纹理(Texture)、网格(Mesh)、动画片段(AnimationClip)、音频片段(AudioClip)、材质(Material)、着色器(Shader)、字体资源(Font)以及文本资源(Text Asset)等等。其中,纹理、网格、动画片段和音频片段则是最容易造成较大内存开销的资源。

一、纹理

  • 慎重选择纹理格式(纹理格式不仅影响着纹理的内存占用,同时还决定了纹理的加载效率。)
    • Android平台:ETC
    • iOS平台:PVRTC
    • Windows PC:DXT
  • 慎重选择纹理尺寸(一般来说,纹理尺寸越大,则内存占用越大。所以,尽可能降低纹理尺寸,如果512x512的纹理对于显示效果已经够用,那么就不要使用1024x1024的纹理,因为后者的内存占用是前者的四倍。)
  • 关闭不必要的Mipmap功能,如UI纹理 (开启Mipmap会将纹理内存提升1.33倍。)
  • 关闭Read & Write(开启该选项将会使纹理内存增大一倍。)

二、网格

  • 删除不必要的Normal、Color、Tangent数据

这些数据的存在将大幅度增加Mesh资源的文件体积和内存占用。其中,Color数据和Normal数据主要为3DMax、Maya等建模软件导出时设置所生成,而Tangent一般为导入引擎时生成。
更为麻烦的是,如果项目对Mesh进行Draw Call Batching操作的话,那么将很有可能进一步增大总体内存的占用。比如,100个Mesh进行拼合,其中99个Mesh均没有Color、Tangent等属性,剩下一个则包含有Color、Normal和Tangent属性,那么Mesh拼合后,CombinedMesh中将为每个Mesh来添加上此三个顶点属性,进而造成很大的内存开销。
这些数据主要为Shader所用,来生成较为酷炫的效果。所以,使用时应作好考量,该模型的渲染Shader是否需要这些数据进行渲染。

标签:占用,纹理,Mesh,Tangent,内存,资源
From: https://www.cnblogs.com/comradexiao/p/18473740

相关文章

  • 引擎模块自身占用
    引擎自身中存在内存开销的部分纷繁复杂,可以说是由巨量的“微小”内存所累积起来的,比如GameObject及其各种Component(最大量的Component应该算是Transform了)、ParticleSystem、MonoScript以及各种各样的模块Manager(SceneManager、CanvasManager、PersistentManager等)…一般情况下,......
  • 鸿蒙ArkTS中的资源管理详解
    在鸿蒙应用开发中,资源管理是一个非常重要的话题。ArkTS作为鸿蒙原生开发语言,提供了强大的资源管理功能。本文将深入探讨ArkTS中的资源管理,特别是$r语法的使用注意事项,以及其他实用的资源管理技巧。1.$r语法简介在ArkTS中,$r是一个用于引用资源的特殊语法。它允许开发者......
  • 多线程(五):死锁&内存可见性问题
    目录1.synchronized---监视器锁monitorlock2.死锁2.1死锁---情况12.1.1可重入2.1.2 如何实现一个可重入锁[面试题]2.2死锁---情况22.2.1BLOCKED2.2.2手写死锁代码[经典面试题]2.3 死锁---情况33.避免死锁的出现3.1构成死锁的四个必要条件★......
  • ThreadLocal内存泄漏怎么回事
    ThreadLocal本地线程,调用set方法往里面存的值,是每个线程互相隔离,互不影响的,每个线程都有一块存储ThreadLocal数据的地方叫做ThreadLocalMap,这个变量专门用于存储当前线程的map数据,调用ThreadLocal.set方法的时候,就是往这个ThreadLocalMap里面存储一个一个的entry,由key和value组成......
  • 【2024华为OD-E卷-100分-内存资源分配】(题目+思路+Java&C++&Python解析+在线测试)
    在线评测链接题目描述有一个简易内存池,内存按照大小粒度分类,每个粒度有若干个可用内存资源,用户会进行一系列内存申请,需要按需分配内存池中的资源返回申请结果成功失败列表。分配规则如下:分配的内存要大于等于内存的申请量,存在满足需求的内存就必须分配,优先分配粒度小的......
  • Redis的内存管理体系
    Redis的内存管理体系Redis的内存管理体系由多种策略和机制组成,旨在有效利用内存资源、优化性能和确保数据的可靠性。以下是Redis内存管理体系的主要组成部分:1.内存分配Redis使用自定义的内存分配器,默认使用Jemalloc。这种分配器旨在减少内存碎片,提高内存分配和释放的......
  • java毕业设计-基于Springboot的教学资源共享平台【代码+论文+PPT】
    全文内容包括:1、采用技术;2、系统功能;3、系统截图;4、部分代码;5、配套内容。索取方式见文末微信号,欢迎关注收藏!一、采用技术语言:Java1.8框架:Springboot数据库:MySQL5.7、8.0开发工具:IntelliJIDEA旗舰版其他:Maven3.8以上二、系统功能成绩管理:记录和追踪学生课程成绩,便于......
  • flink同步MySQL数据的时候出现内存溢出
    flink同步MySQL数据的时候出现内存溢出背景:需要将1000w的某类型数据同步到别的数据源里面,使用公司的大数据平台可以很快处理完毕,而且使用的内存只有很少很少量(公司的大数据平台的底层是flink,但是连接器使用的是chunjun开源产品),由于我个人想使用flink原生的连接器来尝试一下,所......
  • Docker资源控制
    一、CPU资源控制1、cgroups概述是一个非常强大的linux内核工具,他不仅可以限制被namespace隔离起来的资源,还可以为资源设置权重、计算使用量、操控进程启停等等,所以cgroups(Controlgroups)实现了对资源的配额和度量2、cgroups的四大功能(1)资源限制:可以对任务使用的资源总额进......
  • web服务器静态资源下载
    1.使用Beego实现静态文件下载Beego是一个强大的GoWeb框架,提供了处理静态文件的功能。通过简单的配置,我们可以将本地文件夹作为静态资源目录,并为用户提供下载链接。1.1配置静态文件路径首先,在main.go中,我们使用SetStaticPath将本地的staticfiles目录映射为可以通......