聊聊Unity2018的LWRP和混合光照

聊聊Unity2018的LWRP和混合光照

來自專欄 Runtime29 人贊了文章

0x00 前言

在這篇文章中,我們選擇了過去幾周Unity官方社區交流群以及UUG社區群中比較有代表性的幾個問題,總結在這裡和大家進行分享。主要涵蓋了 Scripting、Assetsbundle、Tilemap、Graphic、UGUI、Asset、Profiler 、App、 Shader、 Timeline、Lighting等領域,其中會著重介紹一下LWRP和混合光照相關的話題。

同時,也歡迎大家加入我們這個討論乾貨的官方技術群,交流看法分享經驗。

Unity官方社區交流群:629212643

0x01 Scripting

Q:Unity2018.2新建一個項目,然後新建一個腳本,打開就提示這個,unity都沒有生成sln文件,難道要設置哪兒?

A:首先查看一下在Unity2018中創建新項目時使用的是Visual Studio 2017嗎?Unity2018不再支持Visual Studio 2015。 為了解決這個問題,請下載最新版本的Visual Studio 2017。此外,還可以使用Visual Studio Code,這是一個更快,更輕,適合Unity的腳本編輯器。

0x02 Assetsbundle

Q:請問你們有遇到過從SVN上更新下來的同一個工程,不同的電腦打出來的AssetBundle大部分文件的MD5和Unity自己的HASH值都不一樣的情況嗎?

