游戏蛮牛学习群(纯技术交流,不闲聊):959392658
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2370

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 400|回复: 1

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

[复制链接]  [移动端链接]
排名
485
昨日变化

44

主题

383

帖子

5144

积分

Rank: 9Rank: 9Rank: 9

UID
26484
好友
17
蛮牛币
12835
威望
0
注册时间
2014-5-24
在线时间
2751 小时
最后登录
2018-12-7

游戏蛮牛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熟悉之中
568/1000
排名
5368
昨日变化
2

2

主题

147

帖子

568

积分

Rank: 5Rank: 5

UID
252889
好友
2
蛮牛币
1838
威望
0
注册时间
2017-11-6
在线时间
164 小时
最后登录
2018-12-4
QQ
发表于 2018-7-11 09:03:56 | 显示全部楼层

回复

使用道具 举报

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

本版积分规则

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