Unity Flat Shading实现低多边形(low-poly)效果
2016-01-24 16:32
423 查看
原理:修改Mesh顶点及三角索引
获取模型的mesh网格,非蒙皮模型通过获取MeshFilter组件得到Mesh,带有蒙皮的模型通过Skinned Mesh Renderer组件获取Mesh。
MeshFilter meshFilter = GetComponent<MeshFilter>(); Mesh mesh = meshFilter.mesh;
修改模型mesh顶点以及三角索引:
Vector3[] oldVerts = mesh.vertices;//保存当前Mesh顶点 int[] triangles = mesh.triangles;//三角索引数组 Vector3[] verts = new Vector3[triangles.Length];//用于保存新的顶点信息 for (int i = 0; i < triangles.Length; i++) { verts[i] = oldVerts[triangles[i]]; triangles[i] = i; } mesh.vertices = verts;//更新Mesh顶点 mesh.triangles = triangles;//更新索引 mesh.RecalculateBounds();//重新计算边界 mesh.RecalculateNormals();//重新计算法线
将脚本赋予模型,运行即可得到low poly效果。为了避免每次执行进行顶点的计算以及修改,可以加上下面代码将修改后的Mesh保存成文件:
string fileName = "Assets/FileName.asset";//要保存成的文件路径及文件名 文件格式为.asset AssetDatabase.CreateAsset(meshFilter.sharedMesh, fileName);//创建文件 AssetDatabase.SaveAssets();//保存数据
运行程序后会在Assets下生成Mesh文件,将此文件拖到该模型Mesh Filter组件下的Mesh,此时生成low poly的脚本组件已经无用了,记得移除
完整代码:
using UnityEngine; using System.Collections; using UnityEditor; public class FlatShading : MonoBehaviour { private Mesh mesh; void Start() { var meshFilter = GetComponent<MeshFilter>(); mesh = meshFilter.mesh; Vector3[] oldVerts = mesh.vertices; int[] triangles = mesh.triangles; Vector3[] verts = new Vector3[triangles.Length]; for (int i = 0; i < triangles.Length; i++) { verts[i] = oldVerts[triangles[i]]; triangles[i] = i; } mesh.vertices = verts; mesh.triangles = triangles; mesh.RecalculateBounds(); mesh.RecalculateNormals(); //save file string fileName = "Assets/" + System.DateTime.Now.Year.ToString()+ System.DateTime.Now.Month.ToString()+ System.DateTime.Now.Day.ToString()+ System.DateTime.Now.Hour.ToString()+ System.DateTime.Now.Minute.ToString()+ System.DateTime.Now.Second.ToString() + ".asset"; AssetDatabase.CreateAsset(meshFilter.sharedMesh, fileName); AssetDatabase.SaveAssets(); } }
相关文章推荐
- [Unity3d][NGUI]打包NGUI预制件成Assetbundle 两种思路.
- unity, StartCoroutine and StopCoroutine
- 【Unity Shader】Shadow Caster、RenderType和_CameraDepthTexture
- unity3d之刚体碰撞器和触发器的一些知识
- Unity学习之路(1)
- unity 安装
- 【Unity Shader】概述以及Diffuse shader和unity5新功能Standard shader
- Unity实现残影效果
- Unity 5.3配置开发环境、安卓环境
- Unity3D-NGUI动态加载图片
- unity ai car demo
- Unity5.3 AssetBundleName批量赋值
- unity学习笔记3
- unity Material之tilling和offset属性
- Unity3d的脚本类为什么要尽量避免继承MonoBehaviour类
- 初学unity(简单的视觉欺骗)
- Unity多线程(Thread)和主线程(MainThread)交互使用类——Loom工具分享
- Unity3D 的 Physics Materital
- [Unity插件]Behavior Designer
- unity中使用sur着色器编写卡通光照模型。