【问题标题】:Unity - native texture formats explainedUnity - 原生纹理格式解释
【发布时间】:2018-05-04 07:18:41
【问题描述】:

我已阅读以下here

当您使用不支持的纹理压缩格式时 目标平台,将纹理解压缩为 RGBA 32 并存储 在压缩纹理旁边的内存中。当这种情况发生时,时间 解压纹理丢失,内存丢失,因为你是 将它们存储两次。此外,各个平台都有不同的 硬件,并经过优化以最有效地与特定的工作 压缩格式;选择不兼容的格式会影响您的 游戏的表现。下表显示了每个支持的平台 压缩格式。

让我们讨论一个具体案例。假设我在光盘上存储了一个.png 文件并从 Android 打包了我的游戏。现在我在一个 Android 设备上玩那个游戏,它的 GPU 需要 ETC2 作为原生纹理格式。我是否正确,当我进入游戏时应该发生以下情况:

  1. 从磁盘读取PNG文件到RAM(RAM用于存储PNG文件数据)
  2. 将 PNG 解压缩为 RGBA32(RAM 用于 PNG 和解压缩数据)
  3. 将 RGBA32 压缩为 ETC2 并上传到 GPU(如果我有纹理现金,则在 RAM 上,然后我可能会为 PNG 文件数据释放内存,但我需要存储 RGBA32 以供将来重用,或者至少我需要存储 ETC2)李>

这意味着我在 PNG->RBGA32->ETC2 之间进行了大量转换,在转换过程中,我不仅使用了 CPU 资源,还大量使用了 RAM。我的问题 - 我是否正确理解当一个人没有为目标平台打包原生纹理格式时会发生什么?

【问题讨论】:

    标签: unity3d textures texture2d


    【解决方案1】:

    是的,你有点正确理解这里发生了什么。但是您误解了一些东西:PNG 与所有这些相关的方式。 GPU 实现的应用于纹理的压缩方法与 PNG 的 filter+deflate 方法非常不同,因此对于 每一种 GPU,您都有这种行为。

    Unity 开发人员试图告诉您的是,纹理可以以 GPU 使用的格式存储,并且为了获得最佳性能,您应该确定目标平台支持哪些压缩格式并捆绑您的资源文件为此。

    因此,对于平台 X 的游戏,请确定 X GPU 支持的压缩格式,然后将您的资产打包并发布 X 版本。冲洗并重复其他平台。

    【讨论】:

    • 感谢您的回答。我知道 Unity 开发人员希望我做什么。我想大致了解底层发生了什么,以便能够评估额外的 CPU 和内存损失。
    猜你喜欢
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多