26.6.4 Update: 新一轮选课补充一下数据,25 暑 29 人修读给了 26 个 A - 及以上,12 次作业 + bonus 满分 12*5+20=80,55A- 60A,强烈推荐修读。虽然说是非常适合 CS 学生的课,但本身压力对其他专业来说并不算太大(只要学过 CS100 或一些简单的编程),非 CS 也很推荐修读。
利益相关:24 暑得分 A / 25 Volunteer TA 。主要为个人观点,尝试为大家提供一些选课、修读的参考
Overview
课程质量不错的一门 GLSL 入门课,作为暑学期课程 workload 略大,但最终给分是非常不错的,教的知识也在后续课程中也能起到一些铺垫作用(个人认为这门课有图形学先导课的作用,详见我的评论 CS171: 计算机图形学 I )。而且区别于信院代码课,这门课更重视开源的思想,交流学习是被完全鼓励的。
课程内容
整个暑学期的四周基本等同于课程的四个板块:
- W1:Introduction,基本的 GLSL 入门,多种函数(
step, smoothstep, mix, etc.)的使用;实现效果部分,主要内容包括色块、渐变、材质、变换四个不同细分板块,每个细分板块有 1 次作业。
- W2:Advance,前两次课分别讲解迭代分形与逃逸分形,后两次课讲解随机与噪声。这一部分的内容可以做的事情很多,发挥空间很足,去年有同学用迭代分形实现了非常酷的效果。
- W3:3D-Raymarching. 这一周的内容较难,首先会讲解 Ray marching 的基本算法,随后会讲解 3D 场景的建立,然后进一步介绍玻璃材质与镜面材质的实现方法。整个这一周总计有 1 次作业,融合自己学到的知识建立一个 3D 场景即可。
- W4:Simulation. 本周的模拟包括物理模拟、图像处理、音频模拟。顾名思义,物理模拟是使用 shader 的相关技术,进行多种物理模拟;图像处理部分,主要的做法是选用一个材质或摄像头输入,对图像进行各种处理;音频模拟则是利用 shadertoy 的
Sound功能,进行音频输出。这一周共 3 次作业,选 2 次完成即可。
Workload
作为一门暑学期课程,总计 12 次作业(含 bonus),workload 还是偏大的,3D 那一周的作业 workload 基本可以与 4 次正常作业相当。若于暑学期选了本课程,则不推荐再选其他 workload 中等(偏上)的课程,避免工作量太大导致没有足够的时间花在这门课上,最后拿不到理想的成绩。每次作业可以先在课上实践阶段进行构思、代码基本架构,课后进行约 1h 的代码编写及修改即可基本达到 4 分水准,若想要拿到 5 分则需要重点关注视觉效果的改善。
关于代码引用
比起信院课程,这门课不那么重视代码的原创性(至少不像典型信院课那样要求得那么严格)。在课上老师也会给出很多他人的现有代码参考,而且 Inspiration List 里的 shader 都是可以作为参考、进行修改而获得更好的视觉效果 / 不同的视觉体验的。唯一需要注意的是注明代码来源,以及自己对他人代码做的修改不应该特别少导致视觉上的差异只有零星几点(评分标准内也提到,如果对代码的修改太少,最后的得分也不会高于 3 分)。
另外的一条注意点则是需要标注清楚开源协议,ShaderToy 官网上使用的较多的开源协议包括 MIT License 和 CC 3.0/4.0,在注明引用的时候最好与引用的代码的协议保持一致。此外,不是所有公开 shader 都是可随意引用的,例如 iq 的部分 shader 在代码开头的注释中就写明了不允许进行转载。
总结
总的来讲,这是一门努力与收获完全对等的课程(在 25 暑作业占比调整的情况下更为明显)。推荐所有对 shader 感兴趣的同学来选修这门课,很有意思,学完了收获颇多。
后记
本人在大一下修完这门课以后觉得自己对图形学很感兴趣,于是在大二上选了 CG 结果被创飞了... 应该会有相当的同学(据目前观察班上大一同学很多)学完这门课之后会对图形学产生兴趣,但是最好不要在大二的时候选 CG,CS101 + 概统 / 信号与系统的 workload 已经够大了。(当然如果你对自己 C++ 能力足够有信心而且刷完了 GAMES101 并写完了它的所有作业可以一试)祝大家都能在这门课获得预期的成绩()