問題:
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算法。