零基础如何学习计算机图形学?

零基础如何学习计算机图形学?

我来打广告了。

2021年底我会在GAMES上开设一门新课 GAMES 103:基于物理的计算机动画入门。这门课主要面向的对象是大三、大四、以及刚读研的同学。如果你对图形学特别感兴趣,特别想学习一下物理模拟动画,但又不知道从何入手,那你来上这门课就对了。

这门课的内容涵盖了物理模拟动画的几大基本方向,包括刚体模拟、质点弹簧系统、有限元弹性体模拟、流体模拟、碰撞处理等等。课程不是教你如何使用模拟引擎,而是教你这些技术背后的算法、现存的问题以及当前的发展方向等等。

上这门课不需要你有任何图形学基础。什么渲染啊,几何啊,建模啊,统统都不需要。但你需要懂微积分,线性代数,有基本的物理概念,具备C/C++/C#的编程能力。当然,如果你学过数值分析、数值线性系统、数值偏微分方程、非线性优化什么的就更好了。

会有四到五次作业。作业是用Unity脚本做的。Unity上手很容易。所以不会也不要紧。

如果感兴趣的同学多,我以后也可能开设高级的GAMES课程。敬请期待~~~

和大多数同学一样,我因游戏而入坑,对图形学特别感兴趣,但完全摸不到入门的门道。二十年前的条件比现在要糟糕得多。大学里的图形学课还在教如何做圆、三角形光栅化这些脱节的东西。我花时间自学了OpenGL,然后又囫囵吞枣的读了很多论文,但总觉得自己没有真正入门。幸运的是,我后来有机会在斯坦福、佐治亚理工等名校系统性地学习了图形学,并还有机会得到Leo Guibas(几何)、Pat Hanrahan(渲染)、Ron Fedkiw(动画)、Greg Turk(几何、动画)等一系列老师的指导。

要问怎么学习图形学,我觉得最好的方式肯定是上课。如果条件允许,应该至少上三门课:一门几何处理,一门渲染,一门动画,分别对应图形学的三个主要方向。只有这样,才能够全面系统地了解图形学的方方面面,为将来打下基础。由于条件有限,很多学校开设的图形学课程可能只涵盖了渲染,这造成有些同学把渲染误解为图形学的全部。这是不正确的。如果在学校没有办法完整系统地学习图形学,那可以考虑上网课。比如GAMES的网课已经比较能够覆盖图形学的三个主要方向了。

关于GAMES 103:基于物理的计算机动画入门,我想说这并不是完整的动画入门课程。因为动画也有不基于物理模拟的技术,比如人体的运动捕捉和人体运动合成,procedural animation等等。如果你对这些特别感兴趣,需要额外补齐这方面的知识。

如果没有条件上课,或者有些知识需要补齐,我觉得次好的方式是读SIGGRAPH course notes。SIGGRAPH每年都会有各种课程详细介绍一些方向上的最新技术。对于入门而言,选读那些十几年前的SIGGRAPH课程讲义是比较合适的。比如,刚体模拟的概念,我推荐Baraff和Witkin的2001年的讲义:

而流体入门,可以读读Bridson和Muller的2007的讲义:

这些课程讲义会比论文更加完整更加简单易懂。但因为这些课程通常只涵盖某几个方向,单纯靠读这些讲义还是不够系统化。

我没有什么特别可推荐的教科书。主要因为绝大多数的书只能覆盖图形学的一部分范围,不能单独作为入门级别的教科书。假设一本书一个方向,那按上课需要上三门算,起码得读三本书。这样的入门方式我觉得负担有点大,而且不像上课那样聚焦,有重点。

最后我想说,图形学和其他计算机学科一样,最重要的还是多写代码多思考。光是听听课看看论文,可能不觉得有什么问题。但问题永远都是躲在细节里。只有自己去实现,才能发现问题才能深刻地理解问题。反过头来,再去上课或者读论文的时候,就会发现之前忽略的东西。比如碰撞处理,可能学起来不复杂,可当自己实践的时候才会发现种种效率、效果上的问题。下面这个图,展示的是我们经过反复迭代,开发的高性能引擎,能在2080Ti上以60FPS的速度模拟11万个三角形。这可能也是当前世界最快的物理物理服装模拟引擎。

希望大家不单单只是入门,而是能够对图形学的理解更进一步。