需要掌握具體一點哪些數學?比如說高數,線代,概率論等等。


謝邀。

別的回答已經說得差不多了,稍微整理一下。

如果只是實現,不是搞演算法研究,基本上高中為止的數學(初等數學)+線代+能看懂微積分式子就差不多了。搞3D的話需要一些空間想像力,這個在高中的解析幾何學習當中就應該要搞定了。

如果是搞理論研究,沒有上限。


技能樹見過不?對,就類似這種:

計算機圖形學就類似這樣的一顆技能樹,最基礎的可能是二維畫點、畫線、畫面,較基礎的是三維簡單圖形渲染,再進階一點有動畫、可編程管線、光照計算、自定義渲染管線,後面還有物理模擬等。點亮不同層次的圖形學技能,要求的數學能力也不盡相同,越是高級的圖形學技能,要求的數學知識越多。

「數學不是沒有用,而是不夠用!」。對數學的學習和應用將是「活到老,學到老」。重要的是,從以前看似枯燥的數學到看到它的實際應用的過程中,你會更容易享受數學的美妙。在你不斷進行計算機圖形學的研究的過程中,你會感覺到你的數學知識越來越不夠用,從而真正理解其中的數學思想和數學方法。

另一方面,想成為一名計算機圖形學的研究者也不必精通各門數學!在大學裡,你所學的那些數學看起來都很抽象,枯燥無味,這是因為你並不知道它們的用處,甚至連講課的老師也不知道,而你們的目的只是記住那些定理和公式,考個好分數。與大學學習數學不一樣的是,你在計算機圖形學的學習和研究過程中會感受到數學的用處和美妙,這時你學習數學的目的將更加明確,興趣將更加濃厚,學習方法將更加有效。因為你是在使用數學的過程中在學習數學!想想看你是如何學會中文說話的?以上提到的常用的數學課程你不必都要熟悉,許多研究工作者從不需要考慮其中提到的某些數學知識,成功的研究者總是將某一方面的數學知識和數學工具用到極致!

總之,關於計算機圖形學與數學的關係,歸納起來就是以下幾個原則:

  • 計算機圖形學的研究需要用到較多的數學知識,有較好數學功底的學生從事計算機圖形學有一定優勢;
  • 即使沒有學太多的數學也不要緊。數學的知識不需要都學會了再去做問題,在解決問題的過程中去學習數學是最快的學習方法。即,研究過程中若遇到什麼數學知識再去學相關的知識,學習起來會更有興趣,掌握起來會更快更紮實;
  • 學習數學要結合圖形,即「數形結合」,需要有圖形的想像能力;數學公式不重要,是「紙老虎」,重要的是背後的思想及其所表達的概念,公式只是它們的一個抽象表達;
  • 活到老,學到老。要不斷學習新的知識和技術,使自己不斷進步和增長功力,纔是王道。


大致學四門就足夠應付90%以上的圖形學內容了:

1,微積分,單變數微積分和多變數微積分

2,線性代數,至少得學習到空間變換

3,概率理論和蒙特卡洛模擬

4,信號處理和離散傅裏葉變換

額外的再學習一些物理輻射度知識和球諧函數。只做工程不做科研差不多這些就夠了。


謝邀,我就從學習 leranopengl 這個網站過程中簡單談談用到部分數學知識吧。

如果要在屏幕上顯示一個物體,要定義物體的位置、大小、形狀和顏色。在 OpenGL 中,位置和形狀是由構成目標物體的頂點坐標決定的(OpenGL 默認根據這些頂點坐標繪製三角形,構成形狀),這些頂點坐標通常是由 3 維向量或 2 維向量構成的(取決於被渲染的物體的維度),每個維度(3 維情況下)由物體頂點坐標在空間坐標系中的 x,y,z 上的值構成。物體的大小,可以通過矩陣來實現縮放。物體的顏色則是通過由 RGBA 四個顏色通道的四維向量構成。如果想使用一些圖片(OpenGL 中稱為紋理)代替顏色作為物體表面的話,則需要通過紋理坐標,將圖片貼在合適的位置上,這裡的紋理坐標也是通過 2 維或 3 維向量表示的(3 維向量的紋理坐標通常應用在天空盒上)。如果想要顯示一個 3d 物體,那麼還需要使用將物體轉換到世界空間,觀察空間以及裁剪空間的矩陣,這裡就不贅述了。回顧一下上面提到的數學知識,會發現,如果想要簡單的顯示一個物體,需要用到線性代數(向量,矩陣)和幾何知識(坐標)。如果對向量以及矩陣的幾何意義有疑惑的話,可以在嗶哩嗶哩中搜索 3B1B 的線性代數系列,那裡講的很生動。

一般的 3d 遊戲中,人物是能夠在場景中自由走動的,這個行為看起來與使用攝像機拍攝相似。在 LearnOpenGL 教程中,它被稱作攝像機。攝像機由被攝像機觀測的物體指向攝像機位置的 Front 向量(可看作是 z 軸),與 z 軸在水平方向垂直的 Right 向量(可看作 x 軸)以及與前兩者都垂直的 Up 向量(可看作 y 軸)以及攝像機自身位置所構成的 LookAt 矩陣來實現。可以設置前後左右四個移動方向的鍵位,通過改變攝像機的位置,更改 LookAt 矩陣,用 LookAt 矩陣與被觀測的物體位置向量相乘,得到相應的結果。這裡也可以理解為將物體從原先的坐標軸中映射到當前攝像機的坐標軸中。3d 遊戲中還有一個很關鍵的功能,就是通過移動滑鼠可以實現向左右(yaw),上下(pitch)方向觀察。如果你遊玩的遊戲中包含駕駛飛機的場景,那麼或許也會有以貫穿飛機頭部和尾部作為旋轉軸,進行旋轉的動作(roll)。在 LearnOpenGL 教程中,作者使用滑鼠在某個方向移動的距離,作為起始位置和最終位置之間的角度,通過這個角度,用三角函數計算 LookAt 矩陣中 Front 向量(這裡實際上更改的是被觀測物體的位置。教程中沒有計算 Roll)。教程在這裡也提到了,幾個動作(yaw,pitch 和 roll)被稱為歐拉角,這裡會出現被稱作萬向節死鎖的問題,可以使用四元數解決。回顧一下上面提到的數學知識,除了之前提到過的矩陣和向量之外,也用到了三角函數的知識。三角函數的知識會在教程中的 Phone 光照部分被廣泛應用,這裡不贅述了。

教程中幀緩衝那一節中,有講到後期處理(Post-Processing),這裡使用卷積矩陣將渲染出的結果做了 Kernel effect,Blur 以及 edge detection 處理。這裡用到的數學知識就是離散卷積了。

在 HDR 章節中,教程講到 OpenGL 中默認的 RGB 像素值被線性限制到 0.0 和 1.0 之間,這使得若場景中的某個區域亮度很高,其他較暗的場景可能會很難被看清楚,或根本看不清楚。因此教程中使用了 gamma 曲線($y=x^{frac{1}{2.2}}$),(以下是個人理解,如有錯誤的話,歡迎指出,謝謝!)由於曲線是上拱的,在一定程度上它限制了場景中較亮區域佔整體亮度的比率,提高了較暗區域佔整體亮度的比率,因此較好的保留了細節。算是一個數學知識吧。

最後就是教程末尾的 PBR(physically based rendering)。這裡用到了較難的數學知識以及物理知識。由於這一章我掌握的並不熟練,就列舉幾個用到的數學知識吧。教程中,用於計算場景在物體表面映射的反射方程

在實際計算中使用離散積分,這個積分的 n*ωidωi 則是根據球面立體角推導而來,公式中的 fr 方程又分為下面兩個部分:

右邊的方程 f_cook-torrance 的定義如下

D,F,G 分別為:

D:Normal distribution function 法向量分佈方程,它估計了微表面的相對錶面區域與 half 向量對齊的程度,這裡用到的是概率論的知識。

F:Fresnel function 菲涅爾方程(Fresnel 的 r 不發音),模擬了光照中的菲涅爾效應

G:Geometry function 幾何方程,估計了微表面的之間的陰影遮擋。

希望能給題主做個參考,如果上述描述有錯誤的地方,歡迎指正,謝謝!


圖形學是一個大的領域,包含建模、動畫和渲染。最基本的數學功底就是高數、線代、概率論和數值計算方法,但是往下深入時你會感覺這些不夠,例如幾何處理會涉及到微分幾何,物理模擬會涉及到大量的偏微分等等。這個時候需要的數學完全取決於你想要涉足的領域分支,所以不是說一下子把圖論、偏微分、信號與系統(常用的傅裏葉變換)、李羣、微分幾何等等數學方面的書看完(幹著看估計也看不下去),而是找準一個方向往下做,需要的時候補習相關方面的內容,這個時候學習數學你會發現有趣多了,因為這些枯燥的公式最終被融入了絢麗的計算機二維、三維世界。


推薦閱讀:
相關文章