遊戲程序員入門應該從Unity3D或Cocos2dx開始,還是從OpenGL和DirectX開始?
沒有比較過,我只說下我的經歷和感受吧。
一開始為了做水墨效果學了幾個月的opengl。這段時間非常難熬,因為資料很少質量又不是很高,而且api又很反直覺,讀了很多很多資料才把一些其實很簡單的東西搞明白。這裡推薦opengl super bible 第六版(api),還有互動式計算機圖形學(基本原理),網上還有一點點優質教程。
然後學了一些基本的hack,像做陰影還有據說是老舊的deferred shading做法。然後把一篇做水墨效果的論文實現了,雖然最後效果不好...這裡肯定會把大量時間花在調試上面,寫opengl出了問題非常難調試。一個是不能直接輸出變數的值,只能把數字轉成顏色渲染出來。二是還要為了方便調試去改代碼來防止編譯器把shader用不到的東西優化掉。三是有時候還會遇到不知道是顯卡還是顯卡驅動的bug,記得一個編譯器crash的bug是通過保證語義一樣的情況下順便亂改那部分代碼最後繞過的...而且shader編程遇到問題,能幫你的人很少。我因為做的東西要fragment shader每個像素的計算同步,然後對opengl的同步功能有疑惑,就在stackoverflow上問,有個大神樣子的人來解答。但自己實驗來實驗去得不到預期效果,查了specification,最後感覺那個人說的應該是錯的了...雖然不能說玩得溜,但做的東西也有那麼一點點點點複雜,總算跪著學了不少opengl的東西。實現完論文後覺得自己數學物理底子差搞不下去,就開始學cocos2dx。我c++一直都有學,引擎也沒用什麼高深的c++技巧,就一邊翻翻網上教程(質量不能說好),一邊做遊戲。學起來挺輕鬆的,如果渲染不出東西可以邊查源代碼邊看網上的教程來解決(社區感覺有點不靠譜啊)。總之,因為搞過opengl,心裏面有底,遇到問題不會抵觸去和害怕去解決,而且看渲染相關的代碼會覺得挺熟悉的。
期間還稍微看過一個輕量級引擎Horde3d是怎麼封裝opengl的。unity我只碰了一個下午,感覺入門也不難吧,看到vertex shader, fragment shader也覺得親切。
斷斷續續學了一個多月就拉了個美術做了個還算完整的音樂節奏+平台遊戲融合在一起的遊戲。遇到的問題更多是遊戲邏輯的,比如狀態機和簡單的行為樹。學了opengl,主要是有了底之後心理上不會怕遇到渲染結果不如預期的問題,而且可以通過閱讀渲染相關的代碼來幫助理解引擎(cocos2dx)。不過因為引擎本身封裝好了,學opengl也不是必須的。只是在用的時候可能會總感覺引擎裡面是黑盒子,出了問題不知道往哪個方向想問題。而且學opengl我個人感覺是沒有那麼容易啊...取決於你是想做遊戲還是想征服世界。
先從Unity3D開始吧. 帶著問題再尋找答案, 會簡單很多. 給題主舉個新鮮的實例
我們最近用Unity3D做橫版動作遊戲, 碰到一個需求. 讓自己的角色永遠顯示在其他角色的最前面看似簡單的需求, 對於卻需要一些基礎的3D知識. 比如說: 渲染管線的渲染流程, 渲染排序等這些知識裸著學肯定很難. 原來我也是在學DirectX時理解的. 但在Unity3D里學習這些概念會變得更為簡單, 因為你無需擔心自己的某個數學庫有bug.學DirectX還是OpenGL都是無所謂的. 主要關注下圖形學本身就好
DirectX設計比OpenGL新, 更新快. 調試友好, 方便, 報錯清晰. 配合微軟的獨門黑器Visual Studio.那簡直...OpenGL的API設計簡單, 理解起來快. 但是到了紋理和各種擴展經常搞的人頭大. 但通用啊, 所有平台都可以用, 只是Windows上性能可能跟各家驅動有關係而已
Cocos2dx 在3.0後確實好多了. 但就開源上來說, 還是不錯的. 好歹可以看下原理我是先入門的OpenGL/DirectX,管線大概理清楚之後然後看Unity和cocos的,感覺很輕鬆。。。寫shader、調效果什麼都壓力不大-。- 引擎本質還是對底層API的封裝
謝 @vczh 邀。
這個還是得看你的目標是什麼。「遊戲程序員」是個籠統的稱呼,具體還得分成底層引擎還是上層邏輯。
如果你是想多快好省地出個可玩的遊戲,那就選個現有引擎。當然圖形API也得了解,早晚得用上。Unity3D和Cocos2dx兩者分工不同,本身沒有選哪個的問題。
如果你想從底層做起,構建引擎的話,就肯定得學圖形API,同時最好也參考一些現有引擎。
歸根到底,從那個開始取決於你想做什麼事情。無論如何,這兩個層面的都得會,只是優先順序不同而已。兩手抓,齊頭並進。
先用Unity接觸怎麼做遊戲,然後接觸一下OpenGL、DX、Shader是怎麼回事。再回到Unity看看它們是怎麼應用的,碰到問題再回到OpenGL看看問題的背後原理是什麼。
每個方向都不用一條路走到黑,兩個交互著來,時間長了就都熟了。你得目標是做遊戲引擎就去研究dx和opengl,你如果做遊戲就去用unity
很高興題主問的不是「遊戲程序員入門應該從什麼開始?」這樣的問題。
不過題主既然稍微了解了相關東西,不如再自己努力去近距離的看看它們可好?
不清楚題主是打算快速求職的需要儘快領到薪水的人,還是處於求學階段有另外生活的人。
如果是前者,在自己想工作的地方附近找找有沒有在招人的遊戲公司,招unity就去學unity,招cocos就去學cocos。opengl,dx那是未來的事,太早碰的話會澆滅自己的積極性的。
如果是後者,你有足夠的時間與興趣去把你說的這些都了解一點的。然後你還沒決定從哪個開始入門的時候你就已經入門了。
-----正篇的分割線-----
另外,「從U3D還是Cocos開始入門」這個問題其實是一場戰爭。那時,手游還在講述童話故事的時候,創造手游世界的人們希望這個世界變得更大更美好,踏上了偉大的航海之旅。
旅途中,他們經歷了狂風!暴雨!巨浪!但是!這些都阻擋不了他們!
他們在筆記本上描繪著新世界!
他們尋找、創造出了U3D,Cocos。這兩個毫無疑問是可以幫助他們創造出所希望的世界的寶物。
他們各自有了信仰,那個世界有了U3Der,Cocoser之分。
"All Hail U3D!!!,All Hail U3Der!!!"
"All Hail Cocos!!!,All Hail Cocoser!!!"這樣的他們,發動了戰爭。
從哪個入門,就如同你選擇聯盟還是部落這樣的問題。
你可以因為Unity3D這個名字感覺很高大上而選擇成為U3Der;
你也可以因為Cocos2D-X這個名字很可愛而轉職成為Cocoser;
如果你兩個都喜歡你也可以單挑boss變身成為U3Coser。
甜豆腐腦和咸豆腐腦哪個更好吃這樣的問題是不成立的!它的存在本身就是為了挑起戰爭!
我們是新時代的住民,我們愛好和平!
我們只需要吃我們喜歡的那個味道就好了。
手游世界的戰爭持續了很久,後來他們明白這麼爭下去並沒有任何意義,勝利的一方和失敗的一方都面臨同樣的問題----五行缺妹,他們只能看著隔壁搞美工的小哥在妹群中幸災樂禍地笑著......
---------------------------------------- (???ω?? ?) All Hail Cocos!!!All Hail Cocoser!!!3D手游都是異端!------------------16.05.17--------------------
兩個教都入了。。。作為一個新手駕駛員,學駕駛的時候應該先從摸方向盤和油門開始,還是從汽車構造開始?
我想心靈雞湯和哲學問題都幫不到你,無論你選哪一個,我想最關鍵的是你要先踏出第一步.我來點N年前寫的乾貨:http://zero3d.cn/blog/post/38.html當年年少,如果不喜,請見諒。
OpenGL由儉入奢易,由奢入儉難
做事先易後難,先學unity,以遊戲激發自己的興趣,以實際項目的完成獲得成就感。然後再一步一步深入底層的東西,你才會了解底層為什麼會這麼做
我當初也是跟你一樣的不知如何選擇,最後基於長期發展,就業門檻,工作強度的綜合考慮選擇了u3d,這東西用著確實挺爽
喜歡寫邏輯就從U3D開始,喜歡渲染,引擎底層,就從cocos開始
這個問題可以這麼問。 一個好程序員應該學Python還是該學怎麼用c++來寫一個Python的虛擬機。
OpenGL,然後再去摸Unity
作為一個端游伺服器程序員這三個都不會的掩面而過
要想走的遠,底層的東西必須吃透。框架這種東西幾年一變,學了unity有cocos,有unreal,只有底層如圖形學和opengl是不怎麼變的。
我先摸unity,坑太深,回頭摸opengl
推薦閱讀:
※DirectX和OpenGL如何抉擇?
※unity3d里的Surface shader中的surf,LightingName,finalColor,到底屬於渲染管線的哪個階段?
※「渲染地球」引擎實現的原理可能是什麼?
※《Manifold Garden》中的模型描邊是怎麼實現的?
※如何進一步學習 shader (CG) 的知識?
TAG:Unity遊戲引擎 |