gpt4 book ai didi

c++ - 这个在GPU上运行的光线追踪功能,GPU安全吗?

转载 作者:行者123 更新时间:2023-12-03 10:04:31 25 4
gpt4 key购买 nike

我试图在片段着色器中编写一个简单的光线追踪器。
我有这个函数应该创建一个漫射球体,如下所示:
enter image description here
这是功能:

vec3 GetRayColor(Ray ray)
{
Ray new_ray = ray;
vec3 FinalColor = vec3(1.0f);

bool IntersectionFound = false;
int hit_times = 0;

for (int i = 0; i < RAY_BOUNCE_LIMIT; i++)
{
RayHitRecord ClosestSphere = IntersectSceneSpheres(new_ray, 0.001f, MAX_RAY_HIT_DISTANCE);

if (ClosestSphere.Hit == true)
{
// Get the final ray direction

vec3 R;
R.x = nextFloat(RNG_SEED, -1.0f, 1.0f);
R.y = nextFloat(RNG_SEED, -1.0f, 1.0f);
R.z = nextFloat(RNG_SEED, -1.0f, 1.0f);

vec3 S = normalize(ClosestSphere.Normal) + normalize(R);
S = normalize(S);

new_ray.Origin = ClosestSphere.Point;
new_ray.Direction = S;

hit_times += 1;
IntersectionFound = true;
}

else
{
FinalColor = GetGradientColorAtRay(new_ray);
break;
}
}

if (IntersectionFound)
{
FinalColor /= 2.0f; // Lambertian diffuse only absorbs half the light
FinalColor = FinalColor / float(hit_times);
}

return FinalColor;
}
出于某种原因,它似乎是 hit_times是恒定的。
这个完全相同的代码在 CPU 上工作并生成了附加的屏幕截图。
我不确定这是否与 GPU 有关。但是我已经测试了所有其他功能并且它们按预期工作。
  • 法线很好且相同
  • 随机数生成器工作正常并已可视化

  • 这是 Normal + RandomVecS可视化:
    enter image description here
    上完成时完全相同CPU .
    这是 hit_times 上可视化CPU
    enter image description here
    但是在 GPU 上,所有三个球体都是白色的。
    这是完整的片段着色器: https://pastebin.com/3xeA6LtT
    这是在 CPU 上运行的代码: https://pastebin.com/eyLnHYzr

    最佳答案

    所有球体很可能都是白色的,因为 ClosestSphere.HitGetRayColor函数始终为真。
    我认为问题出在您的 IntersectSceneSpheres功能。
    在 CPU 代码中,您返回 HitAnything默认为 false。同时在片段着色器中返回 struct ClosestRecord如果没有被击中,则保持未初始化状态。
    显式添加 ClosestRecord.Hit = HitAnything;IntersectSceneSpheres函数应该修复它

    关于c++ - 这个在GPU上运行的光线追踪功能,GPU安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65598017/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com