Объявление
public static void RequestRegion(Material mat, int stackNameId, Rect r, int mipMap, int numMips);Параметры
mat | Материал, содержащий виртуальный стек текстур. Стеки виртуальных текстур, содержащиеся в материале, объявляются в шейдере материала. |
stackNameId | Уникальный идентификатор имени виртуального стека текстур, объявленный в шейдере. Чтобы найти идентификатор для заданного имени свойства Shader, используйте Shader.PropertyToID. |
r | Прямоугольник в пространстве 0-1 UV, чтобы сделать резидентным. Все, что находится за пределами прямоугольника [ 0...1 [ x [ 0...1 [ ], будет молча игнорироваться. |
mipMap | MIP-уровень, который нужно сделать резидентным. Мипы нумеруются от 0 (= полное разрешение) до n (= самое низкое разрешение), где n — это уровень мипмапа, который соответствует размеру одного тайла. Запрос недействительных мипов молча игнорируется. |
numMips | Количество мип-уровней, начиная с 'mipMap', которые нужно сделать резидентными. Запрос недействительных мипов молча игнорируется. |
Описание
Создаёт прямоугольник в пространстве UV, резидентный для данного стека виртуальных текстур.
Система сделает все возможное, чтобы этот прямоугольник стал резидентным с запрошенным разрешением как можно быстрее, но из-за ограничений времени и памяти может потребоваться некоторое время, чтобы эти данные стали резидентными или даже никогда не стали резидентными. Эту функцию следует вызывать регулярно (предпочтительно каждый кадр), чтобы указать на постоянный интерес к этим данным. Когда эта функция больше не вызывается, запрошенная область может быть вытеснена из памяти или доступна только с более низким разрешением. Пример использования этой функции см. в разделе Streaming.RequestRegion.
using System;
using UnityEngine;
/**
* Request the 256x256 pixel mipmap level of a given Virtual Texture Stack.
*/
public class GetStackSizesample : MonoBehaviour
{
public Material targetMaterial;
public string stackName;
void Update()
{
int stackPropertyId = Shader.PropertyToID(stackName);
// Получаем размер стека в пикселях.
int width, height;
UnityEngine.Rendering.VirtualTexturing.Streaming.GetTextureStackSize(targetMaterial, stackPropertyId, out width, out height);
// Рассчитываем индекс мип 256x256 (или 0 мип, если размер текстуры меньше 256x256)
int textureMip = (int)Math.Max(Mathf.Log(width, 2f), Mathf.Log(height, 2f));
const int baseMip = 8;
int mipLevel = Math.Max(textureMip - baseMip, 0);
// Запросить этот mip, чтобы сделать его резидентным
UnityEngine.Rendering.VirtualTexturing.Streaming.RequestRegion(targetMaterial, stackPropertyId, new Rect(0.0f, 0.0f, 1.0f, 1.0f), mipLevel, UnityEngine.Rendering.VirtualTexturing.System.AllMips);
}
}