USC CS Games课程总结

主要当作自己用的一个总结,同时也希望能给后辈们一点选课参考信息吧。本人是CS Games方向,但是在技术类专业课上所有CS方向还是有些重叠的,而设计类专业课跟IMGD(Interactive Media Game Design)专业有些重叠。CS Game比其他所有CS方向必修的学分都要多,我入学的时候是要求128学分。另外还多读了一年PDP(Progressive Degree Program),上了几门研究生级别的课程,拿个没有什么用的硕士学位。当然上课体验是很主观的东西,跟个人水平也有关。本人水平很低,进学之前没有基础知识,也不是什么好学的人,有上进心的同学的体验会很不一样。另外课程要求在这几年中也发生了变化,也不一定是谁来教了。虽然基本内容不变,但是上不同教授的课感觉也是很不一样的。

总的来说CS本科教学质量还是很高的,基本能保证小班授课,更容易跟教授套近乎。不用跟别的学校比,USC的CS硕士研究生课都是好几百人一起来,感觉就很不一样了。

最新的CS Games要求:https://www.cs.usc.edu/academic-programs/undergrad/computer-science-games/

这里只说专业课,关于GE另有:USC GE课程

CSCI系列

CSCI-180 Survey of Digital Games and Their Technologies

这门课已经绝版了。虽然挂的是CS,但其实应该是CTIN的课,讲的是电子游戏发展史和一些基本的游戏设计理念,用到的两本书是The Ultimate History of Video Games: from Pong to Pokemon and Beyond还有Theory of Fun for Game Design. 这门课可以说是对我人生都有一定影响。生在十八线小城市,在上大学之前说到玩游戏也只知道各种腾讯网游之类的,主机什么的根本就没摸过。这门课从第一款电子游戏的诞生开始,细数每一代的主机,当然也有PC游戏的崛起,带领我走进了以美国和日本为主的主流游戏文化。玩游戏这种事还要上课来入门感觉有点overkill, 但其实作为游戏玩家来说要补的还有很多。

上课的结构是先lecture, 然后给时间玩指定的游戏,之后用一套固定的方法来讨论分析这个游戏。Midterm除了考试,还要玩一款叫Psychonauts的游戏并写essay分析。也是第一次知道有Steam这个东西。这是个比较传统的动作闯关游戏,手残还打不过,作弊了才打通关,冠以为了完成作业的名义。当时的室友调侃说你简直活在每个少年的梦中,作业等于打游戏。Final除了考试还要模拟pitch一个游戏。

Instructor是St. John Colon, 在Square Enix工作过。当时啥都不懂,问过一些很愚蠢的问题,什么Galgame算不算游戏啥的。当年还没有EGG,在SAL上的,现在一排办公室的那个地方。

CSCI-281 Pipelines for Games and Interactives

主要教怎么用Maya, 先跟着教程视频学做一个Phantasm Ball,一个插了几个管子的球的物体,借此熟悉了基本建模操作还有UV怎么贴上去。然后找参考图做两个无机物的模型,汽车火车飞机这种,最后做一个有机物,用自己的照片做参考图。惨不忍睹。除了Maya也可以说是3D软件入门吧,游戏引擎的编辑器都会做得类似Maya等3D软件。

Scott Easley也是Game Program里一位很重要的faculty了。当时他在搞一个AR的实验游戏,还跟St. John Colon联合做了个小iOS游戏。他还找人检查这个游戏的localization, 当时帮着测试了几次,后来不了了之了。现在这个课在EGG上,没有EGG之前是在RTH三层上的。

CSCI-103 Introduction to Programming

这是第一门“正经”的CS课程了。每所大学的入门编程课程选择的语言都不尽相同,USC用的是C++. 这门课默认你没有任何编程经验,从基本IO开始,基本控制结构,数组,函数,结构和类,类的继承,指针,动态内存,栈,队列,向量,模版。相信很多人在入学之前都有这些基本功了。比较谜的是最后两周会直接上Qt,前五个作业都是命令行程序,最后一跃直接要求套GUI. 这对刚入门的的新手比较不友好啊,从一个大while loop改成event-based感觉几乎要重写了。这让我对Qt留下了非常不好的印象,从那之后再没有摸过Qt.

