Skip to content
This repository was archived by the owner on May 3, 2022. It is now read-only.

SeTSeR/RayTracing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

69 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RayTracing

Простой рендерер изображений, использующий техники трассировки лучей и трассировки путей.

Реализованные возможности

Трассировка лучей Уиттеда

  • Сцена 1. Базовая часть(15 баллов):
  • Используется модель Фонга локального освещения.
  • Реализованы тени и зеркальное отражение.
  • Реализованы два примитива: бесконечная плоскость и сфера.
  • Реализованы 5 различных материалов: слоновая кость, красная резина, зеркало, стекло и серая поверхность(+1 за преломления).
  • Реализована поддержка точечных источников света: в первой сцене используется 3 точечных источника света, во второй 2, в третьей -- 1.
  • Реализовано сглаживание посредством суперсемплирования (+1).
  • Реализована возможность использования кастомного изображения в качестве фона(параметр -background). Данное изображение рендерится меньше секунды на процессоре Intel i5-8250U с использованием 8 потоков:

Трассировка путей

  • Сцены 2 и 3.
  • Реализован базовый алгоритм трассировки путей (+5).
  • В качестве критерия останова используется оценка дисперсии цвета с регулируемым значением ошибки. Кроме того, можно задать минимальное количество трассируемых путей для каждого пиксела.
  • Для ускорения рендеринга используется техника генерации теневых лучей.
  • Для ламбертовых материалов используется выборка по значимости (+3).
  • Реализована исправленная модель Фонга для материалов с глянцевым отражением с использованием выборки по значимости (+3).
  • Реализована модель идеального зеркала (+1). Данная сцена рендерится за минуту 10 секунд на процессоре Intel i5-8250U с использованием 8 потоков: Следующая сцена также рендерится за минуту 10 секунд на процессоре Intel i5-8250U с использованием 8 потоков:

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

  • Реализована многопоточность с помощью std::thread из STL, максимальное количество потоков можно задавать с помощью аргумента командной строки threads. По умолчанию количество потоков равно количеству ядер процессора. (+2)
  • Реализована версия трассирощика путей на OpenGL, использующая для расчёта GPU (+5). В этой версии не реализована модель зеркала, но реализована модель абсолютно чёрного тела (+1). Также реализована поверхность второго порядка - ограниченный цилиндр (+4). Следующая сцена рендерится около секунды на карте Intel UHD Graphics 620:

Сборка

Для сборки понадобится компилятор C++ с поддержкой C++17 и CMake. Для сборки нужно выполнить команды:

mkdir build
cmake --build build/ -DCMAKE_BUILD_TYPE=Release

Версия на OpenGL находится в каталоге OpenGL и собирается аналогичным образом. Для неё используются те же аргументы командной строки.

Запуск

Запуск программы производится следующим образом:

./build/RayTracing -out <путь к выходному изображению> -scene <номер сцены> [-threads <максимальное количество потоков> -background <фоновое изображение>]

Если запустить программу без аргументов, выведется сообщение с форматом командной строки. Аргументы могут передаваться в любом порядке, аргументы out и scene обязательны, аргументы threads и background опциональны.

Зависимости

Для записи изображений в png используется библиотека stb_image_write. Для чтения изображений используется библиотека stb_image. Для инициализации OpenGL используются библиотеки GLFW и GLAD. Для расчётов в OpenGL-версии используется библиотека GLM.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors