Unity shader如何存储uv参数?
问题描述:
在我的着色器中,我通过将vertex.position与某个矩阵相乘来计算uv。 这看起来很好,如果我不移动我的对象,但一旦我移动我的对象或缩放对象,顶点位置将改变,紫外线将是错误的。Unity shader如何存储uv参数?
如果有一种着色器存储参数的方法,像这样,这样我只能在第一次计算uv,然后我只使用该uv值。
if(ifCalculated==false)
{
ifCalculated=true;
uv=CalculateUV();
temp = uv;
}
else
{
uv = temp;
}
答
UV坐标存储在每个顶点的网格中。您可以从代码,而不是从着色器更新它们:
Vector2[] CalculateUV(Vector3[] vertices);
...
if(!ifCalculated)
{
var mesh = GetComponent<MeshFilter>().mesh;
mesh.uv = CalculateUV(mesh.vertices);
ifCalculated = true;
}
但我用texture2dArray,在着色器,我迭代texture2dArray并找到合适的uv.z(数组索引),似乎网格类可是没有texture2dArray中,我发现的壁橱是uv,uv2,uv3,uv4参数,但我需要超过4个纹理 – ywj7931