有幸赶上以教201闻名的Jeffrey Miller教这门课,这是他在开始在USC任教的第一次授课,教了一次103和一次104. Miller上课特点很明显了,永远穿着西服,讲课很有激情,然后课上带着一起写代码。女儿来卖小饼干是必备节目。考试除了笔纸考试以外还会有用电脑实际写代码的考试。在RateMyProfessor上Miller的评价两极分化,有人觉得他很无聊,考两次试很恶心之类的。个人是喜欢Miller的,觉得他重视实际写代码很有帮助,人也很好沟通,他是我找的两位写PDP申请推荐信的faculty之一。

CSCI-109 Introduction to Computing

109是103的co-requisite, 没有coding只讲很高层次的概念。涉及的范围还是很广的,每一项后来都会有专门的课来学。用一个CS Department教授写的书On Computing: The Fourth Great Scientific Domain,他自创了一套表示现实生活中各种场景和计算之间关系的表示方法,学这个比较谜。然后有计算机结构,算法,抽象计算,操作系统,图形学,AI,网络之类的介绍。每一项都不会很深入。印象比较深的是学图灵机和有限状态机什么的。

负责授课的是Gaurav Sukhatme. 这个是早八点的课在SAL,当时住Parkside, 7点59起来去上课都能提前到,直接继续睡,对这个人没什么印象了。Discussion占得比重很大,每次都有作业,最后还有个presentation,跟TA接触比较多。根据最新的syllabus,109已经从3学分减到2学分,并取消了discussion.

CSCI-104 Data Structures and Objected Oriented Design

CS核心课程之一。主要内容是数据结构,还有伴随而来的一些算法。写的东西基本都是在重新造轮子,C++ STL里面都有。最后一个作业可以选择用STL替代,当时觉得STL比自己写的map之类要靠谱多了。当时还是觉得挺难的,线性结构还比较好理解,后面红黑树什么的真的没搞懂。最后成绩也很差。

上的是David Kempe的session, 讲课不用幻灯片。有一个2013 Fall总结的课程笔记,就算是自编教材了,现在好像还在用。比较有意思的是刚开始两周和每个人都面谈一次,谈谈为什么学CS之类的。

CSCI-170 Discrete Methods in Computer Science

这个要和104一起上,算是学习算法的离散数学基础。讲逻辑关系,归纳法,概率,后面还有图论。非常惭愧,这种课作业考试从来都是一塌糊涂,实在是学不会,成绩在挂的边缘。现在C-好像要重修了。

选的Ming-Deh Huang的session, 讲课比较枯燥,后来都没人来了。同时著名的Aaron Cote也在开这门课,干脆去听他的了。

CSCI-201 Principles of Software Development

第一门非C++的课,用Miller的话说就是上完之后Java比C++还熟悉。涵盖的内容很多,花不少时间写Java的GUI,然后还有多线程,网络,并行计算。最后有个final group project, 基本要求是做个有网络功能的GUI程序。当时正好上完了CTIN488 Game Design Workshop,把final project设计的一个棋盘卡牌游戏拿来做。虽然从这门课以后就再也没写过Java了,但是熟悉Java其它高级语言也很容易上手,比如C#. 另外网络知识也很实用,这一套东西放在哪里都是一样的,实际写出来是很好的练习。

Miller在上面已经提到过,201的作业量还是不小的,要花不少小时数敲代码。当然喜欢写的话不会感觉很痛苦,看有人反应太耗时间受不了。

CSCI-270 Introduction to Algorithms and Theory of Computing

算法是程序员的基本修养,要进科技公司还是要会解算法题。很可惜到今天本学渣也做不出个动规题。经典算法就这几个大的话题,贪心,动态规划,分治,网络流,NP问题,感觉就是CS的四书五经,然而要搞懂真的不容易。仰望各位能把这点事搞清楚的同学们。

