當面試被問到詳述一下OpenGL的渲染管線時,什麼答案是面試官想聽到的?


拋磚引玉,大大輕拍

首先能描述出整個管線大體流程(不用很細,因為狀態不一樣管線會有一定差別)但是通用的幾個步驟要知道

然後我一般就是看是否知道每個步驟是幹嘛的,發散性的問了...


題主,真的,你仔仔細細做一個光柵化的軟體渲染器出來,

然後這個問題你自有答案,

並且答案不用背,那些知識會爛熟於心。首次做完軟渲後,保質期依個人記憶力不同,從三個月至半年左右。工期的話,full time大概兩三個月,part time大概三五個月頂多。

------------------------------

稍微補充一下。所謂認認真真做,就是 至少 實現以下功能:

1,定義數據存儲結構。包括VBO、VAO、texture和frame buffer,以及各種中間結果流轉和存儲結構。

2,要有著色器框架。用結構體包裝一把函數指針(或介面類)即可。不需要實現著色器語言。

3,實現基本的渲染管線 —— 數據輸入&>調頂點著色器&>剪裁/前後面剔除&>柵格化&>插值及透視校正/depth和stencil測試/調像元著色器/像素填充及混合&>blt到屏幕上。

4,上面最後兩步要想辦法並行計算才算完整體驗。

5,寫測試程序、寫著色器,實現基本的forward渲染。從網上找幾個模型來顯示。讓它轉起來。10fps左右差不多合格。

從中體會並記住:

1,哦,書上說的柵格化管線的流程順序確實只能是這樣,哪兩步倒過來都不行,這回記得清清楚楚。關鍵是這樣一來,即使你說的流程沒有背書來的精確,但當面試官妄圖從中挑刺兒時,你一點都不會慌!因為你知道你說的流程是working的。

2,咦?透視校正實現起來簡單,但是為啥啊?我能推一下那公式嗎?

3,哦,原來不止是不剪裁會慢的問題,主要是不剪裁會死。那些只玩過api的人他們未必想到過。

4,我去,原來一個複雜模型(僅指頂點多)所帶來的負擔,遠不及frame buffer大、離模型近所帶來的負擔更大。

5,喲,紋理貼圖大小也影響速度,那為啥啊?研究的過程中終於揭開了高速緩存的面紗。然後面試時跟丫白呼一下「mipmap」、「swizzling」以及「cache missing rate」,感受一下略過雙肩的呼呼的風聲……


1. OpenGL 沒管線啊…… 揣好數據設好狀態然後畫唄

1.1 數據複雜了耗帶寬

1.2 狀態變化加延遲

1.3 矩陣變換什麼的不是必須的

1.4 ps 貼圖讀多了卡,指令寫多了也卡

p.s. Unity幾個基層API的Demo都展示了OpenGL不止可以拿來渲染3D

2. Unity5 的低層API封裝成了OpenGL 的坐標系。往屏幕上畫點東西挺好用的

3. Unity 的 forward 只有三個像素燈挺丑的,deferred 的 gbuffer 挺鬆散的,stencil 不好使

4. gpu 的 unified shader 出現之後就不大懂裡面的玩意了

我想這樣應該可以回答面試了,我覺得...


知道每個流程具體是幹嘛的。

知道如何判斷某個流程的瓶頸和優化的方法。


好吧,我經常面試別人OpenGL渲染管線…可能是因為我是做GPU driver的原因。期望得到的回答就是OpenGL ES2.0的pipeline,如果知道的話把3.0的新特性和我強調一下就是加分了…


可以 背管線 很圖形學


固定管線是上古OpenGL的事情了,還是多說說可編程管線的各個部分吧


推薦閱讀:

遊戲中,那種主角走到特定位置,觸發的電影效果的即時演算動畫,它們是如何做出來的?以Unity為例?
在上海,做U3D遊戲開發,工作5年半,期望薪水45K/月,需要怎樣的水平?
Unity4 的工程升級到 Unity5 都需要注意哪些事情?
如何看待King即將發布的遊戲引擎Defold?
看了會兒shader想問為啥不把光源也寫在shader里?

TAG:Unity遊戲引擎 | 計算機圖形學 |