Texture2D.activeMipmapLimit
Declaration
public int activeMipmapLimit;Описание
Количество уровней mipmap высокого разрешения из текстуры, которые Unity не загружает в GPU. (только для чтения)
Unity принимает во внимание параметры ограничения mipmap текстуры для определения активного предела mipmap, который влияет на количество уровней mipmap текстуры, загружаемых в GPU. Это свойство предоставляет активное число уровней mipmap текстуры, которые Unity не загрузил в GPU. Это число относительно количества уровней mipmap текстуры, включенных в сборку.
Unity обеспечивает, что определенное число уровней mipmap, зависящее от платформы, всегда загружается независимо от ограничения mipmap текстуры. activeMipmapLimit может, таким образом, быть меньше, чем ожидалось в некоторых случаях.
Когда включена PlayerSettings.mipStripping, которая удаляет уровни mipmap из текстур, activeMipmapLimit возвращает ограничение, которое отражает количество удаленных уровней mipmap. Например, текстура с 3 удаленными уровнями mipmap и применимым QualitySettings.globalTextureMipmapLimit значением 3 имеет значение activeMipmapLimit 0. Это значение объясняется тем, что число уровней mipmap, которые Unity загружает в GPU, равно числу уровней mipmap, включенных в сборку.activeMipmapLimit также отражает любые резервные варианты понижения масштаба, применяемые EditorUserBuildSettings.androidETC2Fallback или AndroidETC2FallbackOverride.
В следующем примере кода показано, как можно использовать activeMipmapLimit для выполнения операции Graphics.CopyTexture на GPU для копирования уровня 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); } }
Дополнительные ресурсы: ,QualitySettings.globalTextureMipmapLimit,, ,mipmapLimitGroup,, ,ignoreMipmapLimit,.