unity 批量导入模型工具_零基础的Unity图形学笔记3:使用多模型UV与优化模型导出...
前文所说,贴图多UV,直接命名对应贴图就可以。
模型的多套UV,则需要在3DMAX里编辑。
这篇文章主要解决两个问题:
- 如何正确使用多模型UV? 从3DMAX导出,到shader使用
- 如何优化模型导出的内存占用?
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
这是我们刚才操作过的茶壶,现在它多出了个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与优化模型导出...相关推荐
- python批量下载文件教程_零基础Python教程:教你爬取天堂网1920*1080大图片(批量下载)...
这篇文章将针对上篇文章的未尽事宜进行完善,完成图片的批量抓取. /2 图片网址解析/ 1. 我们首先来分析一下这个图片的地址在哪里.我们选择图片,然后右击网页检查,可以看到图片的路径,如下图所示. 2 ...
- 计算机图形学多边形填充代码_零基础学计算机图形学太难?或许你缺的只是一本好书...
雷锋网 AI 科技评论按,计算机图形学是一个有趣的话题--如何利用算法和一些几何数据制作玩具总动员?这不仅对于普通的电影迷来说是一个神秘的话题,而且对于那些还没有接触过它的世界级工程师来说也非常有吸引 ...
- 零基础用Unity制作你的第一个游戏(1)
零基础用Unity制作你的第一个游戏(1) 1.开发环境 2.创建项目 3.Unity界面基本介绍 1.界面介绍 2.场景视图操作 4.创建对象 1.创建地板 2.创建主角 5.不能缺少的仪式感(让游 ...
- 零基础入门 Unity 之 UGUI 详解专栏 | 寻找C站宝藏
零基础入门 Unity 之 UGUI 详解专栏 | 寻找C站宝藏 六大推荐理由 理由一:系统 理由二:详细 理由三:专业 理由四:图解 理由五:深度 理由六:实例 一键直达:<UGUI 控件详解 ...
- 数据结构和算法_零基础入门01
数据结构和算法_零基础入门01 一.数据结构是什么? 逻辑结构.物理结构 二.算法 算法的五个基本特征 算法设计的要求 b站学习小甲鱼的数据结构与算法,自留笔记. 程序设计=数据结构+算法 一.数据结 ...
- 【PM学习笔记】酸梅干超人 - 零基础学Figma学习笔记
原视频链接: B站视频 零基础学Figma学习笔记 心得体会 第1课 - 苹果商店页设计 第2课 - 线性图标设计 第3课 - 面性图标设计 第4课 玻璃拟态页设计 第5课 样式组件功能入门 第6课 ...
- AI Studio 飞桨 零基础入门深度学习笔记6.3-手写数字识别之数据处理
AI Studio 飞桨 零基础入门深度学习笔记6.3-手写数字识别之数据处理) 概述 前提条件 读入数据并划分数据集 扩展阅读:为什么学术界的模型总在不断精进呢? 训练样本乱序.生成批次数据 校验数 ...
- Java零基础学习全套视频笔记
Java零基础学习全套视频笔记 一.Java基础 1.注释 注释并不会被执行,是给我们写代码的人看的,防止项目结构代码太多忘记代码相关功能. 书写注释是一个非常好的习惯,平时写代码也一定要注意规范. ...
- AI Studio 飞桨 零基础入门深度学习笔记4-飞桨开源深度学习平台介绍
AI Studio 飞桨 零基础入门深度学习笔记4-飞桨开源深度学习平台介绍 深度学习框架 深度学习框架优势 深度学习框架设计思路 飞桨开源深度学习平台 飞桨开源深度学习平台全景 框架和全流程工具 模 ...
最新文章
- php打印从1到1000,输入一个链表的头节点,从尾到头打印每个节点的值,利用PHP如何实现?...
- WIN7系统开题提示loli.vbs 操作超时怎么办
- java字符流实际上也是字节,[Java教程]Java字节流与字符流的区别
- Go语言学习资料大全
- 【Kafka】Could not find or load main class kafka.tools.ConsumerOffsetChecker
- Excel/WPS表格怎么设置输入密码才能打开文件
- leetcode python3 简单题141. Linked List Cycle
- 在Hadoop集群实施成功后再次格式化名称节点,datanode无法加入集群的处理办法...
- sql server 2008 镜像挂起
- HDFS原理(超详解)
- Android 中东阿拉伯语适配,看这一篇够了
- 小米5s安装xpose 上
- 将IFC模型转换为Revit模型后减肥
- 病毒+蠕虫+bot+rootkit
- 计算机视觉最新进展概览2021年10月31日到2021年11月6日
- 零点漂移、零点补偿问题
- 华为有望解决5G射频芯片问题,5G手机或将回归
- Eolink 征文活动- -后端研发需要的API文档工具
- Audiority Effects Plugin Bundle 2022.3 CE-win 效果器插件合集包
- Fama-Macbeth回归:EAP.fama_macbeth
热门文章
- python中的内置函数怎么学_python内部函数学习(九)
- matlab factor函数,matlab中因子分析的函数factoran如何使用??
- cadshx字体怎么安装_福利 | 关于PPT字体,你应该知道的几件事...字体包福利见文末...
- 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
- 电脑如何测网速_Macbook Pro怎么查看网速Mac怎么测网速?
- Pycharm 2018 虚拟环境创建及解释器的设置(小白图解教程)
- 乐鑫代理启明云端分享|基于ESP32-S2彩色触摸屏86面板方案
- 多线程c语言,如何用C语言实现多线程
- TVS二极管电压6V,有哪些型号?
- DFN封装系列ESD静电保护器件