版本:Unity 6 (6000.0)
语言英语
  • C#
虚拟纹理功能尚处于实验阶段,尚未准备好投入生产使用。该功能和文档可能会在将来发生变化或被移除。

Streaming.RequestRegion

建议更改

成功!

感谢您帮助我们改进 Unity 文档的质量。虽然我们不能接受所有提交的内容,但我们确实阅读用户提出的每个建议更改,并在适用时进行更新。

关闭

提交失败

由于某种原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们改进 Unity 文档的质量。

关闭

取消

声明

public static void RequestRegion(Material mat, int stackNameId, Rect r, int mipMap, int numMips);

参数

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); } } }