前往
大廳
主題

【Unity】面試心得(三)性能分析(Profiler)

曉雄 | 2022-08-09 20:56:40 | 巴幣 1214 | 人氣 260

前言
第三回合,是關於性能分析的部分。事實上我在工作時很少有機會進行性能分析,因為公司委派給我的案子,客戶基本電腦規格都不錯,一般狀況下鮮少遭遇性能問題。以下針對被問到的問題稍微回答一下!


3. 如何進行性能分析(Profiler)?

在Unity中有內建的性能分析視窗,該視窗開啟路徑位於Windows>Analysis下,雖說我不曾十分嚴厲地去看待它,但在開發過程中該視窗一直在我的螢幕Layout的右下角,讓我可以持續去監測效能的問題,在開發上,因為個人從事VR專案開發,為了減少更新頻率不足的暈動疑慮,FPS必須要達到90以上。在合理使用下,渲染一直是性能的大敵,而其次是物理演算。而在Unity中,主要被分為主線程(Main Thread)與渲染線程(Render Thread)。

a) 主線程(Main Thread)
主要的運算線程,內容包含物理演算與遊戲邏輯等主要功能,如上一章節提及的Update等核心事件函式,及我們一般撰寫的腳本也都在此處。在個人開發過程中,會盡可能採取單例設計模式的做法使場景的腳本運用同一個Update。

有時,一些開發者也會使用System.Repeat函式來取代Update。通常只要沒有不當使用迴圈或碰撞器,否則此處理論上對效能的威脅較小。另外其演算未經特別設計時,一般是由CPU進行運算。

b) 渲染線程(Render Thread)
此一線程,為事件函式中渲染的部分,其內容包含了攝影機(Camera)、貼圖(Texture)、材質球(Material)、著色器(Shader)、粒子系統(Particle System)等功能,在主線程確定處理對象後,由渲染線程將之進行封裝並送入GPU進行處理。須注意,渲染線程本身仍由CPU處理。

c) 呼叫堆疊(Call Stacks)
正式名稱不太確定,但在這邊可以看到每一次對腳本調用的記憶體訊息,可以用來有效分析Garbage Collection的內容。本人在此部分涉略比渲染更少,無法進一步說明。

d) 剔除(Cull) & 渲染序(Render Queue)
剔除是渲染的第一事件,他決定誰不被渲染,此一方法位在主線程內。與剔除息息相關的便是渲染序,在Unity中不同屬性的著色器,有著不同的預設渲染序。舉例來說,透明(Transparent)擁有比較高的渲染序,它便可能會使被遮蔽物的渲染被剔除。



結語
以上,是關於性能分析的部分,曾經被問及的題目,以及我對此的理解。對於性能分析同前言所述,我的工作並沒有太過著重於此,這使得我在回答時不斷支吾與停頓思考,作為開發者的能力備受質疑也不是沒有道理的。

創作回應

更多創作