6.837 Computer Graphics 讀後感
MIT OCW 6.837 Computer Graphics,前前後後花了半年左右看完了。OCW 上有給的資源有大部分 lecture note 和大部分的作業檔案,所以這裡的「看完」是指看完這些上面有的公開資源和做完六個作業的基本部份。lecture note 是一堂課一份簡報,總共公開 22 份。作業有六份,前五份的檔案都有釋出,第六份大概是年代久遠,OCW 給的檔案壞了,原始檔案已經不可考,不過我的 codex 硬是找出十幾年前的 github repo 幫我湊了一份,勉強堪用。我的所有作業都放在 這個公開 repo。
我覺得這門課真是太棒了!
其實有點久以前就看到小方塊在看這門課,可能 2024 年暑假之類的吧。後來修了台大資工自己開的計算機圖形(2025 spring),但是內容相當少,印象中只有 transformation、shading model(Phong reflection model)、一些曲線和曲面的基本概念、ray tracing 和 radiosity 的基本概念,總之,有點抱歉的說,少得有點可憐。於是我帶著這點背景知識又回來看 6.837,那真是發現新世界了,大概從第四堂課開始都是全新的內容。大概看到一半的時候學期開始忙起來了暫停了一下,最近放暑假才把剩下的看完;後半段比較多 ray tracing,正好這學期數位影像生成我修得酣暢淋漓,對 ray tracing 太熟悉了,對後面兩次作業也有更多體會。
最喜歡這門課的地方是他把很多主題都講到了,深入到一個恰到好處的程度,足夠淺到可以一份投影片了解個大概的概念又夠具體不覺得模糊,同時足夠深到能讓人了解有哪些延伸的問題可以討論。通常一個主題講到後面會提幾個關鍵字或連結給想更深入閱讀的人。這根本完美符合我對一門導論課的想像,我感覺看完之後我都可以自信的說我是個入門了的 computer graphics 初學者了。
我印象最深的一個主題應該是粒子和彈簧那段。之前我對 particle 的認識只有 minecraft 裡那個粒子效果,原來粒子還能做這麼多事情。他說到彈簧可以拿來模擬布料我整個人都傻了,後面還有 ODE、數值積分、一些以前沒有機會認識的數值方法。在這裡我理解的計算機圖形第一次超出了在螢幕上畫一個三角形的範疇。
除此之外一邊看總是可以有各種小發現,以前淺淺的聽過或遇到過,終於在這裡重新認識一次。像是 collision 那段,高中的時候寫 遊戲 需要一個網格上的 2D AABB 碰撞處理,不會好好對付 overshooting 寫到天昏地暗不知所云;6.837 雖然沒有很仔細說應該怎麼做不過又提了一嘴。其他例子還有重心座標、rasterizer 怎麼工作之類的,太多例子了,沒有任何一頁投影片是廢話。
6.837 的作業也是我覺得很有價值的部份。前幾份作業有點像填空,不過還是需要稍微了解剩下的部份在做什麼;雖然程式本身可能不難或是有一部份是抄抄公式,不過有人寫好一份程式碼的骨架讓你能跟上一個演算法怎麼對應到實際實做是特別有意義的(像 PBRT 也是,理解理論、和能夠把理論對應到具體到程式碼的每一個字,是有關鍵的差距的)。不過後面兩次 ray caster/tracer 寫得有點坐牢,大概只有一半的問題是我在耍笨,另外一半是有些實做細節需要用通靈的(包括 spec 根本沒寫或檔案已經失傳),有些地方感覺根本得猜官解怎麼寫才能做出一樣的結果。另外一個比較無趣的地方就是環境問題,因為是十幾年前的東西,甚至有些依賴的檔案沒有釋出,不過這種環境和依賴問題交給 AI 也沒有太麻煩。
太感謝當初釋出這門課的教授了。喜歡 computer graphics 的你一定要看看!