Comments 24
Сталкивались ли вы в ходе подготовки статьи, например, с плагинами для Blender, реализующими подобные вычисления?
Конкретно блендером я никогда не пользовался, и поэтому на плагины к нему не смотрел.
Но вообще конечно я далеко не первый, кто решал такую задачу. Есть вот тут https://spaceengine.org/articles/visualizing-general-relativity/ что-то похожее, и по-видимому более оптимальным способом, или вот научная статья: https://arxiv.org/pdf/1109.4769
Но это все уже дополнительные надстройки над просто трассировкой геодезических. Здесь же я хотел решить задачу максимально в лоб, и воспользоваться этим чтобы поизучать OpenGl, и разобраться получше с численными методами.
Для вычисления арктангенса x/y лучше воспользоваться функцией atan2, она хорошо себя ведет в окрестности нуля и бесконечности. В частности, в функции cart_to_sh
не нужно будет шаманить с фи.
atan можно вообще не использовать, если подставить его в синус/косинус, а затем сократить (аналитически). Например:
А atan2 не так работает?
Atan2 просто делит меньший аргумент на больший, чтобы избежать деления на ноль, и высчитывает квадранты исходя из знаков аргументов. А мой комментарий был про другое - в цепочке преобразований угол, как правило, является лишь промежуточным значением, который в конце опять преобразуется в декартовы координаты. В таком случае через экспоненциальную форму можно избавиться от тригонометрических функций и свойственных им неоднозначностей. Ну и функция корня вычислительно проще и быстрее тригонометрических.
Интересно! Наваял как-то библиотеку символьных вычислений (+ кое какие численные метоы на борту) на Расте. Будет интересно повторить Ваш эксперимент...
Не только всю сферу от горизонта видно будет, но и бесконечно много её повторов вон в той внешней полосочке ;)
А вот эта картинка имеет к статье какое-то отношение или это про другое?

Конечно, самое прямое. Добавил диск ради интереса.

И чуть более реалистичная версия, с внутренним краем диска на последней стабильной орбите
Прямо почти ваша картинка

Зачем вычисления в сферических координатах? Не усложняет ли это всё? Вычисления в декартовых координатах обычно ведь проще и быстрее.
Статья интересная, но необходимо указать граничные значения phi, theta для пересчета сферических координат в декартовы.
Не знаю что страшнее то, что я случайно наткнулся на эту статью или то, что я всё понимаю
У вас там опечатка. Уравнение перехода из сферических координат в декартовы в коде не соответствует уравнению на картинке. Фи и тетта местами перепутаны.
Вспомнил первые изображения чёрных дыр, рассчитанные на ibm в 80 годах. Даже на обложку книг эту классику помещали.

Рассчитано компьютером IBM 7040 в 1978 году астрофизиком Жан-Пьером Люмине
Спасибо за отличную статью. На майских попробую формулы расчета на swift переписать. 😌
Отличная статья о релятивистской трассировке лучей!
В качестве дополнения предлагаю сослаться на классический алгоритм Люминэ (1979), который реализован как готовая Python-библиотека bgmeulem/luminet (https://github.com/bgmeulem/luminet
). Это альтернативный к GPU подход:
GPU-метод (ваш): геодезические интегрируются в реальном времени в GLSL
Алгоритм Люминэ (1979): изорадиальные кривые + аналитические решения
Оба физически корректны, но дают разные преимущества:
GPU: интерактивность, плавные переходы, современная визуализация
Люминэ: концентрические структуры, историческая точность, готовая Python-библиотека
Физика и эффекты
Обе реализации воспроизводят ключевые релятивистские эффекты (гравитационное линзирование, доплер-асимметрию, гравитационное красное смещение). При глобальной нормализации факторов красного смещения цветовые карты получаются физически осмысленными.
Примеры и репро
Галерея примеров: https://cloud.mail.ru/public/dYka/1La4MfbnZ
Репозиторий: https://github.com/bgmeulem/luminet
Спасибо за детальное объяснение математики GPU-реализации!
Релятивистская трассировка лучей