【问题标题】:Weird artefact while rotating mesh uvs旋转网格 uvs 时出现奇怪的伪影
【发布时间】:2017-10-21 01:49:41
【问题描述】:

我创建了一个 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;
    }
}

这给了我这个奇怪的神器。我究竟做错了什么?

【问题讨论】:

  • 删除changeUvs()中的条件。 Unity 可以支持 [0,1] 之外的范围,并且您所做的事情会拉伸纹理,例如 [0.95,1.05] 将变为 [0.95,0.05]。

标签: opengl unity3d uv-mapping


【解决方案1】:

无法按照您尝试的方式完成。即使您按照 pleluron 的建议超出 [0,1] 范围,球体上也会有一条线,纹理从高到低进行插值,并且您会在单个波段中获得整个纹理,如您现在所见。

原始球体解决问题的方法是复制接缝。一个版本有 x 0,另一个版本有 x 1。您看不到它,因为顶点位于同一位置。如果你想用 uv 技巧来解决问题,那么唯一的选择就是移动接缝,这涉及到创建一个新的网格。

实际上,旋转行星最简单的方法是不理会纹理,只旋转对象!如果由于某种原因这不是一个选项,那么进入材料并找到平铺和偏移。如果您使用的是标准着色器,请确保使用顶部的着色器,就在发射复选框的下方。如果您修改该 X,您将获得您尝试使用您发布的脚本创建的效果。

【讨论】:

    猜你喜欢
    • 2017-06-05
    • 1970-01-01
    • 2021-05-14
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    相关资源
    最近更新 更多