unity中Gfx WaitForPresent占用CPU過大如何優化?

時間 2021-06-01 01:35:04

1樓:獲野千尋

專案沒動過,昨天不卡,今天卡。上網一查才看到,是節電模式的鍋。合著我把電池設定改成節電模式,還能影響到開發環境。

吸取教訓,以後可不能隨意碰電池管理這塊的東西了;不!是不能隨意碰電腦設定的東西了。

言歸正傳,原因是cpu跑的太慢了。因為節電模式開啟,所以cpu就從高鐵變成了馬車,不卡才怪。。。

2樓:遊戲程式設計師

文件關於Gfx.WaitForPresent的說明:

主線程已經準備好了,但是渲染執行緒還沒有結束工作,因此主線程在等渲染執行緒。文件中描述了兩種情況:

1. 當Main Thread是WaitForPresent狀態的同時,Render Thread正在執行Camera.Render,這種情況下CPU是瓶頸

2. 當Main Thread是WaitForPresent狀態的同時,Render Thread正在執行Gfx.PresentFrame,這種情況下GPU是瓶頸

我遇到的是第二種情況,這是Profiler截圖,看圖就明白了。

至於第一種情況,我的理解是,Camera.Render主要工作是準備好渲染資料(culling等)然後傳遞給GPU,如果Render Thread此時還在執行Camera.Render的話,表示渲染資料還沒計算完,而這是CPU的工作,因此CPU是瓶頸。

3樓:JackWen

首先可以明確,Gfx是乙個和GPU相關的任務。

針對這一塊兒,有時候其實也是有優化空間的,就是加速GPU渲染,對渲染本身進行優化。不僅如此,有時候我們對於Texture的處理,也會通過Gfx實現,這時候減少對Texture的操作、降低Texture的尺寸等也會得到我們希望的效果

4樓:松鼠

也不是來回答的,就自己遇到的問題拿出來分享下,我自己也搞不懂:今天unity的Gfx.WaitForPresent佔了90%以上,CUP時間到了30ms,來查了一下,之前沒遇到過,之後比較鬱悶地把筆記本電原線連上,發現CUP時間回到了10.

7ms - -~!

5樓:A希億

對於這個問題之前我也搜尋過很多資料,有的說是untiy 的bug,有的說是手機幀率導致的cpu等待gpu繪製。後來看到一篇文章:【厚積薄發】扒一扒Profiler中這幾個「佔坑鬼」

總之這些說法最後的結論都是不需要優化這個點。

拋個磚頭。題主有什麼新發現希望回來分享哈。

ps:從截圖中看cpu最高到60fps,題主應該是連線著手機在除錯,Gfx.WaitForPresent的意思就是cpu空閒,等待gpu繪製。

unity中怎麼用JS修改其他指令碼的變數?

徐莉娜 這是我剛剛寫的HP呼叫修改指令碼 這裡的HP.Health是使用了指令碼PLAYERHP的Health變數 並在此指令碼偵測到粒子碰撞時修改指令碼PLAYERHP裡的Health變數 var HP PLAYERHP function Start function Update functio...

在Unity 3D中,shader是何時編譯的,在何時加載入視訊記憶體中的?

minggoddess 以下是我的看法 我先講下texture資源在dx12向api裡的這個過程很簡單 create的時候建立到視訊記憶體 bindtex的時候把address發給gpu 接著看shader資源它比tex多了從hlsl到binarycode的階段也就是compile shader一開...

在unity中如何實現開放世界的超大野外環境下時間流逝的光照變化?

個人覺得應該可以啊,distance shadow在defferlighting下應該滿足你的需求啊?不知道你有沒有實際做過一下,到什麼程度。如果是在PC平台實驗的話肯定可以。Unity出過自己的官方的demo就是晝夜變化的。你可以參照那個demo的實現。多套動態引數然後做融合。我們已經在移動端解決...