search icon search icon ВЕРСИЯ ДЛЯ СЛАБОВИДЯЩИХ

Инженерный тур. 3 этап

Общая информация

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

Легенда задачи

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

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

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

Требования к команде и компетенциям участников

Количество участников в команде: 3–4 человека.

Роли, которые должны быть представлены в команде:

  1. тимлид — роль;
  2. программист, разработчик;
  3. 3D-дизайнер;
  4. UX/UI-дизайнер;
  5. геймдизайнер.
Оборудование и программное обеспечение

Рабочая станция:

  • компьютер,
  • монитор,
  • клавиатура,
  • мышь.

Убедиться, что на столах можно работать с мышью без коврика.

Минимальные требования:

  • ОС: Windows 7 SP1, Windows 8.1 (или выше), Windows 10.
  • Процессор: Intel Core i5-4590/AMD FX 8350 (эквивалент или лучше).
  • Оперативная память: ОЗУ 4Gb или больше.
  • Видеокарта: NVIDIA GeForce GTX 970, AMD Radeon R9 290 (эквивалент или лучше).

Рекомендованные требования:

  • ОС: Windows 10, 11.
  • Процессор: Intel Core i5-4590/AMD FX 8350 (эквивалент или лучше).
  • Оперативная память: ОЗУ 4Gb или больше.
  • Видеокарта: NVIDIA GeForce GTX 1070/Quadro P5000 (эквивалент или лучше), AMD Radeon Vega 56 (эквивалент или лучше).

Обязательные требования:

  • DisplayPort 1.2 или более новая модель (если шлем HTC Vive).

VR-оборудование:

  • Шлем HTC Vive Cosmos предоставлялся участникам на площадке.
  • Другие модели HTC, которые могут подойти: HTC Vive или HTC Vive Pro.
  • Также подойдут Pico 4, Oculus Quest 2, 3 и аналогичные модели.
Наименование Описание

Рабочая станция: компьютер, монитор, клавиатура, мышь

ОС: Windows 10, 11

Процессор: Intel Core i5-4590/AMD FX 8350 (эквивалент или лучше)

Оперативная память: ОЗУ 4Gb или больше

Видеокарта: NVIDIA GeForce GTX 1070/Quadro P5000 (эквивалент или лучше), AMD Radeon Vega 56 (эквивалент или лучше)

Обязательно:

DisplayPort 1.2 или более новая модель (если шлем HTC Vive)

Рабочая станция для разработки VR-проекта и запуска VR-приложения
Шлем виртуальной реальности HTC Vive Cosmos Шлем виртуальной реальности для тестирования и демонстрации VR-проекта
Игровой движок Unity, Unreal Engine, Godot Игровой движок для реализации VR-проекта

