Skip to content

NoNanoMax/CT_project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

95 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Проект по компьютерным технологиям, 4 семестр

Тема проекта: трассировка лучей

Команда:

  1. Бабкин Петр, Б05-005
  2. Данилов Максим, Б05-005
  3. Исмагилов Александр, Б05-002
  4. Латыпов Ильгам, группа неизвестна

Использовали языки:

  1. C++
  2. 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

C++: реализация библиотеки

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));
        Рекурсивный запуск отраженного и преломленного лучей из точки пересечения

Python: интерфейс

Запуск из консоли:

    make
    python3 main.py

Для запуска из exe скачать архив по ссылке

    tar -xvf prog.tar.gz

Основной функционал приложения:

  1. Изменять сцену, добавляя стандартные объекты(сферы, плоскости, освещения)
  2. Возможность сохранить созданную сцену
  3. Возможность загрузить сцену из раннее созданных
  4. Возможность отобразить сцену

Python(дополнительная часть): построение по серии снимков простых объектов их 3D-модель

Сеть типа 3DR2-N2: рекурретная(GRU), полносвероточная. По серии фотографий восстанавливает 3D-модель - сцена из кубиков размера 32x32x32.

3D-сверточная сеть написана по мотивам статьи. Мы не стали использовать сеть в основном приложении по нескольким причинам:

  1. Сеть работает достаточно медленно без видеокарты.
  2. Веса модели занимают ~500Мб (веса модели)
  3. Модель довольно тяжелая (тестовый датасет), поэтому были трудности с обучением(нестабильный интернет, ограничение на использование видекарты)

Запуск(сейчас невозможен, надо полностью перевести на процессор, как делалось локально):

    // загрузить веса
    // поместить изображения в imgs
    python3 inference.py

Пример работы:

About

project ct 4th semestr

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages