Unity中如何计算带minimap的贴图资源的大小

    /// <summary>
    /// 计算贴图大小,包含mipmap内存的叠加
    /// </summary>
    /// <param name="tTexture"></param>
    /// <returns></returns>
    public static int CalculateTextureSizeBytes(Texture tTexture)
    {

        int tWidth = tTexture.width;
        int tHeight = tTexture.height;
        if (tTexture is Texture2D)
        {
            Texture2D tTex2D = tTexture as Texture2D;
            int bitsPerPixel = GetBitsPerPixel(tTex2D.format);
            int mipMapCount = tTex2D.mipmapCount;
            int mipLevel = 1;
            int tSize = 0;
            while (mipLevel <= mipMapCount)
            {
                tSize += tWidth * tHeight * bitsPerPixel / 8;
                tWidth = tWidth / 2;
                tHeight = tHeight / 2;
                mipLevel++;
            }
            return tSize;
        }
        return 0;
    }

    /// <summary>
    /// 计算贴图大小,包含mipmap内存的叠加,指定贴图格式
    /// </summary>
    /// <param name="tTexture"></param>
    /// <returns></returns>
    public static int CalculateTextureSizeBytesByFormat(Texture tTexture, TextureImporterFormat format)
    {
        int tWidth = tTexture.width;
        int tHeight = tTexture.height;
        if (tTexture is Texture2D)
        {
            Texture2D tTex2D = tTexture as Texture2D;
            if (TextureImporterFormat.Automatic == format)
            {
                Debug.LogError("------------------>有贴图格式未设置: 贴图名称:" + tTexture.name);
            }
            int bitsPerPixel = GetBitsPerPixelForImportFormat(format);
            int mipMapCount = tTex2D.mipmapCount;
            int mipLevel = 1;
            int tSize = 0;
            while (mipLevel <= mipMapCount)
            {
                tSize += tWidth * tHeight * bitsPerPixel / 8;
                tWidth = tWidth / 2;
                tHeight = tHeight / 2;
                mipLevel++;
            }
            return tSize;
        }
        return 0;
    }

    /// <summary>
    /// 获取对应个是贴图的位大小
    /// </summary>
    /// <param name="format"></param>
    /// <returns></returns>
    public static int GetBitsPerPixel(TextureFormat format)
    {
        switch (format)
        {
            case TextureFormat.Alpha8: //     Alpha-only texture format.
                return 8;
            case TextureFormat.ARGB4444: //     A 16 bits/pixel texture format. Texture stores color with an alpha channel.
                return 16;
            case TextureFormat.RGBA4444: //     A 16 bits/pixel texture format.
                return 16;
            case TextureFormat.RGB24:   // A color texture format.
                return 24;
            case TextureFormat.RGBA32:  //Color with an alpha channel texture format.
                return 32;
            case TextureFormat.ARGB32:  //Color with an alpha channel texture format.
                return 32;
            case TextureFormat.RGB565:  //     A 16 bit color texture format.
                return 16;
            case TextureFormat.DXT1:    // Compressed color texture format.
                return 4;
            case TextureFormat.DXT5:    // Compressed color with alpha channel texture format.
                return 8;
            case TextureFormat.PVRTC_RGB2://     PowerVR (iOS) 2 bits/pixel compressed color texture format.
                return 2;
            case TextureFormat.PVRTC_RGBA2://     PowerVR (iOS) 2 bits/pixel compressed with alpha channel texture format
                return 2;
            case TextureFormat.PVRTC_RGB4://     PowerVR (iOS) 4 bits/pixel compressed color texture format.
                return 4;
            case TextureFormat.PVRTC_RGBA4://     PowerVR (iOS) 4 bits/pixel compressed with alpha channel texture format
                return 4;
            case TextureFormat.ETC_RGB4://     ETC (GLES2.0) 4 bits/pixel compressed RGB texture format.
                return 4;
            case TextureFormat.ETC2_RGBA8://     ATC (ATITC) 8 bits/pixel compressed RGB texture format.
                return 8;
            case TextureFormat.BGRA32://     Format returned by iPhone camera
                return 32;
        }
        return 0;
    }

    public static int GetBitsPerPixelForImportFormat(TextureImporterFormat format)
    {
        switch (format)
        {
            case TextureImporterFormat.Alpha8: //     Alpha-only texture format.
                return 8;
            case TextureImporterFormat.RGB24:   // A color texture format.
                return 24;
            case TextureImporterFormat.RGBA32:  //Color with an alpha channel texture format.
                return 32;
            case TextureImporterFormat.ARGB32:  //Color with an alpha channel texture format.
                return 32;
            case TextureImporterFormat.RGBA16:  //     A 16 bit color texture format.
                return 16;
            case TextureImporterFormat.RGB16:  //     A 16 bit color texture format.
                return 16;
            case TextureImporterFormat.DXT1:    // Compressed color texture format.
                return 4;
            case TextureImporterFormat.DXT5:    // Compressed color with alpha channel texture format.
                return 8;
            case TextureImporterFormat.PVRTC_RGB2://     PowerVR (iOS) 2 bits/pixel compressed color texture format.
                return 2;
            case TextureImporterFormat.PVRTC_RGBA2://     PowerVR (iOS) 2 bits/pixel compressed with alpha channel texture format
                return 2;
            case TextureImporterFormat.PVRTC_RGB4://     PowerVR (iOS) 4 bits/pixel compressed color texture format.
                return 4;
            case TextureImporterFormat.PVRTC_RGBA4://     PowerVR (iOS) 4 bits/pixel compressed with alpha channel texture format
                return 4;
            case TextureImporterFormat.ETC_RGB4://     ETC (GLES2.0) 4 bits/pixel compressed RGB texture format.
                return 4;
            case TextureImporterFormat.ETC2_RGB4://     ETC (GLES3.0) 4 bits/pixel compressed RGB texture format.
                return 4;
            case TextureImporterFormat.ETC2_RGBA8://     ETC (GLES3.0) 8 bits/pixel compressed RGBA texture format.
                return 8;
            case TextureImporterFormat.Automatic://     没有设置贴图格式,默认给4bit.
                return 4;
        }
        return 0;
    }

