Плоскости в трассировке лучей кажутся слишком темными - PullRequest
0 голосов
/ 31 января 2020

У меня проблема с трассировщиком лучей. Я пытаюсь визуализировать Cornell Box с различными объектами внутри, и когда я создаю прямоугольник со сферами, результат будет хорошим, но когда я создаю прямоугольник с плоскостями, результат слишком темный и кажется есть много шума.

Результаты с плоскостями:

Results with planes

Результаты с шарами:

Results with spheres

Моя плоскость Пересечение лучей, кажется, просто прекрасно:

virtual bool hits(ray r, vec& h){
    double den=dot(normal_,r.direction());
    if (abs(den) > 0.0001f) // your favorite epsilon
    {
        double t=dot((point_-r.origin()),normal_)/den;
        if (t >= 0){
            h=vec(t,0.0,0.0);
            return true; // you might want to allow an epsilon here too
        }
    }
    return false;

}

Кто-то знает, что может происходить? Заранее спасибо

1 Ответ

1 голос
/ 01 февраля 2020

Я понял, в чем проблема. Я изменил окклюзию, поставив новое условие, чтобы избежать попадания самолетов в себя. Таким образом, можно избежать окклюзии, если луч исходит от того же самого объекта, на который он попадает. Кроме того, использование некоторого смещения для точки удара вдоль нормали помогает избавиться от этой проблемы

...