Привет, Хабр!
В последние годы технологии виртуальной реальности (VR) стремительно развиваются и находят применение в самых различных сферах. Одной из наиболее интересных и перспективных областей использования VR является создание симуляторов, которые могут значительно изменить подход к обучению и профессиональной подготовке. Сейчас все больше предприятий начинают использовать VR-тренажеры для обучения сотрудников работе с оборудованием, и это неудивительно! Специалисты из СберУниверситета провели исследование о положительном опыте использования VR-технологий для обучения персонала.
Что такое VR-тренажеры?
VR-тренажеры представляют собой системы, которые используют технологии виртуальной реальности для создания интерактивной среды, в которой пользователи могут тренироваться, обучаться или развлекаться. Они могут имитировать реальные условия, позволяя пользователям осваивать новые навыки в безопасной и контролируемой обстановке.
Преимущества VR-тренажеров
Иммерсивный опыт: VR-тренажеры обеспечивают высокий уровень погружения, что позволяет пользователям забыть о реальном мире и сосредоточиться на обучении. Это повышает мотивацию и концентрацию, а также делает занятия более увлекательными.
Безопасность: Виртуальная реальность позволяет пользователям практиковать сложные навыки или обучаться работе с опасным оборудованием без реальной угрозы травм.
Доступность: VR-тренажеры могут быть использованы в любое время и в любом месте, что делает их идеальным решением для сотрудников компании – проходить обучение можно прямо на рабочем месте.
В этой статье рассмотрим процесс разработки 3D-тренажера – от отрисовки 3D-моделей и их импорта в движок до используемых скриптов.
Процесс разработки 3D-моделей
Разработка любой 3D-модели происходит в несколько последовательных этапов, совокупность которых называется пайплайном. Единого эталонного пайплайна разработки 3D-моделей для игр (а именно такой нам и нужен, так как визуализация тренажера работает на игровом движке UNIGINE по схожим с VR-игрой принципам) нет – каждая компания сама определяет наиболее подходящие этапы, и ниже описаны те, которые использовались нами:
1. Концепция и планирование
Исследование начинается с изучения референсов моделируемого объекта. Референсом в общем смысле называют любое вспомогательное изображение: рисунок или фотографию, которые 3D-художник использует для представления того, как должен выглядеть моделируемый объект. В идеальном случае в качестве референсов мы использовали чертежи и техническую документацию, с подробным описанием габаритных размеров и расположения элементов. К сожалению, не всегда получается получить чертежи оборудования – тогда приходилось ориентироваться на фотографии, общие данные о размере и прикидывать пропорции на глаз.
2. Моделирование
Используя 3D-программное обеспечение (в нашем случае использовалась программа Blender), художник создает базовую геометрию модели.
Существует множество способов 3D-моделирования, специализированных под создание моделей для разных целей, и среди них можно выделить две основные категории, отличающиеся методами задания моделей: программы для инженерного моделирования и программы для полигонального моделирования.
В чем отличие между полигональным и инженерным моделированием?
САПР программы, применяемые для инженерного моделирования, используют математические формулы для задания геометрии, что позволяет моделировать объекты с очень высоким уровнем точности. Их особенностью является отсутствие полигональной сетки, что даёт возможность не думать о топологии во время процесса моделирования.
В полигональном моделировании, в отличие от инженерного, объекты строятся с использованием полигональной сетки — совокупности вершин, рёбер и граней, которые определяют форму и топологию многогранного объекта. Для простоты понимания – можете думать о полигонах, как о кирпичиках, только вместо стены дома они образуют собой любую поверхность 3D-модели.
Топология — это расположение полигонов, создающее некоторый путь по поверхности полигональной сетки.
Объекты с одной и той же формой могут иметь разную топологию, в зависимости от задачи модели. Например, если важна оптимизация — топология сильно упрощается, допускаются треугольники и н‑гоны (многоугольники) на плоскостях; если важна детализация и корректное отображение материалов — сетка должна быть равномерной и преимущественно состоять из квадов (четырехугольных полигонов).
Перед экспортом модели, необходимо привести ее к полигональному виду, поэтому даже используя инженерный метод моделирования (скажем в программе Компас) после модель все равно экспортируется в полигональный формат в программу Blender.
3. Ретопология
Это этап процесса 3D‑моделирования, на котором полигональная сетка объекта модифицируется или воссоздается заново для получения более простой и чистой топологии, при этом сохраняя форму модели максимально приближенную к исходной.
Зачем нужна ретопология? Ретопология — необходимый процесс, который в первую очередь призван облегчить вес модели через упрощение геометрии, а также подготовить модель для этапа текстурирования. Оптимизация — один из важнейших параметров для 3D‑модели для игр, необходимо соблюсти баланс между детальностью и весом, чтобы симуляция не только не тормозила, но и выглядела красиво.
Для примера: на картинке ниже представлена модель барботера, которая изначально была создана в САПР программе Компас. После экспорта модели в полигональный вид проявились недостатки экспорта модели из САПР программы в полигональный формат: неравномерная сетка, избыточное количество вершин и, как следствие, артефакты шейдинга. Для оптимизации сетки была сделана ретопология модели в программе полигонального моделирования — Блендер. Количество вершин с 85 тысяч опустилось до 18 тысяч, вес модели уменьшился примерно в 4,7 раз.
4. Текстурирование
Это процесс создания и наложения текстур на 3D-объект. Существует множество методов текстурирования, но для наших моделей применялись два основных: наложение уже существующей текстуры-изображения на UV развертку и процедурная генерация материала через систему нодов.
UV-развертка — это 2D-представление поверхности 3D-модели, которое позволяет правильно наложить текстуры. Этот процесс включает в себя разрезание модели на части и разворачивание их в плоскость. UV-развёртка отвечает за то, как именно будет наложена текстура на объект, и поэтому, в зависимости от назначения текстуры, развертку можно делать по-разному. Чтобы проще понять UV-развертку, ее можно сравнить с оберткой, в которую заворачивают конфету — после заворачивания все надписи и картинки на обертке выглядят так, как должны.
Процедурные материалы — материалы, сгенерированные алгоритмически через ноды — блоки, содержащие разные настраиваемые параметры, например цвет материала, физические характеристики поверхности (шероховатость, прозрачность, металличность и т. д.), визуальные неровности, параметры смешивания шейдеров и многое другое. При применении этого способа в последствии полученный материал необходимо запечь на UV‑развертку — то есть превратить его в 2D-текстуру, так называемую карту.
5. Добавление в игру
Модель экспортируется в формат, совместимый с используемым игровым движком (в нашем случае используется формат FBX).
Далее модель загружается в игровой движок, где ей настраиваются и дорабатываются материалы, визуальные эффекты и взаимодействие с другими элементами игры через скрипты.
Интеграция 3D-визуализации в тренажер
Для создания 3D-визуализации процессов в реальном времени, в проекте используется Unigine.
В нашем тренажере мы используем специальную «комнату разработчика» — пространство, где собраны все 3D-элементы. Именно здесь задаются скрипты, https://media.contented.ru/osnovy/napravleniya/level-dizayn-razrabotka-urovney-v-igrah/которые обеспечивают функциональность каждого объекта, от нажатия кнопок до загорания светодиодов.
На примере автоматического выключателя АП50Б (показан на изображении) можно увидеть, как реализованы базовые взаимодействия. В правой части отображены скрипты, назначенные для кнопок button off и button on.
Основные скрипты для работы элементов:
UIControl — задаёт тип и подтип элемента, определяя его дальнейший функционал.
CountNumber — задаем переменную, которая используется для связи с математической моделью.
OnClick — обеспечивает взаимодействие с элементом. Например, при нажатии кнопки обновлённое значение переменной передаётся в модель.
Дополнительно, на корневом элементе сцены используется скрипт ConISD, который получает данные из математической модели и обновляет состояние объектов в тренажере (например, поворот ключей или загорание индикаторов).
В современных тренажерах важно не только визуализировать процессы, но и обеспечивать точную связь с математическими моделями, которые управляют логикой системы. В нашем проекте этот процесс реализован через сетевое соединение и программный интерфейс.
Тренажер подключается к математической модели через сетевой протокол TCP/IP. Указывается IP-адрес и порт сервера модели. После успешного подключения запускается исполнительная программа модели. Для обмена данными между тренажером и моделью используются именованные переменные:
Чтение данных: Тренажер запрашивает значения переменных у модели, чтобы синхронизировать состояние.
Запись данных: Изменённые значения из тренажера передаются обратно в модель.
Тренажер регулярно обновляет данные, используя асинхронные задачи. Это позволяет в реальном времени получать актуальную информацию из модели, избегая задержек. Был создан удобный программный интерфейс, который позволяет добавлять новые переменные, легко управлять подключением и обрабатывать данные. Например, список переменных для обмена задаётся один раз, а дальше они автоматически обновляются. Если соединение разрывается или возникают ошибки, тренажер корректно завершает работу, освобождая ресурсы и предупреждая пользователя. Такая архитектура соединения позволяет тренажеру стать не просто визуализацией, но и активным участником вычислений. Это особенно важно в системах реального времени, таких как энергосистемы, где синхронность между моделью и тренажером критически важна.
По итогу, получаем визуально и функционально максимально приближенный к реальности 3D-тренажер, способный помочь оперативному персоналу в безопасном обучении работе с электрооборудованием.
В этой статье мы рассмотрели процесс разработки 3D-тренажеров на UNIGINE, начиная с полигонального моделирования и заканчивая интеграцией в VR. Мы узнали, как важно правильно выполнить ретопологию и текстурирование, а также как настроить скрипты для взаимодействия с математической моделью.
В дальнейшем мы планируем расширить функционал тренажера с добавлением новых элементов управления, интерактивных подсказок и улучшенного интерфейса. Также мы рассматриваем возможность интеграции VR-технологий для полного погружения в процесс обучения.
Мы надеемся, что эта статья была вам полезна. Если у вас есть вопросы, не стесняйтесь делиться ими в комментариях ниже. Также не забудьте подписаться на наш канал, чтобы быть в курсе новых публикаций о разработке 3D-тренажеров и других интересных темах.
Ссылки:
3epka
Интересно, ретопологию делаете вручную? (я для этого обычно задействую sketchup с плагином CleanUp3, для блендера по моему такого пока не написали, либо я плохо искал)
REPEAT_support
Добрый день!
В блендере для ретопологии есть аддон Quad Remesher, но чтобы он хорошо работал на hard surface моделях, его нужно настраивать, и порой проще сделать ретопологию вручную