用新浪微博登录

只需一步,快速搞定

 找回密码
 立即注册

用新浪微博登录

只需一步,快速搞定

查看: 7298|回复: 1
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

667

主题

2111

帖子

5570

积分

LV 11.会员

MS爱好者!!!!

积分
5570

社区居民偶尔光临工蜂最爱沙发在线达人社区平民做个有钱人略有小成常驻会员忠实会员

跳转到指定楼层
楼主
发表于 2018-6-22 17:57:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式 |          

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


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

  • MeshFilter meshFilter = GetComponent();
  • 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 = oldVerts[triangles];
  •             triangles = 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下生成Mes**件,将此文件拖到该模型Mesh Filter组件下的Mesh,此时生成low poly的脚本组件已经无用了,记得移除





完整代码:

  • using UnityEngine;
  • using System.Collections;
  • using UnityEditor;
  • public class FlatShading : MonoBehaviour
  • {
  •     private Mesh mesh;
  •     void Start()
  •     {
  •         var meshFilter = GetComponent();
  •         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 = oldVerts[triangles];
  •             triangles = 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();
  •     }
  • }


**代码


[/tr]
回复

使用道具 举报

签到天数: 345 天

[LV.8]以坛为家I

1568

主题

6667

帖子

2万

积分

LV 14.会员

积分
22180

游聚十周年

沙发
发表于 2018-6-22 20:05:19 | 只看该作者
666   这样的造型太6了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

     
    Archiver|手机版|小黑屋|( 沪ICP备12034951号 )

GMT+8, 2024-4-26 19:32 , Processed in 0.107251 second(s), 29 queries .

© 2001-2011 Powered by Discuz! X3.1

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