SunCalc — солнечный калькулятор

SunCalc — солнечный калькулятор pos gosuslugi

Карты засветки для астрономов-любителей.

Карты засветки позволяют примерно представить, что и где может увидеть астроном-любитель с учётом засветки от населённых пунктов и выбрать лучшее место для наблюдений, если есть машина.
Приведённые здесь карты засветки составлены участниками форума www.starlab.ru.
Они составлялись на основе карт засветки примерно 1998-2001 годов.
Данные устарели, но более подробных, с разделением на зоны, я пока не нашёл.

К сожалению, исходно файлы выложены на стороннем временном ресурсе,
с которого потихоньку исчезают – выложил тут, чтобы не пропали окончательно. Рядом даны размеры в мегабайтах.
Если у вас есть исчезнувшие карты засветки, которые я не успел сохранить – пришлите пожалуйста!

Карта засветки Урала открывается не во всех браузерах.
Лучше сразу сохраните этот файл к себе и открывайте его на своём компьютере.

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

или расскажите друзьям:

У вас отличный сайт, спасибо большое, много полезной информации!Карты засветки есть на этом сайте:darksitefinderи на этом:lightpollutionmap (сайт почему-то виснет спустя пару секунд)

Интересно, почему не вся карта Центральной России, я например живу в Белгородской области хотел тоже посмотреть какая и у нас засветка.

Как работает освещение в играх

Время на прочтение
7 мин

SunCalc — солнечный калькулятор

Освещение в играх напрямую влияет на наше восприятие происходящего на экране — и даже может являться основой геймплея. Как и в реальном мире, это понятие комплексное, едва ли реализуемое при помощи одного метода.

Пожалуй, ближе всего к этому смогла приблизиться трассировка лучей — простая по своей концепции, но требовательная к вычислительным ресурсам системы. И та получила свое развитие в игровой индустрии сравнительно недавно, с началом эпохи RTX. А ведь геймдев развивается гораздо дольше — и к сегодняшнему дню разработан уже не один метод симуляции распространения света в игровой сцене.

О методах реализации глобального освещения в играх (которые мы, кстати, используем и в своих проектах) и о том, что это вообще такое — далее в статье.

Прямое освещение, глобальное освещение, трассировка лучей, растеризация — разбираемся в понятиях

Для лучшего понимания, из чего вообще состоит освещение в играх, разделим его на два этапа:

  • Первый — прямое освещение (direct light). Это свет, исходящий непосредственно от источника (лампа накаливания, огонь, солнце), который затем проходит сквозь сцену и попадает в какую-то поверхность — например, террейн или любой другой внутриигровой объект.
  • Второй — непрямое освещение (indirect light) или глобальное освещение (global illumination), которое, попадая на поверхность, отражается от нее в разных направлениях и тем самым освещает другие поверхности вокруг. В зависимости от отражательной способности материала, такие переотражения могут происходить неоднократно то тех пор, пока световая энергия источника не истощится.

SunCalc — солнечный калькулятор

Именно непрямое освещение придает изображению большую реалистичность. На скриншоте ниже, например, показана сцена из Quake 2 RTX только с прямым освещением (слева) и с освещением ото всех источников сразу (справа).

SunCalc — солнечный калькулятор

Но его же и сложнее реализовать — при том сделать это хорошо.

Как уже упоминалось, лучше всего этой цели служит, конечно же, трассировка лучей. Суть ее заключается в следующем. Давайте представим, что на 3D-сцене расположена камера, имеющая конечное разрешение. Для получения трассировки лучей один из непосредственно лучей выстреливает из пикселя этой камеры в сцену и попадает в 3D-объект на ней. Этот объект с точки зрения пикселя можно закрасить, отследив больше лучей с этой точки. Например, с этого момента луч может продолжить движение в направлении источника света с целью выяснения, будет ли пиксель находиться в тени от этого источника света или на него воздействовать. Или другой луч также может быть отправлен в сцену и иметь в ней отражения и даже переотражения в зависимости от свойств материала объекта. Чтобы получить еще более точную информацию о цвете для этого пикселя, понадобится больше лучей и больше отражений — а значит, гораздо больше времени на вычисления.

Читайте также:  Проводятся конференции книгообмена в России и России

Хотя сама по себе концепция трассировки лучей проста, эта технология очень ресурсозатратна: так, даже для игры 1997 года реализовать ее удалось лишь к 2019 году. Поэтому до недавнего времени игровая графика чаще всего рисовалась на экранах с помощью гораздо более быстрой техники — растеризации.

Проблема с растеризацией в том, что она на самом деле не про свет: это просто способ отрисовки трехмерных объектов на двумерном экране. Растеризация — это процесс, при котором трехмерный объект преобразуется в двухмерное изображение на основе перспективы с целью получения правильной геометрии без затенения на двумерном изображении.

SunCalc — солнечный калькулятор

По умолчанию она вообще не имитирует освещение и не особо этим занимается. А чтобы получить достоверное освещение и затенение объектов, требуются дополнительные проходы вычислений.

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

Впрочем, несмотря на это, непрямое освещение в 3D-играх существует уже очень давно — иначе все бы они были похожи на Doom III, где градации тени как таковой практически нет.

SunCalc — солнечный калькулятор

Ниже мы как раз рассмотрим — не исчерпывающий — список техник, при помощи которых в играх эмулируют непрямое освещение.

Карты освещения (Lightmaps)

Первый метод, о котором мы поговорим, — lightmapping. Техника эта использовалась еще в оригинальном Quake II 1997 года и используется до сих пор даже в самых современных тайтлах — но, конечно, в более продвинутом и детализированном виде.

Заключается она в том, чтобы предварительно рассчитать информацию об освещении в игровой сцене и заложить ее в текстуру, которая впоследствии будет применяться к этой сцене. Таким образом, метод карт освещения избавляет игру от необходимости расчета освещения в реальном времени, что дает огромный выигрыш в производительности.

SunCalc — солнечный калькулятор

Впрочем, как и любая другая техника, она имеет ряд недостатков:

  • Карты освещения хороши только для статических объектов, иначе свет в сцене не будет выглядеть согласованным и реалистичным. Это накладывает сильные ограничения на геймдизайн и интерактивность и требует иных техник освещения для динамических объектов — одними картами освещения будет уже не обойтись.
  • Карты освещения из-за своей статичности могут отображать только рассеянное освещение и не подходят для имитации зеркальных поверхностей, поскольку они во многом зависят от положения камеры. Таким образом, они хорошо подойдут, например, для бетонных поверхностей, но не металлических.
  • Как и любые текстуры, карты освещения имеют конечное и, как правило, довольно низкое разрешение, из-за чего могут возникать артефакты на поверхностях, такие как рваные края и пикселизация. Во избежание этого, метод может потребовать довольно большого объема видеопамяти.

Техника все время улучшается и обрастает модернизациями, пытающимися решить перечисленные проблемы — но многое все равно упирается в необходимость освещения динамических объектов, и тогда на помощь приходят другие методы.

SunCalc — солнечный калькулятор

В Half-Life 2 Valve активно использовала световые карты (2011)

Освещение на основе изображения (Image-based lighting)

Техника IBL работает следующим образом: давайте представим, что шесть камер снимают одну и ту же сцену с одной и той же точки в шести разных направлениях, тем самым образуя кубическую карту (cube map).

SunCalc — солнечный калькулятор

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

Шесть граней карты позволяют получить меняющиеся в зависимости от угла камеры отражения, захватывая в том числе и происходящее за пределами экрана. Техника уже довольно старая — используется в играх с начала 2000-ых. И, как обычно, имеет свои недостатки:

  • Таким кубическим картам нужно иметь высокое разрешение, чтобы создавать убедительные отражения. Это, в свою очередь, требует немалого объема видеопамяти и ограничивает количество кубический карт, которые можно использовать в одной сцене.
  • Кубическая карта — это снимок мира с определенной точки, далеко не всегда совпадающей с камерой игрока, что может привести к проблемам с перспективой на поверхностях с высоким отражением. Проблему можно решить увеличением количества кубических карт в сцене, но это потребует большого объема видеопамяти.
  • Несмотря на то, что кубические карты можно применять к динамическим объектам, сама она может быть и не динамической. Обычно под ней подразумевается статический снимок окружения. Так что если в вашей игре, допустим, динамически меняется время суток, одна и та же кубическая карта не подойдет для дневного и вечернего освещения. В таком случае нужно будет пересчитывать ее в реальном времени, а это очень дорого.
  • И последнее: освещение на основе изображения включает в себя вклады в освещение окружающих объектов, но не самого объекта, к которому оно применяется. Скажем, металлические предметы сложной формы так или иначе могут отражаться на собственных поверхностях, но в случае с кубическими картами это крайне сложно учесть.
Читайте также:  Регистрация Участника закупок на сайте zakupki.gov.ru

Наибольшее распространение эта техника получила, пожалуй, в гоночных симуляторах, которые используют кубические карты в реальном времени, закрепленные на модели автомобиля игрока. Это позволяет учитывать зеркальные и рассеянные отражения на протяжении всей трассы и адаптироваться к изменениям в окружающей среде, хотя и требует ряда оптимизаций — например, для таких карт обычно используется упрощенная версия сцены с более низким разрешением и/или FPS.

SunCalc — солнечный калькулятор

Скриншот из Need for Speed: Payback

Непрямое освещение на основе световых проб (Probe-based indirect lighting)

Эволюционное продолжение предыдущего метода, световые пробы предназначены для частичного решения проблем с видеопамятью и интерактивностью окружения. Упрощенно говоря, световые пробы (light probes) представляют собой зонд меньшего размера и с меньшим числом сторон, чем кубические карты — например, с четырьмя, а не шестью сторонами. То есть, идейно это та же кубическая карта, но более низкого разрешения и всего с несколькими битами цветовой информации.

SunCalc — солнечный калькулятор

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

SunCalc — солнечный калькулятор

Основное преимущество световых проб заключается в их размере. Из-за того, что они крайне малы, места в видеопамяти они занимают немного — а значит, их можно обновлять экономнее, чем в случае кубических карт. А также расставить куда большее количество таких зондов на уровне, благодаря чему освещение может оказаться даже более детальным, чем в случае с кубическими картами.

Однако и здесь есть свои минусы и компромиссы:

  • Столь малые зонды улавливают лишь основную информацию о свете — а значит, хуже работают с отражающими поверхностями в сравнении с кубическими картами.
  • Система зондов может создавать прерывистое освещение для динамических объектов, да и вообще сильно зависит от плотности расположения проб. Освещение от световой пробы может просачиваться даже сквозь объекты, создавая косвенное освещение и эффект свечения в затененных областях.
  • Из-за низкой точности световые пробы не в состоянии отображать мелкие детали и тени, из-за чего затенение поверх освещения на основе проб зачастую нужно накладывать дополнительно иными способами.

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

SunCalc — солнечный калькулятор

SunCalc — солнечный калькулятор

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

Читайте также:  Что нового в ростовской области по детским пособиям

Хочу поделиться с вами небольшим, но полезным проектиком, разработанным мной на досуге — солнечным калькулятором SunCalc.

SunCalc — солнечный калькулятор

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

Идея его появилась после того, как мне понадобилось найти в Крыму хорошее место для съёмки кадра солнца, уходящего в море на закате (для клипа, снимали в итоге вот здесь) — оказалось, что все существующие средства для этого сильно устарели. Захотелось создать своё, сделав его самым лучшим, каким только можно себе представить, нашёл хорошую страницу с кучей астрономических формул, взялся за разработку по свободным вечерам и вот результат.

Возможности

  • рисует на карте красивый векторный график с положением солнца на рассвете, закате и в выбранное время (жёлтая, оранжевая и красная линия), проекцией траектории солнца (оранжевая дуга) и ее разбросом в течении года (жёлтая область вокруг нее); чем ближе точка на графике к центру круга, тем выше в этот момент солнце над горизонтом
  • по наведении мышкой на линию заката/рассвета показывает соответствующий разброс положений
  • показывает освещённость (темнота, сумерки, дневной свет) цветом на слайдере времени
  • можно посмотреть время не только рассвета и заката, но и 3-х типов сумерек (гражданские, навигационные, астрономические) и полной темноты
  • показывает ссылку на недельный прогноз погоды (облачность, осадки, туман) в выбранном месте
  • местоположение также можно выбирать поиском, автоопределением, кликом по карте или перетаскиванием маркера
  • работают пермалинки на конкретное место/время и back/forward в браузере

Для чего эго можно использовать

Во-первых, в чисто бытовых ситуациях. До скольки мне нужно выехать из леса, пока еще хоть что-то видно, если я до сих пор не купил на велик фару? До скольки я смогу вечером загорать перед тем, как пляж накроет тень от скалы справа? В какое время уже не будет слепить прямо в глаза солнце, когда выйду поиграть в футбол на площадку под домом? Какая у квартиры, которую я собираюсь снять, освещённость в течении года? Уже самому не раз пригодилось в подобного рода вопросах.

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

В-третьих, для общего образования и удовлетворения природной любознательности. Почему в Австралии зимой жарче, чем летом? Что на самом деле такое белые ночи и в каких городах и когда они наблюдаются? Что насчёт полярного дня и ночи? Как меняется траектория солнца от севера к югу? Сколько минут идёт рассвет от Москвы до Киева? И т.д.

Немного деталей реализации

  • весь код приложения выполняется на стороне браузера
  • для карты и поиска используется Google Maps API v3
  • для векторной графики на карте — библиотека Raphaёl
  • для определения местоположения — W3C Geolocation API, Google Gears или Google IP Geolocation
  • используется jQuery и несколько компонентов jQuery UI (Slider для времени, Datepicker для даты и Dialog для окошка приветствия)
  • для deep linking и ajax history используется плагин jQuery Address
  • между сессиями состояние сохраняется в печеньках
  • для прогноза погоды на удивление самым подходящим оказался Wolfram Alpha

Что планируется в будущем

  • сделать мобильную версию для браузеров iPhone и Android
  • добавить опцию отображения времени в локальном часовом поясе
  • добавить слайдер для дней года, аналогичный слайдеру времени
  • подчистить и выложить на гитхабе вычислительную часть кода
  • написать для Хабра хорошую статью о нюансах разработки подобного приложения

Надеюсь, полезное применение этого маленького сервиса найдёте и вы. Буду очень рад впечатлениям и замечаниям в комментариях. Оставлять идеи или голосовать за уже высказанные также можно тут. Спасибо!

update: извините за проблемы с хостингом, проект временно переехал на другой сервер — теперь вроде всё хорошо.

Оцените статью