Создание игр. Создание объектов игры. Создание фонового изображения

Рис. 2.2. Структура искусственного нейрона

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

Математическая модель нейрона:

, (2.1)

где s - результат суммирования (sum); w i - вес (weight) синапса, ; - компонент входного вектора (входной сигнал), ; b — значение смещения (bias); n - число входов нейрона; у - выходной сигнал нейрона; f — нелинейное преобразование (функция активации).

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

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

На входной сигнал s нелинейный преобразователь отвечает выходным сигналом f (s ), который представляет собой выход y нейрона. Примеры активационных функций представлены в табл. 2.1, а графики наиболее распространенных активационных функций – на рис. 2.2.

Таблица 2.1

Функции активации нейронов

Название

Область значений

Линейная

Полулинейная

Логистическая (сигмоидальная)

Гиперболический тангенс (сигмоидальная)

Экспоненциальная

Синусоидальная

Сигмоидальная (рациональная)

Шаговая (линейная с насыщением)

Пороговая

Модульная

логистическая функция или сигмоид (функция S -образного вида)(рис.


2.3):

. (2.3)

При уменьшении a сигмоид становится более пологим, в пределе при a = 0 вырождаясь в горизонтальную линию на уровне 0,5, при увеличении а сигмоид приближается к виду функции единичного скачка с порогом T . Из выражения для сигмоида очевидно, что выходное значение нейрона лежит в диапазоне (0, 1). Одно из ценных свойств сигмоидальной функции — простое выражение для ее производной, применение которой будет рассмотрено в дальнейшем:

. (2.4)

Рис. 2.3. Графики активационных функций: а – функция единичного скачка; б – линейный порог (гистерезис); в – сигмоид (логистическая функция), формула (3); г – сигмоид (гиперболический тангенс)

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

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

