unity 中帶貼圖以及動畫的模型檔案轉為 lowpoly 風格的方法
阿新 • • 發佈:2019-02-06
本篇講述的是使用程式碼來修改的方法,其實unity已經給我們提供了設定的方法:Normals選擇Calculate,Smoothing Angle調整為0即可。
原文章中主要是沒有提到UV以及骨骼與定點的繫結方法。
由於實現lowpoly的風格其實就是將原來的1個點複製為多個點,所以我們只要在複製定點的過程中將相應的頂點屬性一同複製即可。
這裡直接給出完整程式碼:
using UnityEngine; using UnityEditor; public class LowPolyTool : MonoBehaviour { //製作Unity頂部選單欄 [MenuItem("LowPolyTool/LowPoly")] static void LowPoly() { Transform[] transforms = Selection.transforms; for (int i = 0; i < transforms.Length; i++){ LowPoly(transforms[i]); } } static void LowPoly(Transform t){ MeshFilter meshFilter = t.GetComponent<MeshFilter>(); Mesh mesh = meshFilter.sharedMesh; Vector3[] oldVerts = mesh.vertices;//儲存當前Mesh頂點 int[] triangles = mesh.triangles;//三角索引陣列 Vector2[] olduvs = mesh.uv; BoneWeight[] oldBoneWeights = mesh.boneWeights; Vector3[] verts = new Vector3[triangles.Length];//用於儲存新的頂點資訊 Vector2[] uvs = new Vector2[triangles.Length];//用於儲存新的uv資訊 BoneWeight[] boneWeights = new BoneWeight[triangles.Length];//用於儲存新的骨骼資訊 for (int i = 0; i < triangles.Length; i++) { verts[i] = oldVerts[triangles[i]]; uvs[i] = olduvs[triangles[i]]; boneWeights[i] = oldBoneWeights[triangles[i]]; triangles[i] = i; } mesh.vertices = verts;//更新Mesh頂點 mesh.triangles = triangles;//更新索引 mesh.uv = uvs;//更新uv資訊 mesh.boneWeights = boneWeights;//更新骨骼資訊 mesh.RecalculateBounds();//重新計算邊界 mesh.RecalculateNormals();//重新計演算法線 } }
將指令碼放到任意Editor資料夾中,會在選單欄看到LowPolyTool/LowPoly選賢,將模型檔案拖入場景中並選中,點選LowPoly既可。
注意這裡會直接修改原模型檔案的資料,所以在修改之前請做好備份。
效果:
這裡我只是隨便找了一個模型,實際上模型的頂點數越少實現出來的效果會越好,就是所謂的低模。