Версия с днамическим шагом, гравитационным красным смещением спектра, альфа-смешиванием и билинейной фильтрацией текстур. Файл настроек: <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.
flashcactus/gravitrace
A program that creates Interstellar-like imagery using relativisitic ray tracing. Very quick and very dirty.
C++