Unity - 原生纹理格式解释

时间:2018-05-04 07:18:41

标签: unity3d textures texture2d

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

1 个答案:

答案 0 :(得分:0)

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

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

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