Странный артефакт при вращении сетки уф
Я создал сферу Unity и применил стандартный материал с текстурой альбедо. Теперь я пытаюсь повернуть сетку uvs (похоже, это самый простой способ поворота текстуры)
Вот код
using UnityEngine;
public class GameController : MonoBehaviour
{
public GameObject player;
public float rotationValue;
void Start ()
{
Mesh mesh = player.GetComponent<MeshFilter>().mesh;
Vector2[] uvs = mesh.uv;
mesh.uv = changeUvs(uvs);
}
private Vector2[] changeUvs (Vector2[] originalUvs)
{
for (int i = 0; i < originalUvs.Length; i++)
{
originalUvs[i].x = originalUvs[i].x + rotationValue;
if (originalUvs[i].x > 1)
{
originalUvs[i].x = originalUvs[i].x - 1f;
}
}
return originalUvs;
}
}
Это дает мне этот странный артефакт. Что я делаю неправильно?
1 ответ
Это не может быть сделано так, как вы пытаетесь это сделать. Даже если вы выйдете за пределы диапазона [0,1], как предполагает плелурон, на сфере будет линия, где текстура интерполируется от высокой к низкой, и вы получите всю текстуру в одной полосе, как вы видите сейчас.
Исходная сфера решает проблему путем дублирования шва. Одна версия имеет х 0, а другая имеет х 1. Вы не видите его, потому что вершины находятся в том же месте. Если вы хотите решить проблему с помощью УФ-трюков, то единственный вариант - переместить шов, который включает создание новой сетки.
На самом деле самый простой способ вращать планету - оставить текстуру в покое и просто вращать объект! Если по какой-то причине это не вариант, зайдите в материал и найдите плитки и смещения. Если вы используете стандартный шейдер, убедитесь, что вы используете верхний, чуть ниже флажка эмиссии. Если вы измените этот X, вы получите эффект, который пытаетесь создать с помощью сценария, который вы опубликовали.