[Unity] Unity Flat Shading实现低多边形(low-poly)效果

查看:5000 |回复:100 | 2016-9-8 16:53:48

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 醉酒風 于 2019-4-28 22:44 编辑

原理:修改Mesh顶点及三角索引


Center.jpg

获取模型的mesh网格,非蒙皮模型通过获取MeshFilter组件得到Mesh,带有蒙皮的模型通过Skinned Mesh Renderer组件获取Mesh。

  1. MeshFilter meshFilter = GetComponent<MeshFilter>();  
  2. Mesh mesh = meshFilter.mesh;  

点击此处复制文本

修改模型mesh顶点以及三角索引:

  1. Vector3[] oldVerts = mesh.vertices;//保存当前Mesh顶点  
  2.         int[] triangles = mesh.triangles;//三角索引数组  
  3.   
  4.         Vector3[] verts = new Vector3[triangles.Length];//用于保存新的顶点信息  
  5.   
  6.         for (int i = 0; i < triangles.Length; i++)  
  7.         {  
  8.             verts[i] = oldVerts[triangles[i]];  
  9.             triangles[i] = i;  
  10.         }  
  11.   
  12.         mesh.vertices = verts;//更新Mesh顶点  
  13.         mesh.triangles = triangles;//更新索引  
  14.         mesh.RecalculateBounds();//重新计算边界  
  15.         mesh.RecalculateNormals();//重新计算法线  
点击此处复制文本

将脚本赋予模型,运行即可得到low poly效果。为了避免每次执行进行顶点的计算以及修改,可以加上下面代码将修改后的Mesh保存成文件:

  1. string fileName = "Assets/FileName.asset";//要保存成的文件路径及文件名 文件格式为.asset  
  2.         AssetDatabase.CreateAsset(meshFilter.sharedMesh, fileName);//创建文件  
  3.         AssetDatabase.SaveAssets();//保存数据  
点击此处复制文本

运行程序后会在Assets下生成Mesh文件,将此文件拖到该模型Mesh Filter组件下的Mesh,此时生成low poly的脚本组件已经无用了,记得移除


Center.jpg



完整代码:

  1. using UnityEngine;  
  2. using System.Collections;  
  3. using UnityEditor;  
  4. public class FlatShading : MonoBehaviour  
  5. {  
  6.   
  7.     private Mesh mesh;  
  8.     void Start()  
  9.     {  
  10.         var meshFilter = GetComponent<MeshFilter>();  
  11.         mesh = meshFilter.mesh;  
  12.         Vector3[] oldVerts = mesh.vertices;  
  13.         int[] triangles = mesh.triangles;  
  14.   
  15.         Vector3[] verts = new Vector3[triangles.Length];  
  16.   
  17.         for (int i = 0; i < triangles.Length; i++)  
  18.         {  
  19.             verts[i] = oldVerts[triangles[i]];  
  20.             triangles[i] = i;  
  21.         }  
  22.   
  23.         mesh.vertices = verts;  
  24.         mesh.triangles = triangles;  
  25.         mesh.RecalculateBounds();  
  26.         mesh.RecalculateNormals();  
  27.   
  28.         //save file  
  29.         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";  
  30.         AssetDatabase.CreateAsset(meshFilter.sharedMesh, fileName);  
  31.         AssetDatabase.SaveAssets();  
  32.     }  
  33. }  
点击此处复制文本



评分

参与人数 2元素币 +20 活跃度 +35 展开 理由
小小橘子 + 15 阅贴无数,楼主最强!
成林 + 20 + 20 可以。,这很强势

查看全部评分

2016-9-8 16:53:48  
 赞 赞 2

使用道具 登录

100个回答,把该问题分享到群,邀请大神一起回答。
3#
不错不错。。。。。。。。。
回复 收起回复
2016-9-9 09:35:12   回复
 赞 赞 2

使用道具 登录

4#
我们先定一个能达到的小目标,先赚它一亿元素币
回复 收起回复
2016-9-9 09:44:45   回复
 赞 赞 2

使用道具 登录

5#
好资源~!点赞
回复 收起回复
2016-9-13 09:26:34   回复
 赞 赞 2

使用道具 登录

6#
{:1_144:}
回复 收起回复
2016-10-1 14:19:59   回复
 赞 赞 2

使用道具 登录

7#
不错,一两句画就能解决一个大问题。不过生成的低模我还没有想到有什么好的用途。
回复 收起回复
2016-10-10 08:14:52   回复
 赞 赞 2

使用道具 登录

10#
不错
回复 收起回复
2017-2-19 18:29:23   回复
 赞 赞 2

使用道具 登录

11#
学习了
回复 收起回复
2018-10-18 00:15:07   回复
 赞 赞 2

使用道具 登录

12#
符合法规和规范
回复 收起回复
2018-10-18 00:29:30   回复
 赞 赞 2

使用道具 登录

13#
感谢分享Thanks&#9834;(&#65381;ω&#65381;)&#65417;
回复 收起回复
2018-10-18 01:20:30   回复
 赞 赞 2

使用道具 登录

14#

此帖必火!鉴定完毕!
回复 收起回复
2018-10-18 10:09:25   回复
 赞 赞 2

使用道具 登录

15#
写谢楼主分享~!辛苦辛苦
回复 收起回复
2018-10-18 10:11:02   回复
 赞 赞 2

使用道具 登录

16#
666666666
回复 收起回复
2018-10-18 10:13:54   回复
 赞 赞 2

使用道具 登录

17#
路过围观~感谢分享
回复 收起回复
2018-10-18 10:15:07   回复
 赞 赞 2

使用道具 登录

18#
写谢楼主分享~!辛苦辛苦
回复 收起回复
2018-10-18 10:24:34   回复
 赞 赞 2

使用道具 登录

19#
看着很不错的样子
回复 收起回复
2018-10-18 10:25:46   回复
 赞 赞 2

使用道具 登录

20#
这世上没有什么是元素币搞不定的,如果有,那就用更多!
回复 收起回复
2018-10-19 10:12:40   回复
 赞 赞 2

使用道具 登录

CG 游戏行业专业问题

Unity3D技术手机游戏引擎手游引擎
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表