170提到过Aaron Cote, 270自然选的他的。记得Cote聊过,人家来当老师是真的喜欢讲课, 不然拿着CS博士学位去哪不都是优待。Cote每节课都会发handout, 记笔记和复习的时候都比较方便。270如果能拿A,而且而且有意继续上Master的话,可以找他写推荐信跳过570去上670,给PhD上的算法课。对于我这种270就挣扎的学渣来说670听起来就像玄学一样。

CSCI-360 Introduction to Artificial Intelligence

AI其实是很多不同问题的一个很笼统的总称,具体到每个问题有一个较好的解决办法。开始从逻辑证明引入,概率,介绍神经网络,贝叶斯网络。记得考试有根据输入数据手算概率。第二部分说借助SAT solver解决问题。最后一部分讲的是搜索算法相关的。

印象比较深的是第三个作业,写一个叫Adaptive A*的算法,算是A*的改良版,证明了一个新的heuristic value, 比直白的Forward A*要快一些。随手Google了一下,结果这算法就是教授Sven Koenig研究出来的,好吧。用的教材是Artificial Intelligence: A Modern Approach,课程从书中拿出了几个章节来。CS526也用这本书,据说内容差不多。

CSCI-423 Native Console Multiplayer Game Development

这门课名字看起来很高级,其实比较神奇。用一套叫Prime Engine的代码,给的教学视频日期是2009年。结构非常的复杂,要改什么东西的话需要修改好几个文件。运行起来非常神奇,加载东西用一个python小程序沟通,加载level用的是lua脚本,然后可以实时在Maya里编辑直接反应到引擎里。有点倾向于学网络的意思,介绍TRIBES networking model, 好像是鼓励写一个基于UDP的网络通信层。光看Prime Engine已经晕了谈何大改,最后的final project也就是应用一下提供的TCP通信,加上鼠标位置raycast能在地图上点出几个小人来。真不知道传说中的大佬们是怎么用这玩意儿做出FPS来的。

授课的Artjoms Kovalovs是真厉害,在Naughty Dog工作。当时正值Uncharted 4快要发售的时候,白天在Naughty Dog晚上还来上课。感觉他上课就是想起来啥就说点啥,当老师的话可能差点,不过水平真高。记得他演示了一下如何debug, 直接反汇编改内存,当时就震撼了。跟他交流能收获不少,他的数学功底非常扎实,做游戏需要的那一套3D数学。课前有根本不知道怎么答的quiz, midterm是写一个Windows下的C++程序跟一个server用TCP和UDP通讯。

CSCI-350 Introduction to Operating Systems

其实OS相关的知识之前在别的课程中多多少少都了解过了,多线程,并行处理,内存管理之类的。这门课的重头戏是作业,用的是一套斯坦福开发的叫做Pintos的代码。因为OS太复杂很难自己编出一套作业来。分四个部分:线程管理,用户程序(栈和syscall),虚拟内存,文件系统。当然都是真正OS的简易模拟版。Pintos是用纯C写的,随便一写就是全局变量全局函数。经常是不知道这一行是怎么实现效果的,找到源头发现是asm(此处插入汇编)。Debug是相当痛苦,因为本身是OS,所以要调用printf的话会出非常大的问题,因为printf本身是一个线程,在管理线程的代码里调用直接彻底乱了,要看什么值只能直接看内存。写这个东西实在是让人欲仙欲死。Pintos的自由度很高,理论上可以有自己的设计,爱加几个变量加几个变量。

还是少见的大班课,Tatyana Ryutov说话没调,很容易睡。考试比较宽容,都是理论问题。大部分时间还是为Pintos头疼。

CSCI-420 Computer Graphics

之前已经在ITP课程里接触到不少图形方面的内容了。还是那一套3D数学,渲染,光。说的几种曲线之前没有接触过。用OpenGL, 找了几个教程,结果一种事情有好几种写法,比较头疼。Graphics的东西也不好debug, 因为涉及到GPU和显存不像一般程序可以直接看内存。作业占一半成绩,第一个是渲染高度图,第二个是做一个过山车动画,一帧一帧来。第三个raytrace, 很费时的那种离线渲染。踩着十二点deadline做,结果发现出一张复杂的图要十几分钟,悲剧了。

