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

評(píng)論