Странный артефакт при вращении сетки уф

Я создал сферу 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;
    }
}

Это дает мне этот странный артефакт. Что я делаю неправильно? Unity UV артефакт

1 ответ

Это не может быть сделано так, как вы пытаетесь это сделать. Даже если вы выйдете за пределы диапазона [0,1], как предполагает плелурон, на сфере будет линия, где текстура интерполируется от высокой к низкой, и вы получите всю текстуру в одной полосе, как вы видите сейчас.

Исходная сфера решает проблему путем дублирования шва. Одна версия имеет х 0, а другая имеет х 1. Вы не видите его, потому что вершины находятся в том же месте. Если вы хотите решить проблему с помощью УФ-трюков, то единственный вариант - переместить шов, который включает создание новой сетки.

На самом деле самый простой способ вращать планету - оставить текстуру в покое и просто вращать объект! Если по какой-то причине это не вариант, зайдите в материал и найдите плитки и смещения. Если вы используете стандартный шейдер, убедитесь, что вы используете верхний, чуть ниже флажка эмиссии. Если вы измените этот X, вы получите эффект, который пытаетесь создать с помощью сценария, который вы опубликовали.

Другие вопросы по тегам