找回密码
注册

QQ登录

只需一步,快速开始

独立游戏 >
独立动画 >
独立音乐 >

官方直通车 Unite 2019|Unity的光照烘焙技术(上)

Unity的技术美术李万里在Unite Shanghai 2019大会的演讲内容,他 ...

Unity3d 2019室内光照贴图lightmap快速烘焙

下面以一个小客厅为例,和童鞋们一起讨论的室内烘焙,一方面是对 ...

卷钱跑路的国产手游,还骗了一波日本人

网上说它‘半夜跑路’了,但其实不是逃跑,而是‘本来就不在’。 ...

Steam“成就游戏”的前世与今生

Zup4!和Oik的发售,所谓的『成就游戏』又遭到了诸多玩家的关注, ...

这套unity阴影优化方案,可以减少超40倍内存消耗

在开发游戏的过程中使用了一个投影式阴影系统,它类似阴影贴图, ...

好评返现?在Steam上刷好评或许没你想的那么简单

SteamCN蒸汽动力论坛的网友爆料,近日Steam上有部分国产游戏采用 ...

你小时候玩的小游戏,在历史上深深影响了游戏产业

很久很久以前,我们玩游戏关心的不是大作和小品,而是好不好玩。 ...

UnityShader学习笔记(一)

一、什么是Shader? shader中文名叫着色器,顾名思义就是给物体 ...

UnityShader学习笔记(二)

上一篇我们讲的如何判断游戏是否运行在模拟器上面,实现起来其实 ...

UnityShader学习笔记(三)

上篇我们讲了三种shader类型我们需要怎么选择,大多数情况下我们 ...

作者: 九艺网
查看: 80|回复: 1
搜索

more +最新主题Download

more +社区更新Forums

more +随机图赏Gallery

官方直通车 Unite 2019|Unity的光照烘焙技
Unity3d 2019室内光照贴图lightmap快速烘焙
卷钱跑路的国产手游,还骗了一波日本人
Steam“成就游戏”的前世与今生

more +文章更新News

[综合技术] Unity导入模型出现多层UV问题解决

[复制链接]
九艺网 发表于 2019-3-19 11:44:37 | 显示全部楼层 |阅读模式
查看: 80|回复: 1

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
在做项目优化的时候发现,游戏中的模型占用了很高的内存,然后就怀疑是美术在做模型的时候没有把uv2,uv3,color等无用的通道去掉,然后就去问了美术,美术说她并没有开启这些通道,我也去max中检查了一下也没发现什么异常的情况,在max中看确实只有一层uv但是在unity里面就可以看见模型上面有很多层uv了,带着这个问题去查了下资料,摸索着使用了下max,然后就有了下面给大家分享的Unity导入模型出现多层UV问题解决方法。

方法一:


在max中进行设置把没有必要的通道全部clear掉,具体的操作请看下面的截图:
5c6f5ecf7e3cb.jpg


在这个界面中美术可以把相应的不需要的通道关掉,这样在导出的时候就不会附带这些通道了,如果想去掉color通道的话直接去掉alpha通道就行。

方法二:

程序这边进行处理,做一个工具,对每个导入到unity中的模型代码中清除相应的通道,具体的代码如下:
  1. public class ClearModelUV:AssetPostprocessor  {
  2.     //AssetPostprocessor这个类是unity自带的,会在导入资源的时候自动调用,
  3.     //可以在这个类中实现对资源的处理。
  4.     //OnPostprocessModel这个函数在资源导入到unity被存成prefabs最后阶段被调用
  5.     //传入的gameobject就是被导入的资源的Gameobject
  6.     //这个类还有一个OnPreprocessModel的方法会比这个方法提前点调用。具体用法
  7.     //和前者差不多
  8.     void OnPostprocessModel(GameObject rImaportModel)
  9.     {
  10.         this.ClearMeshUVAndColorChannel(rImaportModel);
  11.     }
  12.     private void ClearMeshUVAndColorChannel(GameObject rImportModel)
  13.     {
  14.         List<Vector2> rNewUV = null;
  15.         List<Color32> rNewColor = null;
  16.         var rFilters= rImportModel.GetComponentsInChildren<MeshFilter>();
  17.         for (int filter_index = 0; filter_index < rFilters.Length; filter_index++)
  18.         {
  19.             rFilters[filter_index].sharedMesh.SetColors(rNewColor);
  20.             rFilters[filter_index].sharedMesh.SetUVs(1, rNewUV);
  21.             rFilters[filter_index].sharedMesh.SetUVs(2, rNewUV);
  22.             rFilters[filter_index].sharedMesh.SetUVs(3, rNewUV);
  23.          }
  24.     }
复制代码
以上就是解决导入的模型存在多层UV问题的方法。

注:由于unity的光照贴图会自动占用uv2通道,而且你的项目中又使用的是动态加载光照贴图的方式的话,最好不要在导入模型的时候把UV2设置为null,如果你这样做了有可能会导致光照贴图显示不出来的问题。


回复

使用道具 举报

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

本版积分规则

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