这学期Jernej Barbic负责教420,做图形学的好像多少都做过电影特效之类的东西。说到graphics不得不提Hao Li, 很厉害很有名,有时会教420.

ITP系列

Information Technology Program比起CS课程更注重实际应用。CS的理论跟实际写代码还是有一定隔阂的,我这种脑子不灵光的学渣更倾向于做个没有什么技术含量的码农,比较喜欢ITP课程。推荐有多余的学分多选几门,都是比较实用的内容。

ITP-280 Video Game Production

280说的多是设计方面而不是实际制作的话题。作业写一些短文,记得有一个是用League of Legend跟另一款忘了叫什么的MOBA游戏做对比,这是至今为止玩的唯一一局league, 为了做作业。那时候正赶上Flappy Bird忽然爆火,也有印象讨论这个。Project是用Gamemaker Studio做点东西,一个非常简陋的2D引擎,当时连Unity都不会用,final project简直惨不忍睹,黑历史。

Anthony Borquez是个很神的人,对中国游戏市场还有涉猎,当时在运营手游,展示后台数据是什么样子,还提倡用微信什么的。据说陈星汉大神做过这门课的TA.

ITP-380 Video Game Programming

强烈推荐,可以说是真正的技术入门课。3D数学,图形,物理模拟这些基础的东西,在一套以SDL为基础的仿Unreal 4结构的引擎里实际写比较复杂一点的C++,实现简单的物体交互,非常好的锻炼。最后一个作业稍微用一下Unreal 4,不许用blueprint全C++.

吹一下Sanjay Madhav, 想学习真正的技术就要加入Sanjay神教。游戏编程的基本功都会说到,作业编得有方向可循又不会是完全手把手,十分受用。Sanjay是我找的第二个写PDP推荐信的faculty.

ITP-485 Programming Game Engines

这可能是我最喜欢的一门课了,可以说是380的进阶版。每个作业都很精彩,调用SIMD指令集,自定义内存pool, Direct 11渲染,写Phong shader, 计算skeleton动画,特别有意思。最后一个是自己添加一个功能,我比较奇葩做了个level editor. 本身提供了level loader读取一个JSON文件,但是没有save功能。Raycast之后利用C++/CLI调出来一个C#写的对话框,可以编辑数值。存储的时候因为不知道类型直接用void*, 非常刺激。

也赶上了好时候,前半段是Sanjay教,后半段Jason Gregory来教。Jason是Game Engine Architecture这本书的作者,也在Naughty dog做lead engineer. 能进Naughty dog的当然都是神一样的人物,能在PS3硬件上做出Uncharted系列的效果。但是说到底还是那些数学,还是利用好内存,都是这么来的。

ITP-342 Mobile Application Development

ITP有两门移动端开发课,一个iOS一个Android, 这个是iOS版。这个其实可以说是给非CS专业开的课,一个组件一个组件的介绍,其实如果好歹写过一点GUI上手iOS是很快的。当然这么慢条斯理也可以说是基础比较扎实,用的是Objective-C, 早就知道syntax很奇葩,习惯一下也不是不能接受。很强调MVC设计,现在日新月异的业界好像不怎么待见MVC了,但是老方法还是可以用的。Final project要求调用第三方API,做个了用Google map + firebase实现共享位置的小程序。

授课的是Trina Gregory, 是前面提到的Jason Gregory的妻子。两人在各自的领域都颇有建树。非常蓝色,川普当选的时候说着说着说哭了。

ITP-382 Mobile Game Programming

这门课因为实在是没有时间中途drop掉了,开始是跟着教程做几个Unity小游戏,作为练习很不错。后面是自己做project, 有时间的话还是可以选的。

ITP-439 Compiler Development

