Optimization 创建光线跟踪器的最佳方法是什么?

Optimization 创建光线跟踪器的最佳方法是什么?,optimization,raytracing,Optimization,Raytracing,目前,我正在使用光线跟踪器,它采用迭代方法来开发场景。我的目标是把它变成一个递归光线跟踪器 目前,我已经定义了一个光线跟踪器,以执行以下操作来创建它存储在其中的位图: int WIDTH = 640; int HEIGHT = 640; BMP Image(WIDTH, HEIGHT); // create new bitmap // Slightly shoot rays left of right camera direction double xAMT, yAMT; */

目前,我正在使用光线跟踪器,它采用迭代方法来开发场景。我的目标是把它变成一个递归光线跟踪器

目前,我已经定义了一个光线跟踪器,以执行以下操作来创建它存储在其中的位图:

int WIDTH = 640;
int HEIGHT = 640;
BMP Image(WIDTH, HEIGHT); // create new bitmap

// Slightly shoot rays left of right camera direction
    double xAMT, yAMT;
    */

    Color blue(0.1, 0.61, 0.76, 0);
    for (int x = 0; x < WIDTH; x++) {
        for (int y = 0; y < HEIGHT; y++) {

            if (WIDTH > HEIGHT) {
                xAMT = ((x + 0.5) / WIDTH) * aspectRatio - (((WIDTH - HEIGHT) / (double)HEIGHT) / 2);
                yAMT = ((HEIGHT - y) + 0.5) / HEIGHT;
            }
            else if (HEIGHT > WIDTH) {
                xAMT = (x + 0.5) / WIDTH;
                yAMT = (((HEIGHT - y) + 0.5) / HEIGHT) / aspectRatio - (((HEIGHT - WIDTH) / (double)WIDTH) / 2);
            }
            else {
                xAMT = (x + 0.5) / WIDTH;
                yAMT = ((HEIGHT - y) + 0.5) / HEIGHT;
            }
            ..... // calculate intersections, shading, reflectiveness.... etc
           Image.setPixel(x, y, blue); // this is here just as an example
      }
}
int-WIDTH=640;
整数高度=640;
BMP图像(宽度、高度);//创建新位图
//从相机右方向的左侧轻轻拍摄光线
双xAMT,yAMT;
*/
蓝色(0.1,0.61,0.76,0);
对于(int x=0;x高度){
xAMT=((x+0.5)/宽度)*aspectRatio-((宽度-高度)/(双)高度)/2);
yAMT=((高度-y)+0.5)/高度;
}
否则,如果(高度>宽度){
xAMT=(x+0.5)/宽度;
yAMT=((高度-y)+0.5)/高度/aspectRatio-((高度-宽度)/(双)宽度)/2);
}
否则{
xAMT=(x+0.5)/宽度;
yAMT=((高度-y)+0.5)/高度;
}
..…//计算交点、着色、反射率等
setPixel(x,y,blue);//这里只是一个例子
}
}
是否有另一种方法来计算双for循环外的反射和折射子光线? 是否需要for循环?//是的,因为位图?
可以采取哪些方法来最小化/优化迭代光线跟踪器?

您的问题目前还不太清楚。但一般来说,跟踪光线是光线(起点和矢量方向)和场景的简单函数。它可以在很大程度上独立于负责生成主光线的代码来实现,并且可以递归调用以生成次光线(反射、阴影、GI反弹等)。递归光线跟踪器可以说是最简单的编写方法,但不一定是最有效的方法。为了澄清一点,您可以将主要光线的生成视为与光线跟踪基本独立的问题。例如,实际上您可能希望每像素生成多条主光线。光线跟踪具有高度的并行性,因此将主要光线生成分为多个批次并跨多个核心并行处理这些批次通常是有意义的。