2017-05-21 10 views
0

私はユニティスフィアを作成し、アルベドテクスチャで標準物質を適用しました。今、私はここでメッシュ回転中の奇妙なアーティファクト

(これはテクスチャを回転させる最も単純な方法であるように見える)、メッシュUVを回転させるようにしようとしているコード

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 artifact

+0

'changeUvs()'の条件を削除します。ユニティは[0,1]以外の範囲をサポートでき、[0.95,1.05]は[0.95,0.05]になるので、テクスチャを伸ばします。 – pleluron

答えて

0

あなたのやり方をすることはできません。プレリュロンが示唆しているように[0,1]の範囲外に出ても、テクスチャが高いから低いまで補間する線が球上にあり、今見ているように単一のバンドでテクスチャ全体を取得します。

オリジナルの球が問題を解決する方法は、複製されたシームを持つことです。 1つのバージョンはx 0を持ち、もう1つのバージョンはx 1です。頂点が同じ場所にあるので、それは表示されません。 uvトリッキーで問題を解決したい場合、唯一の選択肢は継ぎ目を移動することです。これには新しいメッシュの作成が含まれます。

実際に地球を回転させる最も簡単な方法は、テクスチャだけを残して、オブジェクトを回転させることです。これが何らかの理由でオプションでない場合は、マテリアルに入り、タイルとオフセットを探します。標準シェーダを使用している場合は、排出チェックボックスのすぐ下にあるトップシェーダを使用していることを確認してください。そのXを修正すると、投稿したスクリプトで作成しようとしている効果が得られます。

関連する問題