Как стать автором
Поиск
Написать публикацию
Обновить
13
0
Algorithm engineer @CrazyFizik

Пользователь

Отправить сообщение

Модель взаимодействия судов с водой в видеоиграх

Время на прочтение16 мин
Количество просмотров36K


Давайте поговорим о физике транспортных средств


Физика транспортных средств в видеоиграх не очень сильно обсуждается. Статьи в Интернете о физике транспорта в видеоиграх немногочисленны и поверхностны; обычно они посвящены самым основам. Программист транспорта для видеоигр ощущает себя сегодня в относительном вакууме. Возможно, такая ситуация возникла, потому что эту тему довольно сложно объяснить, а может быть, мы просто стыдимся признаваться в использовании хаков, упрощений и хитростей, которые мы вносим по сравнению с «правильной», реалистичной симуляцией физики. Как бы ни обстояло дело, видеоигры имеют уникальные проблемы в симуляции транспорта, а значит, об этом стоит писать. Это захватывающая тема, относящаяся к физике, работе с камерой, звуку, спецэффектам, а также к восприятию и психологии человека.

Я решил сначала поговорить о судах, потому что недавно работал с ними; ещё я обнаружил, что их динамика не совсем понимается даже на уровне исследований (хотя многое и понятно). Модели и теории формулируются таким образом, что их становится сложно применить непосредственно в видеоиграх. Или же они требуют очень ресурсоёмких методов симуляции, которые практически невозможно контролировать и адаптировать под причудливые потребности разработчиков и игроков. Но можно написать упрощённую модель, которая учитывает важные параметры судна. В этом определённо есть доля искусства, «прыжка веры» и небольшая доля «творческой» физики, которая заставит Кельвина и Стокса перевернуться в могилах.
Читать дальше →

AI монстров и поиск пути с помощью тепловых карт

Время на прочтение5 мин
Количество просмотров25K
image Допустим, у нас есть плоская карта, состоящая из тайлов. На некоторых тайлах стоят монстры, а на некоторых других – всякие штуки, которые монстров интересуют: игрок, оружие, зелья, боеприпасы и прочее в том же духе. Задача состоит в том, чтобы объяснить монстрам, к каким штукам им идти и как. Путь должен быть близким к оптимальному, а время вычисления – настолько маленьким, насколько это возможно. Один из самых простых способов – использовать тепловую карту дистанций до определённой цели или целей.
Читать дальше →

Раритетные схемы защиты от копирования игр и ПО — какими они были?

Время на прочтение5 мин
Количество просмотров46K

Во многих случаях методы, используемые в 80-е года прошлого века, были эффективнее современных



Источник: tvtropes.org

Сейчас, чтобы вы ни слушали, смотрели, во что бы не играли — 90% всего контента защищено авторским правом. Разработчики встраивают в свои продукты разнообразные «антипиратские» схемы защиты. Программное обеспечение требует лицензий, кодов, аутентификации пользователя в сети. Понятно, что все эти технологии защиты от «пиратов» не появились просто так. Многие годы они развивались и совершенствовались. Что было у истоков?

Разработчики программного обеспечения, включая игры, использовали защиту от копирования еще во времена, когда Интернета не было. В большинстве случаев защитные схемы были вовсе не цифровыми, а… аналоговыми.
Читать дальше →

Что мы знаем о Марсе?

Время на прочтение7 мин
Количество просмотров42K


По случаю четвертой годовщины посадки марсохода Curiosity рассказываем о современных знаниях о Марсе.

Планета Шелезяка: воды нет, полезных ископаемых нет, населена роботами…». Похоже на Марс, но совпадает только пункт с роботами, остальное там есть, хоть и не так много, как на Земле. Что о Марсе достаточно хорошо известно? Четвертая планета от Солнца. Меньше Земли, больше Меркурия. Вулкан Олимп — самая большая в Солнечной системе гора, она же — самый большой вулкан. Долина Маринера — самый большой в Солнечной системе каньон, который в сотни раз превышает самый большой каньон на Земле.
Читать дальше →

Подключение win form в проект xna

Время на прочтение3 мин
Количество просмотров9.7K


Как известно, в xna не предусмотрен типовой GUI, поэтому каждому разработчику приходится решать — рисовать его самим, подключать готовые GUI библиотеки разработанные специально для xna (коих не так уж много), либо пытаться подключить стандартные winform / wpf (по подключению wpf уже есть замечательная статья).
Я не стал разбираться в многочисленных вариантах решения данной задачи и решил пойти как мне казалось наиболее простым путем — подключением winform. Как оказалось, winform имеет ряд нюансов и ограничений.
В итоге после активного поиска я пришел к двум возможным реализациям интерфейса:
1. Весь интерфейс без участия клавиатуры, т.е. кнопки, списки и т.п. Если необходимо ввести что-то с клавиатуры — создавать внешнюю форму и получать с нее данные.
2. Интерфейс полностью работоспособен и можно вводить данные с клавиатуры. Но создание внешних форм невозможно + еще пара нюансов.
Подробнее:
Читать дальше →

Экипаж звездолета «Россия»

Время на прочтение7 мин
Количество просмотров20K


Сегодня 55 лет со дня эпохального шага Человечества в космос. Он сказал "Поехали", Он взмахнул рукой… Его портрет на значках, магнитиках, билбордах и вагонах метро. Скоро на хоругви поднимут, и причисление к лику святых — лишь вопрос времени. Все "истинные патриоты" знают, что мы первые и космоснаш, а спросишь что-нибудь про современную космонавтику, ничего кроме "мы возим американцев" и "американцы летают на наших движках" не скажут, ну может еще "Ангара — экологически чистая ракета" и "В 2030-м году будем на Луне".
Читать дальше →

Восьмибитные анекдоты

Время на прочтение4 мин
Количество просмотров60K
«Анекдот — небольшой забавный, смешной рассказ» (Из толкового словаря).
Наверное, надо бы предупредить читателей, что мол «Детям до 40 лет читать не рекомендуется». Но я, пожалуй, этого делать не буду. Все чинно и благородно.


Читать дальше →

Списки действий: простой, гибкий, расширяемый ИИ

Время на прочтение6 мин
Количество просмотров20K
Большинство людей привыкли решать задачи знакомыми и понятными им способами. Мы предпочитаем не сходить с проторенной дорожки и не изобретать велосипед, даже если это сулит очевидную выгоду. Избавиться от такого образа мышления очень сложно, поэтому мы продолжаем использовать устаревшие технологии и решения, тем самым вызывая недоумение у наших более продвинутых ровесников. В этой и следующих статьях я хочу познакомить читателей с широким спектром решений, способных повысить качество разработки. Сегодня мы поговорим о списках действий.


Читать дальше →

О прямоугольных координатах и гексагональных сетках

Время на прочтение4 мин
Количество просмотров29K
Думаю, никому не нужно объяснять, насколько широко в играх (и не только) используются гексагональные сетки. Как для заданной шестиугольной ячейки найти координаты ее центра и вершин — достаточно очевидно. Обратное же преобразование (т.е. поиск ячейки, в которую попала данная точка с координатами x и y) уже не столь тривиально. О нём и пойдет речь в данном топике.
Читать дальше →

Математика на пальцах: ардуино головного мозга или линейно-квадратичный регулятор для управления электродвигателем

Время на прочтение8 мин
Количество просмотров47K

Постановка задачи: как со школьными знаниями дойти до выводов университетского уровня


Эта статья предполагает, что вы прочли мои статьи (ну или и без того знаете) про методы наименьших квадратов и про линейно-квадратичный регулятор.

Как я уже говорил в предыдущих статьях, мои знакомые студенты хотят построить обратный маятник, но умаялись подбирать коэффициенты ПИД-регулятора, поэтому я неспешно смотрю, что такое линейно-квадратичный регулятор, ну а заодно и вам пересказываю то, что прочитал. Задача для этой статьи — показать, как воплотить в железе одномерный пример из статьи про линейно-квадратичный регулятор. Грубо говоря, я хочу написать написать управление для сервомотора: у меня есть текущее положение оси привода и текущая скорость её вращения, я хочу её остановить в заданном положении. Я попытался было прочитать схожую статью на эту тему, но, признаться, ничего в ней не понял, поэтому сел разбираться самостоятельно, предпочтительно на пальцах и без страшных слов типа дифференциальных уравнений Лагранжа-Эйлера.

Продолжая рабочий эксгибиционизм, знакомлю вас с Bubble Bobble, который живёт у нас с коллегой в кабинете. Он рецензирует статьи для конференции SIGGRAPH.


Читать дальше →

Машинное обучение: Вопросы и ответы

Время на прочтение6 мин
Количество просмотров31K


Как вы уже успели заметить, мы достаточно часто обращаем внимание на тему машинного обучения. Так, мы рассказывали о глубоком обучении, писали о работе с данными и адаптировали различные подборки источников по теме: 1, 2, 3.

Сегодня мы решили посмотреть на наиболее интересные вопросы и ответы по теме машинного обучения на ресурсе Quora.
Читать дальше →

Как мы портировали старый добрый русский квест

Время на прочтение23 мин
Количество просмотров43K
Меня зовут Светлана, я занимаюсь разработкой в компании Бука. Хочу поделиться с вами историей о том, как мы портировали игру.

Как всё начиналось


imageМногие наверняка помнят золотую эру квестов, которая пришлась на 90-е годы прошлого века. А некоторые из тех, кто постарше, даже застали лучших представителей жанра: King’s Quest, Space Quest, Myst, Broken Sword, Grim Fandango, Monkey Island.

Российский геймдев тоже не сидел сложа руки: коробки с играми серий «Братья Пилоты» и «Петька и Василий Иванович» расхватывали с прилавков магазинов как горячие пирожки!

Старые игры с возрастом не становятся хуже, но запустить их с каждым годом всё сложнее. Поэтому, как и многие другие издательства, мы решили портировать одну из своих лучших игр на современные устройства. И в качестве пробы пера выбрали классический квест «Петька и Василий Иванович: Спасают Галактику».
Читать дальше →

Процедурно генерируемые карты мира на Unity C#, часть 1

Время на прочтение5 мин
Количество просмотров74K
image

В этом цикле статей мы научимся создавать процедурно генерируемые карты мира с помощью Unity и C#. Цикл будет состоять из четырех статей.
Читать дальше →

Процедурно генерируемые карты мира на Unity C#, часть 2

Время на прочтение7 мин
Количество просмотров23K
image

Это вторая статья из цикла о процедурно генерируемых с помощью Unity и C# картах мира. Цикл будет состоять из четырех статей.
Читать дальше →

Управление игровыми состояниями в C++

Время на прочтение5 мин
Количество просмотров29K
Здравствуйте, дорогие читатели!

У нас активно расходится третий доптираж крайне успешной книги «Изучаем C++ через программирование игр». Поэтому сегодня вашему вниманию предлагается перевод интересной статьи на одну из узких тем, связанных с программированием игр на C++. Также просим вас поучаствовать в опросе
Читать дальше →

Символьная регрессия

Время на прочтение8 мин
Количество просмотров42K
При решении задач с применением методов машинного обучения, как правило, мы выбираем наиболее подходящий алгоритм в контексте задачи, а также способ настройки его параметров.

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

Читать дальше →

Процедурная генерация случайных игровых подземелий

Время на прочтение6 мин
Количество просмотров66K
image

В посте подробно рассматривается техника генерации случайных подземелий. Основной алгоритм генерации, пример работы которого можно посмотреть здесь, используется разработчиками игры TinyKeep. Оригинальный пост от разработчика был размещён на reddit.

Оригинальное описание алгоритма


1. Сначала я задаю нужное количество комнат – к примеру, 150. Естественно, цифра произвольная, и чем она больше, тем сложнее будет подземелье.

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

Вместо равномерно распределённых случайных чисел (какие выдаёт генератор Math.random в большинстве языков), я использую нормальное распределение Парка-Миллера. В результате вероятность появления маленьких комнат превышает вероятность появления больших. Зачем это надо, объясню позже.

Кроме того я проверяю, что соотношение длины и ширины комнаты не слишком велико. Нам не нужны как идеально квадратные комнаты, так и сильно вытянутые.

3. И вот у нас есть 150 случайных комнат, расположенных на небольшом пространстве. Большинство из них наезжают друг на друга. Теперь мы осуществляем их разделение по технологии separation steering, чтобы разделить прямоугольники так, чтоб они не пересекались. В результате они не пересекаются, но находятся достаточно близко друг от друга.

4. Заполняем промежутки клетками размером 1х1. В результате у нас получается квадратная решётка из комнат различного размера.

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

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

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

8. Дерево получается аккуратным, но скучным – никаких вам замкнутых ходов. Поэтому мы случайным образом добавляем обратно примерно 15% ранее исключённых рёбер графа. В результате получится граф, где все комнаты гарантированно достижимы, с несколькими замкнутыми ходами.

9. Чтобы превратить его в коридоры, для каждого ребра строится серия прямых линий (в форме Г), идущих по рёбрам графа, соединяющим комнаты. Тут нам пригождаются те клетки, которые остались неиспользованными (те, что не превратились в комнаты). Все клетки, накладывающиеся на Г-образные линии, становятся коридорами. А из-за разнообразия размеров клеток стены коридоров будут неровными, что как раз хорошо для подземелья.

И вот пример результата!

Осторожно — под катом много монстров анимированных гифок!
Читать дальше →

Можно ли сделать игру без художника за 2 дня? Devstory моей игры Neobug Rush 2 Players

Время на прочтение4 мин
Количество просмотров32K
Добрый день! Игры не являются основным родом моей деятельности, это скорее хобби. Статья может оказаться полезной начинающим indie-разработчикам, у которых, как и у меня, нет ни команды, ни знакомых художников, ни бюджета на фриланс и продвижение игры. Но что более важно, есть энтузиазм, время и хорошие идеи. Итак, кому интересно, прошу под кат!

Читать дальше →

О действительно БОЛЬШИХ числах (часть 1)

Время на прочтение9 мин
Количество просмотров60K
imageИдея написать популярно про большие числа пришла во время чтения недавней статьи, речь в которой шла о числах-гигантах, имеющих хоть какой-то физический смысл. И заканчивается она упоминанием числа Грэма. Того числа, которое будет точкой отсчета сегодняшней статьи. Чтобы представить себе масштабы бедствия я настоятельно рекомендую предварительно прочитать вот эту статью, в которое объясняется о числе Грэма на пальцахTM — там автор очень красочно и последовательно рассказывает о границах восприятия, в которые мы себя зажимаем, когда говорим о больших числах.
Внимание, дисклеймер!
Я не являюсь профессиональным математиком. Поэтому ошибки в специальной терминологии практически неизбежны, учитывая полное отсутствие материалов на русском языке. Более того, я даже не уверен, что те слова, которые я использую для перевода с английского, вообще используются русскоязычными математиками. С другой стороны, я попытался всё это понять и объяснить языком, доступным для обычных читателей. Любые замечания просьба отписывать в личку — будем улучшать текст вместе.
итак, поехали...

Советы о том, как писать на С в 2016 году

Время на прочтение20 мин
Количество просмотров92K

Если бы язык С был оружием

От автора: Наброски для этой статьи появились еще в начале 2015 года, правда, до публикации материалов дело так и не дошло. Наконец, решив, что в ящике моего письменного стола от вышеупомянутого «черновика» не будет никакой пользы, представляю его вашему вниманию в исходном виде. Единственное, что изменилось в тексте – год, с 2015 на 2016.

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

Итак, статья ...


Первое правило программирования на С – не используйте его, если можно обойтись другими инструментами.

Когда найти альтернативный метод не удается, самое время вспомнить о современных заповедях программиста.
Читать дальше →

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность