前文所说,贴图多UV,直接命名对应贴图就可以。

模型的多套UV,则需要在3DMAX里编辑。

这篇文章主要解决两个问题:

  1. 如何正确使用多模型UV? 从3DMAX导出,到shader使用
  2. 如何优化模型导出的内存占用?

1.模型导出会有几套UV?

如果在3d模型中只做了一套uv,将模型导入unity的时候,在导入设置中勾选Generate Lightmap UVs, unity会自动为我们生成用于光照贴图的uv1,和用于动态光照的uv2

比如Unity自带的物体box,sphere就自带两套uv

第一套是正常的,比如方块可以每个面是同一个uv,

但是第二套需要烘焙光照信息,所以默认是全展开,纹理看出来要小些。

也有一些材质会用到四套UV,比如Unity的speedtree。

2.模型多UV有什么作用

做很多效果时,使用多UV可以避免使用多材质,或者多贴图,性能更好。

其实额外的UV可以替代很多mask贴图实现的效果。

3. 如何自己在模型中添加第二套UV

3DMax和maya等软件都能对模型加多套uv

注意模型在fbx里可以保留多套uv,但是obj里只能保留默认的第一套

另外unity里现在貌似支持最多四套

开始在3DMAX里制作两套UV

uv0
UV1

这是我们刚才操作过的茶壶,现在它多出了个MAP2,也就是我们的第二套UV。

我们使用下面的Shader在Unity里测试:

Shader "UV/multiTextureUV" {Properties{_MainTex("Texture", 2D) = "white" { }}SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#pragma target 3.0sampler2D _MainTex; uniform float4 _MainTex_ST;struct appdata {float4 vertex : POSITION;// 多套uv的语义声明float2 texUV0 : TEXCOORD0;float2 texUV1 : TEXCOORD1;float2 uv3 : TEXCOORD2;float2 uv4 : TEXCOORD3;float2 uv5 : TEXCOORD4;};struct v2f {float4 pos : SV_POSITION;float2 uv_MainTex : TEXCOORD0;float2 uv2_Tex_002 : TEXCOORD1;};//顶点函数v2f vert(appdata input){v2f o;o.pos = UnityObjectToClipPos(input.vertex);o.uv_MainTex = input.texUV0;o.uv2_Tex_002 = input.texUV1;return o;}fixed4 frag(v2f i) : SV_Target{fixed2 main_uv = i.uv_MainTex;fixed2 _Tex_2_uv = i.uv2_Tex_002;//在这里替换测试//如果没有多套uv 后面的值还是会返回uv0//return tex2D(_MainTex, _Tex_2_uv);return tex2D(_MainTex, main_uv);}ENDCG}}
}

结果如上,我们实现了 不同模型UV的采样。

当然这个是会影响烘焙光照的。 因为Unity默认使用第二套UV作为lightmap的采样UV。

如果我们导入的模型使用了第二套UV,Unity就不会自动给模型加入第二套UV了。

4.解决unity导入模型内存占用

4. 1删除color

经过验证,在3DMAX里,制作一个模型导出,一般情况,美术人员没有手动修改,只会多出一个color,然而我们大多数情况不需要,可以删除。

如果想去掉color通道的话直接去掉alpha通道就行。

我们把刚才茶壶的color通道删除,惊喜的发现,模型变小了,并且它占用Unity的内存也会变小。

4. 2删除多层UV通道

某些时候,因为美术的一些意外操作,会引入多个我们不需要的UV通道。

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

如果物体不需要烘培,你自己也不使用uv2,则可以删除该通道。

方法一:

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

方法二:

程序这边进行处理,做一个工具,对每个导入到unity中的模型代码中清除相应的通道,具体的代码如下

public class ClearModelUV:AssetPostprocessor

{

void OnPostprocessModel(GameObject rImaportModel)

{

this.ClearMeshUVAndColorChannel(rImaportModel);

}

private void ClearMeshUVAndColorChannel(GameObject rImportModel)

{

List<Vector2> rNewUV = null;

List<Color32> rNewColor = null;

var rFilters= rImportModel.GetComponentsInChildren<MeshFilter>();

for (int filter_index = 0; filter_index < rFilters.Length; filter_index++)

{

rFilters[filter_index].sharedMesh.SetColors(rNewColor);

rFilters[filter_index].sharedMesh.SetUVs(1, rNewUV);

rFilters[filter_index].sharedMesh.SetUVs(2, rNewUV);

rFilters[filter_index].sharedMesh.SetUVs(3, rNewUV);

}

}

}

引用链接:

unity中多套uv set理解和应用​blog.csdn.net

另特别感谢 “华狮虎 ”帮助我在3DMAX里制作UV通道和验证效果。

unity 批量导入模型工具_零基础的Unity图形学笔记3:使用多模型UV与优化模型导出...相关推荐

  1. python批量下载文件教程_零基础Python教程:教你爬取天堂网1920*1080大图片(批量下载)...

    这篇文章将针对上篇文章的未尽事宜进行完善,完成图片的批量抓取. /2 图片网址解析/ 1. 我们首先来分析一下这个图片的地址在哪里.我们选择图片,然后右击网页检查,可以看到图片的路径,如下图所示. 2 ...

  2. 计算机图形学多边形填充代码_零基础学计算机图形学太难?或许你缺的只是一本好书...

    雷锋网 AI 科技评论按,计算机图形学是一个有趣的话题--如何利用算法和一些几何数据制作玩具总动员?这不仅对于普通的电影迷来说是一个神秘的话题,而且对于那些还没有接触过它的世界级工程师来说也非常有吸引 ...

  3. 零基础用Unity制作你的第一个游戏(1)

    零基础用Unity制作你的第一个游戏(1) 1.开发环境 2.创建项目 3.Unity界面基本介绍 1.界面介绍 2.场景视图操作 4.创建对象 1.创建地板 2.创建主角 5.不能缺少的仪式感(让游 ...

  4. 零基础入门 Unity 之 UGUI 详解专栏 | 寻找C站宝藏

    零基础入门 Unity 之 UGUI 详解专栏 | 寻找C站宝藏 六大推荐理由 理由一:系统 理由二:详细 理由三:专业 理由四:图解 理由五:深度 理由六:实例 一键直达:<UGUI 控件详解 ...

  5. 数据结构和算法_零基础入门01

    数据结构和算法_零基础入门01 一.数据结构是什么? 逻辑结构.物理结构 二.算法 算法的五个基本特征 算法设计的要求 b站学习小甲鱼的数据结构与算法,自留笔记. 程序设计=数据结构+算法 一.数据结 ...

  6. 【PM学习笔记】酸梅干超人 - 零基础学Figma学习笔记

    原视频链接: B站视频 零基础学Figma学习笔记 心得体会 第1课 - 苹果商店页设计 第2课 - 线性图标设计 第3课 - 面性图标设计 第4课 玻璃拟态页设计 第5课 样式组件功能入门 第6课 ...

  7. AI Studio 飞桨 零基础入门深度学习笔记6.3-手写数字识别之数据处理

    AI Studio 飞桨 零基础入门深度学习笔记6.3-手写数字识别之数据处理) 概述 前提条件 读入数据并划分数据集 扩展阅读:为什么学术界的模型总在不断精进呢? 训练样本乱序.生成批次数据 校验数 ...

  8. Java零基础学习全套视频笔记

    Java零基础学习全套视频笔记 一.Java基础 1.注释 注释并不会被执行,是给我们写代码的人看的,防止项目结构代码太多忘记代码相关功能. 书写注释是一个非常好的习惯,平时写代码也一定要注意规范. ...

  9. AI Studio 飞桨 零基础入门深度学习笔记4-飞桨开源深度学习平台介绍

    AI Studio 飞桨 零基础入门深度学习笔记4-飞桨开源深度学习平台介绍 深度学习框架 深度学习框架优势 深度学习框架设计思路 飞桨开源深度学习平台 飞桨开源深度学习平台全景 框架和全流程工具 模 ...

最新文章

  1. php打印从1到1000,输入一个链表的头节点,从尾到头打印每个节点的值,利用PHP如何实现?...
  2. WIN7系统开题提示loli.vbs 操作超时怎么办
  3. java字符流实际上也是字节,[Java教程]Java字节流与字符流的区别
  4. Go语言学习资料大全
  5. 【Kafka】Could not find or load main class kafka.tools.ConsumerOffsetChecker
  6. Excel/WPS表格怎么设置输入密码才能打开文件
  7. leetcode python3 简单题141. Linked List Cycle
  8. 在Hadoop集群实施成功后再次格式化名称节点,datanode无法加入集群的处理办法...
  9. sql server 2008 镜像挂起
  10. HDFS原理(超详解)
  11. Android 中东阿拉伯语适配,看这一篇够了
  12. 小米5s安装xpose 上
  13. 将IFC模型转换为Revit模型后减肥
  14. 病毒+蠕虫+bot+rootkit
  15. 计算机视觉最新进展概览2021年10月31日到2021年11月6日
  16. 零点漂移、零点补偿问题
  17. 华为有望解决5G射频芯片问题,5G手机或将回归
  18. Eolink 征文活动- -后端研发需要的API文档工具
  19. Audiority Effects Plugin Bundle 2022.3 CE-win 效果器插件合集包
  20. Fama-Macbeth回归:EAP.fama_macbeth

热门文章

  1. python中的内置函数怎么学_python内部函数学习(九)
  2. matlab factor函数,matlab中因子分析的函数factoran如何使用??
  3. cadshx字体怎么安装_福利 | 关于PPT字体,你应该知道的几件事...字体包福利见文末...
  4. 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
  5. 电脑如何测网速_Macbook Pro怎么查看网速Mac怎么测网速?
  6. Pycharm 2018 虚拟环境创建及解释器的设置(小白图解教程)
  7. 乐鑫代理启明云端分享|基于ESP32-S2彩色触摸屏86面板方案
  8. 多线程c语言,如何用C语言实现多线程
  9. TVS二极管电压6V,有哪些型号?
  10. DFN封装系列ESD静电保护器件