这是Sanjay系列的最后一课,prerequisite是ITP-435 Professional C++. 很想上435但是实在是没抢上,给Sanjay发了个邮件就waive掉了直接上439. 好多CSGM同学都上了435,但是根本没人选439,我觉得很可惜。编译原理不会有实际的应用,能写出工业级编译器的人世界上一共就那么多,但是了解了之后就能更好理解程序语言是怎么工作的。前台的parsing, AST, 生成IR,优化和分配register, 都挺有意思。了解之后就能用编译器的眼光来看待代码,对进一步优化有帮助。作业用的是Sanjay编的一个基于llvm的编译器起名叫University Simple C. 可以实现基本控制结构,函数,递归,printf. 无聊把所有关键字换成别的,也算自创了一门程序语言了。

EE系列

CSGM专业对EE的要求非常低,都是在比较抽象的级别,不会去抠逻辑门什么的。

EE-352 Computer Organization and Architecture

抽象层面的计算机结构,CPU和内存hierarchy之类的。Mary Eshaghian-Wilner给我留下了深刻的印象,伊朗大妈,实在是太nice了。讲CPU pipelining, 拿出纸给同学,一张一张传,这就是pipelining. 做presentation,提交笔记,都可以得extra credit. 最后还只要去office hour就给extra credit, 她的办公桌上摆着糖,还给糖吃。

当然她是个很有争议的人物,听说其他faculty觉得她什么都没教,还跟学生起了冲突,搜她的名字能查到。她现在已经不在USC了。

作业是写MIPS,一种RISC汇编语言,印象比较深的是把所有寄存器都写纸上,里面存着哪个变量,一边写一边对照,还是花了不少时间的。

EE-450 Introduction to Computer Networks

一般都上CS353 Introduction to Internetworking, 我上的暑期课程选择了这个可以替代的EE450. OSI模型的每一层都讲到,常见的协议,NAT, congestion control之类的。因为是EE 的课感觉还是比较偏向底层,会说一些信号学的内容,CS的课可能不会说物理层吧。当然高层的也有,作业是在Unix下的C++ TCP编程,当时是本地的Ubuntu运行没问题,上传到aludra/nunki那个Solaris服务器上就出问题,非常谜。网络编程感觉通信本身不难,怎么处理好多线程才是比较头疼。这门课上的也是跌宕起伏,第一次midterm成绩特差, 不会算那些东西。第二次midterm有熟悉的内容,记得一道分配IP地址的大题,都得换成二进制很麻烦,写了一大张。Grading可以倾向分数高的考试和quiz, 非常大方。

Shahin Nazarian也是伊朗人,EE department伊朗人特多。当时也是睡着的时候比较多,现在想想那个夏天过得很有意思。

CTIN和CTAN系列

CTIN和CTAN是School of Cinematic Arts开设的课程,以设计类为主,也有一些技术类的课程但是对于CSGM不是必修。SCA还是很厉害的,电影学院排名基本就是第一。

CTIN-488 Game Design Workshop

非常硬核的设计课程,non-digital的在纸上进行。对于真正喜欢桌游的同学可能如鱼得水了,我是第一次接触这个世界,搞出来的东西也都是惨不忍睹,拿出来给人playtest简直是公开处刑。最后group project还要仰仗各位会设计会画画的大神。

Lecture在SCI108,那么大的放映厅一关灯就醒不过来了。Discussion占得比重很大,midterm写essay也都是在discussion时间。

CTIN-484 Intermediate Game Development

CTIN-489 Intermediate Game Design Workshop

这两个合起来叫Intermediate, 这是我认为的最好的CTIN课程。两到三人组队设计制作一个游戏,体验大多取决于队友。Instructor会模仿真正游戏开发的过程进行评价,还有多次开放的playtest, 看到真的有人发来玩自己做的游戏还是挺有意思的。这也是一次真正运用Unity的机会,不仅是做个小project试试那种感觉,从准备各种素材到打包出来整个流程都要经历一次。到现在有时候忘了怎么写什么东西还会打开当年这门课的project参考一下。Instructor不固定,赶上的是Peter Brinson和Jesse Vigil, 教intermediate的都是Game Program里耳熟能详的faculty.

