[心得] U of Utah MEAE 第二年心得

作者: nickchu35 (尼克邱)   2019-05-13 06:01:33
大家好
我最近剛從 University of Utah 的 Master of Entertainment Arts and Engineering
畢業了
跟大家分享一下第二年的心得
希望能幫到對遊戲 program 有興趣的人
我是 Engineer 所以以下幾乎都是工程課
文有點長大家可以斟酌看
二上三門課
Game Projects II (碩士論文遊戲)
Game Engineering II
Game Engineering III (前身是 Gameplay Engineering)
二下三門課
Game Projects III (繼續碩士論文遊戲)
A.I. For Games
Real Time Game Rendering (跟 Game Engineering II 同一個老師)
我下面一個一個詳細點講
1. Game Projects II
這個課其實就是做我們的 thesis game (碩士論文)
每周二四早上九點到下午一點
以往的碩論都是做一年半
我們這屆變成一年
而且學期一開始做了兩輪的 prototype
每一輪都是全部人 pitch 自己的點子然後大家投票
一輪會做個六七個出來吧,有點忘了
這裡大家有點爭議的地方是老師們一開始沒說要做兩輪
大家以為一輪結束就可以好好開始我們的碩論了
畢竟跟以前相比少了一學期
結果老師突然說要再做一輪
有些同學就很無言
還有人 pitch 的遊戲就叫做 shit storm lol
不過我可以先講一年下來的結論
大家的意見都還算是滿正面的
花個之前一學期的時間大家亂搞然後比較了解到底怎麼進行一個 development cycle 然
後再用一年重新開始新的 project
其實後面那一年做的份量跟品質或許還比當初直接做一年半來的高
個人意見啦
所以大概開學一個月後碩論的組才組出來
我們這組絕大多數人都是暑假就已經開始在 prototype 一些東西了
所以有些死路已經大致知道算是省了不少時間
我在組上的定位是 Gameplay AI Engineer
一開始花了一些時間 prototype 一個勉強像 Horizon Zero Dawn 那樣可以爬在移動物體
上的功能
因為我們當初的其中一個目標是有點像 Shadow of the Colossus
結果後來覺得這個坑下去可能一年就沒了
所以就把這東西丟掉然後我完全走去做遊戲裡的 AI
我們組內主要分成幾個小組 (strike team)
Player, Environment, Goliath (boss AI)
會走這個模式是模仿一些業界的 Studio, 像是我們這的 Avalanche
我日常互動就是跟我們組的 designer 還有另一個 AI engineer 討論一些 feature 還有
要怎麼做
像是我主要是做 AI decision making 這部分用 behavior tree ,但是不同武器的攻擊
方式還有冷卻都是另一個工程師做的,這中間有怎麼建立一個 robust scalable 的
interface 花了一些時間
等於說 boss 的大腦只知道他有四肢加胸口跟頭
但右手是雷射右手還是大砲右手他沒必要知道
這裡有一大因素是因為我們想做模組化的 boss
目標是可以像樂高一樣不同的手跟頭還有腳搭配就可以變成一隻完全不同的敵人
但是因為時間還有 artists 不夠的關係
最後還是只有一隻出來
所以我們的架構其實帶來麻煩多於效益
不過也是很好的練習啦
不過當然做遊戲有一大部分不只是遊戲
還有人與人之間的關係
我們當初有一個組員態度非常負面一直抱怨其他人東西都不做完害他不能做事
然後另一組有個人暗地一直想說服他過去他們組因為想找人分攤工作量
後來他就轉去另一組了
然後說他在我們這邊的期間有憂鬱傾向
我們組也是隨他去
畢竟他真的是沒什麼貢獻又很負面
但我們組上的製作人處理得很好讓組內的人都還是好好的繼續工作
這件事背後的詳細前因後果也不是太多人知道
後來整組的氣氛跟感情都好很多
另外有個比較大的事就是我們在學期末的 play day (開放給外面親朋好友還有媒體進來
) 前兩天決定從第三人稱改成第一人稱
這麼大的改變當然有很多人很猶豫
但我們迅速的把相機位置改一下試試看之後
幾乎整組的人都同意這個決定
最後就這樣改下去了lol
2. Game Engineering II
這門課的老師是以前在 Avalanche 工作的 Graphics Engineer
不過這門課不是圖學
老師是個遊戲引擎狂熱份子
他都說如果讓他從頭到尾自己做一個遊戲
他只會一直改良他的引擎而以應該不會做出遊戲哈哈
這門課教的一部分是遊戲 asset pipeline 還有怎麼寫好遊戲引擎的一部分跟提供
public interface
對於這一點他覺得一個很好的學習方式是同時寫 Direct3D 11 還有 OpenGL 的 API
Build x64 的時候用 D3D, x86 的時候就換成 OpenGL
一開始從怎麼好好設定 Visual Studio Solution 跟不同的 projects 還有 external
dependencies 開始講
後來就是開始建一些 Mesh 跟 Effect, Material 的架構
重點是要怎麼寫好 public interface 跟 private implementation
畢竟 gameplay engineer 不應該去擔心他今天想要 render 一個角色在畫面上是用 D3D
還是 OpenGL
後來有著重在 pipeline 跟 binary file 一陣子
例如 artist 在 Maya 裡面建了一個 3D 模型,然後我們可以用自己寫的 plug-in 去把
他輸出成我們引擎用的一個 Lua table 檔案
在這個階段還是 human-readable 可以人眼來看看 debug
接者在 build solution 的時候跑我們的 custom builder 把 Lua 轉成 binary file
重點就是要非常小的檔案然後可以很快速的讀進遊戲裡
學期末大概一個月做期末 project
分成兩部分
第一部份就是做引擎的一個 component
同學做的主題有 particle system, behavior tree, audio system, gamepad
controller interface, 3D collision system
我做的則是一個 graph-based A* navigation
第二個部份就是大家報告完自己做的東西之後挑至少一個同學的加進自己的引擎
最後做一個簡單的小遊戲 demo 出來
我拿了 behavior tree 跟 audio system 來做了一個非常基本的類 Crypt of the
Necrodancer 遊戲出來
這門課另一個我覺得對我幫助很大的訓練重點就是每周的作業都會要求我們寫 write-up
放到一個公開的網站上讓任何人都可以看
我是放到自己的 wordpress
然後後來在找工作的時候開始會把自己寫的文分享到 LinkedIn 上
個人覺得好像有點幫助啦 lol
3. Game Engineering III (Gameplay Engineering)
這門課算是普遍同學間滿有意見的一門課
老師以前在 Zynga 上班是 Unity 專家
我們上一屆聽說是自己選用 Unity 或 Unreal 寫作業都可以
我們這一屆變成強制使用 Unity
但基本上我們同學間 Unreal 跟 C++ 愛用者比較多
不過因為這門課作業量非常大
大家都覺得同樣的系統要是能用 Unreal 來做就好了
課程的部分從 SOLID design pattern 開始然後花一學期做一個像當初魔獸三的
Warlock MOD 遊戲出來
作的內容有角色有技能有商店(技能和物品還有升級) UI
後來也做了 AI 跟多人連線
雖然大部分的系統跟練習都是能轉移的
也有少部分像是讓我們用 Unity Particle System 和動畫系統自己做一些出來就覺得這
種練習好像不是太有意義
我個人是覺得這堂課還是學到了非常多
老師人也非常好也很強
但要我在選一次我可能會有點猶豫
4. Game Projects III
接續上個學期做的東西繼續做碩士論文
第一學期主要是做出 feature 然後打定 alpha 版本
第二學期除了 polish 外基本上就不做新的東西了
重點放成把素材慢慢加進去讓遊戲開始比較有個樣子
不過當然 bug 還是很多
所以我們組基本上每個禮拜六都會在實驗室加班
別組有人看到還說我們幹嘛把自己搞得這麼忙
這邊就感覺得出來國際生跟美國當地的學生壓力真的不一樣
美國人大多都覺得要有 work life balance 學校部份 ok 就好
國際生則是整天想著找不到工作就掛了 lol
一路加班加到 GDC 前雖然很累但是算是有達到目標
我們組的目標就是 GDC 回來後遊戲就要發到 Steam 上然後讓大家努力去找工作了
接著就只有修 bug 跟社群管理
不過後來還是做了一個新的排行榜出來
讓玩家可以看到自己玩的時間跟其他人比較快慢
學期末的時候也會有口試 defense
公開 defense 就是一組做一個投影片然後輪流講自己做的東西
私人 defense 則是一個一個去找教授群們閒聊聽他們再給一點最後的 feedback 講你這
兩年有什麼成長這樣然後說再見哈哈
5. A.I. For Games
這門課上一屆的評價很差
印象中是找一個 CS PhD candidate 來教然後教的一大糊塗
今年則是給我們系上的一個助理教授教
他也是第一次教這門課
但是整體算是覺得架構的很不錯
課程主要就跟著 Ian Millington 的 AI For Games
從基本的 Steering 開始
還有 Collision and Obstacle avoidance
然後做 A* 跟 Dijkstra graph search
接著在做 decision tree, behavior tree 跟 blackboard
單純看這些部份會感覺份量好像滿輕的
但其實很多時間花在自己架構 world interfacing
像是怎麼取得世界裡的 obstacles 還有自己寫個簡單的 ray 跟 ray cast collision
detection
原本有打算期末還要做一個 strategy AI (group AI)
但因為 GDC 跟春假放掉了兩門課
教授自己也有事請假了一兩次給 TA 上課
最後就沒做了
其他的上課內容有 Goal orientated action planning 跟 decision tree learning
(ID3 algorithm)
學期末有講一些基本的 Procedural Content Generation 像是 procedural narrative
有一點值得一提的是教授原本打算規定用 Java 寫作業
但經過一位同學的強力爭取跟教授寫信來往好幾次
最後教授同意我們用 C++ 跟 Open Framework
這裡真的是滿佩服那位同學的
話說人家最近開始在 343 上班了哈哈
6. Real Time Game Rendering
跟 Game Engineering II 同個老師
我們這屆很幸運的遇到他今年願意開這個課
還有系上願意不顧 CS 抗議他們已經有圖學課我們還開的意見
跟 GE II 相比不一樣的地方就是這們課當然著重在圖學跟 Rendering Engine
有幾周的重點是 render command 還有怎麼優化 draw calls 順序
例如沒有 alpha blending (order independent) 要先 draw
然後同樣的 material 或 effect (shader) 還有 mesh 可以被放在一起減少 API calls
然後有 alpha blending (order dependent) 要從後往前 draw
接著做基本的 texture, normal map, 2D UI 還有 diffuse, specular lighting (用
Blinn-Phong)
後來有一周在討論 color correctness, sRGB 還有 linear space
學期末做了 Physically based rendering (PBR) 還有 environment mapping
期末報告就是自己挑一個有興趣的主題來做
有同學做 Ambient occlusion
我則是做 vertex-based wind simulation
雖然大部分同學以後都不是打算走 Graphics Engineer
但這門課算是給大家一個還不錯的底子
兩年下來總結覺得我們 program 或許不是會教出技術最強的 developer
但是會讓大家很熟悉一個遊戲從頭到尾的開發大概是什麼流程
也很重訓練人與人之間的相處跟專業合作
還有如何在不喜歡對方的狀況下還是保持自己的專業態度 lol
我們 program 的弱勢可能就在地點是 Utah 所以大公司不多
唯一一家比較大的就是 Avalanche
他們最近也是給了我們一堆畢業生實習職位
但都是九個月的合約而且很少聽到他們給 sponsorship......
另外就是靠畢業生跟業界的關係
Santa Monica 跟 Playstation 人資有一起來過
跟我們很詳細的講了他們收人標準然後也跟我們每個組的人見面
因為我是當 undergrad capstone class 助教所以他們跟大學生見面完之後我又把他們帶
回來我們組上聊天哈哈
Santa Monica 最後收了我們這兩個實習生
但其實就是他們的 Junior 職位
Jam City 也有一大批人來
Activion Central Tech 也是每年會來個一次
今年也有個 Blizzard 在 Diablo team 的來跟我們見面
但當然規模都無法跟在加州的學校或是 DigiPen 比
大概是這樣吧
有興趣的人歡迎留言或站內信
我會盡量回~
作者: CarpeDiemAL (CarpeDiemAL)   2019-05-13 07:20:00
2K歡迎你~~~
作者: paulloxa (OracleH)   2019-05-13 07:37:00
恭喜畢業
作者: lf41001 (東山燒肉飯)   2019-05-13 08:05:00
朝聖推
作者: philip09227 (philip)   2019-05-13 08:12:00
詳細推
作者: chenyao0910 (Kyrie)   2019-05-13 10:35:00
作者: d92001314 (雞蛋)   2019-05-13 10:47:00
感謝分享
作者: b10007034 (Warren)   2019-05-13 11:53:00
感謝分享,之前只有看過Cat大的digipen的分享一直覺得這行很厲害XD看到你的心得之後更是覺得太猛了
作者: PuptheDoggi (黑柴)   2019-05-13 13:45:00
推推推
作者: sam830917 (SamChu)   2019-05-13 14:13:00
作者: allan08 (allan08)   2019-05-13 18:23:00
學長太猛~推推
作者: louis117228 (湯圓桑)   2019-05-14 09:13:00
作者: vqawa (拜託)   2019-05-19 05:25:00
推推

Links booklink

Contact Us: admin [ a t ] ucptt.com