velvet-shell / path-tracer

Monte-Carlo path tracing image rendering

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Задание лаборатории компьютерной графики ВМК. Трассировка путей.

В основе лежит алгоритм наивной трассировки путей с терминацией с помощью русской рулетки.

Первая сцена:

Alt text

Вторая сцена:

Alt text

Реализованные материалы:

  • Ламбертовская диффузная поверхность (выборка по значимости из косинуса)
  • Зеркало (вырожденная BRDF)
  • Стекло (русская рулетка и преломление на основе формул Френеля)
  • Исправленная модель Фонга (выборка по значимости из косинуса в степени, BRDF нормализована согласно оригинальной статье 1994, совмещена с диффузной моделью с помощью русской рулетки)
  • Модель отражающих микрограней Кука-Торренса (выборка по значимости из GGX)

Дополнительно:

  • Трассировка путей
  • Примитивы: сфера, треугольник, плоскость
  • Поддержка текстур (на сфере и замощение плоскости)
  • Сферическая карта окружения
  • SSAO анти-алиасинг из 4-х субпикселей с генерацией случайных отклонений на основе тент-фильтра
  • Гамма-коррекция
  • В качестве источников света выступают объекты с площадью
  • Многопоточность с помощью директив pragma

Изученные материалы:

Вдохновлено минималистичным трассировщиком https://www.kevinbeason.com/smallpt/

Производительность:

Сцены протестированы на Ryzen 7 2700 и укладываются в минуту на 12 потоках.

(В первой сцене используется достаточно тяжелое изображение для карты окружения, подгрузка которого ощутимо отнимает время)

About

Monte-Carlo path tracing image rendering


Languages

Language:C 91.9%Language:C++ 7.8%Language:CMake 0.3%