【Unity】關於LightMap過度曝光、NormalMap變紅

轉載請註明,出自喵喵丸的博客 (http://blog.csdn.net/u011643833/article/details/50749975

問題的引發

其實提到這個問題,我們先來說引起的兩個很典型的表象:

  • 第一 當我們爲工程中引入了一張圖作爲法線貼圖時,我們選擇TextureType爲NormalMap。當我們平臺選擇爲“PC,Mac & Linux Standalone”時,可以看到法線貼圖在Inspector中顯示爲下圖中的顏色,以紫色爲主。
    這裏寫圖片描述
    如果將Unity的平臺切換到“Android”平臺下時,再次觀察法線貼圖的Inspector面板,會發現顯示的以紅色爲主,如下圖。
    這裏寫圖片描述
    雖然的Inspector中面板設置完全相同。可是預覽圖表現不同,但是我觀察我做出來的使用NormalMap的Shader並沒有表現上的問題。所以從這個問題上注意到的人並不算很多。

  • 第二 這個問題可能注意到的人會更多,當你在Unity編輯器中選擇使用了LightMap的時候,原本在“PC,Mac & Linux Standalone”平臺中一切正常的光照貼圖,選擇“Android”平臺,看場景會發現強烈的曝光。(PS:此處的曝光過度特指Unity編輯器中所見與Android真機效果相比曝光過度的情況,如果是LightMap在Android中渲染髮白,丟失顏色信息,那麼是另外一種問題哦~在此不做敘述)大約效果如下圖,這是我爲場景打了一盞強度爲1的平行光之後生成LightMap前後的效果。
    這裏寫圖片描述
    這個問題發生之後,你會發現當你打包到Android真機上觀察這個場景的時候,他的效果即不同於你在“PC,Mac & Linux Standalone”模擬器下面的效果,更不同於“Android”模擬器下面過度曝光的效果,這使得你的美術無法正確的調整場景光照效果。

問題的解決

解決的方法十分簡單,在你菜單欄中找到Edit->Project Setting->Player

這裏寫圖片描述

在Inspector面板中,選擇第一個分頁->Other Settings分欄->Use Direct3D 11,將這項的Toggle的選中狀態去掉。

這裏寫圖片描述

完成應用之後你也許會發現Unity編輯器上面的所有內容都變灰了,像是再也不能點擊的樣子。

這裏寫圖片描述

不必擔心,這並不影響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月初就寫好了,但是自己一直沒有動力好好的完善。今天久違了一週上線,發現自己的博客迎來了第一通留言。說不上是感動,但是終於有一種自己能爲他人也做些助力的感覺,感覺很棒!感謝留言~。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章