找回密码
 注册帐号

扫一扫,访问微社区

Y-miku 光照贴图丢失问题解决

1
回复
664
查看
[ 复制链接 ]
排名
510
昨日变化

46

主题

385

帖子

5180

积分

Rank: 9Rank: 9Rank: 9

UID
26484
好友
17
蛮牛币
12894
威望
0
注册时间
2014-5-24
在线时间
2780 小时
最后登录
2019-3-23

游戏蛮牛QQ群会员VIP

QQ
2018-7-7 22:49:58 显示全部楼层 阅读模式

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

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

x

光照贴图烘培好后在meshrender里会保存有lightmapindex和offset这两个属性
在shader里会使用DecodeLightMap函数取得对应光贴的颜色

但是这里要注意,这两个属性虽然在meshrender上显示,但是却不保存在meshrender上,而是保存在场景中的
在加载场景时,会加载相关数据并根据gameobject的UUID去设置其lightmapindex和offset属性

所以,如果将场景保存为prefab形式,会导致这两个属性丢失,从而显示错误在

解决方法有两个
一:加载场景后自己去设置这两个属性
二:根据原shader自己写一个shader,将光照贴图作为贴图的形式传入这个shader
在这个shader里定义一个_LightMapTex,DecodeLightMap时去从_LightMapTex上取颜色
[AppleScript] 纯文本查看 复制代码
string matName = mat.shader.name;
		string shaderName = matName+"任意后缀";
		Shader shader = Shader.Find (shaderName);
		if (shader&&lightMapIndex>=0) {
			matClone = new Material(shader);
			matClone.CopyPropertiesFromMaterial (mat); 
			//CopyProperties后shader显示有bug
			matClone.shader = shader;
			matClone.SetTexture ("_LightMapTex",LightmapSettings.lightmaps[lightMapIndex].lightmapColor);
		} else {
			matClone = mat;
		}


为了保证取值正确,不要忘了修改UV2
[AppleScript] 纯文本查看 复制代码
uv2s.Add (new Vector2 (uv2.x * rScaleOffset.x + rScaleOffset.z, uv2.y * rScaleOffset.y + rScaleOffset.w));

这样,光照信息就从保存在场景中改为了保存在物体中,也就不会丢失了

回复

使用道具 举报

5熟悉之中
694/1000
排名
4639
昨日变化

5

主题

161

帖子

694

积分

Rank: 5Rank: 5

UID
252889
好友
2
蛮牛币
2241
威望
0
注册时间
2017-11-6
在线时间
212 小时
最后登录
2019-3-22
QQ
2018-7-11 09:03:56 显示全部楼层
回复

使用道具 举报

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

本版积分规则