https://youtu.be/5JIqQhhduUQ

CIN-485 Advanced Game Development

当时新开的课程,prerequisite是intermediate. 还是用的Unity, 做skeleton动画,利用NavMesh之类的。Arjun Prakash人挺好的,我说想用C#.NET写一套网络通信,结果在serialization上遇到问题了,帮我看了看,结果最后也没做出来,比较遗憾。

CTIN-497 Interactive Media Startup

Gordon Bellamy开的1学分课,每周请一位业界大佬来谈谈经历,偶尔会讨论同学们做的游戏。很多读MFA的人来上这个,人家做的东西都太高级。Gordon也是业界大咖,倾向做business方面的。最后还有机会单独谈谈职业规划,我当时说想去日本做游戏但觉得收入会比较低,他说你就只在乎收入吗。现在决定去日本也有这次谈话的一些因素吧。现在有很多新的CTIN课程学分少负担轻但是很有意思,有时间的话可以看看。

CTAN-452 Introduction to 3D Computer Animation

学Maya的课程,建模,动画,IK. 印象比较深的是上bump map, 第一次用离线渲染,用教室的工作站也得渲染几分钟。当时挖掘机梗很火final project做了个挖掘机,也是至今为止做的最复杂的一个模型了。Instructor是Dariush Derakhshani,写过Introducing Autodesk Maya 2016, 2015, 2014, 2013…等等,就是专业教Maya的。人也挺有意思,现在还记得他说我们这没有未成年人吧,然后F-word连发。一般上课的时候还是都装文明尽量不说这个的。

Advanced Game Project

AGP是最后一年模拟一个studio合作做出一个比较复杂的游戏,一个团队一般十几个人,也各有分工,有producer, 有artist, 有composer, 当然CSGM最多的就是做engineer. 目标和进度都由各自安排,faculty每周检查起监督指导的作用。我参与的AGP叫Skyshot,用Unreal4做的类似篮球的联网多人竞技游戏。个人来说感觉没做多少贡献,浑水摸鱼了,感觉很惭愧。也有幸看到了一些其它组的代码,别人做的怎么这么厉害。

USC的AGP可以大致分成SCA和Viterbi两种。SCA的AGP主要是本科CSGM和IMGD参加,相比来说艺术人才比较多,以SCA楼为据点。Viterbi的AGP是研究生CS Game做的,所以程序员为主,以EGG为据点,又叫Gamepipe. 两者有一些沟通,主要是招人方面,现在展示也放在一起展示了。另外SCA有游戏设计的MFA课程,我也看过一些他们的pitch, 如果说一般的AGP一看还能明白这是一个游戏,MFA的大神们搞的东西都感觉特别玄乎。虽然AGP是只有最后一年才正式选课,但是大三大二也可以volunteer, 比较可惜当初没有利用这个机会,怪自己啥都不会。

Bonus Track

Progressive Degree Program的是申请条件是GPA在3.2以上,加上两个faculty的推荐信,当然不用考什么GRE. PDP项目只能是CS General,要上另外的CS方向就要普通申请了。通常CS General需要28学分,且一学期只能上两门课8学分,所以要两年读完。而PDP减免到20学分,一学期可以上三门课,所以一年就可以读完。理论上大三申请成功的话大四就可以上500级课了,但是空余学分我选择了上ITP的课。另外因为人多500级的课可能需要等D-Clearance,不一定能上到想上的课。PDP可以在D-Clearance发放之前就直接注册上,不用排队。

CSCI-570 Analysis of Algorithms

还是270的那些问题,但就是学不会。晚上三个小时的超长lecture, discussion也跟lecture差不多。特点是作业完全不算分,爱做不做,成绩全在三次考试。两位instructor Shahriar Shamsian和Victor Adamchik讲课各有特点,讲得挺好的,可惜自己水平太差。

CSCI-571 Web Technologies

