【Unity】关于LightMap过度曝光、NormalMap变红

转载请注明,出自喵喵丸的博客 (http://blog.csdn.net/u011643833/article/details/50749975)

问题的引发

其实提到这个问题,我们先来说引起的两个很典型的表象:

  • 第一 当我们为工程中引入了一张图作为法线贴图时,我们选择TextureType为NormalMap。当我们平台选择为“PC,Mac & Linux Standalone”时,可以看到法线贴图在Inspector中显示为下图中的颜色,以紫色为主。
    【Unity】关于LightMap过度曝光、NormalMap变红_第1张图片
    如果将Unity的平台切换到“Android”平台下时,再次观察法线贴图的Inspector面板,会发现显示的以红色为主,如下图。
    【Unity】关于LightMap过度曝光、NormalMap变红_第2张图片
    虽然的Inspector中面板设置完全相同。可是预览图表现不同,但是我观察我做出来的使用NormalMap的Shader并没有表现上的问题。所以从这个问题上注意到的人并不算很多。

  • 第二 这个问题可能注意到的人会更多,当你在Unity编辑器中选择使用了LightMap的时候,原本在“PC,Mac & Linux Standalone”平台中一切正常的光照贴图,选择“Android”平台,看场景会发现强烈的曝光。(PS:此处的曝光过度特指Unity编辑器中所见与Android真机效果相比曝光过度的情况,如果是LightMap在Android中渲染发白,丢失颜色信息,那么是另外一种问题哦~在此不做叙述)大约效果如下图,这是我为场景打了一盏强度为1的平行光之后生成LightMap前后的效果。
    【Unity】关于LightMap过度曝光、NormalMap变红_第3张图片
    这个问题发生之后,你会发现当你打包到Android真机上观察这个场景的时候,他的效果即不同于你在“PC,Mac & Linux Standalone”模拟器下面的效果,更不同于“Android”模拟器下面过度曝光的效果,这使得你的美术无法正确的调整场景光照效果。

问题的解决

解决的方法十分简单,在你菜单栏中找到Edit->Project Setting->Player

【Unity】关于LightMap过度曝光、NormalMap变红_第4张图片

在Inspector面板中,选择第一个分页->Other Settings分栏->Use Direct3D 11,将这项的Toggle的选中状态去掉。

【Unity】关于LightMap过度曝光、NormalMap变红_第5张图片

完成应用之后你也许会发现Unity编辑器上面的所有内容都变灰了,像是再也不能点击的样子。

【Unity】关于LightMap过度曝光、NormalMap变红_第6张图片

不必担心,这并不影响Unity的功能,重新打开你的工程就好了, 这时你会发现之前的Normal变色,编辑器Android平台下LightMap曝光过度的问题都解决了~~(≧▽≦)/~万岁。
这时你就不会在窗口栏看到这样的字样了。

这里写图片描述

问题的后续

当我将DX11的选项勾选去除,重新打开工程的时候,这时,我自己写的Shader给我报了一个这样的错误(勾选DX11情况下并不报错~可能是底层做了什么我不太知道的处理)

Shader error in [..]: D3D shader assembly failed with: (##): error X5204: Read of uninitialized component(*) in r0: r/x/0 v/x/1 b/x/2 *a/x/3

其实这个报错也很简单就可以解决,在你自己写的Shader代码中,一定有fixed、float、half或者其他变量在你声明的时候没有给定初始化赋值(这里说的不包括为Properties下面的内容所申请的变量)。给定初始化赋值之后,这个bug就会不见了~。

感谢
解决问题得益于下面这两篇文章

http://blog.csdn.net/myarrow/article/details/46453065

http://forum.unity3d.com/threads/d3d-shader-failing-to-assemble.156954/

然后我增加了一些内容写成了这篇文章~

转载请注明,出自喵喵丸的博客 (http://blog.csdn.net/u011643833/article/details/50749975)

写在最后

今天上线敲的这篇文章的主题内容其实在1月初就写好了,但是自己一直没有动力好好的完善。今天久违了一周上线,发现自己的博客迎来了第一通留言。说不上是感动,但是终于有一种自己能为他人也做些助力的感觉,感觉很棒!感谢留言~。

你可能感兴趣的:(Unity)