原文地址:https://www.cnblogs.com/hengsoft/p/10289647.html

时间: 2024-10-31 21:23:19

Unity中如何计算带minimap的贴图资源的大小的相关文章

Unity中Zxing生成二维码只能生成256大小图片的解决方案

/// <summary> /// 生成2维码 方法 /// 经测试:能生成任意尺寸的正方形 /// </summary> /// <param name="content"></param> /// <param name="width"></param> /// <param name="height"></param> public static

unity中camera摄像头控制详解

目录 1. 缘起 2. 开发 2.1. 建立项目 2.2. 旋转 2.2.1. 四元数 2.3. 移动 2.3.1. 向量操作 2.4. 镜头拉伸 2.5. 复位 2.6. 优化 1 缘起 我们的产品是使用unity开发水利BIM(水利建筑信息模型),项目中需要控制摄像 头对模型进行360度查看,请注意所有操作都是移动摄像头,不是移动模型.摄 像头能进行移动.旋转.改变焦距操作,类似于SketchUp的控制操作: 摄像头移动时,根据当前旋转方向(Rotation)进行移动 摄像头距离模型越远,摄

blender 带贴图与颜色材质的模型,导入到Unity中

Blender初学环境:win10 x64blender 2.79unity 5.6.2 之前不论是用导出fbx,还是把 .blend文件拽入u3d中,原先的贴图就没有了研究了很多天,才发现一个我这里可用的方法 目前只是简单以cube为例,复杂的多材质模型还没试 打开blender注意,用的是blender渲染一.新建一个cube 二.展UV1.开出一个UV图像编辑器窗口2.在三维视图按Tab进入编辑模式确保选上所有,如果没有用A键3.按U键调出菜单,选第二项点确定 三.加贴图1.打开一张图(我

馨予带你飞之unity中使用单例(二)

Unity中使用单例类 单例模式 Unity中单例类的创建 Unity中单例类的使用 单例模式 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案. Unity中单例类的创建 using UnityEngine; using System.Collections; /// <summary>

【Unity技巧】Unity中的优化技术

写在前面 这一篇是在Digital Tutors的一个系列教程的基础上总结扩展而得的~Digital Tutors是一个非常棒的教程网站,包含了多媒体领域很多方面的资料,非常酷!除此之外,还参考了Unity Cookie中的一个教程.还有很多其他参考在下面的链接中. 这篇文章旨在简要地说明一下常见的各种优化策略.不过对每个基础有非常深入地讲解,需要的童鞋可以自行去相关资料. 还有一些我认为非常好的参考文章: Performance Optimization for Mobile Devices

【原创翻译】初识Unity中的Compute Shader

一直以来都想试着自己翻译一些东西,现在发现翻译真的很不容易,如果你直接把作者的原文按照英文的思维翻译过来,你会发现中国人读起来很是别扭,但是如果你想完全利用中国人的语言方式来翻译,又怕自己理解的不到位,反而与作者的愿意相悖.所以我想很多时候,国内的译者也是无奈吧,下次再看到译作也会抱着一些感同身受的态度去读.这是我第一次翻译整篇文章,能力有限,望见谅,翻译不好的地方也希望大家指出来. 其实ComputeShader在Unity中出现已经有蛮长的一段时间了,因为自己一直对Shader比较感兴趣,所

(转)【Unity技巧】Unity中的优化技术

写在前面 这一篇是在Digital Tutors的一个系列教程的基础上总结扩展而得的~Digital Tutors是一个非常棒的教程网站,包含了多媒体领域很多方面的资料,非常酷!除此之外,还参考了Unity Cookie中的一个教程.还有很多其他参考在下面的链接中. 这篇文章旨在简要地说明一下常见的各种优化策略.不过对每个基础有非常深入地讲解,需要的童鞋可以自行去相关资料. 还有一些我认为非常好的参考文章: Performance Optimization for Mobile Devices

【浅墨Unity3D Shader编程】之五 圣诞夜篇: Unity中Shader的三种形态对比&amp;混合操作合辑

本系列文章由@浅墨_毛星云 出品,转载请注明出处.  文章链接:http://hpw123.net/a/C__/kongzhitaichengxu/2014/1222/164.html 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 邮箱: [email protected] QQ交流群:330595914 更多文章尽在:http://www.hpw123.net 本文算是固定功能Shader的最后一篇,下一次更新应该就会开始讲解表面Shader,而

在Unity中使用Direct2D

在Unity中可能需要在纹理上面绘制文字.图像等.比如游戏中的显示器,手机等等等等等.太多了. Unity的Textute2D类提供了设置像素的操作,但是这效率实在不敢恭维. 汉字数量巨大,全部贴在一张图上既耗空间,不方便改变字体样式. 使用FreeType2等CPU计算的文字库一帧又画不了多少,毕竟还要提交到显存 于是瞄准了Direct2D,当初学习这图像接口时就被微软说的"能与Direct3D进行完美交互"所吸引. 好在Unity支持DX11了,我们能够在Unity上面使用Dire