Научная статья на тему 'Особенности моделирования светотехники и звуковых эффектов транспортных средств при разработке обучающих симуляторов в среде Unity'

Особенности моделирования светотехники и звуковых эффектов транспортных средств при разработке обучающих симуляторов в среде Unity Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
240
61
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
UNITY / МОДЕЛИРОВАНИЕ / СИМУЛЯТОРЫ / АНИМАЦИЯ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Матвеев Павел Олегович, Молотов Роман Сергеевич

Рассматриваются особенности создания и редактирования трёхмерного освещения и добавления звуковых эффектов в модели транспортных средств в среде Unity. Приведён краткий обзор различных типов освещения моделей

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Матвеев Павел Олегович, Молотов Роман Сергеевич

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Особенности моделирования светотехники и звуковых эффектов транспортных средств при разработке обучающих симуляторов в среде Unity»

УДК 004.94

П. О. МАТВЕЕВ, Р. С. МОЛОТОВ

ОСОБЕННОСТИ МОДЕЛИРОВАНИЯ СВЕТОТЕХНИКИ

И ЗВУКОВЫХ ЭФФЕКТОВ ТРАНСПОРТНЫХ СРЕДСТВ

ПРИ РАЗРАБОТКЕ ОБУЧАЮЩИХ СИМУЛЯТОРОВ В СРЕДЕ UNITY

Рассматриваются особенности создания и редактирования трёхмерного освещения и добавления звуковых эффектов в модели транспортных средств в среде Unity. Приведён краткий обзор различных типов освещения моделей.

Ключевые слова: unity, моделирование, симуляторы, анимация.

Введение

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

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

Для создания симуляторов используются как специализированные платформы (OpenSimulator, RealXtend, Open Wonderland и т. д.), так и игровые (Unity, Unreal Engine...), и физические (Havok, nVidia PhysX) движки. Для разработки симулято-ра - реализации имитационной модели транспортных средств - был выбран движок Unity. Основными его преимуществами являются:

• Наличие конструктора: совокупности игрового движка и интегрированной среды разработки (IDE);

• Расчёт физики с помощью физического движка PhysX, упрощающего создание физических моделей объектов симулятора;

• Поддержка популярных форматов Sd-моделей, звуковых файлов, графики;

• Простой Drag&Drop интерфейс, обеспечи-

© Матвеев П. О., Молотов Р. С., 2016

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

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

Моделирование светотехники ТС

