Команда:
- Бабкин Петр, Б05-005
- Данилов Максим, Б05-005
- Исмагилов Александр, Б05-002
- Латыпов Ильгам, группа неизвестна
Использовали языки:
- C++
- Python
Одной из интересных технологий отрисовки трехмерных объектов является трассировка лучей. Суть метода состоит в моделировании оптических систем, в частности, отслеживание поведения лучей света при взаимодействия с поверхностями. В силу моделирования реального поведения света, тени, блики, очертания объектов получаются реалистичными. Среди преимуществ такого метода можно выделить несложное распараллеливания (лучи, участки пространства), возможность отрисовки достаточно сложных объектов. Важно научиться достаточно быстро и эффективно обрабатывать поведение лучей, так как это ключевой фактор в производительности вычислений. Таким образом, работа(как минимум) заключается в изучении оптических свойств материалов, поведения световых лучей, написании эффективных алгоритмов моделирования всего этого, грамотного распараллеливания вычислений и создания библиотеки с понятным и полноценным интерфейсом.
BeautifulSphere x, y, z, R, (color), (material)
BeautifulPlane a, b, c, d, (color), (material)
Tetraedr x, y, z, (color), (material)
Tetraedr x, y, z, V1, V2, V3, (color), (material)
Sphere x, y, z, R, (color), (material), (quality)
PolyFigure PATH, (offset, homotetia_coeff), (color)
Directed_light x, y, z, intensity
Point_light x, y, z, intensity
Ambient_light intensity
Camera Vec3 pos, Vec3 angles, FOV, Width, Hight, i_am_fish
main.cpp:
r.initialization("info.ass");
Создание сцены и добавление на нее всех объектов из файла
r.render();
Запускает процесс обработки лучей
Выводит массив цветов экрана для считывания и отрисовки в питоне
scene.cpp:
Scene::initialization() реализация
Scene::render(int thread_count = 8)
camera->create_rays();
генерирует лучи для заданных настроек камеры
Создает и запускает потоки по функции Scene::parallel_trace_ray
Scene::parallel_trace_ray:
trace_ray(Ray x);
trace_ray(Ray x):
full_intensity_in_point()
считает полную освещенность в точки первого пересечения луча
trace_ray(reflected_ray(intersetion_SmartPoint, ray));
trace_ray(refracted_ray(intersetion_SmartPoint, ray));
Рекурсивный запуск отраженного и преломленного лучей из точки пересечения
Запуск из консоли:
make
python3 main.py
Для запуска из exe скачать архив по ссылке
tar -xvf prog.tar.gz
Основной функционал приложения:
- Изменять сцену, добавляя стандартные объекты(сферы, плоскости, освещения)
- Возможность сохранить созданную сцену
- Возможность загрузить сцену из раннее созданных
- Возможность отобразить сцену
Сеть типа 3DR2-N2: рекурретная(GRU), полносвероточная. По серии фотографий восстанавливает 3D-модель - сцена из кубиков размера 32x32x32.
3D-сверточная сеть написана по мотивам статьи. Мы не стали использовать сеть в основном приложении по нескольким причинам:
- Сеть работает достаточно медленно без видеокарты.
- Веса модели занимают ~500Мб (веса модели)
- Модель довольно тяжелая (тестовый датасет), поэтому были трудности с обучением(нестабильный интернет, ограничение на использование видекарты)
Запуск(сейчас невозможен, надо полностью перевести на процессор, как делалось локально):
// загрузить веса
// поместить изображения в imgs
python3 inference.py
Пример работы:




