Streaming.RequestRegion
Declaration
public static void RequestRegion(Material mat, int stackNameId, Rect r, int mipMap, int numMips);Параметры
| Параметр | Описание |
|---|---|
| мат | Материал, который содержит Виртуальный Сток Текстуры. Виртуальные Стоки Текстуры, содержащиеся в Материале, объявлены в Шейдере Материала. |
| stackNameId | Уникальный идентификатор для имени Виртуального Текстурного Стека, как он объявлен в Shader. Чтобы найти идентификатор для заданного имени свойства Shader, используйте Shader.PropertyToID. |
| r | Прямоугольник в пространстве 0-1 UV, чтобы сделать резидентом. Все вне [0...1 [ x [0...1 [ прямоугольника будет молча игнорироваться. |
| mipMap | Уровень mip, который должен быть резидентным. Mips нумеруются от 0 (= полное разрешение) до n (= самое низкое разрешение), где n — уровень mipmap, который представляет собой одну плитку по размеру. Запросы неверных mips молча игнорируются. |
| numMips | Число уровней mip начиная с 'mipMap', чтобы сделать резидентом. Запросы на неверные mips молча игнорируются. |
Описание
Создайте прямоугольник в пространстве UV, являющемся резидентом для данного Виртуального Стека Текстуры.
Система сделает все возможное, чтобы сделать этот прямоугольник резидентом в запрашиваемом разрешении как можно быстрее, но из-за ограничений времени и памяти эти данные могут занять некоторое время, чтобы стать резидентом или даже никогда не стать резидентом. Эта функция должна вызываться регулярно (предпочтительно каждый кадр), чтобы указать на продолжающийся интерес к этим данным. Когда эта функция больше не вызывается, запрашиваемая область может быть выведена из памяти или доступна только при более низком разрешении. См. Streaming.RequestRegion для примера использования этой функции.
В следующем примере запрашивается уровень mipmap 1024 x 1024 пикселей данного Virtual Texture Stack.
using UnityEngine;
public class GetStackSizeSample : MonoBehaviour { public Material targetMaterial; public string stackName; private bool m_ShouldRequestRegionForVT = false; const float desiredMipmapLevelPixelSize = 1024f;
private void OnBecameVisible() { m_ShouldRequestRegionForVT = true; }
private void OnBecameInvisible() { m_ShouldRequestRegionForVT = false; }
void Update() { if (m_ShouldRequestRegionForVT) { int stackPropertyId = Shader.PropertyToID(stackName);
// Get size in pixels of the stack. int width, height; UnityEngine.Rendering.VirtualTexturing.Streaming.GetTextureStackSize(targetMaterial, stackPropertyId, out width, out height);
// Calculate the index of the 1024 x 1024 mipmap level. int powerOfTwoExponent_RealSize = (int)Mathf.Max(Mathf.Log(width, 2f), Mathf.Log(height, 2f)); int powerOfTwoExponent_DesiredSize = (int)Mathf.Log(desiredMipmapLevelPixelSize, 2f);
// The difference between the real size and the desired size is the same as the mipmap level we want. // For example, to get a 1024 x 1024 mipmap level from a 4096 x 4096 texture, use mipmap level 2. // If the mipmap level is larger than the texture, fall back to the original texture size at mipmap level 0. int mipmapLevel = Mathf.Max(powerOfTwoExponent_RealSize - powerOfTwoExponent_DesiredSize, 0);
// Request this mipmap level to be made resident. UnityEngine.Rendering.VirtualTexturing.Streaming.RequestRegion(targetMaterial, stackPropertyId, new Rect(0.0f, 0.0f, 1.0f, 1.0f), mipmapLevel, UnityEngine.Rendering.VirtualTexturing.System.AllMips); } } }