當面試被問到詳述一下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里?