Как стать автором
Обновить

Комментарии 27

понимаю, что перевод. но тени, имхо, неестественные. тут уж либо 2d и без теней. или псевдо-3d, тогда сортируем объекты по глубине при отрисовке. ну и тени на объектах тоже придется сделать.
Cтатья не о том, как подобрать тип теней для конкретной игры, а о том, как реализовать динамические тени. Интереснее тот момент, что автор просто опускает откуда он берёт карту высот и как её формирует.
ну тогда тема не раскрыта. потому что то, что сделано — использовать нельзя. если автор на этом и остановился — то очень зря, потерял много благодарных читателей
Тема «Динамические свет и тени в моей 2d игре» раскрыта на 90%, не хватает только описания откуда взялась карта высот.
Думаю рисует сам для каждого спрайта.
Согласен. Учитывая то, что он даже карты нормалей рисует руками — карту высот ему нарисовать совсем не трудно.
Почему нельзя? Автору нужно было реализовать цикл дня/ночи с тенями и освещением. Он реализовал, какие проблемы?
45 секунд, потраченные на просмотр начального видео уже не вернуть…
Можно поставить будильник на 45 секунд раньше
А готовые решения применять не пробовали, например spriteilluminator?
Эта штука освещает сам спрайт по карте нормалей, она не умеет отбрасывать тени.
Я не понимаю зачем делать карты высот для теней. Почему просто не сделать 3Д модели именно для расчета теней? Тогда и проблем с деревьями не будет.
Я не понял вопроса. 3Д модели в 2Д игру не вставишь.
Однако из 3Д моделей отлично получаются спрайты, карты нормлей и карты высот + это будет все равно проще чем полноценное 3Д/2.5Д
А чем карта высот отличается от 3Д модели?
Карта высот — это 2,5D-модель, так сказать. В одной точке с координатами x,y не может быть нескольких значений z.
Карта высот самая что ни наесть 3D.
От того что там только 1Z может быть ничего не меняется.
Спроецировать полноценную 3D модель на 2Д мир ничуть не сложнее чем спроецировать карту высот.
Карта высот — 2Д текстура. В примере в статье это может быть один канал одной текстуры.
Есть какие-то аппаратные ограничения, которые не позволяют передать в шейдер 3Д буффер?
Если и можно, то зачем передавать 3Д модель, когда можно ограничиться текстуркой с картой высот?
Чтобы сделать тень от деревьев, например.
Да и в целом смысл в генерации карты высот для этого дела теряется, когда можно сразу использовать 3Д модель.
Тени от деревьев здесь можно сделать просто отдельным фейком: отрисовкой отдельного спрайта с поворотом и масштабированием. Это 2D игра, мир дешевых иллюзий. Скорее всего у автора нет никаких 3D моделей и карту высот он рисует вручную, также как и карту нормалей. Для простых зданий из этой игры это вполне реально. Вы же предлагаете оторванное от контекста неоправданно дорогое решение.
Вы серьезно полагаете, что нарисовать карту высот проще, чем несколько кубиков грубо повторяющих геометрию объекта?
Проще кому? Вам, возможно. Это два решения, требующие разных навыков разработчика и разных архитектур игрового движка. Для автора статьи явно работать с пикселями проще, чем 3D моделями. У него 2D игра с пиксель-арт графикой.

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

Думаю, дело в том, что вы умеете в 3D и просто сделали бы другую игру. Искренне завидую, сам бы делал всё в 3D если бы умел.
Да нет, не мне.
Никто же не делает карты высот и карты нормалей в фотошопе.
Самый распространенный способ создать карты высот — это слепить 3Д модель и запечь геометрию в текстуру.
Нарисовать карту высот соответствующую геометрии руками — это сложная работа, требующая навыка. Слепить 3Д модель из кубиков сможет кто угодно, после 15 минут просмотра туториалов на ютьбе. А уж из 3Д модели получить карту нормалей и карту высот — плевое дело.

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

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

image

Это же карта нормалей нарисованная вручную!
Предлагаю нам всем вместе порадоваться
за тонко отточенное кунг-фу автора. :)

Спасибо за перевод! Приятно прикапываться к автору статьи читая её на родном языке! :)

Путь карта высот приходит из воздуха, а шейдер не самый эффективный на свете, статья компактная и прагматичная, она полезна. Побольше бы таких статей и их переводов.
Похожие динамические тени зависящие от освещения были в пиксельной 2D игре Dungeon of the Endless.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории