本文翻譯自Scratchapixel 3.0[1],是一個關于計算機圖形學的系統(tǒng)性的學習教程。
如果有誤,歡迎在評論區(qū)討論。
注:本課程更多地是關于 3D 渲染的一般介紹。如果您有興趣了解射線跟蹤技術,請查看課程射線跟蹤渲染技術概述[2]。
在本課程的開始,我們將解釋如何將三維場景制成可視的二維圖像。一旦我們理解了這個過程及其所涉及的內(nèi)容,我們可以利用計算機通過類似的方法模擬“人造”圖像。本章介紹了 CGI 構建的基礎。
在本課程的第二章中,我們將介紹射線跟蹤算法,并簡要解釋它的工作原理。我們收到了來自各方的電子郵件,詢問為什么我們專注于射線跟蹤而不是其他算法。事實是,我們并不是。為什么我們選擇在這個介紹性課程中專注于射線跟蹤?這個算法是模擬物體可見性的物理現(xiàn)象最直接的方式。因此,在編寫創(chuàng)建 3D 或計算機生成圖像的簡單程序時,射線跟蹤是最佳選擇之一。
首先,我們將以射線跟蹤算法為基礎。然而,一旦我們涵蓋了實現(xiàn)掃描線渲染器所需的所有信息,我們也將展示如何實現(xiàn)它。
如何創(chuàng)建圖像
圖1:我們可以將一幅圖像想象成通過金字塔的切割,其頂點位于我們的眼睛中心,高度平行于我們的視線。
要制作一張圖像,我們首先需要一個二維表面(這個表面必須有一定的面積,不能是一個點)。有了這個想法,我們可以將一張圖片想象成通過一個金字塔的切割,這個金字塔的頂點位于我們的眼睛中心,高度與我們的視線平行(記住,要看到某些東西,我們必須沿著連接眼睛和物體的線來觀察)。我們將這個切割或切片稱為“圖像平面”(你可以將這個圖像平面看作畫家使用的畫布)。圖像平面是計算機圖形學的概念,我們將其用作投影我們的三維場景的二維表面。雖然這似乎很明顯,但我們剛剛描述的是創(chuàng)建各種設備上的圖像所使用的最基本的概念之一。例如,在攝影中,相當于圖像平面的是膠片表面(數(shù)字相機的傳感器),或者像之前提到的畫家使用的畫布。
透視投影假設我們想在一張空白畫布上畫一個立方體。描述投影過程最簡單的方法是從三維立方體的每個角落向眼睛畫線。為了在畫布上繪制物體的形狀,我們標記每條線與圖像平面表面相交的點。例如,假設 c0 是立方體的一個角落,與 c1、c2 和 c3 相連。在將這四個點投影到畫布上后,我們得到 c0'、c1'、c2' 和 c3' 。如果 c0-c1 定義了一個邊緣,我們從 c0' 到 c1' 畫一條線。如果 c0-c2 定義了一個邊緣,我們從 c0' 到 c2' 畫一條線。
圖2:將正面的四個角投影到畫布上。
如果我們對立方體的其余邊緣重復這個操作,我們最終會得到一個在畫布上的二維立方體表示。我們使用透視投影創(chuàng)建了我們的第一張圖像。如果我們對場景中的每個對象不斷重復這個過程,我們就會得到一個從特定視角看到的場景圖像。畫家在 15 世紀初開始理解透視投影的規(guī)則。
光與顏色一旦我們知道如何在二維平面上繪制三維物體的輪廓,我們就可以添加顏色來完成圖片。簡單總結一下我們剛學過的內(nèi)容:我們可以通過兩個步驟從三維場景中創(chuàng)建圖像。第一步是將三維物體的形狀投影到圖像表面(或圖像平面)上。這一步只需要從物體的特征連接線到眼睛。然后通過回去繪制畫布,在這些投影線與圖像平面相交的地方創(chuàng)建輪廓。正如你可能注意到的,這是一個幾何過程。第二步是向圖片的線框添加顏色(稱為著色過程)。在一個場景中,物體的顏色和亮度主要是由光與物體材料相互作用的結果。光由電磁粒子(稱為光子)組成,即有電場成分和磁場成分。它們攜帶能量,像聲波一樣振蕩,沿直線傳播。各種光源發(fā)射光子,最著名的例子是太陽。如果一組光子擊中一個物體,可能會發(fā)生三種情況:它們可能被吸收、反射或傳輸。反射、吸收和傳輸光子的比例因材料而異,通常決定了物體在場景中的外觀。然而,所有材料共同具有的規(guī)則是,進入光子的總數(shù)始終等于反射、吸收和傳輸光子的總和。
換句話說,如果我們有 100 個光子照射在物體表面的一個點上,可能有 60 個被吸收,40 個被反射。總數(shù)仍然是 100。在這種情況下,我們永遠不會得出 70 個被吸收和 60 個被反射或 20 個被吸收和 50 個被反射的結果,因為傳輸、吸收和反射光子的總和必須是 100。在科學上,我們只區(qū)分兩種材料,稱為導體和介電體。介電體包括玻璃、塑料、木材、水等材料。這些材料具有電絕緣性質(zhì)(純水是電絕緣體)。請注意,介電材料可以是透明的或不透明的。下圖中的玻璃和塑料球是介電材料。每種材料都以某種方式對某些電磁輻射透明。例如,X 射線可以穿過人體。物體也可以由復合或多層材料制成。例如,可以使用不透明的物體(例如木材)和透明的清漆涂層(使其看起來既散射又閃亮,就像下圖中的彩色塑料球)。
現(xiàn)在,讓我們先考慮不透明和散射的物體。為了簡單起見,我們假設吸收過程是物體顏色的原因。白光由“紅”、“藍”和“綠”光子組成。如果白光照射在紅色物體上,吸收過程會過濾掉(或吸收)“綠”和“藍”光子。因為物體不吸收“紅”光子,它們會被反射。這就是為什么這個物體看起來是紅色的原因。我們之所以看到物體,是因為物體上反射的一些“紅”光子向我們旅行并觸及我們的眼睛。每個照亮區(qū)域或物體上的點都會向各個方向輻射(反射)光線。每個點只有一個光線垂直地打在眼睛上,因此只能看到一個光束。我們的眼睛由光感受器組成,可以將光轉換為神經(jīng)信號。我們的大腦可以使用這些信號來解釋不同的色調(diào)和色彩(我們?nèi)栽诖_定如何)。這是一種非常簡單的描述所涉及現(xiàn)象的方法。在計算機圖形學數(shù)學[3]部分中的顏色課程中詳細解釋了所有內(nèi)容。
與透視投影的概念類似,人類花了一段時間才理解光線。希臘人發(fā)展了一種視覺理論,認為物體是由從眼睛發(fā)出的光線看到的。阿拉伯科學家伊本·海塔姆(約公元 965-1039 年)是第一個解釋我們之所以看到物體是因為太陽光線的人;微小粒子的流沿著直線從物體反射到我們的眼睛中,形成圖像(圖 3)。現(xiàn)在讓我們看看如何用計算機模擬自然!
-
計算機
+關注
關注
19文章
7534瀏覽量
88449 -
3d渲染
+關注
關注
0文章
9瀏覽量
12568 -
光線追蹤
+關注
關注
0文章
183瀏覽量
21520
發(fā)布評論請先 登錄
相關推薦
評論