Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Graphics.CopyTexture

Объявление

public static void CopyTexture(Texture src, Texture dst);

public static void CopyTexture(Texture src, int srcElement, int srcMip, Texture dst, int dstElement, int dstMip);

public static void CopyTexture(Texture src, int srcElement, int srcMip, int srcX, int srcY, int srcWidth, int srcHeight, Texture dst, int dstElement, int dstMip, int dstX, int dstY);

Параметры

src Исходная текстура.
dst Текстура назначения.
srcElement Исходный элемент текстуры (грань кубической карты, слой массива текстур или срез глубины 3D-текстуры).
srcMip Уровень MIP-карты исходной текстуры.
dstElement Целевой элемент текстуры (грань кубической карты, слой массива текстур или срез глубины 3D-текстуры).
dstMip Уровень MIP-карты целевой текстуры.
srcX Координата X области исходной текстуры для копирования (левая сторона равна нулю).
srcY Координата Y области исходной текстуры для копирования (нижняя часть равна нулю).
srcWidth Ширина области исходной текстуры для копирования.
srcHeight Высота области исходной текстуры для копирования.
dstX Координата X места для копирования области в целевой текстуре (левая сторона равна нулю).
dstY Координата Y места для копирования области в целевой текстуре (нижняя часть равна нулю).

Описание

Копировать содержимое текстуры.

Эта функция позволяет эффективно копировать пиксельные данные из одной текстуры в другую. Это также позволяет копировать из элемента (например, грани кубической карты) или определенного уровня MIP, а также из подобласти текстуры.

Когда вы копируете элемент, он не масштабируется. В результате размеры источника и назначения должны совпадать. Форматы текстур должны быть совместимы, например, TextureFormat.ARGB32. и RenderTextureFormat.ARGB32. Количество выборок MSAA для текстур рендеринга также должно быть одинаковым. Как правило, вы всегда можете копировать абсолютно одинаковые форматы, но совместимость форматов зависит от графического API. На некоторых платформах (например, D3D11) вы также можете копировать между форматами с одинаковой разрядностью.

Вы можете загружать текстуры с различным разрешением, используя QualitySettings.masterTextureLimit. Обратите внимание, что это влияет на CopyTextures, так как вы не можете копировать полный MIP между текстурами с разными значениями лимита основной текстуры. Если вам нужно скопировать между текстурами с другим лимитом основной текстуры, используйте перегрузку на основе региона. Перегрузка на основе области настраивает исходный прямоугольник на основе предела основной текстуры исходной текстуры. Он также регулирует смещение целевого объекта на основе предела основной текстуры целевого объекта. Например, копирование области 128 x 128 из позиции 16,16 в позицию 32,32 приводит к следующему поведению в следующих примерах:

  • Если предел основной текстуры установлен на 0: Unity выполняет все копии, как ожидалось.
  • Если ограничение основной текстуры установлено на 2 и обе текстуры подпадают под ограничение основной текстуры: Unity настраивает исходный прямоугольник на 32x32 и настраивает смещение на 4,4. Unity изменяет смещение назначения на 8x8. Unity выполняет все копии, как и ожидалось, не обращая внимания на настройку предела основной текстуры.
  • Если для ограничения основной текстуры установлено значение 2, источником является обычная текстура, а местом назначения является текстура-массив (текстуры-массивы никогда не подпадают под ограничение основной текстуры): Unity настраивает исходный прямоугольник на 32x32 и настраивает смещение до 4,4. Unity не меняет целевое смещение, которое остается равным 32 x 32.

Аргументы уровня Mipmap всегда применяются к текстуре, загруженной в соответствии с текущим ограничением основной текстуры. Например, текстура 256x256 с лимитом основной текстуры, установленным на 0 mip 1, относится к 128x128 mip. Однако, если предел мастер-текстуры для этой текстуры установлен на 2, mip 1 относится к mip 32x32. Это означает, что во многих случаях при использовании CopyTexture вам не нужно учитывать лимит основной текстуры в своих вызовах. В менее распространенных вызовах (например, при копировании из Texture2D в TextureArray) вам нужно настроить его. Чтобы скопировать текстуры в массив кубической карты, вычислите элемент назначения как 6 * cubemapIndex + faceIndex. В результате шесть граней из кубической карты с индексом 0 являются элементами 0,1,2... 5. Шесть граней из кубической карты с индексом массива 1 имеют 6,7.... 11 и так далее.

Сжатые форматы текстур накладывают некоторые ограничения на CopyTexture с вариантом региона. Например, форматы PVRTC не поддерживаются, так как они не основаны на блоках (для этих форматов вы можете копировать только всю текстуру или весь мип-уровень). Для блочных форматов (например, DXT, ETC) размер области и координаты должны быть кратны размеру блока сжатия. (4 пикселя для DXT).

Если и исходная, и целевая текстуры помечены как "читаемые" (т. е. копия данных существует в системной памяти для чтения/записи на ЦП), эти функции также копируют ее.

На некоторых платформах могут отсутствовать функции копирования всех видов текстур (например, копирование из текстуры рендеринга в обычную текстуру). См. CopyTextureSupport и используйте SystemInfo.copyTextureSupport для проверки.

Вызов Texture2D.Apply, Texture2DArray.Apply или Texture3D.Apply после CopyTexture дает неопределенные результаты, поскольку CopyTexture работает исключительно с данными на стороне графического процессора, тогда как Применить передает данные с процессора на сторону графического процессора.

Смотрите так же: CopyTextureSupport.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3