Table of Contents |
Xenosky v. 0.33 - программа для генерации инопланетных пейзажей
Описание
На данный момент программа строит изображение неба, хотя в дальнейшем планируется добавить также рисование ландшафтов и воды. Уникальность программы в том, что получаемые ею изображения базируются на физических законах: излучение звезды задается в виде спектра с шагом около 10 нм, затем вычисляется, сколько света рассеивается атмосферой на разных длинах волн, и лишь на заключительном этапе спектр излучения переводится в RGB, чтобы изобразить его не мониторе. Мало того, в логе содержится информация об освещенности, которую дает светило и сколько доходит до поверхности планеты, так что с помощью этой программы можно даже посчитать, сколько солнечной энергии могут получать марсоходы Spirit и Opportunity! Впрочем, для этого нужна точная модель атмосферы Марса.На данный момент с хорошей точностью можно смоделировать лишь атмосферу, сходную с земной. Для другого газового состава или заметно другой плотности данные могут значительно расходиться с реальностью. Причиной тому - использованная из [1] параметрическая модель, "заточенная" как раз под земную атмосферу. В дальнейшем планируется вместо нее честно расчитывать прохождение лучей через атмосферу, хотя это может оказаться чрезвычайно ресурсоемким процессом.
В целом программа еще очень сырая, очень хочется добавить в нее новые возможности и исправить наиболее откровенные ляпы (очень странная перспектива, в которой горизонт изгибается в обратную сторону). Но уже сейчас есть на что посмотреть.
Приятного пользования! Свои замечания и предложения оставляйте на [email protected]
История изменений
v. 0.33 (19.03.12) Небольшие доработки:
- Спектр светила у поверхности планеты можно сохранить в файл. Также можно сохранить в виде картинки сам график.
- Немного доработана процедура рисования небесных тел: теперь при малых разрешениях они не выглядят квадратами, края выходят более гладкими. Однако в скором времени взамен этой процедуры будет реализована полноценная цветная дифракция.
- Исправлена небольшая ошибка при оценке цвета атмосферы - теперь при спектральных классах, отличных от солнечного, цвет будет считаться точнее, но все же сильно ему доверять не стоит. В проекте - модель атмосферы с одинарным рассеянием.
- исправлена ошибка, которой не было в v. 0.30-0.31, но возникшая в v. 032, с неправильным вычислением яркости и освещенности у поверхности планеты
- при включении программы и после редактирования небесного тела по умолчанию выбирается первое небесное тело в списке (раньше выделение вовсе снималось)
- при добавлении нового небесного тела сразу вызывается диалог для его редактирования. Если нажать Cancel, небесное тело не добавляется.
- окно программы теперь нельзя уменьшить до такой степени, чтобы какие-то элементы управления пропали - оно вернется к минимальному размеру.
- Исправлен глюк, когда с некоторыми спектрами получаются очень странные, перенасыщенные изображения
- Сделана примитивная иконка для программы взамен стандартной
- Во вкладке "графики" теперь строятся графики для выбранного в списке выше небесного тела
- Наконец при расчете атмосферы учитываются все светила, а не только первое по списку.
- Файлы x_vs_lambda.txt, y_vs_lambda.txt, z_vs_lambda.txt убраны куда подальше из корневой папки программы
- Из релиза убрана высококачественная фотография Луны - предполагалось, что можно будет изображать Луну и другие светила не просто светящимся диском, а используя фотографии, но пока такая возможность не реализована.
- теперь небесные тела могут иметь нулевой угловой размер - их будет на одну угловую секунду "размазывать" искажения волнового фронта, неизбежные при прохождении через атмосферу.
- Вместо одного светила можно задавать сколько угодно. Указывается их звездная величина, угловой размер и положение на небе. Также можно загружать картинку, дать название и краткое описание, хотя пока эта информация никуда не идет.
- Введена подробная модель атмосферы, правда, за свою основу берущая атмосферу Земли. Можно задать плотность отн. земной, закон изменения "атмосферной массы" от угла светила к зениту (см в разделе "свойства атмосферы"), содержание озона и водяных паров (практически единственные из газов в нашей атмосфере, имеющие пики поглощения в видимой области. Остальные рассеивают по Релею). Также введен параметр "затуманенность" (Turbidity). Он характеризует, во сколько раз суммарное рассеяние выше релеевской компоненты.
- На основание этих данных расчитывается, сколько света рассеивается в атмосфере при данном положении светила, что позволяет увидеть ярко-желтое Солнце в зените и багрово-красное на закате. Кроме того, в логе записывается освещенность у поверхности планеты.
- Введены фрактальные облака.
- Сделаны первые попытки смоделировать процесс получения изображения подобно тому, как это делается в человеческом глазу или в фотоаппарате: выставление экспозиции по некоторому среднему значению, паразитная засветка "оптической системы" солнечными лучами, что снижает общую контрастность изображения, а также, в зачаточном состоянии - картина дифракции ярких источников света. Предстоит еще серьезно поработать над этими аспектами.
- новая библиотека работы с табличными файлами
- изображаются не только графики, но и линии спектра
- можно сохранять в текстовый файл все 3 кривые, а также сохранить график как картинку.
Справочный материал по программе
Небесные тела
В этой вкладке можно добавить почти неограниченное количество небесных тел. Каждое из них характеризуется следующими параметрами:
- Название - будет фигурировать в списке, а в дальнейшем - в сохраненном файле (пока не сделано). На генерацию никак не влияет, чисто для себя, чтобы не запутаться
- Описание - то же самое.
- Звездная величина - здесь подразумевается визуальная звездная величина. Чем она выше, тем тусклее объект. Увеличение зв. величины на 1 означает уменьшение яркости примерно в 2.5 раза. См Звёздная величина, там же можно найти значения для Солнца и планет.
- Файл спектра: надо загрузить таблицу с парами "длина волны - отн. мощность излучения в данном диапазоне". В папке data/spectra даются спектры Солнца, Луны и планет, в data/spectra/black_body_radiator - идеализированные кривые излучения абсолютно черного тела с температурой, соотв. указанным спектральным классам. В data/spectra/OBAFGKM - реальные спектры звезд разных спектральных классов. Там пока очень мало, к сожалению. Спектры можно построить и самостоятельно, структура файла чрезвычайно проста. Подробнее см. в описании table_func_lib (пока не готово).
- Угол над горизонтом (он же - угол места) и азимут - см w: Горизонтальная система координат
- Угловой размер - определяет ширину диска на экране. Ни в коем случае нельзя оставлять нулевым - программа выдаст "деление на ноль"! Да, эта программа предпочитает гильбертовы пространства и с дельта-функциями не дружит...
- Изображение - пока ни на что не влияет.
Параметры атмосферы
Сейчас облака настраиваются обособленно от всего остального. В дальнейшем настройки будут несколько перекомпонованы. Итак, собственно параметры атмосферы:
- Атмосферная масса - см. w: Air mass (solar energy). Если кратко - это отношение пути, пройденного лучами солнца, к кратчайшему пути, который достигается, если свет идет ровно с зенита. Хотя более точно говорить не о пройденном пути, а о количестве частиц, попавшихся на пути. Т.е атмосферная масса зависит от угла Солнца к зениту: она равна 1, когда солнце в зените, около 2, при угле в 60 градусов и около 40 при 90 градусов. Именно поэтому закаты такие багровые.
- зависимость атмосферной массы от угла хорошо известна для земной атмосферы, но может отличаться на других планетах. Поэтому есть возможность загрузить другую функцию зависимости. Для примера в папке data/relative_optical_mass лежит простейшая косекансная зависимость, выведенная в приближении плоской Земли. Она может пригодиться для планет-гигантов.
- Плотность атмосферы - позволяет создать очень разреженную атмосферу, или вовсе избавиться от нее. Правда, сейчас этот параметр визуально мало на что влияет, ведь экспозиция выставляется по средней яркости, а если нету никакого другого света, кроме света атмосферы (звезд, например), от изменения плотности мало что поменяется. Хотя само солнце станет более белым.
- Количество озона и водяных паров - это два газа, пики поглощения которых попадают в видимую область спектра и которые учитиваются по отдельности. Кроме них, в программе фигурирует также поглощение от "прочих газов" - самый правый пик. Их концентрацию пока регулировать нельзя. Но на самом деле эффект от них мизерный.
- Затуманенность (Turbidity) - самый важный параметр. Он определяет, будет ли небо ясным или затянется целиком туманной дымкой. Он может принимать значения от 2 до 32, при других значениях будут получаться малореалистичные изображения
- Графики справа показывают пропускание атмосферы при атмосферной массе 1 и 2.
Облака
Облака, сгенерированные программой, представляют собой стохастический двухмерный черно-белый фрактал - маску. Строится 2 изображения неба - первое для параметра затуманенность, приведенного во вкладке "параметры атмосферы". Второе - точно такое же, но с затуманенностью, заданной параметром "густота облаков". Затем, по маске они смешиваются в разных пропорциях.
Наблюдатель
В этих вкладках сейчас наблюдается полнейшая путаница, надеюсь привести все это в порядок. Тем не менее:
- Азимут и угол места - имеется в виду, куда направлен "взор" ну или оптическая ось фотоаппарата/телескопа, который все снимает.
- Поле зрения - угловое расстояние между самой левой и самой правой точкой изображения.
- навигация стрелочками - сейчас почти бесполезная функция. Имеется в виду, что стрелки "влево" и "вправо" на клавиатуре меняют азимут, а "вверх" и "вниз" - угол места. Очень удобно, если бы отрисовка шла в реальном времени. Сейчас, к сожалению, это не так. Надо осваивать OpenGL и графические ускорители...
- Построить - самая главная кнопка! Именно при ее нажатии генерится изображение.
Свойства оптики
- Доля рассеянного света. Речь идет о рассеянии части света на хрусталике глаза или на линзах фотоаппарата, в результате чего он равномерно засвечивает сетчатку/матрицу целиком. Результатом становится уменьшение контрастности, которое мы подсознательно воспринимаем как присутствие яркого источника где-то на краю поля зрения. Один из эффектов Lens Flare, нужных, чтобы отобразить на экране объекты, яркости которых отличаются в 500 000 раз. Почему-то особенного эффекта я не почувствовал...
- Макс. углы по горизонтали, сверху и снизу. Если яркий объект укладывается в эти углы, то его наличие будет приниматься во внимание. Иначе он будет просто игнорироваться. Т.е это параметры "бленды", будь это настоящая бленда, или рука, поднятая над глазами или просто лоб и скулы, блокирующие совсем уж косые лучи.
- Диаметр зрачка - нужен для расчета дифракции. Пока берется лишь простая "гауссова" дифракция, при которой каждая точка превращается в кружочек с радиусом lambda/D и с гауссовым затуханием на концах. Эффект явно есть, но пока не очень реалистично. Пожалуй, лучше здесь оставить 1мм, хотя можно поиграться.
- Экспокоррекция - очень полезный параметр. Позволяет отрегулировать яркость полученного изображения. Коррекция 1 означает увеличение яркости в 2 раза, 2 - в 4 раза, -1 - уменьшение в 2 раза и т.д. Основное применение - засветить картинку при попадании солнца прямо в объектив. Сейчас при этом получается снимок "против света" - виден только диск солнца практически на темном фоне. Выставив коррекцию 2..4, удается получить более-менее нормальную картину. Опять же, пока здесь все далеко до идеала.
Рендеринг
Пока всего один параметр - как регулировать выдержку - по средней яркости или по максимальной. Лучше оставить, как есть.
Условия пользования
Программа распространяется бесплатно. Начиная с v. 0.33, исходные коды можно скачать с https://github.com/nabbla/Xenosky
Литература
[1] A Practical Analytic Model for Daylight, A. J. Preetham, Peter Shirley, Brian Smits http://www.cs.utah.edu/~shirley/papers/sunsky/