unity中多套uv set理解和应用

本文详细介绍了Unity中多套UV的应用场景及实现方法,包括如何在Maya中设置多套UV,Unity支持的多UV数量限制,以及如何通过Shader利用不同UV集。还探讨了多UV在光照烘焙和特殊材质(如SpeedTree)中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

unity中多套uv有很大用处,比如自带的物体box,sphere就自带两套uv

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

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

当然自己的模型也可以加多套uv,max和maya等软件都能加

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

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


在maya里如上面设置

现在使用下面两张不同的进行测试



然后使用下面的shader

记得放上测试贴图

Shader "VertexInputSimple" {
	Properties{
		_MainTex("Texture", 2D) = "white" { }
	_Tex_002("Tex_002", 2D) = "" {}
	_Tex_003("Tex_003", 2D) = "" {}
	_Tex_004("Tex_004", 2D) = "" {}

	}

		SubShader{

		Pass{

		CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
		#pragma target 3.0

	sampler2D _MainTex;
	sampler2D _Tex_002;
	sampler2D _Tex_003;
	sampler2D _Tex_004;


	//顶点输入结构 可省略 直接写vert里面
	/*struct appdata {
	};*/

	//顶点输出结构体 貌似支持N个TEXCOORD
	struct v2f {
		float4 pos : SV_POSITION;//由顶点着色器输出mesh信息中的纹理坐标,这个坐标是以对象为坐标系的 The position of the vertex after being transformed into projection space

		float2 uv : TEXCOORD0;
		float2 uv2 : TEXCOORD1;
		float2 uv3 : TEXCOORD2;
		float2 uv4 : TEXCOORD3;
		float2 uv5 : TEXCOORD4;//只是说明可以多个

	};
	//顶点函数
	v2f vert(
		float4 vertex : POSITION,//The position of the vertex in local space (model space) 
		float4 texcoord : TEXCOORD0,//只能有四个
		float4 texcoord2 : TEXCOORD1,
		float4 texcoord3 : TEXCOORD2,
		float4 texcoord4 : TEXCOORD3
		)
	{
		v2f o;
		o.pos = mul(UNITY_MATRIX_MVP, vertex);

		o.uv = texcoord.xy;
		o.uv2 = texcoord2.xy;
		o.uv3 = texcoord3.xy;
		o.uv4 = texcoord4.xy;

		return o;
	}


	//<span style="color:#FF0000;">在这里替换测试</span> 如果没有多套uv 后面的值貌似还是会返回最前面有的那套
	fixed4 frag(v2f i) : SV_Target
	{
<span style="color:#FF0000;">		return tex2D(_MainTex, i.uv);
		//return tex2D(_MainTex, i.uv2);
		//return tex2D(_MainTex, i.uv3);
		//return tex2D(_MainTex, i.uv4);</span>
	}
		ENDCG
	}
	}
}

可以看出来个不同的效果

当然这个是会影响烘焙光照的

下面是烘焙的结果,可以看到有第二套uv并且没有正常展开的就出错了



可以看出没有第二套的应该是unity在烘焙的时候自己生成了,有点就不会自己生成了


当然也有一些材质会用到四套不同的,比如前面说的speedtree

http://blog.csdn.net/shenmifangke/article/details/51220029


第一套就是纹理

第二套貌似也是光照


后面两个看不懂了,希望有知道的可以分享下

可见多套uv还是有很大作用的

Blender是一款强大的开源3D建模软件,而Unity则是一个流行的游戏引擎。将Blender中的UV映射数据导入到Unity,主要是为了在游戏中展示纹理贴图。以下是基本步骤: 1. **准备Blender模型**:在Blender中,你需要创建、编辑或导入模型,并为其添加UV展开。UV是一种坐标系统,用于指定3D模型表面每个像素对应的2D平面位置。 2. **UV编辑**:确保UV布局合理,避免重叠或拥挤,这会影响纹理在Unity中的显示效果。你可以使用Blender的UV工具集进行调整。 3. **切片材质UV**:在Blender中为你的模型分配材质并保存UV切片。如果模型有多个部分,可以分别处理,然后合并或设置分组。 4. **导出UV Atlas(纹理集合)**:在Blender中选择“File” > “Export” > “Image as UV Layout”,这会生成一个包含所有UV映射的图片文件。如果需要,还可以合并UVs成更小的图像(UV Atlas),以便减少内存消耗。 5. **导入到Unity**: - 打开Unity项目,选择Assets -> Import New Asset,找到刚才导出的UV Atlas图片文件导入。 - 在Project视图中,右键点击纹理并选择“Create Sprite”。 - 在Sprite Renderer组件上,选择导入的纹理作为Sprite Texture。 6. **关联UV映射**:在Unity中,如果你有多个网格,需要为它们分配正确的UV Set。在Inspector面板中找到Mesh Renderer,查看或设置每个网格的UV Set对应到Blender的UV切片。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值