Комментарии 27
понимаю, что перевод. но тени, имхо, неестественные. тут уж либо 2d и без теней. или псевдо-3d, тогда сортируем объекты по глубине при отрисовке. ну и тени на объектах тоже придется сделать.
Cтатья не о том, как подобрать тип теней для конкретной игры, а о том, как реализовать динамические тени. Интереснее тот момент, что автор просто опускает откуда он берёт карту высот и как её формирует.
ну тогда тема не раскрыта. потому что то, что сделано — использовать нельзя. если автор на этом и остановился — то очень зря, потерял много благодарных читателей
45 секунд, потраченные на просмотр начального видео уже не вернуть…
А готовые решения применять не пробовали, например spriteilluminator?
Я не понимаю зачем делать карты высот для теней. Почему просто не сделать 3Д модели именно для расчета теней? Тогда и проблем с деревьями не будет.
Я не понял вопроса. 3Д модели в 2Д игру не вставишь.
Однако из 3Д моделей отлично получаются спрайты, карты нормлей и карты высот + это будет все равно проще чем полноценное 3Д/2.5Д
Однако из 3Д моделей отлично получаются спрайты, карты нормлей и карты высот + это будет все равно проще чем полноценное 3Д/2.5Д
А чем карта высот отличается от 3Д модели?
Карта высот — это 2,5D-модель, так сказать. В одной точке с координатами x,y не может быть нескольких значений z.
Карта высот — 2Д текстура. В примере в статье это может быть один канал одной текстуры.
Есть какие-то аппаратные ограничения, которые не позволяют передать в шейдер 3Д буффер?
Если и можно, то зачем передавать 3Д модель, когда можно ограничиться текстуркой с картой высот?
Чтобы сделать тень от деревьев, например.
Да и в целом смысл в генерации карты высот для этого дела теряется, когда можно сразу использовать 3Д модель.
Да и в целом смысл в генерации карты высот для этого дела теряется, когда можно сразу использовать 3Д модель.
Тени от деревьев здесь можно сделать просто отдельным фейком: отрисовкой отдельного спрайта с поворотом и масштабированием. Это 2D игра, мир дешевых иллюзий. Скорее всего у автора нет никаких 3D моделей и карту высот он рисует вручную, также как и карту нормалей. Для простых зданий из этой игры это вполне реально. Вы же предлагаете оторванное от контекста неоправданно дорогое решение.
Вы серьезно полагаете, что нарисовать карту высот проще, чем несколько кубиков грубо повторяющих геометрию объекта?
Проще кому? Вам, возможно. Это два решения, требующие разных навыков разработчика и разных архитектур игрового движка. Для автора статьи явно работать с пикселями проще, чем 3D моделями. У него 2D игра с пиксель-арт графикой.
Кроме того, ресурсная эффективность у карты высот на порядки выше, чем у работы с 3D моделями. Если автору работать с картой высот легче и на выходе получается более производительный алгоритм, то незачем использовать более сложную технологию, требующую больших ресурсных затрат.
Думаю, дело в том, что вы умеете в 3D и просто сделали бы другую игру. Искренне завидую, сам бы делал всё в 3D если бы умел.
Кроме того, ресурсная эффективность у карты высот на порядки выше, чем у работы с 3D моделями. Если автору работать с картой высот легче и на выходе получается более производительный алгоритм, то незачем использовать более сложную технологию, требующую больших ресурсных затрат.
Думаю, дело в том, что вы умеете в 3D и просто сделали бы другую игру. Искренне завидую, сам бы делал всё в 3D если бы умел.
Да нет, не мне.
Никто же не делает карты высот и карты нормалей в фотошопе.
Самый распространенный способ создать карты высот — это слепить 3Д модель и запечь геометрию в текстуру.
Нарисовать карту высот соответствующую геометрии руками — это сложная работа, требующая навыка. Слепить 3Д модель из кубиков сможет кто угодно, после 15 минут просмотра туториалов на ютьбе. А уж из 3Д модели получить карту нормалей и карту высот — плевое дело.
Я бы согласился с доводом о производительности, если бы речь шла о расчете тени на CPU. JavaScript с этим не справится нормально. Но у нас все равно шейдеры, а значит видеокарта. Даже древний Intel скушает модель из десятка полигонов без потери производительности.
А вот с доводом, что деревья можно сделать фейком — я согласен.
В принципе если код получается проще, а результат устраивает, то почему бы и не карту высот…
Никто же не делает карты высот и карты нормалей в фотошопе.
Самый распространенный способ создать карты высот — это слепить 3Д модель и запечь геометрию в текстуру.
Нарисовать карту высот соответствующую геометрии руками — это сложная работа, требующая навыка. Слепить 3Д модель из кубиков сможет кто угодно, после 15 минут просмотра туториалов на ютьбе. А уж из 3Д модели получить карту нормалей и карту высот — плевое дело.
Я бы согласился с доводом о производительности, если бы речь шла о расчете тени на CPU. JavaScript с этим не справится нормально. Но у нас все равно шейдеры, а значит видеокарта. Даже древний Intel скушает модель из десятка полигонов без потери производительности.
А вот с доводом, что деревья можно сделать фейком — я согласен.
В принципе если код получается проще, а результат устраивает, то почему бы и не карту высот…
Спасибо за перевод! Приятно прикапываться к автору статьи читая её на родном языке! :)
Путь карта высот приходит из воздуха, а шейдер не самый эффективный на свете, статья компактная и прагматичная, она полезна. Побольше бы таких статей и их переводов.
Путь карта высот приходит из воздуха, а шейдер не самый эффективный на свете, статья компактная и прагматичная, она полезна. Побольше бы таких статей и их переводов.
Похожие динамические тени зависящие от освещения были в пиксельной 2D игре Dungeon of the Endless.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Динамические свет и тени в моей 2d игре