秋季学期我选了两门课:CSCI 402 操作系统 和 CSCI 522 游戏引擎开发。
CSCI 402: Operating Systems
这门课是CS37的必修。课程内容都是几年前录制的,看视频即可。考核有几次quiz,两个独立完成的warmup project和组队的kernel assignment(分三次验收),以及开卷的期中和期末考试。
优点:
不要求出勤,quiz 和考试都是开卷,十分友好。
Kernel assignment 需要自己实现操作系统的一些核心机制,比如进程调度、文件系统、动态内存管理等,做完收获很大(就是workload 也不小)。
教授的邮件回复非常及时,这点还是相当佩服的。
但也有一些槽点:
Kernel assignment 必须在Ubuntu 16.04的虚拟机上跑。这导致部分组员的参与度不太高……
Project 文档过于冗长,关键信息散落各处,阅读起来比较费劲。而且某些要求似乎只是单纯增加工作量,比如每个 branch 都要加 dbg print。
教授不建议用Github做版本控制,理由是用容易一不小心让repository变成public,泄漏代码。这就比较难评,不过 TA 也管不到我们怎么 source control,所以还是用了 GitHub,问题不大。
整体来看,这门课质量还是很不错的,不知和贵系的OS比如何,反正比你系的OS要强。我记得你系OS的一个作业是可视化内存分配,emmmmm……
CSCI 522: Game Engine Development
我转码的起点是亚马逊棋,后来在科协做队式,对游戏开发还是有感情的。USC的游戏也很有名,我就打算选一门和游戏相关的课。我问fzq 526怎么样,她说比较硬核,所以我便选了522。事实证明,522也比较硬核。
老师是顽皮狗在职的程序员,具备丰富的游戏开发经验。但因此他讲课也比较free-style一些。让我印象最深的,是第一节课的两件事:
老师的自我介绍时讲,上这门课,你可以把我当成资源,看你能从我这得到什么。他本身也是国际学生,毕业后留在 LA 从事游戏行业,所以欢迎 international students 向他咨询相关问题。这件事本身倒没什么,但它很微妙的提点了我。
第二件事,是我上课的时候穷极无聊,谷歌搜CSCI 522,意外翻到了一位学长的博客:
My life as a Ph.D. student, S01E04: Game on! (Well, not really)。
这位学长高中在东北育才,本科在叉院,当年我在罗姆楼地下熬夜准备申请的时候,就刷到过他的Redemption。观后心中戚戚,还真没注意他是来USC。没想到我还有幸和他上过同一门课。
又翻了他其他的文章,观《盛京全景图》记勾起了我的思乡之情。重读Redemption,里面还提到了他同组博士生的一篇CVPR。我立马就意识到,他说的是这篇paper:
On the Continuity of Rotation Representations in Neural Networks
我看到的时候,这篇文章已经一千多引用了……不过后来发现,我的task确实像DexGraspNet2里提到的那样,rotation matrix+SVD比6D representation效果更好。
同是天涯沦落人,我还给学长发了封邮件,只可惜他没有回。不过问题不大,我已经在 Twitter 上关注了他,默默看他秀恩爱、cos猫娘。
回到 522 这门课本身。最不爽的点在于,PrimeEngine 只能跑在 Windows 上,不支持 Linux。我的 Windows 笔记本屏幕太小,在 VS2022 里看这个量级的代码库非常痛苦。我花了很多时间去研究premake和它的源代码,试图让他支持Linux。最后虽然能build,但它的图形界面是空白的,功亏一篑。后面就放弃,外接显示屏完成作业。
一直到hw5,我都是认真完成的,milestone1开始我心态就有点崩了。只是让光线阴影支持directional light,就花了好多时间。而我research的进展十分不顺,就直接开摆了……
最后两个milestone本来想做UI和加强版physics。最后试了半天,还是不会改渲染管线,用 3D shader 在 camera space 里画矩形。我觉得我已经非常接近了,但问题在哪一直没找到,所以UI只做了一半。至于加强版 physics,直接放弃了。不过这门课给分还蛮不错的,我milestone2做成那样还是85/100。milestone3随便糊弄一下,应该也可以得一部分的分数。但这没有任何意义。
总结
这两门课都是好课,如果能投入更多时间,收获会更大。只可惜人力有穷,我最终选择把更多精力用在research上。