因為我們最近正在招聘一名圖形程式設計師,所以我得確定潛在求職者具備哪些技術知識和技能。雖然這個定義主要是針對我們的求職者,但我想也適用於行業中其他正在求職中的程式設計師,比如渲染工程師。
不論你是剛完成學業的新人,還是已經在行業中試水不同角色的老手,希望本文能夠讓你獲知成為一名圖形工程師需要具備的知識。如果你是一名經驗豐富的渲染程式設計師,那麼你可能已經瞭解了所有情況,我也希望聽聽你的看法。
瞭解硬體
瞭解將執行你程式碼的硬體優勢和弱點對於任何程式設計師來說都很重要,但它卻是圖形工程師的必需技能。讓你的遊戲看起來美觀很重要,但要讓這些精緻的效果以目標幀率執行卻是一項更為棘手的任務。
當然,寄希望於你瞭解基本硬體的每一個細節也太不現實了(對於剛上任的新人來說尤其如此),但在我看來,你至少要比較清楚製作3D模型涉及到哪些技能。這一領域的求職者應該知道普遍的GPU管道階段(例如,頂點和畫素著色器,光柵化程式等),瞭解它們的功能,以及它們是否可程式設計、配置或修復。
通常情況下,我們有許多方法可以執行一個渲染效果,所以很有必要知道在特定的目標裝置上最好使用哪個解決方案。沒有什麼比因為GPU並不能很好地支援一個必要功能而要求美術人員調整其所有現成資產的情況更糟糕的了。
例如,我目前正在開發的一款遊戲瞄準的是桌面電腦以及移動裝置,這一點很重要,因為移動GPU的效能特點與桌面電腦極為不同。我們的團隊在制定場景複雜度以及特效型別的決策時就要考慮這些不同點。
瞭解更多關於GPU的一個好方法就是去看看《Real-Time Rendering》(第三版)的第18章,因為它包含了關於Xbox 360、Playstation 3和Mali(移動)渲染構架的詳細概況。
優秀的數學能力
淵博的三角法,線性代數甚至是微積分知識對於圖形程式設計師來說極為重要,因為這一職業的許多日常工作就涉及到多種複雜程度的數學問題。
我當然希望求職者瞭解圓點和向量積產品,以及它們在計算機圖形中的作用。除此之外,瞭解矩陣內容也很有必要,因為除錯一個渲染問題可能有必要手動“分解”一個矩陣,以便鑑別錯誤值。例如,不久前我就不得不修復我們動畫系統的一個問題,並且純粹是通過檢視結點矩陣找到了問題的根源。
在我看來,求職者應該能夠分析性地計算射線與平面之間的相交情況。此外,我還希望每個渲染工程師都能夠輕鬆獲得反射向量。
我們可以在網上找到許多相關資源。《3D Math Primer for Graphics and Game Development》一書就很好地解釋了許多關於向量、矩陣和四元法等相關話題的基礎知識。我強烈推薦大家在紙上運算而不是檢視現成的方案來解決這些問題。這個過程的確很有趣,所以你不妨自己動手一試。
對計算機圖形的激情
理想的求職者應該能夠跟上最新的計算機圖形發展速度,對於這個不斷而迅速發展的領域來說尤其如此(比較一下10年前和今天的遊戲圖形保真度就清楚了)。
這方面有許多有趣的調查報告,開發者演講和技術部落格(你可以在網路上找到),所以你應該很容易找到自己感興趣的內容。
當然,執行一個演算法就是了解它的最佳方法,它還可以成為你面試中的談資。編寫很棒的圖形樣本也有助於鍛練你的技能,並且這個過程也實在有趣。
如果你想最大化自己成功求職的機率,就要確保投入了一定時間將樣本製作得更美觀。你可能執行了最有效的細分曲面演算法,但如果人們看不到效果就不會產生什麼深刻的印象。創造令人愉悅的圖形是這個職業的一個重要部分,所以最好還要證明你的技術過硬。
效能分析和優化
圖形程式設計師的職責之一就是分析遊戲,以便確定和移除其中與渲染相關的瓶頸。如果你才剛入行,我也不會寄希望於你在此領域擁有大量的實戰經驗,但你應該知道與CPU和GPU相關的區別。
理想的求職者至少要能夠使用諸如PIX(DirectX SDK的一部分)、gDEBugger或英特爾的GPA等圖形分析工具。這些應用都是免費的,有助於你進一步檢視GPU內部的情況,隔離漏洞(遊戲邦注:例如在繪製幾何體時出現的不正確的渲染狀態)以及鑑定效能問題(例如紋理延遲,著色器執行緩慢等)。
總結
圖形程式設計師的工作很棒,因為它與產品的視覺外觀直接相關。遊戲的外觀(如預告片,截圖等)通常決定玩家對產品的第一印象,對我個人來說這是個十分愉快的體驗。
說實話,你無法每天都編寫出色的著色器。你應該準備從事其他的任務,例如資料壓縮(如紋理、網格、動畫),數學和幾何問題(如選擇,相交計算)以及大量分析和優化工具。後一項任務尤其具有挑戰性,因為GPU及其相關驅動器無法調整。
總而言之,成為渲染工程師需要大量的專業知識,它當然並不是在遊戲行業立足的最便捷方式,但如果你對計算機圖形很感興趣,也許它就是你命中註定的選擇了。