初入计算机图形学
?第一次寫博客,水平有限,錯(cuò)誤之處也請(qǐng)指正~
計(jì)算機(jī)圖形學(xué)在于通過(guò)計(jì)算的方式渲染出模擬自然世界的一張擬真圖片,一般來(lái)講最直接的方式就是模擬大量光子在空間中的物理傳遞過(guò)程,但是這樣做的運(yùn)算量極大。。。現(xiàn)在的電腦(一般是指?jìng)€(gè)人計(jì)算機(jī))還不能通過(guò)對(duì)光子的逐一模擬進(jìn)而生成圖像。。
但是可以通過(guò)近似方式模擬。主要有輻射度方式的渲染(好像是類比熱力學(xué)里的平衡方程得到的渲染方式。。這里不太清楚),還有就是類似于上述的模擬光子行為的渲染方式。
由于光路可逆原理,模擬光子行為的方式又可分為正向光線跟蹤(光子從光源出發(fā)向整個(gè)場(chǎng)景傳遞)和逆向的光線跟蹤(從攝影機(jī)逐像素發(fā)出光線)。傳統(tǒng)的光線追蹤(raytrace)就是指逆向跟蹤。計(jì)算機(jī)渲染中真實(shí)感的體現(xiàn)是借助于所謂的全局光照(GI)算法來(lái)實(shí)現(xiàn)的,而在GI方面,上述的正向光線跟蹤的典型模式是光子貼圖(photon mapping,典型代表是vray渲染器),逆向的典型模式是類似于路徑追蹤(path tracing,典型代表為NVIDIA的Iray渲染器),光子貼圖在現(xiàn)在的很多三維建模軟件的配套渲染器里已經(jīng)很常見(jiàn)了,像vray這種成熟的產(chǎn)品已經(jīng)將photon mapping基本上是做到極致了,光子貼圖通過(guò)從光源發(fā)射一個(gè)一個(gè)光子與場(chǎng)景交互,然后經(jīng)過(guò)反射,折射等等的過(guò)程最終消失在場(chǎng)景后留下的多個(gè)“印記”,把這些印記保存下來(lái),光子記錄比較密的部位自然就是比較亮的地方,然后從攝影機(jī)發(fā)射光線,利用最鄰近查找去找那些離采樣點(diǎn)最近的多個(gè)光子進(jìn)而決定相應(yīng)像素點(diǎn)的顏色,整個(gè)圖像的精度取決于發(fā)射光子的個(gè)數(shù)與場(chǎng)景的復(fù)雜度。而路徑追蹤看起來(lái)就更暴力一點(diǎn)。。每個(gè)像素發(fā)射一條光線(比如要渲染一個(gè)800x600的圖,就得發(fā)射48萬(wàn)條光線),每條光線與表面求交后,新的光線的方向取決于表面的材質(zhì)參數(shù)(比如要是理想漫反射,新的方向就是在半球內(nèi)的均勻采樣),新的方向繼續(xù)追蹤,下一輪追蹤之前保存一個(gè)BRDF,并與上一個(gè)BRDF相乘,直到擊中了一個(gè)發(fā)光物體(可想而知原始算法可能會(huì)效率比較低。。)這時(shí)候這條光線才被視為有效,沒(méi)擊中的話或者超過(guò)最大遞歸深度的話。。那這條光線對(duì)應(yīng)的那個(gè)像素就對(duì)應(yīng)黑色。一般來(lái)講,遍歷一次后整個(gè)圖像是很臟的(噪點(diǎn)太多,因?yàn)椴蓸庸饩€的方向是隨機(jī)的,同一個(gè)像素的采樣光線在不同時(shí)刻的采樣值都可能不同,但是大量光線在同一像素的采樣平均值就基本上對(duì)應(yīng)著正確的最終結(jié)果),這時(shí)候就需要一次又一次的迭代,每次結(jié)果都要與上一次混合后做平均,迭代幾千次(甚至要上萬(wàn)次。。。)后得到一張收斂的圖片,其實(shí)這也就是iray的最基本的工作原理(當(dāng)然遠(yuǎn)不止這么簡(jiǎn)單,人家畢竟是專業(yè)開(kāi)發(fā)渲染器的,有很多降噪的算法,效率也很快,配上NV自己做的GPU來(lái)加速運(yùn)算的話效率能快上一個(gè)數(shù)量級(jí))。path tracing的渲染基本上是通過(guò)步進(jìn)式渲染方式來(lái)完成的。
個(gè)人還是覺(jué)得path tracing實(shí)現(xiàn)上比較簡(jiǎn)單一些,而傳統(tǒng)path tracing效率實(shí)在是。。有點(diǎn)低,所以后面有很多人對(duì)這個(gè)基礎(chǔ)算法做了改進(jìn),比如雙向路徑追蹤(bidirectional path tracing)類似的。
最后附上自己初試path tracing的幾張效果圖,可以看出噪點(diǎn)確實(shí)比較多。。日后還需要做好多學(xué)習(xí)和工作量去改進(jìn)這個(gè)效率和噪點(diǎn)問(wèn)題,還有現(xiàn)在只能實(shí)現(xiàn)簡(jiǎn)單參數(shù)幾何體的渲染,后面還要考慮對(duì)復(fù)雜幾何體mesh的支持
(最后三張圖是一個(gè)場(chǎng)景分別進(jìn)行10次迭代,1000次迭代和5000次迭代的圖像)
?
轉(zhuǎn)載于:https://www.cnblogs.com/time-flow1024/p/6773607.html
總結(jié)
- 上一篇: 微信公众号获取acess_token并存
- 下一篇: 设置Hadoop的 dataNode的