[Raytracing]光線追蹤的問題和解決方案


問題

1、性能

算法的遞歸性質和大數目的追蹤光線,渲染過程可能持續數小時。80-90%的渲染時間花費在計算光線和物體交點上。

 

2、走樣

 

3、尖銳的陰影

基本的光線追蹤算法只能得到尖銳的陰影(因為模擬的是點光源)。

 

4、局部光照和着色

算法只追蹤少數目的光線,只有四種類型的光線被考慮在內,物體之間的漫反射光沒有被考慮在內,即算法並不包括全局光照。

 

解決方案

1、性能

a、使用更多或者更好的硬件

b、大規模並行計算

每一個光線都相互獨立。

將圖像分割,分配在多核上或者分布式網絡上;或者分配在多個線程上。

c、限制交點檢測的數目

使用包圍盒的層次關系。快速判斷光線是否和一組物體相交。物體被分組在封閉的包圍盒中。利用空間細分技術:octree,BSP,grid.

d、優化交點檢測

e、限制追蹤光線的數目

確定最大的遞歸層數。

根據光線對當前像素點貢獻值大小來限制遞歸深度。一個閾值用來確定后續光線由於對像素點貢獻太小而不會被追蹤。

 

 

2、走樣

使用超采樣(super sampling)、抗鋸齒(antialiasing)、jittering

a、追蹤額外的主光線並取平均值

即超采樣,相對於每一個像素點取一條光線,你可以取特定數目的光線。每一個像素被分為亞像素,對每一個亞像素發射一條光線。當所有的亞像素點都處理完畢,對亞像素點的顏色值取平均值,並將其賦值給該像素點。這種方法大大增加了渲染時間。

b、自適應抗鋸齒

在顏色劇烈變化的地方使用追蹤的主光線,顏色變化不大的地方使用最少的主光線。

c、隨機抗鋸齒

隨機取樣代替常規取樣。

 

 

3、尖銳的陰影

原因:使用點光源、每個交點僅僅對應一條陰影光線。

a、區域光(area light)

使用一系列點光源來模擬區域光源。對於每一個交點,需要和點光源數目一樣多的追蹤光線。

b、Monte Carlo光線追蹤法

使用隨機超采樣,光源建模成球形光源,陰影光線指向代表光源的球上面的點。陰影光線顏色的平均值決定該交點最終的顏色值。

 

4、全局光照

依舊可以使用Monte Carlo法。使用Radiosity算法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM