手遊程序員想學習圖形學知識,圖形學、GL/DX、Shader這些有什麼合適的學習順序嗎?

本人是從事Unity開發的,公司只有我一個客戶端。大部分時間都是寫gameplay,但是也要做其他所有特效、渲染、物理這些。遇到需要圖形學相關的東西(比如光照、卡通渲染、描邊、遮擋、頂點動畫等等),也只能各種找插件,雖說現在U3D的插件很多,但總是一知半解也是不好的,所以一直想抽時間學習些圖形學知識能用到實際開發中。

開始把unity shader的語法大概看了,奈何沒任何基礎知識,還是沒法寫自己想要的效果。然後又上知乎看了很多相關問題,了解了很多學習方法,也打算照著Milo Yip 老師的書單去學習。

當時的想法就是 圖形學基礎知識(補充數學知識) -&> OpenGL / DX(補充C++) -&> 實時渲染 -&> shader/mesh/animation 這樣,但以我每天只有一兩個小時業餘時間來看,學完怎麼也要兩三年了。。

而且我到現在看基礎理論,剛看到 畫線、畫多邊形演算法這些,就在想雖然還沒了解過GL 或是DX,但這些理論應該早有API實現了吧,我現在從這麼基礎的學,真的對項目開發有必要嗎,而且還要額外補數學知識。雖然基礎很重要,但能不能先學實際用得著的,基礎以後慢慢補呢。。

然後又想學一個API,又怕中間很多地方不懂還要重回去學基礎知識,而且還要補C++,但是我又感覺U3D根本沒機會用OpenGL或是DX啊,還是說我應該直接跳過這些,去學渲染相關的知識,就可以寫出各種高大上的Shader了? 然後我又發現還有mega fiers這種高大上的插件,還有各種動畫插件,衣服頭髮飄動,水流,各種粒子效果,我去,不說全能做出來吧,至少要理解其中的原理,自定義一些效果,難道還是要回頭學圖形學基礎知識,甚至數學、物理知識?

好吧,我知道我真的水平很挫,又很糾結。我知道只要從頭開始,每天一點一滴的學,總有一天有收穫。可是我實在是等不了啊,工作中沒需求還好,突然要做某個效果的時候,就只能去找插件了,找得到用起來也是各種效率或是其他問題,而且挫敗感很強。每天可以學習的時間也不多,如果從基礎學起,實在不知道要多少年才能擺脫低級苦力的階段。。。

希望各位有經驗的老師能不吝賜教


如果是單純指望一步步是學不完的……像我這種(馬上滾蛋畢業)的學生黨也發現各種時間不夠啊啊啊-。- 但是從我個人經驗來看,有一定基礎之後看代碼會快很多。很多簡單的插件大概看下shader/script就知道咋回事了,複雜的東西稍微跟一跟也問題不大。總的來說目前沒有碰到過一眼看上去完全不懂的情況……反正很多東西就是tricky的去騙就行了恩恩,我最近正準備有空研究marmoset的東西(這裡插一句題外話,其實很多時候你光靠代碼還搞不定,需要額外看看美術資源咋弄的...

我是建議題主完整的學一下OpenGL或DX即可,譬如龍書看一遍+動手做做,基礎打好之後能夠對應到Unity的管線上就差不多啦~ 你直接去學渲染知識,最後落到實現上還是逃不掉API級別的認識的。數學知識什麼的,還有物理、動畫,有大概認識就行了,等需要的時候再深入。這方面可以看看milo大神翻譯的遊戲引擎架構,挺適合入門的。。。他的書單很豐富,適合有毅力、有時間慢慢讀;但是對於題主這種情況我覺得還是見效快、有及時反饋,才能更加有動力學習下去=w=

ps. 畫線、畫多邊形這個有點過於底層了,讓我直接寫也完全搞不定……必須查資料_(:з」∠)_反正大多數我們也不用操心到這個層面。。。雖然說多學點東西不吃虧,但是沒必要投入精力,特別是空閑時間不多的情況下


謝邀。

這個事情不存在順序。

你學圖形,從頭寫渲染器的周期太長,所以大部分人會從現有圖形API入手。也就是說,圖形學和DX/GL的學習過程是同一個。對於現代的DX/GL來說,固定流水線已經被拋棄,所以你想畫點東西都要靠shader,所以,這學習過程還是同一個。


給你一個方向。與其想著各種書單,學習各種各樣的技術。不如利用業餘時間做一個遊戲。過程中需要什麼去滿足你的想像就去研究學習什麼,以上線為目的。最後做完了放到app store里試試唄。

等做好了一個又一個小產品的時候,自然知道該學什麼怎麼學了。碰巧要是賺錢了,那就更好了。有錢了好好享受一下物質文明,思路就更開闊了。

學這個技術,那個技術,最終是為了什麼。你說的那些圖形技術最終不還是為了渲染出厲害有視覺衝擊力的畫面么。但是要渲染什麼樣的畫面呢? 如果你不知道渲染怎麼樣的東西,最終你技術再厲害你只是別人的工具而已。相信你不是想成為一個厲害的中間件,老闆利用你讓顯卡繪製出他想要的一切。

所以,不要為了技術而去學習技術,難免覺得沒有好的方向。小得方向為了做出什麼樣的產品,而去學習技術,大的方向是為了過怎麼樣的生活成為怎麼樣的人,去學習和進步接近自己的追求。


我覺得新手其實可以先從一些2D繪圖庫入手。那些庫通常都以更直接的原語為主(路徑、勾邊、填充什麼的),比較直觀。同時也會提供一些變換矩陣的功能。當然,沒有光照。。。


沒有人吐槽只有一個客戶端嗎


推薦學習c++,因為這貨支持寫dx和gl(C形式寫法)

dx難於COM以及各種表面渲染(當時就是因為各種不會com才跳到gl)

gl難於狀態機和各種渲染開關。

但就是學習dx只能在微軟平台跑,但不擔心版本。gl倒是跨平台,但各種分支版本感人。

學了gl或者dx就要到可編程渲染器(shader)了,這貨非常重要,能做出一些獨特的畫面效果,比如鏡面反射,hdr,泛光之類的特效。你看那些fps跨時代畫面,一半有建模的功勞,一半就是著色器的盒飯→_→。而利用幀緩衝區功能以及gpu並行運算的天生優勢,大牛們還能利用著色器進行大量數據運算,比如比特幣挖礦,網格小球重力模擬,人物頭髮碰撞模擬(或者是布料模擬)等等,這些都是cpu比較吃力甚至於無能為力的,而gpu恰好滿足需求(除了挖礦(?? . ??))。由此可見學習shader是多麼的重要。

然而unity的是cg shder


推薦閱讀:

主流的遊戲引擎都是如何解決Alpha Blending問題的呢?
計算機視覺和圖像處理方向前景如何?
計算機圖形學的裁剪演算法,實現任意多邊形與直線、圓的裁剪?
256位元組3D程序是如何實現3D引擎的呢?
一個圖形引擎的畫面風格是由那些因素(技術)決定的?

TAG:程序員 | 遊戲開發 | Unity遊戲引擎 | 計算機圖形學 |