Для осуществления поставленной задачи предлагается использовать стандартные инструменты для создания освещения, такие как SpotLight, PointLight, и т. д. Также для создания правильных алгоритмов работы стоп-сигналов, указателей поворота и т. п. необходимо описать логику их работы с помощью скриптов (в Unity используется язык C#). Рассмотрим пример реализации головного освещения на модели автомобиля ГАЗ-66.

if (Input.GetKeyDown("2") && !isOn) { headLights[0].material headLightsON;

headLights[1].material headLightsON;

SpolightLEFT.intensity = 5f; SpolightRIGHT.intensity = 5f;

}

if(Input.GetKeyDown("2") &&isOn){ headLights[0].material headLightsOFF;

headLights[1].material headLightsOFF;

SpolightLEFT.intensity = 0f; SpolightRIGHT.intensity = 0f;

}

if (Input.GetKeyDown("2")){

isOn = !isOn; }_

Листинг 1. Скрипт включения и отключения головного света ТС

Рис. 1. Пример реализации головных огней на модели ГАЗ-66

Как видно из листинга 1, освещение переключается при нажатии пользователем кнопки «2»: меняется материал на головных огнях, и включаются привязанные к ним объекты типа SpotLight - источники света. Чтобы реализовать в имитационной модели такое освещение, предварительно необходимо:

1. Непосредственно в Unity создать объекты - цилиндры, повторяющие форму фар (рис. 2), либо использовать готовую модель фар, являющуюся отдельной частью (Editable Poly / Editable Mesh) Sd-модели ТС, подготовленной в графическом пакете.

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

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

4. Прикрепить к модели головных огней необходимое количество объектов SpotLight и настроить их (указав интенсивность и цвет) в IDE.

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

Схожий алгоритм действий применяется для создания стоп-сигналов. Различие состоит в том, что вместо SpotLight используется PointLight: стоп-сигналы не светят в определённую точку, а освещают пространство вокруг себя. В скрипте необходимо отслеживать нажатие кнопок «S» и «Space», чтобы стоп-сигналы загорались при включении пользователем заднего хода и торможении, а также при использовании ручного тормоза (листинг 2). Начальная интенсивность света должна быть небольшая: 0.3f - 0.4f, в отличие от головных огней, где она выключена (значение 0f).

Рис. 2. Модель левой фары головного света

if (Input.GetKey(KeyCode.S) || In-

put.GetKey("space")){

brakeLights[0].material =

brakeLightON;

brakeLights[1].material =

brakeLightON;

StoplightLEFT.intensity = 1f;

StoplightRIGHT.intensity = 1f;

}else{

brakeLights[0].material =

brakeLightOFF;

brakeLights[1].material =

brakeLightOFF;

StoplightLEFT.intensity = 0.3f;

StoplightRIGHT.intensity } = 0.3f;

Листинг 2. Скрипт включения и отключения стоп-сигналов ТС

ЩГ

ущ - I Ь

Рис. 3. Пример реализации стоп-сигналов на модели ГАЗ-66

Рис. 4. Модель левого стоп-сигнала

Рис.5. Пример реализации указателей поворота на модели ГАЗ-66

Модель указателей поворотов сложнее и поэтому интереснее: при повороте ТС (нажатии пользователем кнопок А и Б) необходимо выключать ранее включённый указатель, и включать тот, который соответствует актуальному направлению поворота ТС. В скрипте указателей поворота необходимо назначить две отдельных клавиши на каждый из указателей, реализовать мигание света с заданной частотой - автоматическую смену материала на моделях указателей, изначально выставив интенсивность источников света (Рот1^Ь1;) на ноль (листинг 3).

if(Input.GetKeyDown("3") &&

!TurnRight){

turnLights[0].material=TurnLightON;

turnLights[1].material=TurnLightON; rightSignalON = true; }else if (Input.GetKeyDown("3") || In-put.GetKeyUp(KeyCode.D) && TurnRight){ turnLights[0].material=TurnLightOFF;

turnLights[1].material=TurnLightOFF; rightSignalON = false; turNLightRF.intensity = 0f;

=turNLightRF1.intensity = 0f;

}

if (Input.GetKeyDown("3")){ TurnRight = !TurnRight;

}

if (Input.GetKeyDown("1") &&

!TurnLeft){

turnLights[2].material =

TurnLightON;

turnLights[3].material =

TurnLightON;

leftSignalON = true; }else if (Input.GetKeyDown("1") || In-put.GetKeyUp(KeyCode.A) && TurnLeft){

turnLights[2].material =

TurnLightOFF;

turnLights[3].material =

TurnLightOFF;

leftSignalON = false; turNLightLF.intensity = 0f; turNLightLFl.intensity = 0f;

}

if (Input.GetKeyDown("1")){ TurnLeft = !TurnLeft;

}

if (TurnLightON){

float floor = 0f;

float ceiling = lf; float emission = floor + Mathf .PingPong(Time.time * 2f, ceiling - floor); if (rightSignalON){

turnLights[0].material.SetColor("_E missionColor",

new Color(lf, lf, lf) * emission);

turnLights[1].material.SetColor("_E missionColor",

new Color(1f, lf, lf) * emission);

turNLightRF.intensity = lf * emission;

turNLightRFl.intensity = lf *

emission;

if (leftSignalON){ turnLights[2].material.SetColor("_Emiss ionColor",

new Color(lf, lf, lf)

* emission);

turnLights[3].material.SetColor("_E missionColor",

new Color(lf, lf, lf)

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

* emission);

turNLightLF.intensity = lf * emission;

turNLightLFl.intensity = lf

* emission;

}

} else if (leftSignalON){

turnLights[2].material.SetColor("_E missionColor",

new Color(lf, lf, lf) * emission);

turnLights[3].material.SetColor("_E missionColor",

Листинг 3. Продолжение

Листинг 3. Скрипт включения и отключения указателей поворотов ТС

new Color(1f, 1f, 1f) * emission);

turNLightLF.intensity = 1f * emission;

turNLightLF1.intensity = 1f *

emission;

if (rightSignalON){

turnLights[0].material.SetColor("_E missionColor",

new Color(1f, 1f, 1f)

* emission);

turnLights[1].material.SetColor("_Emission Color",

new Color(1f, 1f, 1f)

* emission);

turNLightRF.intensity = 1f

* emission;

* emission;

}

}

turNLightRF1.intensity = 1f

Листинг 3. Окончание

Рис. 6. Модель переднего левого указателя поворота

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

Моделирование звуковых эффектов ТС

Используемая в симуляторе имитационная модель, помимо визуальной ^d-модель, световые эффекты, анимация) составляющей, должна содержать также и аудио компонент - звуковые эффекты. Для модели ТС основными звуковыми эффектами являются звук работающего двигате-

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

1. Создать внутри модели пустые объекты, к которым прикрепить компоненты типа Аи&о8оигсе (рис. 7).

2. Настроить основные параметры звуковых эффектов: указать аудиофайл, громкость.

3. Запрограммировать включение и выключение звуковых эффектов клаксона (листинг 4), зажигания, а также динамического изменения параметров звука двигателя (листинг 5).

4. Добавить в модель ТС компонент Аи&оЫ81епег, чтобы воспроизводимый звук был слышен при управлении автомобилем.

Для того чтобы при нажатии пользователем соответствующей кнопки включался клаксон ТС, необходимо разработать скрипт, который однократно воспроизводит звуковой эффект, соответствующий прикреплённому к родительскому объекту компоненту Аи^о8оигсе (листинг 4).

Рис. 7. Зацикленный звуковой эффект работы двигателя и прикреплённый к нему скрипт

public AudioSource Klakson; void Start(){ Klakson=

GetComponent<AudioSource>(); }

void Update () {

if (Input.GetKeyDown(KeyCode.G)) {

GetComponent<AudioSource>().Play(); }

Листинг 4. Скрипт воспроизведения звука клаксона ТС

}

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

usingUnityEngine; using System.Collections; public class SoundEngine :

MonoBehaviour {

public Rigidbody rb; private AudioSource a; public float volume; public bool engineIsOn = false; void Start () {

a=GetComponent<AudioSource>(); rb.centerOfMass = new Vector3(0, 0,

0);

}

void Update(){

if (In-

put.GetKeyDown(KeyCode.R) && !engineIsOn){

GetComponent<AudioSource>().Play(); }

a.volume = Mathf

.Clamp(rb.velocity

.magnitude / l4,

0.3f, 0.7f);

if (In-

put.GetKeyDown(KeyCode.R) &&engineIsOn){

GetComponent<AudioSource>().Stop(); }

if (In-

put. GetKeyDown(KeyCode.R)){

engineIsOn = !engineIsOn; }

}

}

Листинг 5. Скрипт воспроизведения и изменения громкости звука двигателя ТС

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

Заключение

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

СПИСОК ЛИТЕРАТУРЫ

1. Русскоязычное сообщество разработчиков на Unity. URL: http://www.unity3d.ru/

2. Официальный сайт Unity3D. URL: http://unity3d.com/ru/

3. Моделирование элементов ВС. Курс лекций / под ред. Н. С. Куцоконя. - Ульяновск : УлГТУ, архив каф. «ВТ», 2002.

4. Справочник API Unity. URL: http://docs.unity3d.com/ru/current/ScriptReference/ index.html

5. Система планирования Олимпийских игр SOCHI-2014. URL: http://www.vizerra.ru/portfolio sochi-2014/

6. Галкин А. В., Аноприенко А. Я. Использование технологии Uity 3D при разработке универсальной плоскопанельной тренажерно-обучающей системы // Материалы IV всеукраин-ской научно-технической конференции студентов, аспирантов и молодых учёных «Информационные управляющие системы и компьютерный мониторинг (ИУС КМ 2013)» - 24-25 апреля 2013 г. - Донецк : ДонНТУ, 2013.

7. Creighton, R.-H. Unity 3D Game Development by Example Beginner's Guide - Packt Publishing, 2010. - 384 c.

Матвеев Павел Олегович, студент УлГТУ, кафедра «Вычислительная техника». Молотов Роман Сергеевич, младший научный сотрудник НИО УНИ УлГТУ.

Поступила 18.08.2016 г.

i Надоели баннеры? Вы всегда можете отключить рекламу.