1. 程式人生 > 其它 >使用Sprite Packer對UI圖集進行打包的問題

使用Sprite Packer對UI圖集進行打包的問題

1)使用Sprite Packer對UI圖集進行打包的問題
​2)Unity處理視錐剔除的問題
3)Profiler檢視Shader.CreateGPUProgram的具體Shader資訊
4)PPS的UberPost記憶體佔用較高


這是第270篇UWA技術知識分享的推送。今天我們繼續為大家精選了若干和開發、優化相關的問題,建議閱讀時間10分鐘,認真讀完必有收穫。

UWA 問答社群:answer.uwa4d.com
UWA QQ群2:793972859(原群已滿員)

UI

Q:使用Sprite Packer對UI圖集進行打包:
1. 使用系統自帶的Sprite Packer打包,圖集大小設定成1024,這樣打出來的圖集會分為好幾個Group,那麼相同圖集不同Group能夠合批嗎?

2. 由於Sprite Packer是自動分配的Group,這種情況下開啟功能的時候是所有Group都會載入的,那麼這種設定1024是否還有必要,改成2048會不會好一點?

3. 圖集設定成2048變大了,對載入速度和記憶體有影響嗎?這個需要按圖集裡圖片數量多少做不同的設定嗎?

A:可以參考以下答案:

  1. 不同Group是不會合批的,一般也沒有UI圖集大小的建議。

  2. 最好自己手動控制圖集的Group,在UI製作時可以以UI Prefab為單位收集一下哪些Group的圖集是當前UI需要使用的,載入UI預設時按需載入對應的Group就好了。

  3. 如果圖集中的圖片資源都用到了,同時圖集的填充率也差不多,那載入1張2048和4張1024,對載入影響可能並不是很明顯,記憶體佔用也是一樣的,但如果2048填充率並沒那麼高,或許1024的會比較好。

該回答由UWA提供


Rendering

Q:最近在研究場景管理的問題,想了解Unity是否有處理視錐剔除,於是做了測試(Unity 2020.3.11f)。建立了兩個Cube,移動第二個Cube,對比頂點數量變化。

為什麼同樣在視錐體範圍內,批次和頂點數會不同?當第二個Cube不在視錐範圍內,頂點數也可能不同,那Unity是否有視錐剔除,其處理邏輯是怎麼樣的?

A:應該是燈光繪製ShaowMap時候,投影的範圍將那個相機外的Cube包進去了,受Light的影響,關了Light就可以了。

感謝範世青@UWA問答社群提供了回答


Shader

Q:由於目前專案Shader挺複雜的,變體也非常的多,如果用ShaderVariantCollection的方式解析一次耗時太高了,而且如果用Shader.CreateGPUProgram耗時很高並且頻率也很高,所以就想問下:有沒有什麼辦法可以知道是哪個Shader造成的?這樣我才好做策略去解決。

我以前Unity 2017是能夠知道哪個Shader造成的,在Profiler裡面可以把Shader.CreateGPUProgram繼續展開,但是現在Unity 2018.4.36不行。

A:Profiler的Timeline檢視可以看到。

感謝黃曉文@UWA問答社群提供了回答


Shader

Q:URP專案,下面這個Shader是做什麼用的?有沒有相關的變體演算法和優化建議,謝謝。

A:UberPost是一個大雜燴,有好多處理都集中在這裡,專案確定不用的變體之後,就可以用#pragma skip_variants xxx 跳過。例如:#pragma skip_variants _TONEMAP_NEUTRAL _DITHERING。

感謝懷特@UWA問答社群提供了回答

20211011
更多精彩問題等你回答~

  1. Unity增量打包AssetBundle沒變化的資源也會被重新打包
  2. 在模型有UV2的情況下開啟Generate Lightmap UVs
  3. 如何實現AAB包的增量更新

封面圖來源於網路


今天的分享就到這裡。當然,生有涯而知無涯。在漫漫的開發週期中,您看到的這些問題也許都只是冰山一角,我們早已在UWA問答網站上準備了更多的技術話題等你一起來探索和分享。歡迎熱愛進步的你加入,也許你的方法恰能解別人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官網:www.uwa4d.com
官方技術部落格:blog.uwa4d.com
官方問答社群:answer.uwa4d.com
UWA學堂:edu.uwa4d.com
官方技術QQ群:793972859(原群已滿員)