1)如何優化.so mmap內存佔用
2)模擬器下物理碰撞失效
3)Unity RenderTexture的釋放在安卓上並不能使GL內存完全回落
4)數字人中,怎麼做到鬍子固定在嘴巴皮膚上
這是第319篇UWA技術知識分享的推送。今天我們繼續為大家精選了若干和開發、優化相關的問題,建議閲讀時間10分鐘,認真讀完必有收穫。
UWA 問答社區:answer.uwa4d.com
UWA QQ羣:465082844
Memory
Q:項目PSS內存過高,使用adb指令抓取內存構成,發現.so mmap部分達到了180MB。這塊有沒有優化建議?
A1:可以從以下三個方向查一下:
- 泛型Template用的是否較多
- 自動化生產的代碼是否較多
- Lua生產的Wrapper代碼是否較多
感謝小ben@UWA問答社區提供了回答
A2:還有以下兩點:
- 刪除無用插件、代碼
- IL2CPP是否進行裁剪
感謝鄭驍@UWA問答社區提供了回答
Physics
Q:在雷電模擬器下,有大概率車與動態創建物體沒碰撞,但是很奇怪的是某些相同Layer有的可以碰撞。
後面直接空場景打包模擬器運行,創建cube + rigidbody賦值不同Layer模擬,有時候是有的Layer之間全部沒有碰撞,還會出現同一個運行每次會碰撞的Layer都不一樣。
查了好久沒啥思路,有沒有大佬遇到相似問題?
以上問題有哪位大拿也曾經做過類似的測試,歡迎轉至社區交流分享:
https://answer.uwa4d.com/ques...
Memory
Q:Unity RenderTexture的釋放在安卓上並不能使GL內存完全回落?
Unity版本:2020.3.21.f1
測試機:HUAWEI P30
內存統計工具:Perfdog
問題詳情:
情況1:創建RT並立刻卸載,此時GL內存完全回落。
情況2:創建RT不卸載,此時GL上升並穩定。再創建RT並立刻卸載,此時GL上升,但回落時(也有可能不回落)不會回到之前位置,會有一部分殘留,類似於泄漏的情況。
想請問下為什麼會發生這種情況?
我搭建了一個測試場景,主要測試了兩個函數,第一個函數只生成RT不卸載、第二個函數生成RT並立刻卸載。
在真機上測試結果:
可以看到前三次,調用方法2對應了情況1,此時內存回落正常。但在調用方法1後再調用方法2,則會產生內存無法回落到原位置的情況。
目前查到的資料:參考了UWA上的一篇文章《分享一次查找GfxDriver內存暴漲的經歷》
裏面是這樣解釋的:
對於GL顯存,裏面説到回落不到原位置的原因是隻卸載了Main Memory,而不卸載Pinned Memory,那有什麼方法卸載掉Pinned Memory使內存完全回落的方法嗎?
我對Main Memory和Pinned Memory具體是什麼不太瞭解,想請教一下大家。
以上問題有哪位大拿也曾經做過類似的測試,歡迎轉至社區交流分享:
https://answer.uwa4d.com/ques...
Animation
Q:數字人中,怎麼做到鬍子固定在嘴巴皮膚上?口型控制應用時,鬍子怎麼跟着嘴巴皮膚同步運動變形?
A:在數字人模型中,鬍子的運動變形可以通過在嘴巴皮膚模型上添加骨骼來實現。首先,您需要在嘴巴皮膚模型上創建一些骨骼,並將它們附着在相應的位置。然後,您可以使用骨骼動畫功能,在口型控制時通過控制骨骼的運動來實現鬍子的跟隨變形。
為了保證鬍子能夠固定在嘴巴皮膚上,您可以在創建骨骼時,在骨骼根部和嘴巴皮膚模型之間添加控制點(Control Point)。控制點可以用來連接骨骼和嘴巴皮膚,並使得骨骼的運動對嘴巴皮膚產生影響。通過添加控制點,您就可以在保證鬍子固定的同時,讓鬍子能夠隨着嘴巴皮膚的變形而變形。
感謝Hyhom@UWA問答社區提供了回答
封面圖來源於網絡
今天的分享就到這裏。當然,生有涯而知無涯。在漫漫的開發週期中,您看到的這些問題也許都只是冰山一角,我們早已在UWA問答網站上準備了更多的技術話題等你一起來探索和分享。歡迎熱愛進步的你加入,也許你的方法恰能解別人的燃眉之急;而他山之“石”,也能攻你之“玉”。
官網:www.uwa4d.com
官方技術博客:blog.uwa4d.com
官方問答社區:answer.uwa4d.com
UWA學堂:edu.uwa4d.com
官方技術QQ羣:465082844