Unity中带贴图以及动画的模型文件转为 lowpoly 风格的方法

发表于2019-01-23
评论0 5.8k浏览
本篇主要给大家分享的是在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既可。

注意这里会直接修改原模型文件的数据,所以在修改之前请做好备份。

效果:

这里我只是随便找了一个模型,实际上模型的顶点数越少实现出来的效果会越好,就是所谓的低模。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引