ShaderGraph入門教程

0x00 前言

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

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

0x01 Scripting

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

2F40BAC6D11DE0D5610A43D5402B5FFB.png

 

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 沒法填充完整一個場景中的單位塊。請問是怎麼回事?

E10511BC94C5BAFA248E576E599A6B01.jpg

 

A1:是我切的尺寸,一塊 是 64 x 64。sprite 的設置 pixels oer unit 我設置的100,設置成 64 就好了。

屏幕快照 2018-08-12 下午2.46.30.png


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

屏幕快照 2018-08-12 下午2.48.06.png

 

0x04 Graphic

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

0493DD5F3397B22D6A46614905E62B34.jpg

 

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

0x05 UGUI

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

70A4F77BC434BD0EF34D6B05D12CC1F1.png

 

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

0x06 Asset

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

5FF8D3C255F139310F50283B05B4E406.png

 

A:看上去有點像PVRTexTool的報錯。Unity會調用PVRTexTool 的命令行工具壓縮貼圖,因此我們可以將報錯文件的範圍縮小到貼圖資源。
首先可以排查一下是否有pvrtc格式的壓縮紋理,你也可以看看你們的etc2_x的紋理格式,對工程中的紋理做一個排除法。
相關bug的討論可以查看imgtec社區中相關的主題:
https://forums.imgtec.com/t/pvrtextoolcli-bug-encoding-etc2-rgb-a1-etc2-rgb-a1-ubn-srgb/2365

0x07 Profiler

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

image.png

 

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

0x08 App

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

EC50EB11D30DA6F05EF7D2444B68F4A8.png


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

 

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

ECC8F2256A92294FDDC24A77E3F7772A.jpg


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

 

0x09 Shader

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

屏幕快照 2018-08-10 下午4.40.10.png

 

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中調的位置爲什麼運行後播放會發生偏移呢?

87E1A3BD8204E7405791575D9A00B21A.png

 

8F6CDF66FBEB4FB011A6E5EC783AEBA2.png

 

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

0xB Lighting

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

4828DF83-2D02-4D3C-A5C2-9CE3481B72DE.gif


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

20F2494B-77DF-477E-A119-E9CA2677DD85.gif


烘焙模式是 Mix subtractive,燈光一個mixed模式的Directional light,請教一下,是否lwrp的subtractive烘焙模式 會使light probe忽略陰影的影響?
A:這個不是lightprobe的原因,而是目前lwrp對mixed light的支持還不完善。對mixed light更多的支持還在開發中。在lwrp管線下,如果不使用mixed,只使用bake燈光, light probe可以正確的作用於動態物體的。

BDF45290-563B-423C-BDAC-7C2C131EB20C.png


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

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