mat | 包含虚拟纹理堆栈的材质。材质中包含的虚拟纹理堆栈在材质的着色器中声明。 |
stackNameId | 虚拟纹理堆栈名称的唯一标识符,如着色器中声明的那样。要查找给定着色器属性名称的标识符,请使用 Shader.PropertyToID. |
r | 要在 0-1 UV 空间中设置为常驻的矩形。任何超出 [ 0...1 [ x [ 0...1 [ 矩形的区域将被静默忽略。 |
mipMap | 要设置为常驻的 mip 等级。mip 从 0(= 全分辨率)到 n(= 最低分辨率)编号,其中 n 是单个瓦片大小的 mipmap 等级。请求无效的 mip 将被静默忽略。 |
numMips | 从 'mipMap' 开始要设置为常驻的 mip 等级数量。请求无效的 mip 将被静默忽略。 |
在 UV 空间中为给定的虚拟纹理堆栈设置一个矩形为常驻。
系统将尽最大努力以最快的速度将此矩形设置为请求的分辨率为常驻,但由于时间和内存限制,这些数据可能需要一段时间才能变得常驻,甚至可能永远不会变得常驻。此函数应定期调用(最好每帧调用一次),以指示对这些数据的持续兴趣。当不再调用此函数时,请求的区域可能会从内存中逐出,或者只能以较低的分辨率提供。有关使用此函数的示例,请参见 Streaming.RequestRegion。
以下示例请求给定虚拟纹理堆栈的 1024 x 1024 像素 mipmap 等级。
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); } } }