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

2022-07-31 05:39:14 字數 1453 閱讀 7987

問題

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 所指的...