Skip to content

Эксперименты с рейтрейсером на CPU

Notifications You must be signed in to change notification settings

MaximPr/RayTracer

Repository files navigation

RayTracer

Оптимизация варианта описанного в статье https://habr.com/ru/post/434528/

Иллюстрация к проекту

  • Переписано на c#
  • Добавлена глубина резкости
  • Рассеивающий источник света через потолочные отверстия вместо прямого освещения
  • Многопоточность

Следующие оптимизации дали прирост скорости в 80-100 раз:

  • Кеширование SDF-функции в трехмерном массиве для всего пространства, интерполяция SDF по ближайшим значениям в трехмерной сетке.
  • Преобразование кеша SDF. В результате имеем свою SDF для каждого из 8 направлений полета лучей (+x, +y, +z), (+x, +y, -z) (+x, -y, +z) (+x, -y, -z) (-x, +y, +z) (-x, +y, -z) (-x, -y, +z) (-x, -y, -z). Это позволяет иметь высокие значения SDF вокруг препятствий, если направление движения от препятствия.
  • Интерполяция кеша используется только при низких значениях SDF, значение функции в глубине пустого пространства вычисляется грубо но быстро.

За счет чего можно ускорится дополнительно:

  • Переиспользовать первый этап просчета хода луча. Но придется пожертвовать глубиной резкости.
  • Число точек на семпл можно сделать меньше в тех местах где переотражение вносит вклад без большого шума. В этом случае все семплы дают примерно одинаковый цвет и картинка сильно не изменится от наращивания семплов.
  • Увеличить число направлений для расчета кеша SDF.

галерея:

Картинка для привлечения внимания

About

Эксперименты с рейтрейсером на CPU

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages