IG Aviation Add-on
Дополнение IG Aviation содержит набор готовых к использованию компонентов самолета, создающих такие эффекты, как возгорание двигателя и шасси, дым, инверсионный след, шасси, настройки лопастей несущего винта вертолета с эффектом размытия и эффектом промывки несущего винта. Дополнение также показывает реализацию трассировки колес и метеорадара.
Компоненты#
Авиационные эффекты#
Для настройки различных эффектов самолета (возгорание двигателя или шасси, дым, инверсионный след и т.д.):
- Назначьте свойство EffectAircraftController родительскому узлу (воздушному судну) и оставьте все параметры без изменений.
-
Присвойте свойство EffectAircraft каждому узлу, представляющему визуальные эффекты различных типов.
Доступны следующие параметры свойства:
- Node — узел, который должен быть включен/отключен
- Emitter Node — узел, испускающий частицы для эффекта
- Default Enable — указывает, должен ли эффект быть включен по умолчанию
- Effect Type — выбор типа эффекта самолета (возгорание двигателя или шасси, дым, инверсионный след и т.д.)
- Wind Dependent — указывает, влияет ли на эффект ветер или нет
Шасси#
Этот компонент позволяет управлять шасси. Он содержит несколько свойств, которые должны быть присвоены следующим образом:
-
Назначьте свойство LandingGears родительскому узлу (воздушному судну).
Доступны следующие параметры свойства:
- Gear — указывает, что шестерни выдвинуты
- Time Covers — время открытия крышки, в секундах
- Time Gears — время включения передачи, в секундах
Убедитесь, что все опорные точки настроены правильно. -
Определите, какие узлы представляют части шасси, и присвойте им свойство LandingGearPart.
Доступны следующие параметры свойства:
- Node — узел, подлежащий перемещению (обычно это узел, которому присвоено это свойство)
- Is Cover — указывает, является ли деталь крышкой или нет (крышка открывается перед выдвижением зубчатого колеса)
-
Use Dummy Cover — указывает, следует ли закрывать колесную нишу фиктивной крышкой после втягивания передачи. При включении отображается дополнительная опция When Extended. Он используется для указания того, должна ли быть видна крышка-манекен при выдвинутом шасси.
Если эта опция включена, поле Node не должно содержать узел, которому присвоено это свойство, так как компонент будет отключен навсегда после удаления. - Rotate — указывает, должна ли деталь вращаться
- Axis — координаты оси вращения детали
- Extension Angle — угол поворота детали при выдвинутом зубчатом колесе, в градусах
- Retraction Angle — угол поворота детали при убранном зубчатом колесе, в градусах
- Cover Closable — указывает, должна ли крышка закрываться после выдвижения шестерни или оставаться открытой
Лопасть несущего винта#
Свойство RotorBlade управляет конусообразностью лопастей несущего винта вертолета и создает размытие диска из-за вращения лопасти. Чтобы использовать это свойство, лопасть несущего винта в вашей модели вертолета должна иметь отдельную сетку и материал.
Использование этого свойства также подразумевает, что у вас есть материал лезвия (mesh_blade.mgraph в дополнении), а также узел и материал для круга, в который лезвия превращаются при быстром вращении (проверьте узел disk и материал mesh_blur_blades.mgraph helicopter_simple Node Reference в дополнении).
Назначьте свойство RotorBlade родительскому узлу (узлу-ротору).
Доступны следующие параметры свойства:
Input | |
Speed | Скорость вращения ротора, в об/мин. Это значение по умолчанию, которое может быть изменено во время выполнения. |
---|---|
Beta 0 | Параметр, определяющий угол сужения. Это значение по умолчанию, которое может быть изменено во время выполнения. |
Beta Cos | Параметр, используемый для продольного взмахивания крыльями. Это значение по умолчанию, которое может быть изменено во время выполнения. |
Beta Sin | Параметр, используемый для бокового взмаха. Это значение по умолчанию, которое может быть изменено во время выполнения. |
Rotor | |
Rotation Direction | Направление вращения ротора. |
Pivot | Узел должен вращаться с заданной частотой вращения. |
Axis | Ось вращения поворотного узла. |
Blade | |
Sample | Образец с одним лезвием. Модель должна иметь только одно лезвие, количество лезвий регулируется параметром Total Count. Лопасть должна иметь свою собственную сетку и материал, не зависящий от корпуса модели вертолета. Материал должен обеспечивать визуализацию изгиба лезвия. |
Length | Длина лезвия, в метрах. |
Total Count | Общее количество лопастей несущего винта. Образец лезвия клонируется необходимое количество раз, на равном расстоянии друг от друга и размещается по кругу. |
Material Beta 0 Parameter |
Название параметра материала лезвия, используемого для управления визуализацией угла сужения. |
Material Blade Length Parameter |
Название параметра материала лезвия, используемого для установки длины лезвия. |
Circle | |
Node | Узел размытого круга, который заменяет лопасти при высоких значениях оборотов. |
Material Beta 0 Parameter |
Название параметра материала окружности, используемого для управления визуализацией угла сужения. |
Material Beta Cos Parameter |
Название параметра материала окружности, используемого для управления визуализацией продольных взмахов. |
Material Beta Sin Parameter |
Название параметра материала окружности, используемого для управления визуализацией боковых взмахов. |
Material Blade Length Parameter |
Название параметра материала круга, используемого для задания длины лезвия. |
Material Blade Count Parameter |
Название параметра материала круга, используемого для установки количества лезвий. |
Material UV Animation Parameter |
Название параметра материала круга, используемого для управления УФ-анимацией круга в зависимости от значения частоты вращения ротора. |
RPM To Time Coefficient |
Множитель для преобразования значения RPM в значение параметра UV-анимации. |
Blurring | |
Threshold Blade Speed | Скорость вращения, до которой видны только лопасти и начиная с которой лопасти начинают размываться. Нижнее значение интервала скоростей вращения, при котором видны как лопасти, так и размытый круг. |
Threshold Circle Speed | Скорость вращения, начиная с которой отображается только размытый круг, лопасти больше не видны. Верхнее значение интервала скоростей вращения, при котором видны как лопасти, так и размытый круг. |
Blade Alpha | Кривая, управляющая прозрачностью лезвия в течение интервала, в течение которого видны как лезвия, так и размытый круг. |
Circle Alpha | Кривая, управляющая прозрачностью круга в течение интервала, в течение которого видны как лезвия, так и размытый круг. |
Эффект вихрей#
Этот компонент позволяет создавать эффект пылевых облаков, поднимаемых потоком воздуха от несущего винта, когда вертолет стоит на земле, взлетает или приземляется, или летит близко к поверхности.
-
Создайте эффекты для каждого типа поверхности в редакторе UNIGINE и назначьте свойство RotorWashEffect каждому из них. Доступны следующие параметры:
Intensity Значение интенсивности видимости промывки ротора. При минимальном значении 0 эффект полностью невидим. С максимальным значением 1 — полностью виден. Это значение по умолчанию, которое может быть изменено во время выполнения. Max Height Высота узла от земли, при которой эффект исчезает. Min Height Высота узла от земли, при которой эффект имеет максимальную интенсивность. Forward Offset Множитель для перемещения эффекта вперед относительно вертолета. Расстояние смещения зависит от скорости перемещения. Эта настройка предназначена для того, чтобы эффект был виден из кабины пилота. Static Only Корневой узел для эффектов, которые отображаются только тогда, когда вертолет не движется. Disable Static Отключите узел статического эффекта, когда вертолет движется. Если опция отключена (т.е. включен статический эффект), статический эффект отображается в течение всего срока службы систем частиц. В большинстве случаев отключать эту опцию (т.е. включать видимость статического эффекта на протяжении всего срока службы частиц) нет необходимости, поскольку эффект не будет виден из кабины пилота. Max Static Velocity Верхний предел скорости, при котором вертолет считается неподвижным (м/с). -
Назначьте модификатор в зависимости от типа узла эффекта: ParticlesParameterModifier / DecalParameterModifier / FieldHeightParameterModifier. Модификаторы необходимы для выравнивания соответствующего узла (Particles/Decal/FieldHeight) с эффектом.
ParticlesParameterModifier имеет следующие параметры:
Recursive Переключает синхронизацию дочерних систем частиц. Enabled by Default Переключает состояние узла по умолчанию. Если узел отключен по умолчанию, вам нужно включить его с помощью кода после добавления в сцену. Sync Синхронизация частиц с помощью Syncker. Рекомендуется включать только в том случае, если синхронизация по сети имеет решающее значение, поскольку это может повлиять на производительность. Lerp Life Time Сопоставьте значение времени жизни частиц с интенсивностью эффекта. Если интенсивность эффекта равна 0, то значение времени жизни также равно 0. Lerp Spawn Rate Сопоставьте значение скорости появления частиц с интенсивностью эффекта. Если интенсивность эффекта равна 0, то значение скорости появления также равно 0. Lerp Velocity Сопоставьте значение скорости частиц с интенсивностью эффекта. Если интенсивность эффекта равна 0, то значение скорости также равно 0. -
Назначьте вертолету свойство RotorWashController и выберите тип поверхности, соответствующий каждому эффекту.
-
Установите тип поверхности с помощью кода для каждой поверхности.
Метеорадар#
Метеорадар (он же WSR), используемый для мониторинга погоды впереди самолета (облаков и осадков), является неотъемлемой частью профессионального летного тренажера, позволяя пилотам тренировать стратегическое и тактическое планирование безопасной траектории полета. Он реализован как компонент MeteoRadar и требует соответствующих навыков для его эффективного использования — точной настройки этой системы и правильной интерпретации показаний метеорадара. Все ключевые параметры радара доступны для настройки, включая дальность отображения (для мониторинга погоды на ближних и дальних расстояниях), усиление (для оценки опасности погодных условий), а также углы наклона, FOV и прочее. Радар работает с волюметрическими облаками, которые сгенерируются системой облаков UNIGINE, что обеспечивает согласованность показаний радара с видом из кабины самолета.
Интенсивность облаков, отображаемых на радаре, рассчитывается как плотность облаков в каждой точке, умноженная на текущую влажность.
Для использования метеорадара создайте Node Dummy и назначьте на нее компонент MeteoRadar. Доступны следующие параметры:
Radar | |
Orientation Euler | Вектор углов Эйлера (тангаж, крен, рыскание). |
---|---|
Fixed Rotation | Включает и выключает гироскоп для метеорадара. |
Gain | Чувствительность метеорадара. Чем выше значение, тем менее чувствителен радар (он показывает только опасные области). |
Shadow Gain | Мощность метеорадара. |
FOV | Угол обзора метеорадара в градусах. |
Range | |
Min Range | Минимальное расстояние, на котором радар отображает информацию о погоде (нижний предел дальности отображения). |
Max Range | Максимальное расстояние, на котором радар отображает информацию о погоде (верхний предел дальности отображения). |
Width | Ширина изображения на дисплее радара (количество горизонтальных линий). |
Height | Высота изображения на дисплее радара (количество вертикальных линий). |
Debug | Включает и выключает визуализацию текущего направления движения радара. |
Дополнение включает в себя пример пользовательского интерфейса метеорадара, представленного в виде компонента MeteoRadarWidget и доступного в Режиме отладки приложения. Пример интерфейса включает в себя дисплей с эффектом сканирования и набор параметров, управляющих настройками радара и дальностью сканирования.
Открытие мира#
Чтобы открыть мир, содержащий модели:
- Установите дополнение IG Aviation (доступно через браузер UNIGINE SDK в разделе Add-Ons) и добавьте его в свой проект (нажав Other Actions -> Configure Project -> Assets в разделе Projects в разделе UNIGINE SDK Browser).
- Нажмите File -> Open World (Ctrl + O) или откройте окно Asset Browser, откройте папку \ig_aircraft\sample_content и выберите мир ig_aircraft. Сцена откроется.
Содержимое папки \ig_aircraft\sample_content предназначено для демонстрации того, как использовать свойства. Он может быть удален, если вам не нужна демонстрационная сцена и ресурсы.
Настройка Вашего проекта#
Чтобы добавить надстройку IG Aviation в ваш проект на C++:
-
Установите дополнение IG Aviation (доступно через UNIGINE SDK Browser в разделе Add-Ons) и добавьте его в свой проект (нажав Other Actions -> Configure Project -> Assets в разделе Projects в UNIGINE SDK Browser).
Другой способ добавить дополнение к вашему проекту - скопировать следующие папки из этого дополнения в папку вашего проекта:
- data/ig_aircraft и от data/properties до data
- от source/ig_aircraft_components до source
- Добавьте файлы source/ig_aircraft_components/* в свой проект на C++.
- Создайте свое приложение для регистрации добавленных компонентов в системе компонентов C++.
-
Configure ig_config.xml — добавьте следующее в блок entity_types:
<entity id="201" name="be-200-mod"> <path>ig_aircraft/sample_content/be_200_mod.node</path> <component id="0" name="light_outer"> <property>LightAircraftController</property> <parameter type="int" name="data1">landing</parameter> <parameter type="int" name="data2">taxi</parameter> <parameter type="int" name="data3">navigation</parameter> <parameter type="int" name="data4">beacon</parameter> <parameter type="int" name="data5">strobe</parameter> <parameter type="int" name="data6">logo</parameter> </component> <component id="1" name="light_inner"> <property>LightAircraftController</property> <parameter type="int" name="data1">windows</parameter> <parameter type="int" name="data2">cockpit</parameter> </component> <component id="2" name="fire_engine"> <property>EffectAircraftController</property> <parameter type="int" name="data1">fire_engine_1</parameter> <parameter type="int" name="data2">fire_engine_2</parameter> <parameter type="int" name="data3">fire_engine_3</parameter> <parameter type="int" name="data4">fire_engine_4</parameter> </component> <component id="3" name="fire_aircraft"> <property>EffectAircraftController</property> <parameter type="int" name="data1">fire_landing_front</parameter> <parameter type="int" name="data2">fire_landing_back</parameter> <parameter type="int" name="data3">fire_tail</parameter> </component> <component id="4" name="landing_gears"> <property>LandingGears</property> <parameter type="int" name="data1">gear</parameter> <parameter type="float" name="data2">manual_gear</parameter> </component> <component id="5" name="effects"> <property>EffectAircraftController</property> <parameter type="int" name="data1">smoke</parameter> <parameter type="int" name="data2">contrail</parameter> </component> <articulated_part id="1" name="aileron"> <node invert_pitch="1">aileron_left</node> <node>aileron_right</node> </articulated_part> <articulated_part id="2" name="rudder"> <node invert_yaw="1">rudder</node> </articulated_part> <articulated_part id="3" name="elevator"> <node invert_pitch="1">flipper_left</node> <node invert_pitch="1">flipper_right</node> </articulated_part> <articulated_part id="4" name="flap"> <node invert_pitch="1">flap_0_left</node> <node invert_pitch="1">flap_0_right</node> <node invert_pitch="1">flap_1_left</node> <node invert_pitch="1">flap_1_right</node> </articulated_part> <articulated_part id="5" name="engine"> <node>engine_left</node> <node>engine_right</node> </articulated_part> <articulated_part id="6" name="wheel"> <node>chassis_element_left/chassis_left/wheels_left</node> <node>chassis_element_right/chassis_right/wheels_right</node> <node>dummy_axis_chassis_front/chassis_front001/wheels_front</node> </articulated_part> <articulated_part id="7" name="slat"> <node>slat_left</node> <node>slat_right</node> </articulated_part> <volume_definition id="0" name="body" shape="0">volumes</volume_definition> <volume_definition id="1" name="wings" shape="1">volumes</volume_definition> </entity> <entity id="180" name="uc-135"> <path>ig_aircraft/sample_content/helicopter/node/helicopter_simple.node</path> <component id="1" name="RotorBlade"> <node>body/rotor_aux</node> <property>RotorBlade</property> <parameter type="float" name="data1">speed</parameter> <parameter type="float" name="data2">beta_0</parameter> <parameter type="float" name="data3">beta_cos</parameter> <parameter type="float" name="data4">beta_sin</parameter> </component> <component id="2" name="RotorWashController"> <property>RotorWashController</property> <parameter type="float" name="data1">intensity</parameter> <parameter type="float" name="data2">rpm_intensity</parameter> </component> </entity> <entity id="218" name="minibus"> <path>ig_aircraft/sample_content/minibus/minibus.node</path> <component id="0" name="wheel_trace"> <property>WheelTraceController</property> <parameter type="float" name="data1">input_intensity</parameter> </component> </entity>
- Настройте свой хост. Пример конфигурации хоста можно найти в файле readme.md.
В настроенном проекте вы сможете создать следующие типы сущностей:
- 201 — самолет (эффекты пожара, шасси)
- 180 — вертолет (конусообразование несущего винта, промывка несущего винта)
- 218 — автомобиль (наклейка со следом колеса)