CORONA 渲染器學習筆記之十:原理

【前言】

? ? ? ? CORONA渲染器使用路徑追蹤來渲染圖像。什么是路徑追蹤呢?路徑追蹤是一種渲染算法,它通過跟蹤來自攝像機的獨立光路來計算最終圖像。

? ? ? ? 本來我想洋洋灑灑寫一篇通俗易懂的文章,后來,我在網上看到了一位從事動畫電影特效工作的網友,他寫的一篇關于路徑追蹤文章,內容非常好。我感覺那就是我想寫的文章,這使我無法動筆了。所以,特意去掉的C++語言部分,部分轉載給大家。

【轉載】

轉載地址:http://ymuhua.com

? ? ? ?光線追蹤的渲染技術已經被大量運用到現在的電影產業中,我們身邊也出現了大量光線追蹤的渲染器,Arnorld,Vray,Houdini的mantra,Maxwell、Corona等等。它出現的目的也是為了追求更真實的物理效果。

光線追蹤技術的光線是攝像機發出的,最后追蹤到光源結束。

? ? ? ? 光線追蹤算法中,一個物體要被觀察者(camera)看到要具備兩個因素。其一,就是要有光,物體不被光照到我們是看不到,其二,就是當然要有物體,光被物體反射入觀察者眼中才能被看到。所以,光線追蹤算法就是計算光線和物體交互,碰撞檢測的算法。

? ? ? ? ?光線追蹤算法分為兩種:正向追蹤算法和反向追蹤算法。其中,正向追蹤算法是大自然的光線追蹤方式,即由光源發出的光經環境景物間的多次反射、透射后投射到景物表面,最終進入人眼。

? ? ? ? 反向追蹤算法正好相反,它是從觀察者的角度出發,只追蹤那些觀察者所能看見的表面投射光。就目前而言,所有3D制作軟件的光線追蹤算法都是采用反向追蹤法,原因是這種算法能夠最大程度地節省計算機的系統資源,而且不會導致渲染質量的下降。

? ? ? ? 為什么反向追蹤快呢?我們玩走迷宮,是正走快,還是反走快?

? ? ? ? 反向追蹤法就是從觀察者開始向場景中射出光線,當光射出后打到物體上后,我們再從那個被擊中的點所在表面在射出光線(我們假設稱作陰影光線或光源光線)。如果這光源光線被射出后遇到了場景中的光源。那么我們就能看到這個物體,又或者這光源光線又打到了另外一個物體上 ,那么我們看到的這個物體就在陰影中。

? ? ? ? 接下來我們來介紹柵格化(Rasterization)。就是將圖轉化為一個個柵格組成的圖象

? ? ? ? 為什么要柵格化,因為我們知道我們的電腦屏幕是由像素點組成。目前主流的像素已經1920*1080。也就是說,我們的屏幕橫向有1920個像素,然后叢向有1080個像素點。

我們在渲染設置中,設置圖像大小就是這個。

? ? ? ? 所以,我們要將三維的模型投射到屏幕上面,然后將每個像素點填充上一個相對硬的顏色,就好比一個圓是由多個網格組成。當然了,網格細分越高,顯示精度也越好。

? ? ? ? 光線追蹤的靈魂所在就在于光線。所以,我們基于屏幕的每個像素點射出去一個光線。如果射出去的光線碰到了障礙物(模型),我們就能將這個像素點填充上相應障礙物的信息(根據燈光,物體材質)。如果什么都沒碰到,那么相對因的像素就什么都不顯示(背景顏色)。

? ? ? ? 現在我們知道了,每個像素到底看到了什么。然后我們通過重復的遍歷屏幕上的每個點,那么一個球就出現在屏幕上了。是不是很好理解?

好了,下面我用為代碼來簡單介紹一下一個簡單的渲染器的工作流程。省略........

? ? ? ?影響一個像素點顏色由三個通道來表示,R(紅),G(綠),B(藍)也就是這三個通道來表示,我們知道通過這三個顏色組合,我們可以得到所有的顏色。比如紅色+藍色=紫色。

? ? ? ?我們現在定義每個顏色通道為8位,也就是2^8。他表示范圍為0-255。0表示最小值,255表示最大值。所以

黑色:0,0,0

紅色:255,0,0

綠色:0,255,0

藍色:0,0,255

白色:255,255,255

那么問題來了,如何來決定某個像素的值呢:

? ? ? 它由多個因素來決定的。請看下圖:

? ? ? ?我們簡單來分析: 首先一束光射出去,我們打到一個物體上,

? ? ? ? 如果打到一個物體向光面上,那么我們會根據物體的材質(物體本體顏色,對光的漫反射,對其他物體的反射)來計算像素點材質。

? ? ? ?如果打到一個背光面上,那么這就是陰影。

? ? ? ?如果什么都沒打到那么,那么他就是個背景顏色。

? ? ? ? 畢竟在光線追蹤影響物體顏色的因素太多了,因為光線是在空間中不停的反彈。有直接反射,間接反射,理論上來說如果計算時間足夠長,那么得到的結果就無限接近真實效果,但是時間和效果往往是矛盾的,我們如何在有限的時間中得到盡量真實的效果就是我們之后要做的。

【后記】

? ? ? ?看完這篇圖文并茂的文章,你是否明白CORONA渲染器的光線追蹤是怎么回事了吧?再次感謝作者的好文章。喜歡的朋友可以到該作者的網站上去看他更多的文章。

轉載地址:http://ymuhua.com/2016/01/04/introraytracing/

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Problem Formulation Ray Tracing的目標是生成一張包含場景內物體,具有真實感的圖像,因...
    Manster閱讀 8,995評論 4 8
  • 散射是一種非常美麗的自然現象,在自然界中光穿過潮濕或者含有雜質的介質時產生散射,散射的光線進入人眼,讓這些介質看起...
    FOXhunt閱讀 6,066評論 0 8
  • 我是從2016年《通往財富自由之路》專欄開設伊始就在得到app上進行了訂閱,到現在已經半年有余,但除了偶爾留...
    昕夕逐浪閱讀 262評論 0 0
  • 我們是城市的候鳥 一年遷徙兩次 一次秋天 一次春天 我們是城市的候鳥 從南到北 聽見這個城市落雨 也看過那個城市...
    九渡閱讀 279評論 0 0
  • 新浪微博,在2014年初就已更名為“微博”,想彰顯出一家獨大的氣場,但還是依然猶如一潭沉寂的死水。 有某個人多次的...
    包包沒有a夢閱讀 1,088評論 0 5