問題:
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演算法。
光線追蹤(raytracing)
考慮乙個二維平面,攝像機在 0,0 0,0 的位置,初始時平面上沒有障礙物。現在執行qq次操作,操作有兩種 假設這是第ii次操作,1 i q1 i q 1 給定x0,y0,x1,y1 x0 2 給定向量 x,y x,y 會有乙個動點從攝像機所在的 0,0 0,0 位置出發,以 x,y x,y 所指的...
光線追蹤(raytracing)
考慮乙個二維平面,攝像機在 0,0 0,0 的位置,初始時平面上沒有障礙物。現在執行qq次操作,操作有兩種 假設這是第ii次操作,1 i q1 i q 1 給定x0,y0,x1,y1 x0 2 給定向量 x,y x,y 會有乙個動點從攝像機所在的 0,0 0,0 位置出發,以 x,y x,y 所指的...
3994 光線追蹤(raytracing)
考慮乙個二維平面,攝像機在 0,0 0,0 的位置,初始時平面上沒有障礙物。現在執行qq次操作,操作有兩種 假設這是第ii次操作,1 i q1 i q 1 給定x0,y0,x1,y1 x0 2 給定向量 x,y x,y 會有乙個動點從攝像機所在的 0,0 0,0 位置出發,以 x,y x,y 所指的...