/gravitrace

A program that creates Interstellar-like imagery using relativisitic ray tracing. Very quick and very dirty.

Primary LanguageC++

Версия с днамическим шагом, гравитационным красным смещением спектра, альфа-смешиванием и билинейной фильтрацией текстур. 

Файл настроек:
<GM_чёрной_дыры> <коэфф_радиуса_диска>      //стандартный гравитационный параметр в м^3/c^2 и отношение радиуса аккреционного диска к радиусу Шварцшильда
<x> <y> <z>                                 //координаты камеры в световых секундах
<yaw> <pitch> <roll>                        //направление камеры относительно (forward=X, up=Z, right=-Y), заданное углами Тэйта-Брайана(рысканье-тангаж-крен) в градусах.
<fov> <height> <width>                      //горизонтальное поле зрения камеры в градусах и разрешение картинки
<enable_redshift> <enable_bilinear>         //моделировать ли красное смещение и использовать ли билинейную фильтрацию (1 или 0)
<out_fname.png>                             //имя картинки

Формат запуска: "./main path/to/config.txt" из директории bin. 
Вывод: радиус шварцшильда в световых секундах, индикатор количества отрендеренных строк, среднее количество шагов на трассировку одного фотона, всё в stderr.

Makefile:
команда `make all` собирает программу и запускает ее на всех доступных конфигах; make time заодно замеряет время работы командой time.
только сборка — `make build`.
`make clean` удаляет бинарники и все следы деятельности оных.

Конфиги (лежат в директории cfg): 
    config-above: вид сверху. Разрешение 1024x1024, время рендера 88 сек.
    config-oblique: вид под углом сверху-сбоку, 1600x900, 116 сек.
    config-pretty: вид почти в плосости диска, с небольшим креном камеры. 1600x900, 113 сек.
    pretty-tele: тот же ракурс, но с большим креном и камера в несколько раз дальше, что меняет спектральный сдвиг как диска, так и звёздной панорамы. 1600x1000, 140 сек.
    test-config: то же самое, что oblique, но с дополнительным сдвигом-вращением и более низким разрешением, основное предназначение — отладка. Без красного смещения и билинейной фильтрации. 512x512, 20 сек.
    close_config: вид с аккреционного диска наружу, демонстрирующий значительный синий сдвиг диска и звёзд. 1600x900, 3.5 минуты.

Чтобы билинейная фильтрация работала эффективно, спектральные текстуры диска пришлось скукожить вдвое, т.к. пиксели в них располагались группами по 4. Переключение на полноразмерные текстуры возможно методом редактирования символической ссылки bin/textures/spectral/disk.