Кинь его в блендер: Как разрабатывают ЗD-тренажер

Привет, Хабр!

В последние годы технологии виртуальной реальности (VR) стремительно развиваются и находят применение в самых различных сферах. Одной из наиболее интересных и перспективных областей использования VR является создание симуляторов, которые могут значительно изменить подход к обучению и профессиональной подготовке. Сейчас все больше предприятий начинают использовать VR-тренажеры для обучения сотрудников работе с оборудованием, и это неудивительно! Специалисты из СберУниверситета провели исследование о положительном опыте использования VR-технологий для обучения персонала — https://sberuniversity.ru/edutech-club/pulse/trendy/2958/.

Что такое VR-тренажеры?

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

Преимущества VR-тренажеров

Иммерсивный опыт: VR-тренажеры обеспечивают высокий уровень погружения, что позволяет пользователям забыть о реальном мире и сосредоточиться на обучении. Это повышает мотивацию и концентрацию, а также делает занятия более увлекательными.

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

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

В этой статье рассмотрим процесс разработки 3D-тренажера — от отрисовки 3D-моделей и их импорта в движок до используемых скриптов.

Процесс разработки 3D-моделей

Разработка любой 3D-модели происходит в несколько последовательных этапов, совокупность которых называется пайплайном. Единого эталонного пайплайна разработки 3D-моделей для игр (а именно такой нам и нужен, так как визуализация тренажера работает на игровом движке UNIGINE по схожим с VR-игрой принципам) нет — каждая компания сама определяет наиболее подходящие этапы, и ниже описаны те, которые использовались нами:

1. Концепция и планирование

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

2. Моделирование

Используя 3D-программное обеспечение (в нашем случае использовалась программа Blender), художник создает базовую геометрию модели.

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

В чем отличие между полигональным и инженерным моделированием?

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

02dfdc53b505a33e7eb39442a8bac6ba.jpg

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

ad2481c4ad06109abace897821f3d1af.png

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

67bbb8c1b149fa1302fc873ceeb88802.png

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

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

3. Ретопология

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

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

Для примера: на картинке ниже представлена модель барботера, которая изначально была создана в САПР программе Компас. После экспорта модели в полигональный вид проявились недостатки экспорта модели из САПР программы в полигональный формат: неравномерная сетка, избыточное количество вершин и, как следствие, артефакты шейдинга. Для оптимизации сетки была сделана ретопология модели в программе полигонального моделирования — Блендер. Количество вершин с 85 тысяч опустилось до 18 тысяч, вес модели уменьшился примерно в 4,7 раз.

Сетка до и после ретопологии

Сетка до и после ретопологии

4. Текстурирование

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

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

Типичная 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.

11deec12ce9845177af02663dd81244f.png

Основные скрипты для работы элементов:

  • UIControl — задаёт тип и подтип элемента, определяя его дальнейший функционал.

  • CountNumber — задаем переменную, которая используется для связи с математической моделью.

  • OnClick — обеспечивает взаимодействие с элементом. Например, при нажатии кнопки обновлённое значение переменной передаётся в модель.

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

Слева OnClick, справа - ConISD

Слева OnClick, справа — ConISD

291ee7cb7d148f2222743b7aace8c5be.png64393dd31936bb37d05671ec6ca8b7c6.png

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

Тренажер подключается к математической модели через сетевой протокол TCP/IP. Указывается IP-адрес и порт сервера модели. После успешного подключения запускается исполнительная программа модели. Для обмена данными между тренажером и моделью используются именованные переменные:

  • Чтение данных: Тренажер запрашивает значения переменных у модели, чтобы синхронизировать состояние.

  • Запись данных: Изменённые значения из тренажера передаются обратно в модель.

Тренажер регулярно обновляет данные, используя асинхронные задачи. Это позволяет в реальном времени получать актуальную информацию из модели, избегая задержек. Был создан удобный программный интерфейс, который позволяет добавлять новые переменные, легко управлять подключением и обрабатывать данные. Например, список переменных для обмена задаётся один раз, а дальше они автоматически обновляются. Если соединение разрывается или возникают ошибки, тренажер корректно завершает работу, освобождая ресурсы и предупреждая пользователя. Такая архитектура соединения позволяет тренажеру стать не просто визуализацией, но и активным участником вычислений. Это особенно важно в системах реального времени, таких как энергосистемы, где синхронность между моделью и тренажером критически важна.

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

Фотография – представление модели в движке – рендер модели

Фотография — представление модели в движке — рендер модели

В этой статье мы рассмотрели процесс разработки 3D-тренажеров на UNIGINE, начиная с полигонального моделирования и заканчивая интеграцией в VR. Мы узнали, как важно правильно выполнить ретопологию и текстурирование, а также как настроить скрипты для взаимодействия с математической моделью.

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

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

Ссылки:

1. Официальный сайт разработчиков UNIGINE — https://unigine.com/ru/

2. Более детальный гайд по разработке 3D-моделей — https://www.school-xyz.com/blog/kak_delayutsya_modeli_dlya_aaa_igr_polnyj_gajd_po_aaa_pajplajnu

3. Другой наш кейс с тем же принципом разработки — https://habr.com/ru/companies/rosatom/articles/776012/

© Habrahabr.ru