Пользователь
102,0
рейтинг
10 ноября 2013 в 19:45

Разработка → Sprite Lamp: динамическое освещение 2D-объектов

Австралийский разработчик indie-игр Финн Морган (Finn Morgan) разработал очень интересную и полезную технологию для динамической подсветки 2D-спрайтов Sprite Lamp. Изюминкой этой программы является то, что для подсветки объекта с произвольной точки не требуется построение 3D-модели.



Скоро каждый сможет использовать Sprite Lamp в своих играх.

Финн Морган объясняет, как работает программа динамической подсветки. Например, возьмём стандартный «плоский» спрайт зомби.



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



После этого профили «скармливаются» программе Sprite Lamp.



Sprite Lamp создаёт произвольные карты освещения на основе загруженных профилей. Результат выглядит следующим образом.



Sprite Lamp отлично работает и с пиксельными рисунками, и с отсканированными карандашными набросками.



13 ноября Финн Морган начнёт сбор средств на Kickstarter для своего проекта. В данный момент программа работает только под Windows. После получения финансирования автор обещает разработать версии под Linux и Mac OS X. Будет выпущено три версии Sprite Lamp: бесплатная, версия для любителей и профессиональная. К сожалению, бесплатной версией вряд ли смогут воспользоваться разработчики независимых игр, потому что она будет вставлять водяные знаки в анимации, но стоимость вполне функциональной версии для любителей будет не очень высокой. Остаётся надеяться, что довольно скоро код подобной программы будет опубликован в общественном достоянии, потому что вещь очень полезная.
Анатолий Ализар @alizar
карма
744,5
рейтинг 102,0
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (74)

  • +68
    Извиняюсь, но он сделал не движок, а программку для генерации карты нормалей из четырех черно-белых картинок, так ведь?
    • +50
      Скрытый текст
      да
    • 0
      Думаю, что по алгоритму не особо сложно сделать «движок»
      • +3
        Карта нормалей — это карта нормалей, а движок — это движок. Или сделать движок, у которого основной фичей будет вот это освещение или же сделать такое освещение плагином к другому движку, что будет более логичным.
    • +3
      Не совсем. Смотреть на тень от руки в последней гифке либо перейти по ссылке на оригинал.
      • 0
        Значит heightmap.
        Автор по сути тот же Денис Попов, только еще с много тысячами $ от предстоящей kickstarter кампании.
  • +8
    На первый взгляд впечатляет. Неплохо придает объему.
    • +6
      Это же обычный bump mapping.
      Ничего нового он не придумал. А тот, кто сделал из этого новость, видимо тоже никогда раньше не слышал об этом.
      • 0
        Не обычный. Для bump mapping нужна карта нормалей, которую не так просто сделать для такого спрайта зомби как в статье. Куда проще нарисовать освещение с нескольких сторон. Здесь же обратный алгоритм — построение карты нормалей из нескольких освещенных картинок. Ну а после того как карта нормалей есть — там да, обычный bump mapping.
  • +30
    Где-то я уже это видел :)
    • 0
      То-же вспоминал название этой игры, но честно говоря тут как-то по красочнее выглядит.
  • +1
    Если не ошибаюсь, данный метод используется у Double Fine Adventure в Broken Age. GDC: Broken Age's Approach to Scalability
  • +12
    Если прикинуть, то на каждый кадр нужно отдеьно рисовать по 4 рисунка. Из этих 4 рисунков на выходе получается вроде как обычная карта нормалей. Мне кажется легче художнику сгенерить обычную карту нормалей а потом ручками ее подправить под требуемую.
  • +19
    Эм… так к каждому спрайту рисовать по 3-5 изображений?
    Если у нас 15 разных персонажей (это не много вроде) и по 15 состояний у каждого. То получается нам надо отрисовать 675 картинок в лучшем случае… И я так понимаю это надо сделать ручками…

    Или я чего-то не понимаю?
    • +7
      Так и хочется сказать, «alizar ведь». Но не скажу. Вот.
      • +10
        Так и хочется сказать, «сказали ведь». Но не скажу. Вот.
    • +3
      Процесс искусственно усложнен в 4 раза. Зачем? Без понятия.
      • 0
        А что если у нас есть, скажем, фонарь, под которым проходит этот зомби? Или просто фонарик у ГГ.
        • +1
          Хм, и в чем проблема?
          • –4
            Вручную рисовать придётся намного больше четырёх спрайтов, если мы хотим нечто подобное тому, что есть в посте.

            Если только вы не имели в виду, что достаточно нарисовать карту высот, карту диффузии и карту нормалей.
            • 0
              Я имел ввиду нарисовать карту высот и из нее вычислить карту нормалей. Что вы понимаете под картой диффузии я не совсем уверен.
              • 0
                Карта диффузии — это собственно спрайт. А про вычисление нормалей из высот я что-то не подумал, да.
            • +1
              Судя по оценкам, я сморозил какую-то несусветную глупость. Просветит меня кто-нибудь?
  • +1
    Эм, а чем хуже нормалки?
    • –4
      Скрытый текст
      это оно и есть
      • +15
        Скрытый текст
        Почему вы отвечаете скрытым текстом? :-)
        • 0
          Скрытый текст
          Таки почему вы спрашиваете?
          • +11
            Открытый текст
            Заканчивайте.
            • +92
              Скрытый текст
              Не
              хочу
              заканчивать
              .
              Со
              спойлерами
              веселее!
              Скрытый текст
              Скрытый текст
              Скрытый текст
              Скрытый текст
              Скрытый текст
              Скрытый текст
              Скрытый текст
              Вам не надоело?
              Скрытый текст
              Скрытый текст
              Скрытый текст
              Скрытый текст
              Скрытый текст
              Скрытый текст
              Скрытый текст
              У вас стальные нервы.
              Скрытый текст
              Скрытый текст
              Скрытый текст
              Скрытый текст
              Скрытый текст
              Скрытый текст
              Скрытый текст
              Скрытый текст
              Скрытый текст
              image
              • +4
                Напоминает вот это — orteil.dashnet.org/nested.
                • +2
                  Шикарная вещь. Мысли особенно примечательны. :)

                  Я скорее вдохновлялся смертями в The Lost Vikings. Там персонажи после каждого третьего возрождения (после смерти уровень начинался заново) выдавали смешные реплики вроде «Парни, у меня дежа-вю» или «Как насчёт поселиться здесь?». Диалогов было десять-пятнадцать. Под конец герои уже обращались к игроку с просьбой перестать их убивать. :) Для самых терпеливых был диалог после сотни смертей.
              • +1
                Захватывающий квест!
              • +6
                Я дошел до котика
                • +2
                  Скрытый текст
                  Что? Как вам не стыдно было резать поняшу? У вас нет сердца!
                • +4
                  Это пони!
                • +3
                  ЭТО ЖЕ СПОЙЛЕР!
                  • +5
                    Не спойлер, нет там котиков.
                • +4
                  Developer Tools показали сразу всё.
              • +6
                Я дошёл до ручки
              • НЛО прилетело и опубликовало эту надпись здесь
                • 0
                  Хакер!
                  • 0
                    Читер!
              • 0
                image

                Не так уж и далеко запрятано. (:
                • 0
                  Ну вот. Зачем остальным веселье портить?
                  • +1
                    Ну не прятать же это под спойлер (:
  • +4
    Вот тут francoislaberge.com/labs/normal_mapping/me/ демка, которой уже несколько лет.
  • +2
    Это же эффект из демок, наверное каждая пятая демка, для ZX-Spectrum, имеет этот эффект.
    • +2
      Вот демо, с этим эффектом:
      www.youtube.com/watch?v=rIncbxgg6Jk
      • +10
        Охх. Каждый раз, когда читаю финальный скролл, становится стыдно за свой английский в те времена =)
        • +7
          Как вы ненавязчиво заявили авторство (%.
        • 0
          Мне показалось или там встречается попиксельная раскраска кадра? А как это сделано, если цвет управлялся на уровне знакоместа?
          • +2
            Отрисовка синхронно с ходом луча.
            Мультиколоры в поле кадра 4х4 пикселя. А на бордюре можно рисовать пикселями 8*1 со смещением в 2 пикселя. На пентагоне. На оригинальном спектруме ULA не позволяет такие вольности.
            • 0
              Т.е. это чистая динамика? Круто, не знал что у пентагона хватит на это быстродействия.
          • 0
            Нагнал я про 8*1. 1 такт cpu = 2 пикселя на экране. Соотвественно получается минимальный размер «бордюрного пикселя» это 22х1 или 24х1 в зависимости от типа команды out
  • +35
    А почему нельзя вместо 4-х картинок, нарисовать всего 1: черно-белую карту высот и из нее элементарно построить карту нормалей?
    • +9
      Зашёл сюда, чтобы увидеть этот комментарий. :)
    • +1
      И с этим бояном потом идти на kickstarter? Это скучно, денег никто не даст (тм)
  • +2
    Вот простой урок как в Unity сделать похожий эффект: http://robotloveskitty.tumblr.com/post/33164532086/legend-of-dungeon-dynamic-lighting-on-sprites
  • +4
    Да проще уже сразу 3D модель сделать
  • +8
    Вот почему нельзя было сказать, что тут генерируется не только карта нормалей, но и карты высот и диффузии или хотя бы включить эту гифку? Половины комментариев бы не было.
    • +2
      Да потому что, теме сто лет в обед, подходы известны и их не много.
      И главное, таки к играм это всё имеет очень ограниченное применение, тк на множестве различных спрайтов, сразу вылезает косячность этой генерации!
  • +1
    А по паре фотографий карту высот построить сможет?
    • 0
      Это уже другая история…
  • +2
    Когда-то и я примерно так же коряво делал. А потом узнал про карту нормалей и высот.

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

    P.S. посмотрел скрин, увидел карту нормаоей, но зачем так сложно? Проще сделать по карте высот.
  • +2
    Ого, «Финн Морган (Finn Morgan) разработал очень интересную и полезную технологию»!
    А я дурак думал это обычный бамп/нормал маппинг и применял в своем движке: youtu.be/AjsxiHZa3Og
    • 0
      Тоже активно использую :) Буквально недавно демку записал www.youtube.com/watch?v=GFPauCAjjjw
      • 0
        Forward rendering?
        • 0
          да
          • 0
            А почему тогда «infinite» light sources?
            • 0
              Потому что поддерживаеться куча источников света (тестировал на 30и какой лимит не знаю — мне не важно). С определенными нюансами, конечно.
  • +1
    А разве в Confederate Express используется не похожая система?
    habrahabr.ru/post/198626/#comment_6895788
  • +3
    Когда я делал свой 2д движок, я тоже опирался на то, что он должен уметь делать красивое объемное освещение и вообще всячески дружить с шейдерами.
    Но вот карту нормалей можно построить из одной единственной карты высот и это будет явно проще. Да и утилит для этого несколько больше.
  • 0
    Кмк в таком случае художнику будет проще и понятнее работать с z-координатой, то есть вокселями, чем мучаться над 4 освещенными проекциями.

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