MS Visual Studio Community 2022 (C#, Unity)

MS Visual Studio Code

IDE и текстовые редакторы для программирования, для удобного написания кода
Blender3D 3D-редактор для моделирования, текстурирования и анимаций
Git, Fork Для обеспечения версионности проекта и организации командной работы участников
Steam (+SteamVR), Viveport Для корректной работоспособности VR на базе OpenXR
Описание задачи

В этом разделе выделены подразделы, посвященные отдельным этапам решения задачи или подзадачам.

Этап 1 / Подготовительный этап

Перед началом работ требуется создать sample-проект, настроенный для работы с VR, и разместить репозиторий с этим проектом на GitHub (https://github.com/).

В качестве git-клиента можно использовать любой удобный: https://git-scm.com/download/gui/windows.

Необходимо зарегистрироваться и/или авторизироваться на сайте https://github.com/. Можно использовать уже существующий аккаунт или создать новый.

Примечание

При регистрации новых аккаунтов из России на почту в доменном имени .ru могут не приходить письма с кодом подтверждения. Рекомендуем использовать почты, отличные от вышеупомянутых (например, почта Google).

Этап 2 / Общее описание

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

Прохождение симулятора должно обеспечиваться посредством использования VR-гарнитуры, контроллеров и ввода с клавиатуры (геймпада). Перемещение должно осуществляться за счет физического перемещения в реальном мире и возможности телепортации (либо виртуальной ходьбы) по сцене с использованием контроллеров. пользователь не должен падать и/или проходить сквозь стены, пол и другие объекты, обладающие физическими границами (коллайдерами).

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

Этап 2 / Загрузочная локация

После запуска приложения пользователь оказывается в некоторой сцене, которую называют загрузочной локацией. Она представляет собой замкнутое и ограниченное пространство, по которому пользователь может свободно перемещаться посредством телепортации или виртуальной ходьбы. В локации могут быть расположены различные интерактивные элементы для наполнения, с которыми он может взаимодействовать (например, брать в руки какие-нибудь предметы и т. п.). Основным же на загрузочной локации является некоторый объект, взаимодействие с которым приводит к загрузке нужной сцены с определенными параметрами, если такие имеются.

Сама локация, как и объект, отвечающий за загрузку, могут быть выполнены в любом стиле и функционале. В качестве примера, который можно реализовать в проектах, приложено изображение загрузочной локации из решения жюри (см. рис. 5.1 — 5.3). В качестве объекта загрузки реализован приемник дискет. Каждая дискета содержит информацию о загружаемой сцене и передаваемых параметрах (вариации генерируемых карт и трасс). После вставки дискеты она плавно задвигается в приемник, и происходит загрузка сцены.

Переход между локациями

Все локации должны представлять собой отдельные сцены (а не находиться в одной сцене с загрузочной локацией и включаться/выключаться по скрипту), на которые загружается пользователь. Переход между сценами может быть реализован моментально или с помощью техники плавного перехода (например, уход в черное и затем плавное появление из черного уже на другой сцене).

Выход из приложения

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

Стилизация

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

Оценивание загрузочной локации

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

Реализация любых плавных переходов приносит баллы, реализация художественно сложного эффекта (glitch и т. п.) оценивается дополнительными баллами.

Звуки

В локацию необходимо добавить звуки окружения, соответствующие его стилю.

Рис. 5.1. Компьютер, принимающий дискеты с локациями

Рис. 5.2. Вставка дискеты в компьютер

Рис. 5.3. Загрузочная локация

Этап 3 / Локация 1: автодром для категорий D и CE

Краткое описание

Требуется разработать локацию, представляющую собой закрытую тренировочную автомобильную площадку (далее — автодром), на которой будет выполнена симуляция механики управления сложными транспортными средствами — пассажирским автобусом (категория D) и грузовиком-тягачом с многотонным полуприцепом. Сцена представляет собой «песочницу», в которой пользователь будет самостоятельно отрабатывать свои навыки управления и следить за корректностью действий.

Описание площадки

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

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

Описание автобуса

Автобус представляет собой транспортное средство (рис. 5.4), предназначенное для перевозки пассажиров в количестве 9 или более человек. Требуется разработать 3D-модель автобуса и реализовать его функционал, в котором присутствуют следующие элементы:

  • Минимальная длина ТС — 7 м.
  • Минимальное количество пассажирских сидений — 20.
  • ТС имеет четыре колеса. Два передних являются рулевыми.
  • У автобуса должны присутствовать две входные двери с правой стороны. Одна — у водительского сиденья, другая — примерно посередине. Сам пользователь садится в автобус через переднюю дверь.
  • В транспортное средство можно сесть за руль и выйти из него.
  • Перед водительским сиденьем должен находиться руль, а также рычаг переключения передач.
  • Руль должен иметь возможность вращаться с помощью одной или двух рук вокруг оси поворота на 1080° (540° в правую сторону и 540° в левую — соответствует 1,5 оборотам руля в каждую сторону). Поворот колес непосредственно связан с поворотом руля по любому удобному закону (от простых линейных преобразований до связи через углы Аккермана).
  • Транспорт может обладать механической или автоматической коробкой переключения передач:

    • В случае реализации МКПП она представляет собой 5-ступенчатую коробку с переключением на заднюю передачу. ТС трогается только при снятии его с ручного тормоза и включении передачи. При достижении предельного числа оборотов ТС перестает набирать скорость и ждет переключения. Задняя передача позволяет двигаться в противоположном направлении.
    • В случае реализации АКПП она представляет собой набор 4 состояний — P, R, N, D. P — парковка, ТС не двигается. R — задняя передача, ТС движется в противоположном направлении. N — нейтральная передача, ТС продолжает двигаться по инерции, обороты не набираются. D — ТС движется в прямом направлении.
    • Рычаг КПП должен быть реализован при помощи виртуального рычага (не кнопки на контроллерах).
  • Приборная панель имеет спидометр (цифровой или аналоговый) и показывает текущую скорость в километрах в час.
  • У ТС имеется минимум два зеркала — одно расположено в передней части слева, другое — справа. Зеркала показывают изображение, которое мог бы увидеть водитель, находясь в точке их расположения и смотря назад. Дополнительно можно устанавливать и другие зеркала.
  • Разгон ТС осуществляется при помощи нажатия на trigger button правого контроллера, торможение — на trigger button левого (рис. 5.5).
  • Передние колеса должны быть вынесены внутрь от переднего края ТС минимум на 20% его длины. Аналогично для задних колес и заднего края.
  • Поведение ТС должно быть приближено к реальному (быстрота разгона и торможения, поворачиваемость).
  • Находясь внутри ТС, пользователь может отрегулировать свое положение относительно ТС (подвинуться к рулю или отодвинуться от него, подняться или опуститься на кресле, подвинуться вправо или влево). При регулировке необходимо, чтобы пользователь не покидал границы ТС и не проходил сквозь них.

Рис. 5.4. Пример пассажирского автобуса

Рис. 5.5. Trigger button правого контроллера

Описание тягача с полуприцепом

Рис. 5.6. Пример грузовика-тягача с полуприцепом

Тягач с полуприцепом представляет собой грузовое транспортное средство (см. рис. 5.6), предназначенное для перевозки больших грузов. Требуется разработать 3D-модель тягача и полуприцепа и реализовать их функционал, в котором присутствуют следующие элементы:

  1. Минимальная длина ТС вместе с полуприцепом — 20 м.
  2. Пользователь садится в автомобиль со стороны руля.
  3. Тягач имеет 4 или 6 колес на выбор, два передних являются рулевыми, остальные являются задними, полуприцеп имеет 6 или 12 колес — все расположены рядом друг с другом на задней оси автомобиля.
  4. Выполняются пункты 5, 6, 7, 8, 9, 10, 11, 14 из подраздела Описание автобуса.
  5. На приборной панеле необходимо выводить информацию о прикрепленности прицепа к тягачу.
  6. Изначально тягач расцеплен с полуприцепом, сцепка осуществляется автоматически при сдаче тягача назад по направлению к полуприцепу и попаданию фаркопом в область крюка полуприцепа; расцепка осуществляется при нажатии на предназначенную для этого кнопку — может быть как виртуальной, так и на контроллере.
  7. Поведение ТС должно быть приближено к реальному (быстрота разгона и торможения, поворачиваемость). Поведение полуприцепа также приближено к реальному, при подключении прицепа тягач заметно снижает свою скорость, прицеп «заламывает» при движении назад.

Описание испытаний на площадке

При сдаче экзамена на категорию D проводятся следующие испытания:

  • Постановка транспортного средства на место стоянки параллельно краю проезжей части при движении задним ходом («Параллельная парковка»).
  • Левый и правый поворот на 90°.
  • Разворот транспортного средства в ограниченном пространстве с использованием движения задним ходом.
  • Маневрирование в ограниченном пространстве («Змейка»).
  • Постановка транспортного средства на место стоянки при движении задним ходом с поворотом на 90° («Заезд в бокс» или «Гараж»).

При сдаче экзамена на категорию CE проводятся следующие испытания:

  • Сцепление и расцепление прицепа с тягачом.
  • Прямолинейное движение задним ходом и парковка для погрузки (разгрузки) на погрузочной эстакаде.
  • Постановка транспортного средства на место стоянки параллельно краю проезжей части при движении задним ходом («Параллельная парковка»).
  • Постановка транспортного средства на место стоянки при движении задним ходом с поворотом на 90° («Заезд в бокс» или «Гараж»).

С видеороликами выполнения данных элементов на автодроме можно ознакомиться по ссылкам: https://disk.yandex.ru/i/pL5reEc8nRkyxw, https://disk.yandex.ru/i/MrT16j49eQbFww.

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

Каждый конус должен обладать физическими свойствами, реагировать на воздействие других физических объектов, а также иметь возможность быть взятым в руки.

Стилизация

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

Звуки

В локации необходимо реализовать следующие звуковые эффекты:

  1. Звук мотора — реалистичное воспроизведение работы двигателя, зависящее от оборотов.
  2. Звук переключения передач — отчетливые звуки смены передач (независимо от выбранной КПП).
  3. Звук заднего хода — характерный звуковой сигнал при включении задней передачи.
  4. Звук сцепления грузовика с полуприцепом — звук сцепки и расцепки прицепа с грузовым автомобилем.
  5. Окружение — звуки окружающей среды (ветер, другие автомобили, шум города) с приглушением при посадке в транспортное средство.

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

Этап 2 / Локация 2: дрифт в горах

Краткое описание

Данная локация представляет собой участок асфальтированной дороги, которая спускается «серпантином» вниз по склону и проходит через хвойный массив. На протяжении пути дорога несколько раз круто меняет направление. Это делает ее привлекательной для дрифта — техники прохождения поворотов, характеризующейся использованием управляемого заноса на максимально возможных для удержания на трассе скорости и угла к траектории.

Описание окружения

Склон горы с хвойным участком леса, через который проходит трасса, представляет собой местность площадью минимум 1 км\(^2\). Перепад высот между началом трассы и ее концом составляет минимум 100 м.

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

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

Дорога проходит «серпантином» по этому склону, спускаясь сверху вниз и меняя направление движения почти на 180°. Необходимо спроектировать не менее пяти таких крутых поворотов. Между этими поворотами дорога не обязательно является прямой и может немного изгибаться.

Рис. 5.7. Пример дороги

Дорога должна быть согласована с геометрией ландшафта и ложиться на него без больших зазоров и ям. Сам ландшафт, деревья, кустарники и прочие объекты не должны заходить на дорогу или торчать из нее. Начальный и конечный участок дороги должны быть скрыты от пользователя за каким-нибудь поворотом, которые не входят в число 5 крутых поворотов. Ширина дороги, количество полос и прочие параметры произвольны.

Дополнительно вдоль маршрута могут быть размещены другие дорожные элементы — арочные конструкции мостов, лееры, туннели и т. п.

Описание автомобиля для дрифта

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

  1. Выполняются пункты 3, 5, 6, 8, 9, 10, 11, 13, 14 из подраздела Описание автобуса (локация 1).
  2. Руль должен иметь возможность вращаться с помощью одной или двух рук вокруг оси поворота на 360°, 720° или 1080° (по половине градусов в правую и левую сторону) на усмотрение участников. Поворот колес непосредственно связан с поворотом руля по любому удобному закону (от простых линейных преобразований до связи через углы Аккермана).
  3. Необходимо, чтобы автомобиль мог легко войти в управляемый занос. Для этого он может приводиться в это состояние при помощи «раскачки» — быстрой смены направления движения от левого края к правому или аркадно с помощью условной «кнопки для дрифта» — переключателя, после которого машину начинает заносить. Переключатель может быть реализован физически с помощью виртуального рычага или с помощью нажатия кнопок на контроллере.

Примечание

Ключевое свойство заноса — это управляемость; хотя бы один из участников команды должен продемонстрировать навык постановки ТС в занос, управления и выхода из него.

Сценарий

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

Стилизация

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

Во время дрифта машина должна оставлять следы от шин на асфальте, и из-под колес должен выходить дым.

Звуки

В локации необходимо реализовать следующие звуковые эффекты:

  • Звук мотора — реалистичное воспроизведение работы двигателя, зависящее от оборотов.
  • Звук переключения передач — отчетливые звуки смены передач (независимо от выбранной КПП).
  • Звук выпуска воздуха турбины через клапан — см. stututu.
  • Звук скрипа резины — звук, который возникает из-за трения шины о поверхность дороги.
  • Окружение — звуки окружающей среды (ветер, звуки природы), с приглушением при посадке в транспортное средство.

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

Этап 3 / Локация 3: апексные гонки кубка «Большого поршня»

Краткое описание

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

Описание гоночного трека и окружения

Рис. 5.8. Пример красно-белой линии на внутренних дугах окружностей поворотов

Трек представляет собой замкнутую асфальтированную дорогу, состоящую из отрезков прямых, соединенных поворотами, внешний и внутренний края которых являются дугами окружностей. Ширина трека составляет 8–10 м, протяженность — 3–5 км, минимальное количество нетривиальных поворотов — 10.

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

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

Слева от направления движения по треку должны располагаться несколько зрительских трибун, а также главный символ соревнований — золотая статуя «Большого поршня». 3D-модель данной статуи является решением задачи D «Поршень» отборочного командного этапа НТО (https://disk.yandex.ru/d/868OQS9I7VADQw).

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

Рис. 5.9. Пример гоночной арки

На поле, на котором расположен трек, вдоль отрезков прямых должны размещаться деревья. Граница карты должна быть скрыта от пользователя путем размещения высоких гор вокруг поля и густого леса перед ними.

Все элементы сцены должны иметь физические границы (коллайдеры).

Описание гоночного автомобиля

Гоночный автомобиль представляет собой транспортное средство, предназначенное для автомобильный соревнований (массовых гонок, установления рекордов скорости). Требуется разработать 3D-модель гоночного автомобиля и реализовать его функционал, в котором присутствуют следующие элементы:

  1. Выполняются пункты 3, 5, 9, 10, 11, 13, 14 из подраздела Описание автобуса (локация 1).
  2. Перед водительским сиденьем должен находиться руль.
  3. пользователь садится в автомобиль со стороны руля.
  4. Руль представляет собой гоночный штурвал, который имеет возможность вращаться с помощью одной или двух рук вокруг оси поворота на 360° (180° в правую сторону и 180° в левую — соответствует 0,5 оборотам руля в каждую сторону). Поворот колес непосредственно связан с поворотом руля по любому удобному закону (от простых линейных преобразований до связи через углы Аккермана). За штурвал можно браться только со стороны ручек.

Рис. 5.10. Пример гоночного штурвала

Сценарий

После появления пользователь оказывается в закрытом боксе с гоночной машиной. При посадке в ТС двери гаражного бокса открываются автоматически.

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

  • После прогрева на тренировочном или разминочном круге нужно подъехать к стартовой линии. Все светофоры в этот момент горят красным.
  • Как только светофоры загорятся желтым, требуется выполнить полную остановку транспорта.
  • После полной остановки автомобиля желтые огни пропадают, и последовательно, с небольшим интервалом, слева направо красным цветом загораются огни верхнего ряда.
  • Через некоторое время (которое при каждом запуске должно быть — от 0,5 до 2 с) нижний ряд должен загореться зеленым, а верхний погаснуть, что будет означать запуск таймера, определяющего время прохождения трека.
  • Если пользователь выйдет за стартовую линию в любой момент времени от второго до четвертого пункта или нажмет на газ, то светофор всеми красными огнями мигает три раза и загорается красным — пользователю придется снова начать выполнять действия в последовательности, необходимой для старта прохождения трека. Для этого он должен развернуться и подъехать к старту заново через разминочное кольцо за питбоксами.

После начала заезда пользователю необходимо пройти гоночный трек за минимальное время. Моментом финиша является пересечение стартовой линии. Для того чтобы не иметь возможности объехать линию старта по полю и финишировать нечестно, нужно разработать систему чекпоинтов. В центре каждого прямого участка (кроме стартового) следует разместить зону, проезжая которую будет считаться, что автомобиль был на этой дороге. Если к моменту финиша все чекпоинты были пройдены, то при пересечении стартовой линии таймер останавливается — иначе продолжается до момента, пока не будут пройдены все чекпоинты и снова не пересечена стартовая линия.

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

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

Через некоторое время после финиша пользователя автоматически возвращает в загрузочную локацию.

Вариация и генерация треков

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

Изначально на сцене отсутствуют любые элементы окружения (дороги, боксы, заборы, деревья и т. п.). При загрузке сцены после выбора трека должна производиться его динамическая генерация из файла формата .txt, где записаны параметры этого трека. Формат входных данных в точности соответствует формату в задаче «Апексные гонки» второго отборочного этапа НТО ТВР.

Описание файла с параметрами трека

В первой строке файла находятся четыре числа \((x_1, y_1, x_2, y_2)\) — координаты переднего правого и левого заднего колеса автомобиля соответственно.

Вторая строка содержит число \(w\) — ширину трека.

В третьей строке даны два числа \((x_f, y_f)\) — координаты финиша.

В четвертой строке находится число \(n\) — количество поворотов.

В следующих \(n\) строках находятся по три числа \((X_i, Y_i, R_i)\) — координаты поворота в прямолинейной траектории и внешний радиус поворота.

Необходимо динамически построить трассу, заданную этими параметрами. Кроме того, следует вывести поверх трека «оптимальную» гоночную траекторию, которая тоже соответствует условию задачи «Апексные гонки».

Стилизация

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

Звуки

В локации необходимо реализовать следующие звуковые эффекты:

  • Звук электронного мотора — реалистичное воспроизведение работы двигателя, зависящее от оборотов.
  • Звук скрипа резины — звук, который возникает из-за трения шины о поверхность дороги.
  • Музыка — во время старта заезда должны заиграть динамичная музыка, соответствующая настроению гонки.
  • Звук ветра, усиливающийся с набором скорости.
  • Окружение — звуки окружающей среды (ветер, природа и т. д.) с приглушением при посадке в транспортное средство.

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

Дополнительное задание

В качестве дополнительного задания предлагается создать пустую сцену, которая не будет связана с основным проектом и на которой отдельно будет реализовано только считывание и построение гоночный трассы вместе c апексной траекторией. Задание сдается отдельно и проверяется на подготовленных тестах — файлах input.txt, полностью соответствующих описанию из задачи «Апексные гонки» второго отборочного командного этапа НТО ТВР.

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

Этап 4 / Локация 4: автопилот параллельной парковки

Краткое описание

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

Описание города

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

Рис. 5.11. Крестообразный перекресток (обычный)

Рис. 5.12. Т-образный перекресток

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

  • Два светофора на противоположных дорогах загораются красным, другие два — зеленым.
  • Сторона, которая загорелась красным, продолжает гореть в течение X — 2 с, где X — время первой части цикла.
  • Затем на этой стороне загорается желтый и горит вместе с красным оставшиеся 2 с.
  • В свою очередь сторона, которая загорелась зеленым, продолжает гореть в течение X — 6,5 с.
  • Затем на этой стороне зеленый выключается, ожидает 0,75 с, включается обратно и снова горит 0,75 с. Процедура повторяется три раза, происходит мигание зеленого.
  • Зеленый гаснет, на оставшиеся 2 с зажигается желтый.
  • По истечении X c с начала работы все светофоры гаснут и меняют цвета горения.
  • Процедура повторяется для нового времени работы Y с точностью до смены сторон.

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

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

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

Описание беспилотного автомобиля

Беспилотный автомобиль представляет собой транспортное средство, в котором отсутствует водительское место с рулем и педалями. Транспорт оборудуется только пассажирскими местами. Требуется разработать 3D-модель беспилотного автомобиля и реализовать его функционал, в котором присутствуют следующие элементы:

  1. Выполняются пункты 3, 14 из подраздела Описание автобуса (локация 1).
  2. В ТС можно сесть на одно или несколько пассажирских сидений.
  3. Поведение ТС должно быть приближено к реальному (быстрота разгона и торможения, поворачиваемость).
  4. Минимальное количество пассажирских мест — 2.
  5. ТС должно быть оборудовано экраном для просмотра видеороликов.
  6. В ТС должна быть расположена кнопка вызова миникарты.

Сценарий

После загрузки сцены в любом месте на случайном прямом отрезке дороги с правой стороны должны появиться припаркованный к обочине автомобиль и пользователь. Цель — добраться до некоторого произвольного отрезка прямой, который выбирает пользователь. Подойдя к двери, он садится на пассажирское место. На видеоплеере в ТС требуется реализовать цикличное воспроизведение любого видеоролика (со звуком или без).

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

Описание миникарты

Миникарта представляет собой схематичное изображение дорог и зданий. У пользователя должна быть возможность двигать миникарту, вращать ее и приближать/отдалять. На миникарте отмечена машина, в которой находится пользователь. Затем необходимо выбрать отрезок прямой дороги, до которой требуется добраться, после чего на миникарте появляется оптимальный маршрут — поиск маршрута необходимо реализовать с помощью любых алгоритмов (алгоритм Дейкстра, A* и т. п.). Для этого можно воспользоваться своими наработками из решения задачи  «Таксую для души» второго отборочного командного этапа НТО ТВР.

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

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

Симуляция трафика

После начала движения автомобиля пользователя необходимо запустить трафик, который будет кататься по городу. Каждая машина следует по какому-либо случайному маршруту. Машины трафика не должны сталкиваться между собой и с машиной пользователя. На перекрестках все автомобили должны разъезжаться таким образом, чтобы движение не блокировалось и не образовывались заторы. Плотность трафика произвольная.

Вариация и генерация городов

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

Изначально на сцене отсутствуют любые элементы окружения (дороги, перекрестки, светофоры, машины трафика, здания и прочее). При загрузке сцены после выбора города должна производиться его динамическая генерация из файла формата .json, где записаны параметры этого города.

Описание файла с параметрами города
Перекрестки (crossroads):

  • id — идентификатор перекрестка;
  • center — координаты перекрестка;
  • up, down, left, right — наличие примыкающей дороги по направлению движения;
  • trafficLight1, trafficLight2 — продолжительность циклов светофоров (\(X\) и \(Y\) из описания работы светофоров).

Дворы — пространства, ограниченные со всех сторон дорогами, подлежащие заполнению домами (blocks):

  • left — левый нижний угол;
  • right — правый верхний угол.

Рис. 5.13. Схема JSON

Примечание

В указанной схеме JSON поворот является перекрестком.

Стилизация

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

Звуки

В локации необходимо реализовать следующие звуковые эффекты:

  • Звук электрического мотора — реалистичное воспроизведение работы двигателя, зависящее от оборотов.
  • Окружение — звуки окружающей среды (ветер, другие машины, звуки города), с приглушением при посадке в транспортное средство.

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

Дополнительное задание

В качестве дополнительного задания предлагается создать пустую сцену, которая не будет связана с основным проектом и на которой отдельно будет реализовано только считывание и построение города целиком: дороги, тротуары, здания, перекрестки и светофоры, согласно описанию выше. Задание сдается отдельно и проверяется на подготовленных тестах — файлах input.json, полностью соответствующих описанию из подраздела Описание файла с параметрами города.

Оценивается качество генерации путем визуального сравнения с эталонным решением (касается взаимного расположения дорог), корректность построения и размещения всех объектов. Подробно процедура сдачи проекта описана в разделе Оценивание работ.

Этап 5 / Квадрокоптер

Краткое описание

Квадрокоптер представляет собой небольшой беспилотный летательный аппарат с камерой, с помощью которой можно наблюдать за происходящим на местности.

Описание

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

  • Кнопки (или стик), отвечающие за взлет и снижение квадрокоптера.
  • Кнопки (или стик), отвечающие за вращение квадрокоптера вокруг своей оси по и против часовой стрелки (рысканье).
  • Кнопки (или стик), отвечающие за наклон квадрокоптера на правый или левый бок (крен).
  • Кнопки (или стик), отвечающие за наклон квадрокоптера вперед и назад (тангаж).

Рис. 5.14. Взлет и снижение дрона

Рис. 5.15. Рыскание

Рис. 5.16. Крен

Рис. 5.17. Тангаж

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

Режимы камеры

Требуется реализовать возможность переключения между двумя режимами управления камерой. В первом режиме камера жестко прикреплена к раме квадрокоптера и повторяет все его движения. Второй режим подразумевает стабилизацию наклона при тангаже и крене квадрокоптера (симуляция двухосевого стабилизационного подвеса). При нахождении во втором режиме должна быть реализована возможность наклона камеры в плоскости тангажа от положения «параллельно горизонту» до «перпендикулярно горизонту».

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

Использование в проекте

Механика использования квадрокоптера должна быть применена в локациях 1 «Автодром для категорий D и CE» и 3 «Апексные гонки кубка “Большого поршня”».

Плавающий интерфейс

Краткое описание

Необходимо разработать пространственный пользовательский интерфейс, которым управляют из VR и который плавно следует за движением головы.

Описание интерфейса

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

  1. за возвращение в загрузочную локацию;
  2. за перезагрузку сцены;
  3. за закрытие интерфейса и возвращение к сцене.

По желанию в интерфейс могут быть добавлены другие необходимые элементы управления.

Интерфейс должен появляться и исчезать перед пользователем по нажатию какой-либо кнопки на контроллере. Когда интерфейс активен, он должен плавно и с задержкой следовать за взглядом пользователя.

Механизм следования полностью соответствует задаче «Плавающие интерфейсы VR» . Можно использовать свои наработки при реализации.

Взаимодействие с интерфейсом происходит посредством касания его элементов виртуальной рукой либо с помощью виртуальной указки путем наведения и нажатия кнопки на контроллере.

Использование в проекте

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

Сборка и интеграция с LIV

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

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

Рис. 5.18.

LIV

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

Рис. 5.19. Пример применения техники наложения изображения в игре Beat Saber

Для того чтобы была возможность демонстрировать свой проект в таком режиме, необходимо добавить и настроить в проекте пакет LIV. LIV SDK поддерживает только Unity (кроме HDRP) и Unreal Engine.

Инструкция для Unity

  1. Скачайте файл unitypackage по ссылке: https://drive.google.com/file/d/1gL_iHc31pONK3jQhilx4FWyPQJId_vhF/view?usp=sharing.
  2. Сделайте резервную копию своего проекта (сделайте коммит, если используете систему контроля версий).
  3. Добавьте пакет в ваш проект.
  4. Добавьте в каждую сцену компонент LIV.
  5. В поле HMD Camera добавьте камеру игрового персонажа.
  6. В поле Stage добавьте родительский объект игрового персонажа.

Если вы используете Universal Render Pipeline, то дополнительно выполните следующее:

  1. Найдите File / Build Settings / Player Settings / Other Settings / Scripting Define Symbols.
  2. Введите: LIV_UNIVERSAL_RENDER.
  3. Найдите свои Forward Renderer Assets в Unity проекте. Примечание: в проекте могут быть несколько таких ассетов. Убедитесь, что выполняете действия для всех используемых ассетов, которые участвуют в сценах с LIV.
  4. Добавьте SDK Universal Render Feature после Renderer Features.
  5. На добавленных на сцены компонентах LIV включите Fix Post-Effects alpha channel.

Инструкция для Unreal Engine

  1. Скачайте архив zip по ссылке: https://drive.google.com/file/d/1OVCDsRAFQyT5mM8AeymAuhGBQ2STqg1o/view?usp=drive_link и распакуйте его.
  2. Скопируйте папку LIV в папку Plugins в директории проекта. Создайте эту папку, если ее еще не существует.
  3. Если проект до сих пор не поддерживает C++, добавьте эту возможность, выбрав в Tools пункт New C++ Class.

    Рис. 5.20.

  4. Перегенерируйте решение Visual Studio для своего проекта. Чтобы это сделать, нажмите ПКМ по своему .uproject файлу, затем выберите Generate Visual Studio project files.

    Рис. 5.21.

  5. Откройте решение Visual Studio (.sln) и убедитесь, что LIV загружен в обозреватель решения.

    Рис. 5.22.

  6. Запустите Unreal Editor для проекта через Visual Studio, выбрав Build and Run проекта для запуска редактора. Можно нажать F6 или кнопку, изображенную на рис. 5.23:

    Рис. 5.23.

  7. Убедитесь, что плагин LIV загружен в окне Plugins (Edit — Plugins).

    Рис. 5.24.

Система оценивания

Каждой команде будет разослана таблица с критериями (https://disk.yandex.ru/i/ItdOc6Yz_lovzg).

Все критерии делятся на 4 типа (категории):

  1. Критерии, которые проверяются без участников: на сдачу отводится ровно одна попытка.
  2. Критерии, которые проверяются без участников: на сдачу дается несколько попыток; результаты сообщаются участникам с комментариями жюри (при наличии), в зачет идет лучшая попытка.
  3. Критерии, которые проверяются с участниками с момента старта турнира по оговоренное время финального дня — отводится ровно одна попытка на сдачу.
  4. Критерии, которые проверяются только в финальный день с оговоренного момента времени, отводится ровно одна попытка на сдачу.

Каждому критерию присвоена его категория.

Порядок сдачи критериев

Критерии категории 1 — это разработка различных 3D-моделей, локаций, окружений и прочего. Для их сдачи нужно проделать следующие шаги:

  1. Каждая команда заводит облачное хранилище на любом из удобных ей сервисов и размещает ссылку на него в readme репозитория. Другой вариант: команда может завести папку для сдачи всех критериев данной категории в корне проекта и создать отдельную ветку, в которую будет сдавать их.
  2. Команда создает папку, соответствующую некоторому критерию.
  3. Важно: если работа была выполнена самостоятельно, то участники должны прикрепить доказательства (не менее 5 скриншотов последовательных стадий разработки с отметками о времени, или не менее 3 различных версий файла, или папка .git с не менее 3 коммитов, и прочие подобные средства). В противном случае будет считаться, что ресурсы были найдены в интернете, и оцениваться соответственно (см. следующий пункт).
  4. Если участники нашли ресурс в сети интернет (или сгенерировали с помощью искусственного интеллекта), то следует прикрепить ссылку на ресурс. Ресурс должен быть в открытом доступе — его можно скачать и/или использовать либо без авторизации, либо с помощью любого бесплатного аккаунта. В таком случае критерий оценивается в половину баллов. Если жюри не удастся получить этот ресурс, работа оценивается в 0 баллов.
  5. Команда должна сообщить в чате в разделе «Сдача критериев» о том, что у нее есть критерии категории 1 с указанными номерами в очереди на проверку.

Критерии категории 2 — это два дополнительных задания на проверку с тестами. Количество попыток для сдачи — 5. Для их сдачи нужно проделать следующие шаги:

  1. Команда заводит ветку в репозитории, в которой есть сцена для сдачи на проверку.
  2. Команда должна сообщить в чате в разделе «Сдача критериев» о том, что у нее есть критерии категории 2 с указанными номерами в очереди на проверку.
  3. По окончании проверки участникам сообщается результат попытки. Лучший результат идет в зачет.

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

  1. Команда выполняет коммит в ветку master/main с их проектом, в котором содержатся все критерии, которые участники собираются защищать.
  2. Команда должна сообщить в чате в разделе «Сдача критериев» о том, что у нее есть критерии категории 3 с указанными номерами в очереди на проверку. Минимальное количество критериев для сдачи за один раз — 6, максимальное в день — 18.
  3. Когда подойдет очередь команды, на защиту приглашается ее член. Менять человека для сдачи следующей группы критериев можно, внутри одной сдачи — нет. Участник рассказывает и демонстрирует работу (на компьютере и в VR-гарнитуре), которая была выполнена, после чего члены жюри надевают VR-гарнитуру и также оценивают критерии.
  4. Участнику показывается результат оценки, он вправе оспорить его, предъявив необходимые аргументы, однако результат может измениться в любую сторону или остаться неизменным.
  5. Защита завершается, участник возвращается к команде.

Критерии категории 4 — это финальные критерии, которые, как правило, направлены на общую работу команды, целостность проекта и т. д. Все критерии категории 4 принимаются за один раз после завершения работ над проектами.

Порядок защит:

Для сдачи критериев категории 1 и 2 команды могут в течение всего отведенного времени подавать список в очередь на проверку. Критерии проверяются без участия команды, результаты доступны сразу после проверки.

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

Для сдачи критериев категории 4 по окончании турнира формируется очередь команд на сдачу путем жеребьевки.

Все команды удаляются из площадки проведения и приглашаются по одной для защиты. Защита завершается, команда покидает площадку.

Для всех очных сдач участники рассказывают и демонстрируют работу (на компьютере и в VR-гарнитуре), которая была выполнена, после чего члены жюри надевают VR-гарнитуру и оценивают критерии. Участникам показывается результат оценки, они могут оспорить его, предъявив необходимые аргументы, однако результат может измениться в любую сторону или остаться неизменным.

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

Каждый судья оценивает критерии независимо друг от друга. Итоговый балл является средним по всем судьям.

Решение задачи

Результат сборки решения: https://disk.yandex.ru/d/BK8_ERhX0se3eg.

Репозиторий с проектом: https://gitlab.com/nto-vr/2025/vr-project-solution.

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

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

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

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

Это же касается и работы с 3D-моделями и окружением — поскольку скачанные ассеты оцениваются в половину баллов, имеет смысл не затрачивать время на разработку достаточно сложных моделей — оптимальной стратегией будет моделирование большого количества несложных моделей самостоятельно для получения полных баллов за них и нахождение готовых объектов, которые оцениваются в половину.

Ресурсы для поиска различных ассетов: https://assetstore.unity.com/, https://sketchfab.com/.

Материалы для подготовки
  • Курс линейной алгебры (https://stepik.org/course/2461). Доступен на Stepik.

    • Способность разрабатывать и применять методы линейной алгебры.
  • Основы Git (https://stepik.org/course/3145). Доступен на Stepik.

    • Контроль за изменением проекта, способность быстрого восстановления проекта до последней рабочего состояния.
    • Способность управлять проектами, управлять командой проекта.
  • Программирование на C# (https://stepik.org/course/4143). Доступен на Stepik.

    • Способность к разработке и отладке программного кода.
    • Способность к тестированию программного обеспечения, к своевременному принятию мер по выявлению и устранению сбоев и отказов в работе программного обеспечения, ликвидации их последствий и восстановлению работоспособности.
  • VR-интенсив (https://stepik.org/course/4566). Доступен на Stepik.

    • Умение разрабатывать приложения под широкий спектр аппаратного обеспечения для виртуальной реальности.
    • Проектирование, разработка и сборка приложений виртуальной реальности в игровом движке Unity.
  • Официальный курс Unity (https://unity.com/ru/learn).

    • Умение работать со средой разработки Unity.
    • Использование встроенных инструментов среды разработки Unity.
    • Программирование на C# в контексте Unity.
  • Курс Unreal Engine (https://www.unrealengine.com/en-US/onlinelearning).

    • Применение алгоритмов вычислительной геометрии.
    • Программирование на C++ в контексте Unreal Engine.
    • Проектирование, разработка и сборка приложений виртуальной реальности в игровом движке Unreal Engine.
text slider background image text slider background image
text slider background image text slider background image text slider background image text slider background image