Инструкция

  • Выучите язык программирования, на котором вы хотите написать симулятор. Для этого вам необходимо прочитать достаточное количество литературы и обладать хорошими практическими навыками в написании сложных программ, если вы собираетесь заниматься изучением языка программирования самостоятельно, то это может занять у вас времени от полугода и больше.
  • Если же вы обладаете данными навыками, перейдите к созданию игрового движка. Для получения помощи по ходу его создания периодически обращайтесь к альтернативным источникам информации, например, различным тематическим форумам.
  • Обратите внимание, что при написании движка программы вам уже необходимо наличие плана игры, и чем более детальным он будет, тем меньше проблем возникнет у вас в дальнейшем. Сначала напишите в кодовом виде общий план вашего симулятора, продумайте основные аспекты, пусть даже они будут не связаны пока что между собой, в дальнейшем вы придумаете, каким образом соединить их в одно.
  • Продумайте их графическое исполнение. Постепенно от более общего вида переходите к конкретному вплоть до прописания цвета одежды персонажей (к примеру). В самом начале процесса постарайтесь не заострять внимание на мелочах, поскольку это отвлекает от виденья общей картины.
  • Реализуйте написанную вами игру графически. Для этого используются специальные редакторы. Для целей моделирования вам также необходимо программное обеспечение. Обратите внимание, что процесс создания собственной игры настолько трудоемкий и сложный, что вряд ли вы обойдетесь своими силами, скорее всего, вам придется нанять сторонних специалистов. Также этот процесс достаточно затратный, начиная от программного обеспечения и заканчивая оплатой услуг привлеченных разработчиков и дизайнеров.
  • Обычно первый комментарий к статье про какую-то неведомую технологию выглядит так: «Вы бы перед тем как углубляться сначала рассказали что это и зачем нужно». Итак, сия чуднАя периферия призвана при игре в автомобильные симуляторы имитировать воздействие перегрузок на игрока. В данном случае это обеспечивается наклоном кресла по двум осям, следовательно получился симулятор движения с двумя степенями свободы.

    Наглядная демонстрация:

    Кусочек истории
    Несколько лет назад увидел в Интернетах этот ролик . Захотелось построить что-то похожее. Рассудив, что такую конструкцию я не осилю, решил сделать просто качающееся кресло. Погуглил, оказалось Америку я не открыл и такие устройства бывают. Девайс, описанный в топике реализован по схеме racingseat, когда кресло закреплено на карданной передаче или её функциональном аналоге. Это уже вторая попытка реализации. Первой была схема joyrider, при которой кресло вращается на двух перпендикулярных осях в идеале пересекающихся в центре масс платформы. Также я исходил из того, что денег нет. Поэтому между хорошим, дешевым, плохим и дорогим пришлось выбирать хорошее и дешевое.
    Комплектующие
    Двигатель. Изучая тематические ресурсы на предмет выбора, так и не смог найти четкий ответ какой мощности двигатель нужен. В предыдущей версии я использовал двигатель от аккумуляторного шуруповерта, результат был не очень. Обычно для таких целей используют мотор-редукторы для стеклоочистителей автомобилей. Рекомендуют использовать узлы от автомобилей с большими лобовыми окнами (большие легковушки, автобусы, грузовые автомобили), поскольку электромоторы там мощнее. И даже несмотря на это симоводы обычно жалуются на малую мощность. Оценив бюджет я решил забить на рекомендации, смириться с малой мощностью и сделать дешево и сердито - прикупил два мотор-редуктора от Ланоса по $20 каждый. Двигатель маркирован как 30Ваттный. Я полагал пластиковая ведомая шестерня редуктора проживет недолго. К счастью я ошибся, спустя пол года использования не появилось даже люфта. Могу сказать, что по ощущениям мощности этих двигателей вполне достаточно. При желании можно поднять напряжение питания и получить еще немного динамики.

    Карданная передача использована от карданного вала ВАЗ-2101. ~$20
    Блок питания 12В 350Вт заказан в Китае, поскольку в ATX"овом блоке питания чуть меньшей мощности срабатывала защита даже при работе одного двигателя. Думаю эту защиту при желании можно легко отключить, но не стал заморачиваться. Китайский же тянет оба двигателя не напрягаясь. ~$30
    Шарниры ball joint – шарниры, передающие усилие мотор-редукторов на кресло. Не знаю как этот шарнир называется по-русски. Возможно шаровой шарнир. Первая мысль была использовать рулевые наконечники от автомобиля. Купил, попробовал - оказались слишком тугие и громоздкие. Затем решил сколхозить самодельные - оказались слишком большими зазоры. В результате заказал в том же Китае по $3 за штуку. Забавно, что когда я пытался найти такие шарниры в оффлайн, в конторе, специализирующейся на продаже подшипников, надо мной малость посмеялись и сказали что такое найти невозможно.
    Пара автоматических выключателей для защиты от КЗ.
    Автомобильное кресло с неизвестной родословной, и совершенно точно нелегкой судьбой.
    Метизы, железо, провода, всякие мелочи вроде вениляторов, ХЗ сколько.
    Игровой контроллер aka Logitech G25, компьютер, монитор и остальное уже было в наличии.
    Несколко фотографий для понимания механической части. Крепление карданного шарнира и двигателей с упомянутыми выше ball joint. Заодно можете посмеяться над над моими скилами сварщика и маляра:

    Электроника.
    Был бы я поумнее, купил или скопировал китайские драйвера двигателей и подключил бы к Arduino, благо реализации есть в открытом доступе. Но нет, я надумал пойти своим путем. И чтобы в пути было не скучно, я решил во время похода потащить на своей спине свежеизобретенный велосипед с квадратными колесами. Да, я забубенил свои драйвера и контроллер с прошивкой. Причем драйверов я сделал, наверное, больше десятка версий, а количество сгоревших полевиков впору измерять на вес. Итак, смертельный номер, не рекомендуемые к повторению схемы:

    контроллера


    драйвера двигателя


    Некоторые места в схемах были исправлены уже на текстолите, так что не рекомендую повторять. Рисуем платы, расчехляем лазерный утюг, тапок для съемки. Получаем следующее:

    И упаковываем все в элегантный корпус:


    Само собой не обошлось без косяков и в некоторых местах плату пришлось исправлять.

    Необходимая для работы информация (задание положения двигателя) передается через переходник USB-Serial TTL на микросхеме cp2102 в контроллер. Контроллер реализован на МК atmega88 с минимальной обвязкой. Для удобства добавлен четырехразрядный семисегментный индикатор. Контроллер по сигналу обратной связи, датчиком которой выступает переменный резистор на оси мотор-редуктора, определяет фактическое положение двигателя и при необходимости вносит в него коррективы. В контроллере реализован пропорциональный регулятор. Прошивкой скорее всего не поделюсь, т. к. не люблю бэкапы. В драйверах двигателей реализован H-мост. Контроллер имеет возможность открыть любой из транзисторов моста, что в данном случае избыточно. Из-за этого пришлось городить логическую защиту от КЗ. Достаточно было бы передать из контроллера в драйвер сигналы направления и разрешения.

    Рисуем остальные части совы Как то так все это выглядит если собрать вместе:

    Софт для компьютера.
    Для меня было откровением, что многие игры реализуют вывод телеметрии. Раньше я думал, что получить данные о физической модели игры можно только с помощью черной магии и метода научного тыка в память процесса. Оказывается нет, часто разработчики игр заморачиваются над выводом соответствующих данных через сокет. Отличное место чтобы изобрести еще один велосипед, а то я уже почти оправился от предыдущего. Но тут что-то пошлО не так и я решил посмотреть готовые варианты. А их есть как минимум два бесплатных:
    X-Sim напичкана массой свистелок вроде возможности прикручивания плагинов, перехватывания состояния джойстиков, но сложна для старта. Список поддерживаемых игр .
    SimTools относительно новая программа, значительно проще первой, но обладает меньшим функционалом. Для старта самое оно. Список поддерживаемых игр .
    Обе программы допускают вывод необходимой информации через последовательный порт (в данном случае виртуальный). Поддерживаются практически все более-менее известные преимущественно автомобильные, но есть также и авиационные симуляторы.

    Думаю в комплект к этому девайсу неплохо бы поиметь Oculus Rift. Только вероятно понадобится вторая версия, поскольку у первой гироскопы с ума сойдут.

    Хочу извиниться перед теми, кто просмотрел все картинки, но так и не увидел синюю изоленту, и перед читателями, кто сюда дочитал, за пост вида КакНарисоватьСову.jpg. Изначально он не планировался, поэтому не вся информация о процессе изготовления сохранилась. Но по крайней мере статья расскажет о подобных устройствах тем, кто не задумывался об их существовании. Еще несколько видео с этой железкой есть в этом плейлисте .

    Теги:

    • diy
    • 2dof
    • motion simulator
    Добавить метки