[心得] 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