Git Product home page Git Product logo

xenosky's Introduction

Table of Contents

Xenosky v. 0.33 - программа для генерации инопланетных пейзажей

Описание

Закат в атмосфере Земли, под лучами нашего Солнца (эта и следующие картинки построены в Xenosky)
Закат в атмосфере Земли, под лучами нашего Солнца (эта и следующие картинки построены в Xenosky)
На данный момент программа строит изображение неба, хотя в дальнейшем планируется добавить также рисование ландшафтов и воды. Уникальность программы в том, что получаемые ею изображения базируются на физических законах: излучение звезды задается в виде спектра с шагом около 10 нм, затем вычисляется, сколько света рассеивается атмосферой на разных длинах волн, и лишь на заключительном этапе спектр излучения переводится в RGB, чтобы изобразить его не мониторе. Мало того, в логе содержится информация об освещенности, которую дает светило и сколько доходит до поверхности планеты, так что с помощью этой программы можно даже посчитать, сколько солнечной энергии могут получать марсоходы Spirit и Opportunity! Впрочем, для этого нужна точная модель атмосферы Марса.

На данный момент с хорошей точностью можно смоделировать лишь атмосферу, сходную с земной. Для другого газового состава или заметно другой плотности данные могут значительно расходиться с реальностью. Причиной тому - использованная из [1] параметрическая модель, "заточенная" как раз под земную атмосферу. В дальнейшем планируется вместо нее честно расчитывать прохождение лучей через атмосферу, хотя это может оказаться чрезвычайно ресурсоемким процессом.

В целом программа еще очень сырая, очень хочется добавить в нее новые возможности и исправить наиболее откровенные ляпы (очень странная перспектива, в которой горизонт изгибается в обратную сторону). Но уже сейчас есть на что посмотреть.

Приятного пользования! Свои замечания и предложения оставляйте на [email protected]

История изменений

v. 0.33 (19.03.12) Небольшие доработки:

  • Спектр светила у поверхности планеты можно сохранить в файл. Также можно сохранить в виде картинки сам график.
  • Немного доработана процедура рисования небесных тел: теперь при малых разрешениях они не выглядят квадратами, края выходят более гладкими. Однако в скором времени взамен этой процедуры будет реализована полноценная цветная дифракция.
  • Исправлена небольшая ошибка при оценке цвета атмосферы - теперь при спектральных классах, отличных от солнечного, цвет будет считаться точнее, но все же сильно ему доверять не стоит. В проекте - модель атмосферы с одинарным рассеянием.
  • исправлена ошибка, которой не было в v. 0.30-0.31, но возникшая в v. 032, с неправильным вычислением яркости и освещенности у поверхности планеты
  • при включении программы и после редактирования небесного тела по умолчанию выбирается первое небесное тело в списке (раньше выделение вовсе снималось)
  • при добавлении нового небесного тела сразу вызывается диалог для его редактирования. Если нажать Cancel, небесное тело не добавляется.
  • окно программы теперь нельзя уменьшить до такой степени, чтобы какие-то элементы управления пропали - оно вернется к минимальному размеру.
v. 0.32 (19.02.12) Небольшие доработки:

  • Исправлен глюк, когда с некоторыми спектрами получаются очень странные, перенасыщенные изображения
  • Сделана примитивная иконка для программы взамен стандартной
  • Во вкладке "графики" теперь строятся графики для выбранного в списке выше небесного тела
v. 0.31 (16.02.12) Небольшие доработки:

  • Наконец при расчете атмосферы учитываются все светила, а не только первое по списку.
  • Файлы x_vs_lambda.txt, y_vs_lambda.txt, z_vs_lambda.txt убраны куда подальше из корневой папки программы
  • Из релиза убрана высококачественная фотография Луны - предполагалось, что можно будет изображать Луну и другие светила не просто светящимся диском, а используя фотографии, но пока такая возможность не реализована.
  • теперь небесные тела могут иметь нулевой угловой размер - их будет на одну угловую секунду "размазывать" искажения волнового фронта, неизбежные при прохождении через атмосферу.
v. 0.30 (14.02.12) Программа фактически была написана заново!

  • Вместо одного светила можно задавать сколько угодно. Указывается их звездная величина, угловой размер и положение на небе. Также можно загружать картинку, дать название и краткое описание, хотя пока эта информация никуда не идет.
  • Введена подробная модель атмосферы, правда, за свою основу берущая атмосферу Земли. Можно задать плотность отн. земной, закон изменения "атмосферной массы" от угла светила к зениту (см в разделе "свойства атмосферы"), содержание озона и водяных паров (практически единственные из газов в нашей атмосфере, имеющие пики поглощения в видимой области. Остальные рассеивают по Релею). Также введен параметр "затуманенность" (Turbidity). Он характеризует, во сколько раз суммарное рассеяние выше релеевской компоненты.
  • На основание этих данных расчитывается, сколько света рассеивается в атмосфере при данном положении светила, что позволяет увидеть ярко-желтое Солнце в зените и багрово-красное на закате. Кроме того, в логе записывается освещенность у поверхности планеты.
  • Введены фрактальные облака.
  • Сделаны первые попытки смоделировать процесс получения изображения подобно тому, как это делается в человеческом глазу или в фотоаппарате: выставление экспозиции по некоторому среднему значению, паразитная засветка "оптической системы" солнечными лучами, что снижает общую контрастность изображения, а также, в зачаточном состоянии - картина дифракции ярких источников света. Предстоит еще серьезно поработать над этими аспектами.
v. 0.03 (21.12.11) Небольшие доработки:

  • новая библиотека работы с табличными файлами
  • изображаются не только графики, но и линии спектра
v. 0.02 (09.12.11) Небольшие доработки:

  • можно сохранять в текстовый файл все 3 кривые, а также сохранить график как картинку.
v. 0.01 (03.11.11) Самая первая версия. Кружок одного цвета на фоне прямоугольника другого цвета. Фактически, это тестовая программа, чтобы проверить работу colorimetry_lib, которая произвольный спектр преобразует в цвет, представленный в координатах CIE 1931 (XYZ) или привычном нам RGB.

Справочный материал по программе

Небесные тела

В этой вкладке можно добавить почти неограниченное количество небесных тел. Каждое из них характеризуется следующими параметрами:

  • Название - будет фигурировать в списке, а в дальнейшем - в сохраненном файле (пока не сделано). На генерацию никак не влияет, чисто для себя, чтобы не запутаться
  • Описание - то же самое.
  • Звездная величина - здесь подразумевается визуальная звездная величина. Чем она выше, тем тусклее объект. Увеличение зв. величины на 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/

xenosky's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.