全栈技术都有涉及,HTML, CSS, JavaScript, PHP, Apache+Ngnix, AWS/GCP, Angular, Node.js, 最后甚至做mobile app. 这门课开始特别轻松,写点简单的HTML和JS. 后面难度陡然上升,第三个作业是写PHP,第四个作业要求用Angular/AngularJS, 并有一个express.js的后台。从纯JS直接上framework我是非常的不知所措,更别说Angular用的还是TypeScript, 最后用AngularJS凑合的。 第五个作业更是直接做iOS或Android的app, 因为我有一点iOS的基础所以不算特别吃力,就是超费时间,吃饭睡觉写代码。无法想像完全没摸过app开发的同学们是怎么从零开始的。

Marco Papa在Ratemyprofessor上评分还很高,我是比较不喜欢这个人。在piazza上问个问题总是得不到想要的答案,讲的内容都是入门级的,作业一下拉高那么多,基本都是自学的。考试也是事无巨细,非常麻烦。Web应该是入门门槛最低的程序员类工作了,但真要深究也是博大精深。我对前端抱有比较复杂的感情。

CSCI-526 Advanced Mobile Devices and Gaming Consoles

组队做一个游戏,虽然说是mobile devices但不是mobile也可以。这就是传说中的水课,只要好歹做出来一点东西别真的啥都没有就能拿成绩了。由Mike Zyda带领,这是Gamepipe的director,也是founder. 超厉害的一位人物,境界太高了。

CSCI-585 Database Systems

可以分成两部分SQL和NoSQL. 前部分是传统的数据库设计,照本宣科,写SQL. 做web当然多多少少写过两句SQL,但是这个真要深入研究起来也是博大精深,怎么把那么复杂的多重query套在一句里面很是费脑子。后半跟前半的画风很不一样,instructor也换人,介绍的是现在流行的NoSQL技术,还介绍了大数据和机器学习,只是大概说一些方法。作业也变成了试用一些软件,用了一下graph database, 最后还写了两句R.

两位instructor Olivera Grujic和Sathyanaraya Raghavachary风格很不一样,Olivera比较正经,Sathetanaraya显得风趣一些。有人说NoSQL的部分感觉都是介绍一下没学到什么真正的东西,我觉得了解一下还可以。

CSCI-576 Multimedia Systems Design

选这门课算是剑走偏锋,跟别的需要排队的课比起来这一门简直就算没人上的了。真的是多媒体,图像音频视频都有。说的是各种媒体的的表达和压缩。还是挺有意思的,因为媒体的最终目的是给人看,所以要从人观察的角度分析,利用人视觉上的特点压缩图像,利用听觉上的特点压缩音频。具体到方法上数学内容也不少。作业也挺有意思,模拟JPEG压缩算法。Final project做视频片段匹配,我很幸运遇到了一个大神,用opencv做各种高端分析,我基本就是给套了个GUI.

值得一提的是最后几堂课还乘车到Institute of Creative Technology参观。这做的可都是真正的高科技,带模拟光源的精细建模,自动补写小说的自然语言处理。当然少不了VR技术,Oculus Rift的创始人Palmer Luckey就在这呆过。因为是由美军出资设立的所以有很多针对美军需求的研究,治疗PTSD的VR,协助学习的软件等等。

Instructor是Parag Havaldar,也是业界有名人物,做过电影特效。用的课本也是他写的Multimedia Systems: Algorithms, Standards, and Industry Practices. 从泛泛的介绍到具体的算法细节都有,挺好的一本书。

8 Replies to “USC CS Games课程总结”

  1. 博主,博主,请问一下 CSCI526是组队做个游戏就行了吗?期中期末 有考试吗?

  2. 博主,想问一下写pdp推荐信需要和教授有多深层次的互动,感谢

    1. 课程拿过A然后去过几次office hour我觉得就可以了。本科大多是小班,想混个脸熟还是很容易的。

  3. 请问楼主有上过或者了解过CSCI 522 Game Engine Development吗?这个跟485有什么区别呢?Workload大吗?

    1. 都是一个人教的应该差不多吧 如果Artjoms没换那一套代码的话

Leave a Reply

Your email address will not be published. Required fields are marked *