A:有漏上傳meta文件嗎?我們項目試過一次,有同事漏了上傳.meta文件,然後其他同事更新下來時,由於沒有他的meta文件,所以unity自動在本地生成,使得不同人從svn更新下來的生成了各自的meta文件,然後一比對md5就空了。meta文件是unity記錄GUID的,不一樣的話,在AssetBundle那裡計算MD5好像會有問題。(廣州-木頭蛇杖

0x03 Tilemap

Q:tilemap 在繪製的時候,在場景中,一塊tile 沒法填充完整一個場景中的單位塊。請問是怎麼回事?

A1:是我切的尺寸,一塊 是 64 x 64。Sprite 的設置 Pixels Per Unit我設置的100,設置成 64 就好了。(成都—mid)

A2:除了檢查Sprite的Pixels Per Unit屬性之外,還可以查看一下TileMap組件的Scale屬性是否為1,這裡的設置也有可能會導致tile和場景中單位塊不匹配。

0x04 Graphic

Q:@慕容小匹夫 這個反射怎麼改它的範圍,它們對不上。多謝。

A:這是由於不正確的採樣造成的問題。如果你使用的是reflect probe,那麼針對室內或小範圍內的場景反射要勾選上box projection。這是因為對應於同一個Reflection Probe,不同位置的物體應該具有不同的反射效果。一般的Cubemap比較適合於模擬室外大場景物體的反射,室內小範圍如果用cubemap可能會錯亂。勾選box projection可以用來修正這種錯誤。

0x05 UGUI

Q:ugui字體在編輯器中正常顯示,但是打包pc運行就無法顯示,有沒有人遇到過這種情況的?編輯器無論從resources載入,還是從AssetBundle載入都是正常的,用什麼字體也都是正常的,但是打包pc後怎麼都無法顯示。

A:缺少unity內置的UI部分的shader,我下載了然後包含到Graphics裡面就可以了。(北京-兔子2號)

0x06 Asset

Q:求助,打包的時候瘋狂的輸出這個,也看不出來是哪個文件。

A:看上去有點像PVRTexTool的報錯。Unity會調用PVRTexTool 的命令行工具壓縮貼圖,因此我們可以將報錯文件的範圍縮小到貼圖資源。

首先可以排查一下是否有pvrtc格式的壓縮紋理,你也可以看看你們的etc2_xxx的紋理格式,對工程中的紋理做一個排除法。

相關bug的討論可以查看imgtec社區中相關的主題:

https://forums.imgtec.com/t/pvrtextoolcli-bug-encoding-etc2-rgb-a1-etc2-rgb-a1-ubn-srgb/2365?

forums.imgtec.com

0x07 Profiler

Q:在windows上查看Unity的profiler,其中這項「total system memory usage 」一直無限增長 正常嗎?

A:看上去不正常。這個值是利用了windows 上的PROCESS_MEMORY_COUNTERS_EX來獲取的。你可以看一看你項目中Reserved Total等等這些有沒有持續增長。如果都在漲的話,就優化一下內存吧。

0x08 App

Q1:我現在想做一個載入的窗口,載入完了再顯示遊戲內容。不過希望載入的窗口沒有邊框(沒有關閉最小化之類的)。現在調用Win32 API去設置,總是會看到先有一個有邊框的,然後迅速到沒邊框的。就是有個跳轉的過程,看的不爽。

A:可以調用SetWindowLong。代碼如下:

如果還有跳轉的話,可以考慮在程序啟動參數加popupwindow。(北京-兔子2號)

Q2:安卓打包時出現「Unable to Convert classes into dex format」的報錯。求助。

A:這個問題通常是由插件導致的。可以在項目中檢查一下是否有重複的jar,如果有重複的則刪除掉。 如果不想一個一個查找,也可以考慮刪除項目的「plugins」文件夾,然後重新導入所有插件。

0x09 Shader

Q:Shader中使用「UsePass」引用同一個Shader的另外一個SubShader的Pass會導致崩潰,這個是Bug還是就是不能這麼寫的?我使用的版本是2017.4.6f1。例如這樣:

A:UsePass主要是用來實現不同的shader之間的代碼復用的,查看文檔的話也可以看到相關的描述:

Some of the shaders could reuse existing passes from other shaders, reducing code duplication

所以不要用UsePass引用同一個Shader中的Pass。

0xA Timeline

Q:想請教各位老師們一個關於timeline的問題,timeline中調的位置為什麼運行後播放會發生偏移呢?

A:你的模型上的Animator組件有Controller嗎?你可以把Animator上的Controller去掉,完全由Timeline控制動作。因為在運行階段它的動畫是增量影響上層的,在編輯階段又是覆蓋上層數據的。所以可能會不一樣。

0xB Lighting

Q:這是默認管線的light probe,可以看到動態物體進入陰影範圍變暗了。

這是的LWRP的效果,烘焙後light prob陰影不會對動態物體產生任何影響

烘焙模式是 Mix subtractive,燈光一個mixed模式的Directional light,請教一下,是否lwrp的subtractive烘焙模式 會使light probe忽略陰影的影響?

A:這個不是lightprobe的原因,而是目前lwrp對mixed light的支持還不完善。對mixed light更多的支持還在開發中。在lwrp管線下,如果不使用mixed,只使用bake燈光, light probe可以正確的作用於動態物體的。

上圖是傳統渲染流水線和LWRP在光照模式這項功能上的對比。

完整的對比,可以參考這份文檔:

Pipeline Feature Comparison

https://docs.google.com/document/d/1MgoycUhS9xQKXxbTy1yHt7OCByI10rds3TyRBCSlFmg/edit?

docs.google.com

0xC 後記

好了,以上就是想和大家分享的幾個在群里討論的小問題。

再次,歡迎大家加入我們這個討論乾貨的官方技術群,交流分享呀。

Unity官方社區交流群:629212643

qm.qq.com/cgi-bin/qm/qr? (二維碼自動識別)

相關鏈接:

[社區分享匯總] Unity官方社區交流群問題總結

https://connect.unity.com/p/she-qu-fen-xiang-hui-zong-unityguan-fang-she-qu-jiao-liu-qun-wen-ti-zong-jie?

connect.unity.com


推薦閱讀:

炫舞引擎日常:截圖
UUG北京站2018年7月活動
PBRT-E2.1-坐標系統
改變世界的先驅,是他在50年前真正定義了計算機圖形學和人機共生關係
ZQlib都能幹些什麼之十一:形狀插值(Shape Interpolation)

TAG:Unity遊戲引擎 | 計算機圖形學 | 遊戲開發 |