Unity中带贴图以及动画的模型文件转为 lowpoly 风格的方法
发表于2019-01-23
本篇主要给大家分享的是在Unity开发中带贴图以及动画的模型文件转为 lowpoly 风格,讲述的是使用代码来修改的方法,其实unity已经给我们提供了设置的方法:Normals选择Calculate,Smoothing Angle调整为0即可。
这里的内容是在这篇文章的基础上进行的修改:Unity Flat Shading实现低多边形(low-poly)效果
原文章中主要是没有提到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既可。
注意这里会直接修改原模型文件的数据,所以在修改之前请做好备份。
效果:
这里我只是随便找了一个模型,实际上模型的顶点数越少实现出来的效果会越好,就是所谓的低模。