版本: Unity 6 (6000.0)
语言English
  • C#

Texture2D.activeMipmapLimit

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实阅读了用户提出的每一项更改建议,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的更改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

public int activeMipmapLimit;

描述

Unity 未上传到 GPU 的纹理的高分辨率 Mipmap 级别数。(只读)

Unity 会考虑纹理的 Mipmap 限制设置来确定其活动 Mipmap 限制,这会影响上传到 GPU 的纹理 Mipmap 级别数。此属性提供 Unity 未上传到 GPU 的纹理 Mipmap 级别数。此数字相对于构建中包含的纹理 Mipmap 级别数。

Unity 确保始终上传特定平台相关的 Mipmap 级别数,而不管纹理的 Mipmap 限制如何。activeMipmapLimit 因此在某些情况下可能小于预期。

当启用 PlayerSettings.mipStripping(从纹理中剥离 Mipmap 级别)时,activeMipmapLimit 会返回一个考虑了剥离的 Mipmap 级别数的限制。例如,一个具有 3 个剥离的 Mipmap 级别且适用的 QualitySettings.globalTextureMipmapLimit 值为 3 的纹理具有 activeMipmapLimit 值为 0。这是因为 Unity 上传到 GPU 的 Mipmap 级别数与构建中包含的 Mipmap 级别数相同。

activeMipmapLimit 也反映了 EditorUserBuildSettings.androidETC2Fallback 或 AndroidETC2FallbackOverride 应用的任何降尺度回退。

以下代码示例演示了如何使用 activeMipmapLimit 对 GPU 执行 Graphics.CopyTexture 操作,以将使用 Mipmap 限制的纹理的最高分辨率 Mipmap 级别复制到不使用 Mipmap 限制的新纹理。

using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Experimental.Rendering;

public class Example : MonoBehaviour { [SerializeField] Texture2D m_SourceTexture;

public void ExecuteCopyTexture() { if ((SystemInfo.copyTextureSupport & CopyTextureSupport.Basic) == 0) { Debug.LogError("Cannot perform CopyTexture, there is no support on this platform."); return; }

if (!SystemInfo.IsFormatSupported(m_SourceTexture.graphicsFormat, GraphicsFormatUsage.Sample)) { Debug.LogError("Cannot perform CopyTexture, the source texture's GraphicsFormat is not supported on this platform."); return; }

// The width and height of the texture in the build need to be halved for each mipmap level that wasn't uploaded to the GPU int width = m_SourceTexture.width >> m_SourceTexture.activeMipmapLimit; int height = m_SourceTexture.height >> m_SourceTexture.activeMipmapLimit;

// No mipmap limit applies because the texture doesn't have mipmaps. Texture2D destinationTexture = new Texture2D(width, height, m_SourceTexture.format, false);

// GPU copy of the mipmap level 0 to the mipmap level 0 of the destination texture. // The mipmap level 0 on the GPU is smaller than the mipmap level 0 of the texture in the build when m_SourceTexture.activeMipmapLimit is greater than 0. Graphics.CopyTexture(m_SourceTexture, 0, 0, 0, 0, m_SourceTexture.width, m_SourceTexture.height, destinationTexture, 0, 0, 0, 0); } }