天天看點

技術分享連載(八十五)

Q1:我看到很多炫酷的效果都是用Unity的後處理來實作的,要求Camera開啟HDR。但是我不知道開了這個選項會不會很耗,在中低端機上能跑起來嗎?另外,使用HDR之後,Camera的Rendering Path是不是不能選Forward?

使用HDR可以選Forward,和Rendering Path的選擇并不會互相影響。 在手機上單純開啟HDR(fp16)性能的影響并不會很大,各種後處理Pass的開銷是要優化的重點。因為一般不會單純開啟HDR而不使用後處理,綜合考慮到發熱量等因素,不建議低端機器使用HDR和後處理,中高端再開啟HDR并配合後處理,并對後處理做基礎優化:比如适當降低後處理分辨率,盡量合并多個後處理流程到一個Pass等。

該問題來自UWA問答社群,感謝賀甲提供了回答,如您對該問題仍有疑問,可以轉至社群進行進一步交流。

https://answer.uwa4d.com/question/59f810692f7f63497e0f6baf

Q2:Unity5.5 運作中,材質球的GI選項在烘焙的時候,代碼修改模型Renderer元件所引用的Material屬性,SetColor(“_EmissionColor”),沒有實時重新整理效果。

代碼如下:

測試中發現,必須要Editor中選擇這個材質球才能重新整理。

經測試發現将材質中的GI設成“Baked“之後,如果_EmissionColor的初始值是0,則Unity會直接關閉Standard Shader的“_EMISSION”Keyword,導緻設定_EmissionColor對渲染結果無影響。解決方法是設定同時打開“_EMISSION”Keyword,即加上: r.sharedMaterial.EnableKeyword("_EMISSION");

該問題來自UWA問答社群,如您對該問題仍有疑問,可以轉至社群進行進一步交流。

https://answer.uwa4d.com/question/59f5917ceecc29a735c1321d

Q3:下面兩張圖是mate9+OpenGL運作我們項目最高畫質時的Proflier截圖,Unity 5.6.0p4,可以觀察到下圖一中第二個Camera.Render出現了一個非常長的等待,這個是我們的UI相機。從圖中可以觀察到它在等待其他相機完成渲染線程的任務後才開始執行自己的主線程渲染任務。

技術分享連載(八十五)

而下圖是關閉了大部分UI,UI相機依然工作,但并沒有出現這個異常的等待,我們觀察到上圖中第二個Camera.Render的首個任務是WaitForJogGroup,并且Job Thread在相同時刻出現了Particle Job,我們懷疑隻要這個相機出現了particle system就會出現這種情況,但暫未确定,不知道各位是否有遇到這種情況,以及Unity是不是存在這個問題,如果是5.6的問題,那麼後續的版本是否有解決呢?

技術分享連載(八十五)
這種情況在Unity 5.6版本中經常出現,不管是Unity 5.6.0還是最新的5.6.3,這種情況都是普遍存在的,下圖是我們剛剛優化過的一個項目中的Timeline截圖(Unity 5.6.3版本),而這種情況在5.6版本之前是很少出現的。
技術分享連載(八十五)
這種問題在我們來看,主要是有兩點原因: (1)Unity 5.6版本中将更多的渲染計算從主線程中搬到了渲染子線程中處理,而主線程還需要等待子線程的操作結果才能繼續進行,進而造成了問題圖二的主線程“等待”現象,即Camera.Render的Self開銷; (2)本質原因還是單幀渲染量太大,如題主遇到的UI界面渲染、粒子系統渲染以及蒙皮網格計算等,如果量大都是有可能造成子線程壓力過大的,是以雖然很多項目中開啟了多線程渲染功能,但還是需要對渲染量時刻保持關注。 目前我們還沒有接觸過過多的Unity 2017項目,是以目前暫時無法給出統計資料。建議題主可以嘗試先回退到Unity5.5的最新版本中進行一個嘗試,看看問題是否有好轉。 題主補充: 最後深入測試證明2017.1依然是有問題的,隻是wait的時機換了:render時不再wait了,但particlesystem.deactivate的時候會進行wait,是以可能會出現這樣的timeline:
技術分享連載(八十五)
2017.2未測試但估計也不樂觀。

https://answer.uwa4d.com/question/59f9c05ba740da296dd0367f/

Q4:如下圖,釋放了資源,但紋理還在記憶體中,且引用數為0,要如何銷毀呢?

紋理所在的UI的GameObject是通過Destroy銷毀的,并且執行了Resources.UnloadUnusedAssets();

技術分享連載(八十五)
Ref Count為0應該就是可以通過Resources.UnloadUnusedAssets或Resources.UnloadAsset來進行解除安裝了。出現這種情況建議如下: (1)嘗試将Resources.UnloadUnusedAssets在Destroy稍後幾幀執行; (2)在加載時嘗試直接擷取這些資源,然後在Destroy後通過Resources.UnloadAsset來解除安裝指定資源。 建議先從(1)來進行嘗試。

原文出處:侑虎科技

本文作者:admin

轉載請與作者聯系,同時請務必标明文章原始出處和原文連結及本聲明。

繼續閱讀