Эмодзи в комментарии сломал пинбол на Android
После сентябрьского обновления Android 17 Visual Pinball перестал загружать столы с эмодзи в комментариях к VBScript. Парсер выдавал
Причина оказалась в системной библиотеке bionic. Функция
Опубликованные исходники отличались от библиотеки на телефоне, поэтому автор дошёл до дизассемблера. Сотрудник Google подтвердил баг и нашёл проблемы в тестах: один проверял только ASCII, другой содержал неверный ожидаемый результат.
Разработчики libwinevbs обошли ошибку, заменив проблемные вызовы обычными циклами. На GitHub есть багрепорт с воспроизведением и исправление для игры.
После сентябрьского обновления Android 17 Visual Pinball перестал загружать столы с эмодзи в комментариях к VBScript. Парсер выдавал
Invalid character, хотя комментарий вообще не должен исполняться.Причина оказалась в системной библиотеке bionic. Функция
wcspbrk() ищет конец комментария по переводу строки, но ошибочно останавливалась на эмодзи. При определённом наборе разделителей сбой затрагивал и кириллицу.Опубликованные исходники отличались от библиотеки на телефоне, поэтому автор дошёл до дизассемблера. Сотрудник Google подтвердил баг и нашёл проблемы в тестах: один проверял только ASCII, другой содержал неверный ожидаемый результат.
Разработчики libwinevbs обошли ошибку, заменив проблемные вызовы обычными циклами. На GitHub есть багрепорт с воспроизведением и исправление для игры.
Как доставлять Gaussian Splat-модели в мобильный браузер
Фотореалистичную 3D-модель мало быстро отрисовать: сначала её нужно загрузить на телефон. У Solaya типичный оптимизированный ресурс занимает 30–60 МБ, поэтому доставка данных стала отдельной частью архитектуры.
Модели хранятся сжатыми в blob-хранилище, движок PlayCanvas доставляется через CDN. Сжатие применяется на уровне модели и CDN, а кеширование на ближайших к пользователю узлах уменьшает задержку и нагрузку на хранилище.
При пересборке ресурса сбрасывается кеш только этой модели. Остальные данные остаются доступными из прогретого кеша. Один просмотрщик используется в вебе и мобильном приложении.
В интервью команды Solaya разобран сервис для визуализации товаров. Его схема доставки полезна и для веб-проектов с тяжёлыми 3D-ресурсами. Для игровых столкновений splat-модели понадобится отдельно подготовленная геометрия.
Фотореалистичную 3D-модель мало быстро отрисовать: сначала её нужно загрузить на телефон. У Solaya типичный оптимизированный ресурс занимает 30–60 МБ, поэтому доставка данных стала отдельной частью архитектуры.
Модели хранятся сжатыми в blob-хранилище, движок PlayCanvas доставляется через CDN. Сжатие применяется на уровне модели и CDN, а кеширование на ближайших к пользователю узлах уменьшает задержку и нагрузку на хранилище.
При пересборке ресурса сбрасывается кеш только этой модели. Остальные данные остаются доступными из прогретого кеша. Один просмотрщик используется в вебе и мобильном приложении.
В интервью команды Solaya разобран сервис для визуализации товаров. Его схема доставки полезна и для веб-проектов с тяжёлыми 3D-ресурсами. Для игровых столкновений splat-модели понадобится отдельно подготовленная геометрия.
Что добавить в прогрессию, когда игрок нашёл выигрышную стратегию
В About Time игрок набирает нужное количество очков, получает награды и вкладывает их в улучшения. Геймдизайнер Henrique Campos видит риск: найдя сильную комбинацию, игрок может перестать искать новые варианты.
В разборе игровой петли автор предлагает награждать прохождение дальних раундов новыми шестерёнками или слотами. Между забегами можно открывать стартовые наборы часов и улучшения, меняющие вероятность появления нужных элементов.
Ещё одна идея — дерево улучшений за отдельную валюту. Оно позволило бы выбирать направление развития между попытками. Необязательные детали истории могли бы дать дополнительный повод продолжать игру.
Это предложения по развитию About Time. Разбор показывает, как отделить рост чисел от открытия новых возможностей и проверить, остаются ли у игрока интересные решения после освоения основной механики.
В About Time игрок набирает нужное количество очков, получает награды и вкладывает их в улучшения. Геймдизайнер Henrique Campos видит риск: найдя сильную комбинацию, игрок может перестать искать новые варианты.
В разборе игровой петли автор предлагает награждать прохождение дальних раундов новыми шестерёнками или слотами. Между забегами можно открывать стартовые наборы часов и улучшения, меняющие вероятность появления нужных элементов.
Ещё одна идея — дерево улучшений за отдельную валюту. Оно позволило бы выбирать направление развития между попытками. Необязательные детали истории могли бы дать дополнительный повод продолжать игру.
Это предложения по развитию About Time. Разбор показывает, как отделить рост чисел от открытия новых возможностей и проверить, остаются ли у игрока интересные решения после освоения основной механики.
❤2
Как отлаживать физику покадрово в PlayCanvas
Тело проваливается сквозь пол или неожиданно отскакивает, а на обычной скорости трудно понять причину. В PlayCanvas Editor 2.34 появился запуск с Inspector: можно остановить приложение и посмотреть состояние сцены в нужный момент.
В меню Launch включите Inspector. F9 ставит приложение на паузу, F10 продвигает его на один кадр. Объект можно выбрать прямо во вьюпорте и проверить текущие свойства его компонентов.
Во вкладке Physics включите Draw physics world: поверх сцены появятся коллайдеры и точки контакта. Затем пройдите несколько кадров, наблюдая, когда возникает столкновение и как меняется положение тела.
В обзоре обновления показан этот процесс на физической сцене. Inspector требует Engine 2.23 или новее. Большинство свойств доступны только для чтения; панель также позволяет включать и выключать сущности.
Тело проваливается сквозь пол или неожиданно отскакивает, а на обычной скорости трудно понять причину. В PlayCanvas Editor 2.34 появился запуск с Inspector: можно остановить приложение и посмотреть состояние сцены в нужный момент.
В меню Launch включите Inspector. F9 ставит приложение на паузу, F10 продвигает его на один кадр. Объект можно выбрать прямо во вьюпорте и проверить текущие свойства его компонентов.
Во вкладке Physics включите Draw physics world: поверх сцены появятся коллайдеры и точки контакта. Затем пройдите несколько кадров, наблюдая, когда возникает столкновение и как меняется положение тела.
В обзоре обновления показан этот процесс на физической сцене. Inspector требует Engine 2.23 или новее. Большинство свойств доступны только для чтения; панель также позволяет включать и выключать сущности.
Как собрать плавный цикл ходьбы персонажа
Если ноги двигаются, а персонаж будто едет по полу, стоит проверить опорную фазу шага. В цикле ходьбы на месте стопа должна равномерно двигаться назад относительно тела, пока игра перемещает героя вперёд.
В уроке hyperPad Art Studio анимацию собирают на готовом скелете Nova. Сначала задают два положения контакта с землёй, затем добавляют перенос свободной ноги, проседание под весом и подъём перед следующим шагом.
Для секундного цикла при 24 FPS противоположный контакт приходится на кадр 12, а кадр 24 повторяет начальную позу. Это убирает скачок на границе повторов.
Проверьте каждый ботинок отдельно: опорная стопа остаётся на высоте земли, свободная проходит по дуге. Сильное замедление у каждого ключа может сделать шаг дёрганым — в уроке движение ног начинают с линейной интерполяции. Root остаётся на месте.
Если ноги двигаются, а персонаж будто едет по полу, стоит проверить опорную фазу шага. В цикле ходьбы на месте стопа должна равномерно двигаться назад относительно тела, пока игра перемещает героя вперёд.
В уроке hyperPad Art Studio анимацию собирают на готовом скелете Nova. Сначала задают два положения контакта с землёй, затем добавляют перенос свободной ноги, проседание под весом и подъём перед следующим шагом.
Для секундного цикла при 24 FPS противоположный контакт приходится на кадр 12, а кадр 24 повторяет начальную позу. Это убирает скачок на границе повторов.
Проверьте каждый ботинок отдельно: опорная стопа остаётся на высоте земли, свободная проходит по дуге. Сильное замедление у каждого ключа может сделать шаг дёрганым — в уроке движение ног начинают с линейной интерполяции. Root остаётся на месте.
❤1
Как связать материалы стилизованного окружения
Дом, забор и трава могут хорошо выглядеть по отдельности, но спорить друг с другом в общей сцене. Художница Tulika Roy рассказывает, как удерживала единую палитру при создании окружения Outstead в UE5.
Для деревянных объектов она подготовила trim sheet с базовыми цветами, тенями и бликами. Папку с этими слоями в Substance 3D Painter превратила в Smart Material и использовала на дверях, столбах и других деталях дома. Особенности каждого объекта дорисовывала вручную.
Цвет травы связала с ландшафтом через Runtime Virtual Texture. Материал травы читает цвет земли под собой: правка участка ландшафта меняет и растительность на нём. Отдельный материал для каждой зоны создавать не пришлось.
В разборе сцены есть примеры текстур и настройки растительности. Композицию автор проверила ещё на блокинге: дорожка, ограда и холмы направляют взгляд к дому.
Дом, забор и трава могут хорошо выглядеть по отдельности, но спорить друг с другом в общей сцене. Художница Tulika Roy рассказывает, как удерживала единую палитру при создании окружения Outstead в UE5.
Для деревянных объектов она подготовила trim sheet с базовыми цветами, тенями и бликами. Папку с этими слоями в Substance 3D Painter превратила в Smart Material и использовала на дверях, столбах и других деталях дома. Особенности каждого объекта дорисовывала вручную.
Цвет травы связала с ландшафтом через Runtime Virtual Texture. Материал травы читает цвет земли под собой: правка участка ландшафта меняет и растительность на нём. Отдельный материал для каждой зоны создавать не пришлось.
В разборе сцены есть примеры текстур и настройки растительности. Композицию автор проверила ещё на блокинге: дорожка, ограда и холмы направляют взгляд к дому.
❤2
Как уменьшить шум Lumen в интерьере
Яркий экран или светящееся окно могут давать плавающие пятна на соседних поверхностях. В разборе Post-Soviet Hospital Aleksander Goryachev показывает, как настраивал освещение закрытого интерьера в UE5.
Свет из окна он разделил между несколькими объектами: emissive-плоскость изображает небо, Rect Light освещает помещение, а Spot Light с Light Function проецирует рисунок оконной рамы.
Отдельно автор проверяет Screen Space Traces: яркие пиксели светящихся объектов могут продолжать влиять на результат через экранные данные. В закрытом уровне он отключил эти трассировки. На другом уровне с наружным освещением такой же шаг заметно обеднял непрямой свет.
Есть компромисс и по скорости: замена Rect Light широким Spot Light делает освещение жёстче. В статье показаны сравнения — настройки стоит оценивать вместе с видом сцены и бюджетом GPU.
Яркий экран или светящееся окно могут давать плавающие пятна на соседних поверхностях. В разборе Post-Soviet Hospital Aleksander Goryachev показывает, как настраивал освещение закрытого интерьера в UE5.
Свет из окна он разделил между несколькими объектами: emissive-плоскость изображает небо, Rect Light освещает помещение, а Spot Light с Light Function проецирует рисунок оконной рамы.
Отдельно автор проверяет Screen Space Traces: яркие пиксели светящихся объектов могут продолжать влиять на результат через экранные данные. В закрытом уровне он отключил эти трассировки. На другом уровне с наружным освещением такой же шаг заметно обеднял непрямой свет.
Есть компромисс и по скорости: замена Rect Light широким Spot Light делает освещение жёстче. В статье показаны сравнения — настройки стоит оценивать вместе с видом сцены и бюджетом GPU.
Как сделать отскакивающий огненный снаряд
В ACTION GAME MAKER снаряд создаётся как отдельный объект. Его регистрируют в Bullet Settings персонажа, а выстрел вызывают действием Fire Bullet в визуальном скрипте.
В официальном уроке эту цепочку разбирают на огненном шаре. Изображение делят на четыре ячейки и добавляют кадры по порядку. Коллайдер для стен и область атаки настраивают отдельно: их размеры могут различаться.
Далее через Collision Animation задают вращение изображения. У анимации есть дополнительная ячейка END: значение 360° в ней замыкает полный оборот, а промежуточные положения интерполируются автоматически.
Чтобы шар летел с отскоками, ему настраивают движение и включают влияние гравитации: в шаблоне обычной пули она отключена. Урок продолжает Jump Action Tutorial, поэтому для повторения понадобится проект из предыдущего материала.
В ACTION GAME MAKER снаряд создаётся как отдельный объект. Его регистрируют в Bullet Settings персонажа, а выстрел вызывают действием Fire Bullet в визуальном скрипте.
В официальном уроке эту цепочку разбирают на огненном шаре. Изображение делят на четыре ячейки и добавляют кадры по порядку. Коллайдер для стен и область атаки настраивают отдельно: их размеры могут различаться.
Далее через Collision Animation задают вращение изображения. У анимации есть дополнительная ячейка END: значение 360° в ней замыкает полный оборот, а промежуточные положения интерполируются автоматически.
Чтобы шар летел с отскоками, ему настраивают движение и включают влияние гравитации: в шаблоне обычной пули она отключена. Урок продолжает Jump Action Tutorial, поэтому для повторения понадобится проект из предыдущего материала.
Как Arrow Cube 3D сочетает генерацию и ручные уровни
В головоломке Arrow Cube 3D игрок убирает стрелки с вращающегося куба. Команда Green Train Studio использует генератор уровней, но начало игры готовит вручную.
В интервью разработчиков объясняют подход: первые 20–40 уровней обычно создаёт и проверяет геймдизайнер. Дальше генератор обеспечивает объём контента, а параметры задают развитие сложности. Последовательность затем корректируют по аналитике.
Для браузерной версии отдельно продумали загрузку. Основной билд на Defold занимает около 3 МБ, данные уровней — ещё около 20 МБ. Они подгружаются порциями, поэтому при запуске не нужно скачивать весь набор.
В этом примере размер стартовой загрузки и общий объём игры различаются. Контент можно добавлять без увеличения первого скачивания, а ручные вводные уровни дают команде контроль над знакомством игрока с механикой.
В головоломке Arrow Cube 3D игрок убирает стрелки с вращающегося куба. Команда Green Train Studio использует генератор уровней, но начало игры готовит вручную.
В интервью разработчиков объясняют подход: первые 20–40 уровней обычно создаёт и проверяет геймдизайнер. Дальше генератор обеспечивает объём контента, а параметры задают развитие сложности. Последовательность затем корректируют по аналитике.
Для браузерной версии отдельно продумали загрузку. Основной билд на Defold занимает около 3 МБ, данные уровней — ещё около 20 МБ. Они подгружаются порциями, поэтому при запуске не нужно скачивать весь набор.
В этом примере размер стартовой загрузки и общий объём игры различаются. Контент можно добавлять без увеличения первого скачивания, а ручные вводные уровни дают команде контроль над знакомством игрока с механикой.
Как разрушение зданий меняет тактику в Brigador Killers
Если игрок может пробить стену, дверь перестаёт быть единственным входом. А вместе с ней перестают работать привычные способы направлять игрока по уровню.
В интервью Stellar Jockeys разрушение Brigador Killers разобрано как взаимодействие систем. Пули пробивают объекты, взрывы наносят убывающий с расстоянием урон, повреждённые части зданий провоцируют обрушение соседних.
Для объектов команда готовит отдельные наборы эффектов — частицы, спрайты, свет и звук, срабатывающие вместе. Они помогают показать масштаб повреждений и сделать цепную реакцию понятной.
Полностью разрушаемое окружение требует учить игрока создавать собственные проходы. Поэтому здесь полезно смотреть и на физику, и на планировку: какие маршруты появятся после взрыва и сможет ли игрок понять последствия своего действия.
#геймдизайн #разрушения
Если игрок может пробить стену, дверь перестаёт быть единственным входом. А вместе с ней перестают работать привычные способы направлять игрока по уровню.
В интервью Stellar Jockeys разрушение Brigador Killers разобрано как взаимодействие систем. Пули пробивают объекты, взрывы наносят убывающий с расстоянием урон, повреждённые части зданий провоцируют обрушение соседних.
Для объектов команда готовит отдельные наборы эффектов — частицы, спрайты, свет и звук, срабатывающие вместе. Они помогают показать масштаб повреждений и сделать цепную реакцию понятной.
Полностью разрушаемое окружение требует учить игрока создавать собственные проходы. Поэтому здесь полезно смотреть и на физику, и на планировку: какие маршруты появятся после взрыва и сможет ли игрок понять последствия своего действия.
#геймдизайн #разрушения
Субботний скриншотник снова открыт!
Показывайте в комментариях, над чем работали: скриншоты, гифки, видео, демки и ссылки на свои игры. Новая механика, переделанное меню или первый рабочий прототип — всё годится. Ссылки на свои каналы разрешены.
Посмотрим, что у кого получилось, и зададим авторам вопросы. Если застряли, расскажите на чём — возможно, кто-то уже решал похожую задачу.
@make_game
Показывайте в комментариях, над чем работали: скриншоты, гифки, видео, демки и ссылки на свои игры. Новая механика, переделанное меню или первый рабочий прототип — всё годится. Ссылки на свои каналы разрешены.
Посмотрим, что у кого получилось, и зададим авторам вопросы. Если застряли, расскажите на чём — возможно, кто-то уже решал похожую задачу.
@make_game
Как собрать стилизованный маяк из модулей
Альберт Серрано начал сцену маяка с простых форм в Blender и перенёс их в Unreal Engine. До детализации он проверил пропорции, расстояние до камеры и композицию.
В разборе окружения показано, как повторное использование помогает расширять сцену. Деревянные детали собраны в модульный набор, повторяющиеся поверхности используют тайловые материалы, растения — общий атлас.
Для перехода между камнем и штукатуркой художник добавил промежуточный оттенок той же штукатурки через отдельный канал Vertex Color. Так границу можно подкрашивать прямо на геометрии и варьировать по сцене.
Когда понадобился второй ракурс, большая часть материалов и объектов уже существовала. Новую зону удалось собрать без полного повторения работы. Хороший пример того, как ещё на этапе первой композиции подготовить детали для дальнейшего использования.
#окружение #unrealengine
Альберт Серрано начал сцену маяка с простых форм в Blender и перенёс их в Unreal Engine. До детализации он проверил пропорции, расстояние до камеры и композицию.
В разборе окружения показано, как повторное использование помогает расширять сцену. Деревянные детали собраны в модульный набор, повторяющиеся поверхности используют тайловые материалы, растения — общий атлас.
Для перехода между камнем и штукатуркой художник добавил промежуточный оттенок той же штукатурки через отдельный канал Vertex Color. Так границу можно подкрашивать прямо на геометрии и варьировать по сцене.
Когда понадобился второй ракурс, большая часть материалов и объектов уже существовала. Новую зону удалось собрать без полного повторения работы. Хороший пример того, как ещё на этапе первой композиции подготовить детали для дальнейшего использования.
#окружение #unrealengine
Defold 1.14: рендеринг в кубическую карту
В Defold 1.14.0 появились cubemap render targets: сцену можно отрисовать на шесть граней кубической карты вокруг выбранной точки.
В описании релиза показаны два способа создать такую цель рендеринга: через render script или ресурс
На этой основе можно реализовывать отражения, захват окружения и другие эффекты, которым нужны несколько направлений обзора. Сам эффект при этом остаётся частью вашей системы рендеринга: новый тип цели не включает готовые отражения автоматически.
У первой реализации есть ограничения: грани должны быть квадратными и одинакового размера, сглаживание MSAA для cubemap не поддерживается. В статье есть ссылка на демонстрацию создания карты и передачи результата в шейдер.
#defold #рендеринг
В Defold 1.14.0 появились cubemap render targets: сцену можно отрисовать на шесть граней кубической карты вокруг выбранной точки.
В описании релиза показаны два способа создать такую цель рендеринга: через render script или ресурс
.render_target. Затем выбирается грань, в которую нужно выполнить отрисовку. Цветовое содержимое доступно шейдеру через samplerCube.На этой основе можно реализовывать отражения, захват окружения и другие эффекты, которым нужны несколько направлений обзора. Сам эффект при этом остаётся частью вашей системы рендеринга: новый тип цели не включает готовые отражения автоматически.
У первой реализации есть ограничения: грани должны быть квадратными и одинакового размера, сглаживание MSAA для cubemap не поддерживается. В статье есть ссылка на демонстрацию создания карты и передачи результата в шейдер.
#defold #рендеринг