博主以前是打算做計算機視覺的,但是出于好奇,不幸進入了圖形學的大坑。在學圖形學中,有一些經(jīng)驗和方法,與大家分享一下。
這個博客文章我會不斷進行更新,將適合的資料學習順序進行總結。
首先需要學習編程語言,這里主要指C/C++,C++語言是圖形學的基礎編程語言,是絕對繞不開的。
建議的閱讀順序:The C Programming Language->C primer plus -> C++ primer?
推薦順序理由:第一本書最簡潔,例子和解釋也都非常好,建議認真閱讀,把里面每個程序都寫一遍,然后一本一本地來讀。
C primer plus可以零基礎閱讀,但是鑒于比較厚,還是放在第一本書后面讀比較好。
C++ primer是需要有一定編程基礎才能開始啃的,千萬不要聽別人瞎建議一上來就啃C++primer,這本書序言部分也說過,假定讀者有編程的基礎。C++ primer閱讀的時候建議列一個提綱,將閱讀過的內(nèi)容目錄整理一下,經(jīng)常回顧,否則你很有可能學完一遍以后不知道自己學了什么,甚至學了一半就學不下去了。
《數(shù)據(jù)結構與算法》,雖然很多時候我們意識不到數(shù)據(jù)結構的重要性,但現(xiàn)代的圖形學代碼資源一般都充斥了大量的數(shù)據(jù)結構,比如堆棧和樹,沒有專門學習過數(shù)據(jù)結構是很難快速掌握一些原理的。
高等數(shù)學,線性代數(shù),概率論,復變函數(shù)(會一點就好,以后再慢慢拓展)
但是強烈建議在科研和學習中,每天抽固定的一兩個小時來學習數(shù)學知識:高等代數(shù)、數(shù)學物理方法、信號與系統(tǒng)、隨機過程、離散數(shù)學、數(shù)學分析、數(shù)值分析等科目都是圖形學必備的數(shù)學基礎,如果每天拿出一兩個小時來學習這些東西,有針對性目的性地學習一下,經(jīng)常做點題練習一下,用不了兩年,你就會真的變成能夠利用數(shù)學來解決問題的人。
數(shù)學能力和編程能力是將高手和一般人區(qū)分開的唯一標準。
首先建議先學習光柵技術主導的渲染技術,因為畢竟目前游戲領域還是光柵為主導的,光柵學會了,對GPU管線等理解都有很多好處。當然也可以從光線追蹤開始學起,其實差不太多。
有很多大佬說最好一上來自己做光柵引擎,這個見仁見智,我個人的想法是還是先學習一下主流的圖形學編程方法,然后再自己動手做。
在學習前,可以在B站上看一下閆令琪大佬的計算機圖形學入門,有個初步的認識:
GAMES-Webinar的個人空間_嗶哩嗶哩_Bilibili
圖形學三大方向:仿真、渲染、建模都可以簡單了解了解。講真,一開始別人說起這個比較新的課程時我個人是帶著有色眼鏡去看待的,我不太相信圖形學可以用視頻來教學。但是不得不說這里面的內(nèi)容還確實不錯,很適合初學者學習了解,但是不要指望看個視頻就能把所有理論公式都學會,僅當了解圖形學里面有什么內(nèi)容。
接下來的學習順序:Learning OpenGL -> RayTracing in one weekend等三本書(Peter Ray tracing 三部曲)
每個都要從頭到尾學兩遍以上,再考慮進入下一階段。
之后再學習這個小教程:Home · ssloy/tinyrenderer Wiki (github.com)
這個教程有兩個部分需要學習,一是光線追蹤器,二是光柵器。學習一下基本原理,還可以對上面的光線追蹤三部曲的書中實現(xiàn)的代碼進行一下統(tǒng)籌和優(yōu)化
同時學習一下CUDA編程的方法:
《CUDA by Example.An Introduction to General-Purpose GPU Programming(特別簡單,適合入門)》然后可以買一本《The CUDA Handbook(比較難,但是很全面)》用來當參考手冊。
這個階段可以看的書有很多,在進入這個階段之前,確保自己真正學會了Learning OpenGL和光追三部曲這些教程里的內(nèi)容。然后,就是圣經(jīng)了:
成神必備之書,盡量全都讀完,重點是實踐,一定要自己編程操作一下。閱讀順序為,先讀完一二三四章,然后剩下的一邊優(yōu)化自己的引擎一邊學習,或者用到哪里學哪里。
對于圖形學來說,離線和實時渲染沒必要完全分得那么清楚,放在一起學最好。
《realistic-image-synthesis-using-photon-mapping》
《Spherical Harmonic Lighting:The Gritty Details》
《Robust Monte Carlo Methods for Light Transport Simulation》
《Real-Time Rendering 4th Edition》
《Advanced Global Illumination》
這些書可以從頭到尾閱讀和實驗(相信我,圖形學你不自己做實驗基本上堅持不下來),也可以根據(jù)興趣閱讀,《Robust Monte Carlo Methods for Light Transport Simulation》是比較早的論文,但是非常經(jīng)典,最佳博士論文。
(2023.9.6 補充:科研人員,如果不是來自圖形學大組且沒有導師指導,不建議學習BDPT和MLT等復雜算法,學了你也發(fā)不出什么論文,學神經(jīng)渲染或者可微渲染或者nerf,水個論文畢業(yè)要緊)
我寫的一個《PBRT》從零到全部吃透的系列電子小書,目前已經(jīng)完成,發(fā)布在了我們的網(wǎng)站上:PBRT基礎理論與代碼實戰(zhàn) – Dezeming Family? 教讀者一步一步從零開始,不但掌握源碼,還能自己構建一個PBRT引擎。同時我還在寫這套系列書的續(xù)集——《PBRT——專業(yè)知識理論與代碼實踐》系列,將里面涉及的原理講透徹。
《Fundamentals of computer graphics steve-marschner》
是時候回來復習一下基礎了。這本書不太建議從頭到尾讀,可能會比較枯燥,沒事的時候翻一番,用到的時候仔細看就好。
之所以不把基礎入門書放在最前面,主要是因為你閱讀它并不能自己做出來一些好玩的demo,會使圖形學學起來非??菰?。
《GPU Germs》《GPU Pro》
《RayTracing Gems》
《各種論文……》
這個時候就不要從頭到尾地學了,研究什么方向就去學什么方向就好了。尤其是對于一般院校的研究人員,在缺乏大佬指導以及缺乏同行交流的前提下,是沒有多少時間和精力全都弄懂的。
各種論文之類的都根據(jù)自己的方向著重學習,找?guī)灼墨I綜述,把里面的論文一篇一篇閱讀完,建立在自己方向的基礎,比如博主本人是醫(yī)學影像體渲染方向,主要就是各種體渲染算法及其優(yōu)化算法,以及先進的全局光照技術。