Mesh 頂點的Normal

美術經常找程序撕逼,我做的頂點在max裏面只有xxx那麼少,但是程序說我再unity看到的就是有XXX那麼多。爲什麼?


因爲有些公共頂點直觀感受是一個,實際上是應該按照三角面的個數來計數的。


同樣。公共頂點的法線也不止一個。


不過,因爲normal是影響光照效果,即在光照下的凹凸平滑程度,所以用插值平均後的Normal代替所有的頂點的各自的normal可使低精度模型看起來平滑




顯示編輯器下顯示 normal 的腳本,參考

using UnityEngine;

[ExecuteInEditMode]
public class ShowNormals : MonoBehaviour {

    public float length = 1;

    public Vector3 bias;

    // Update is called once per frame
    void Update() {
        // 獲取網格法線
        Mesh mesh = GetComponent<MeshFilter>().sharedMesh;

        Vector3[] vertices = mesh.vertices;
        Vector3[] normals = mesh.normals;

        for (var i = 0; i < normals.Length; i++)
        {
            Vector3 pos = vertices[i];
            pos.x *= transform.localScale.x;
            pos.y *= transform.localScale.y;
            pos.z *= transform.localScale.z;
            pos += transform.position + bias;

            Debug.DrawLine
            (
                pos,
                pos + normals[i] * length, Color.red);
        }
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章