Re: [請益] 大學期間自學遊戲程式的方向與一些問題

作者: kuku321 (halipapon)   2019-05-17 17:47:29
看到這段
: 1. 走遊戲特效模擬之類的,需要需要往上讀研究所嗎
: 像是之前的這個大大就事先讀研究所再去日本專門學校,
: https://www.ptt.cc/bbs/GameDesign/M.1460214009.A.A8C.html
簡單回一下。
※ 引述《md9830415 (DavidHsu)》之銘言:
: 在準備比賽的時候開始接觸到一些基本演算法,就在那時候開始了解寫遊戲需要的知識,
: 如基本向量跟繪圖,嘗試從0開始用C#跟JS寫了一些小遊戲
: 最一開始寫的C#小遊戲
: https://i.imgur.com/IrctsiI.gif
: JS寫的彈幕遊戲
: https://i.imgur.com/ssZ6BcJ.gif
建議可以寫些「完整的遊戲」。
所謂的完整呢,不是說只是能射擊,遊戲可以玩、有計分有血條就好。
而是有個標題畫面閃阿閃叫你press any button,
然後有教學頁面,主關卡,計分結算,最後回標題,
這樣一個完整的LOOP才能叫作一款能端上桌的「遊戲」。
這有什麼重要的呢?
重點在你有沒有重複利用的概念,以及理解遊戲真正的內部流程。
開始會去想要怎麼去包裝class或函數,開始考量到public private成員差異,
考慮那些資料應該被共通使用,
Unity直接提供給你的start update render finish到底是幹嘛的。
做一個親手打造的完整3D彈珠台,
會遠比你用現成工具兜一個超屌爆幹宛如3A大作的動作遊戲。
看你是打算走手遊還是家機來選擇。
如果是手遊的話,繼續走2D和簡單的3D,然後用現成引擎是沒什麼問題。
如果你打算作家機,甚至是搞到引擎層級內容的話,
強烈建議一定要用C/C++,然後看你要用DirectX還是openGL都行,
搞一個小型但完整的framework出來,然後再用他來作一個「完整的」洛克人(之類)。
玩法可以維持2D沒問題,但一定要以3D物件為基礎去作。
Layer分層也不用多,分成背景(2D+3D物件)、前景(2D+3D物件)、UI(2D),3層就好。
這樣基本架構也練到了,還能順便理解billboard的作用,
也可以開發些高速化billboard來玩玩看,強化自己的矩陣/演算法熟練度。
這目的在讓你了解Z-Buffer、ZBias或一些Layer sort的意義,
能夠實際運用你所學的資料結構,增加link list之類的熟練度。
而且上述整個遊戲作完,你也能分別建構出2D與3D的畫面描繪的函式庫,
理解矩陣轉換和2D 3D投影差異。
基本上我覺得你畢業前能搞出一個能夠讓自己隨時簡單使用的framework,
然後用他來作出2~3款小遊戲,並且抓出自己framework的改進點,
這樣就差不多可以當家機遊戲即戰力了XD
(當然數理+物理等部分也需要,下述)
: 感覺遊戲特效模擬的東西反而偏向科學綜合,需要有扎實的數學物理,還要有扎實的電腦
: 科學知識,像是作業系統、GPU架構、演算法等等,才能配合理論完成實作,所以也很好
: 奇走遊戲領域要不要念研究所,因為真的是很多領域都有。
: 也因為寫過那些小遊戲後,感覺到自己底完全不夠,很清楚大學應該是要好好打底的階段
: ,然後我的很煩惱的問題就在,學校沒有圖學相關的課程,都教網頁開發居多,課程深度
: 個人覺得不夠,每天去學校上課都覺得自己離cjcat的經歷越來越遠,雖然知道學校只是
: 引路人,最後還是要靠自己學,但按照我之前教朋友寫程式的經驗,有人在前面帶的學習
: 成效真的快非常多。
這就是我希望你能寫一個完整遊戲的原因,因為這才叫做一款「能上市的遊戲」。
然後拿去給你的朋友/家人/或是PTT的大家來試玩,嘴越賤的越好。
因為你在拿去之前就會開始想這樣是否堪玩,是否好玩。
你有沒有把所有部分作到你的best,還是有些部分你根本作的鳥鳥的就想拿出去。
貼圖連環動畫格數有沒有問題,角色動作連貫性是否順暢,
你有沒有物件排序出錯導致有些景物被透明物件遮蓋。
當你有自信這些【商品的基本】都沒問題後,恭喜你得到了【程式設計師】的門票。
然後你在端上桌前的那一刻,回想起你所玩過的遊戲和曾經給過它們的糞作評語,
開始為自己的作品是一團屎而感到丟臉。
為什麼FPS不到30禎?
為什麼分數結算是數字大辣辣的顯示出來而不像吃角子老虎有轉動特效?
為什麼你的血條是80%瞬間扣到60%,而不是80% 79% 78%...62% 61% 60%的滑順動畫?
為什麼你的角色移動和跳躍都是等速,重力去哪了?
為什麼讀取畫面只有now loading一張圖還不會動?
然後你會運用你的所有知識,知識不足你會開始翻書翻論文問google老師。
把一切你覺得是糞的要素通通移除後。
恭喜你,你終於拿到了【遊戲程式設計師】的轉職會場參加資格了。
在這途中你就會強化你的數學/物理能力,
學會多核心計算架構,
學會frame buffer跟render state等用法。
根據所增加的額外技能,你將獲得【物理戰士】【影像法師】【框架牧師】等轉職資格,
當然其中也包括【落選】。
: 最後想問的問題是:
: 1. 走遊戲特效模擬之類的,需要需要往上讀研究所嗎
: 像是之前的這個大大就事先讀研究所再去日本專門學校,
: https://www.ptt.cc/bbs/GameDesign/M.1460214009.A.A8C.html
: CJCAT則是台大畢業後去DigiPen
看你有沒有想出國或是想去哪個國家。
其實研究所/專門學校/台大/DigiPen,都沒什麼差別,
都是我上述所說讓你增加附加價值的管道而已。
就以你的目標業界/目標職種,選擇你能獲得所需時間並有效增加背景知識的管道即可。
你提到的遊戲特效模擬,是有考慮專精這方面嗎?
有考慮作Graphics相關的話我之後再補充些這方面的經驗,建議先思考個大概方向。
研究所部分,我覺得最大的幫助就是論文判讀跟實驗比較上吧,
基本上這個行業進去後還是需要常常看些論文,懶的話就看些別人總結的報告跟公式。
然後要有實裝它的能力,我覺得這才是遊戲業最重要的一項能力。
: 2. 如果想要走遊戲開發是不是一定要出國到美國或日本
看你個人的最終目標而定。
: 3. 如果我繼續自學的話會建議怎麼規劃學習路徑
: 像是目前規劃是先學好微積分、線性代數跟物理,然後分兩個領域學,一邊是圖學跟2D物
: 理模擬,另一邊是學演算法解UVA題目、作業系統、計算機架構之類的...,期間都好好學
: 英文跟日文,這些大方向我目前算是知道,但細部都不是很清楚。
不管哪個職種,遊戲程式對於記憶體和CPU/GPU使用量到了病態般的執著程度。
所以計算機架構、資料結構、演算法算是非常重要的重點項目。
其他數學/線代/物理/或是圖學甚至視窗程式等等等,有個印象就好,
當你遇到問題知道怎麼問google老師,這就是最基本門檻。
而不是遇到問題你只能滿頭問號,連怎麼問google都不知道就好。
: 4. 目前寫過的東西幾乎每個都從0開始造輪子,現在也在嘗試模仿2D的簡易遊戲引擎框架
: ,像是動畫、攝影機視角、碰撞體、物體繼承架構規劃、場景管理,每個功能自己想都花
: 很多時間,有時不太會下關鍵字,導致有些功能還只是用很爛的解法頂著用,但很多科技版、
: 軟體版都說沒事不要造輪子,我這樣是不是在浪費時間
: https://i.imgur.com/iadVjvL.gif
遊戲業framework就是很重要,
而且你一轉職,每家公司用的自家引擎也都不一樣,都是要重新學重新熟悉。
甚至是Unreal Engine也是,根據不同商業遊戲,也會有很多特化內容要增加,
甚至你會覺得怎麼跟自己在家下載的UE4用法完全不同的程度。
所以有辦法自己處理框架問題,遇到bug有辦法沿著架構追,
Task Manager不要看不懂,能夠確實解決Bug就是作遊戲最大的重點。
即使你不打算搞引擎,你可以不要造輪子,
但你一定要知道問題出在輪子的哪根螺絲上,所以從基底寫起不會虧。
我覺得我做過最神經病的就是用命令提示字元(CMD)搞圖像遊戲了(?
SAO為主題的音樂節奏遊戲
https://drive.google.com/file/d/0B62DAR7ZudpFMlZCNnRpcmowZXM/view
通通用文字,framework搞起來極為單純,當初含遊戲大概1個月就搞定了。
一開始準備了很多首歌,結果放兩首就爆了,
推測是CMD上限被我玩到壞掉,當下還當機+各種詭異畫面出現,嚇死人XD
然後問題來了,當初覺得畫面閃爍是frame drop的問題,
當我作另一款遊戲時才發現不對,畫面怎麼閃到幾乎不能玩,
我才意識到原來當初以為的每禎畫面刷新,實際上是畫一個文字就刷新一次,難怪會閃。
於是乎...
我又更神經病的在CMD基底的framework上實作了framebuffer跟render state功能(?
https://youtu.be/cLE9Plbpiew
我覺得這非常重要,即使你覺得從輪子開始搞很費工,
我也會建議你既然如此,至少花個1~2個月,用C語言和CMD搞個framework吧,
如果你覺得有其他項目比2D 3D圖形遊戲framework還重要的話XD
: 5. 如果走遊戲開發,是不是賭注很大,感覺台灣工作機會不多
無法回答,Pass
不過我覺得人生本來就是不斷的重複賭博(?
: 6. 因為自已平常只是用JS的Canvas元件繪圖,會比較推薦學C++或C#寫OpenGL/DirectX,
: 接Unreal/Unity,還是繼續用JS寫WebGL
: 非常感謝各位願意看完我的問題。
會。
作遊戲就是跟記憶體的無盡戰鬥,C++等記憶體層級的管理一定要熟悉。
除非你沒打算作家機或出國。
(台灣狀況不知道)
目前想到的大概是這樣,提供參考。
有想到其他的以後再補充。
作者: zxshih (zxshih)   2019-05-17 19:44:00
又一篇文章要收藏了
作者: coolrobin (泳圈)   2019-05-17 21:13:00
作者: jackyT (Ubuntu5566)   2019-05-17 21:20:00
作者: nickchu35 (尼克邱)   2019-05-17 21:22:00
推!
作者: allensheng (上將帽子)   2019-05-17 21:43:00
作者: zseineo (Zany)   2019-05-17 22:51:00
作者: OmniAlter (^Q^)   2019-05-21 22:15:00
作者: cycutom (cycutom)   2019-05-23 14:04:00
push
作者: bill21010 (三橫一豎鯉魚王)   2019-05-24 20:40:00
作者: ilikekotomi (Young)   2019-05-25 10:18:00
感謝心得分享
作者: beef68 (牛肉)   2019-05-31 17:29:00
推然後說聲謝謝
作者: s59654655 (s596546ff)   2019-06-18 16:07:00
神文
作者: TWayne (TWin)   2019-07-18 09:23:00
推推

Links booklink

Contact Us: admin [ a t ] ucptt.com