|
|
Line 5: |
Line 5: |
| Vehicle and ammo sensors for target detection and tracking. | | Vehicle and ammo sensors for target detection and tracking. |
|
| |
|
| === '''> [https://confluence.bistudio.com/display/ARMA3/OPREP+-+Sensor+Overhaul OPREP]''' === | | === '''> [https://dev.arma3.com/post/oprep-sensor-overhaul OPREP]''' === |
| === '''> [https://forums.bistudio.com/topic/200467-jets-sensor-overhaul/ Forum thread]''' === | | === '''> [https://forums.bistudio.com/topic/200467-jets-sensor-overhaul/ Forum thread]''' === |
| | | === '''> [[Arma 3 Sensors config reference|Configuration]]''' === |
|
| |
|
|
| |
|
Line 53: |
Line 53: |
| * doesn't work with data link | | * doesn't work with data link |
|
| |
|
| | =Vehicles= |
| | {| class="wikitable" |
| | ! Name !! Seekers !! FoV hor./vert. !! Range sky/gnd (m) !! target ID range (m) !! Notes |
| | |- |
| | | xH-9 helicopters, Caesar || N/A || || || |
| | |- |
| | | UH-80, CH-49, CH-67, PO-30, Mi-290, WY-55 || RWR || 360/360 || 16000 || 12000 || |
| | |- |
| | | rowspan="4" | AH-99 || RWR || 360 || 16000 || 12000 || |
| | |- |
| | | Laser + Strobe || 180 || 6000 || || front hemisphere |
| | |- |
| | | IR + Visual || 46/34 || 3000/2000 + 2000/1500 || 2000 || targeting camera |
| | |- |
| | | Radar || 180/90 || 5000/4000 || 3000 || down looking |
| | |- |
| | | rowspan="4" | Mi-48 || RWR || 360 || 16000 || 12000 || |
| | |- |
| | | Laser + Strobe || 180 || 6000 || || front hemisphere |
| | |- |
| | | IR + Visual || 26/26 || 4000/3000 + 3000/200 || 2000 || targeting camera |
| | |- |
| | | Radar || 120/90 || 5000/4000 || 3000 || down looking |
| | |- |
| | | WIP |
| | |} |
|
| |
|
| =Configuration= | | =Precision guided munitions= |
| The new Sensor system gets enabled by defining a SensorsManagerComponent class inside the vehicle's [[Arma_3_Components|Components]] class.
| | {| class="wikitable" |
| <syntaxhighlight lang="c">
| | ! Name !! Seeker !! Cone (degrees) !! Min-Max range (m) !! Target speed (km/h) !! Notes |
| class MyVehicle_F : MyBaseVehicle_F
| | |- |
| {
| | | PCML || Visual || 5° || 20-600 || 126 |
| class Components : Components
| | |- |
| {
| | | Titan AT || IR + Laser || 4° || 50-4000 || 126 || + manual guidance |
| class SensorsManagerComponent : SensorTemplatePassiveRadar
| | |- |
| {
| | | Titan AP || N/A || || || || manual guidance only |
| };
| | |- |
| };
| | | DAGR || IR + Laser || 30° || 100-5000 || 126 || + manual guidance |
| };
| | |- |
| </syntaxhighlight>
| | | Scalpel || IR + Laser || 30° || 250-6000 || 198 || + manual guidance |
| | | |- |
| For simplicity the class can inherit from one of the templates that are available in the configFile root, which allows you to only change the properties you need.
| | | Macer || IR || 30° || 350-6000 || 198 |
| <syntaxhighlight lang="c">
| | |- |
| class SensorTemplatePassiveRadar;
| | | KH25 / Sharur || IR || 20° || 300-6000 || 144 |
| class SensorTemplateActiveRadar;
| | |- |
| class SensorTemplateIR;
| | | Jian || IR + Laser || 30° || 350-8000 || 126 || + manual guidance |
| class SensorTemplateVisual;
| | |- |
| class SensorTemplateMan;
| | | GBU-12 || Laser || 180° || 250-8000 || 108 || doesn't require full lock |
| class SensorTemplateLaser;
| | |- |
| class SensorTemplateNV;
| | | LOM-250 || Laser || 180° || 250-8000 || 108 || doesn't require full lock |
| </syntaxhighlight>
| | |- |
| == Properties ==
| | | Titan AA || IR || 4° || 100-3500 || 900 |
| ====componentType====
| | |- |
| Mandatory property that defines the type/spectrum and hardcoded behavior of the sensor.
| | | Titan AA Long || IR || 30° || 100-4500 || 1800 |
| Can be one of the following
| | |- |
| * '''IRSensorComponent''' - detects [[A3_Targeting_config_reference#irTarget|irTarget]]s according to their [[A3_Targeting_config_reference#irTargetSize|irTargetSize]] and their actual heat signature. Sources of heat are engine, tires or the muzzle. To become a detectable target in IR the engine has to be running at least 6 seconds. To become undetectable the vehicle may need to cool down even as long as 1 hour.
| | | Zephyr || Radar (ARH) || 40° || 500-10000 || 3006 |
| * '''NVSensorComponent''' - detects [[A3_Targeting_config_reference#nvTarget|nvTarget]]s.
| | |- |
| * '''LaserSensorComponent''' - detects [[A3_Targeting_config_reference#laserTarget|laserTarget]]s.
| | | ASRAAM || IR || 90° || 200-6000 || 2160 |
| * '''ActiveRadarSensorComponent''' - detects [[A3_Targeting_config_reference#radarTarget|radarTarget]]s according to their [[A3_Targeting_config_reference#radarTargetSize|radarTargetSize]]. Radar needs to be switched ON via an action (Default Arma 3 and Arma 3 Apex keybind is (Ctrl+R)). Switching the radar on also makes the owner a detectable target for vehicles or ammo with passive radar component (see below). It's also the only sensor that can provide additional information about the target - its distance, speed and altitude.
| | |- |
| * '''PassiveRadarSensorComponent''' - detects vehicles with active radar switched on at twice their active radar's range.
| | | Falchion-22 || IR || 30° || 150-4500 || 1602 |
| * '''VisualSensorComponent''' - detects [[A3_Targeting_config_reference#visualTarget|visualTarget]]s according to their [[A3_Targeting_config_reference#visualTargetSize|visualTargetSize]].
| | |- |
| * '''ManSensorComponent''' - detects targets that inherit from Man class.
| | | Sahr-3 || IR || 45° || 150-5000 || 2520 |
| <syntaxhighlight lang="c">
| | |- |
| componentType = "ActiveRadarSensorComponent";
| | | RIM-116 || IR || 180° || 250-4000 || 2160 |
| </syntaxhighlight>
| | |- |
| | | | RIM-162 || Radar (ARH) || 120° || 1000-12000 || 3240 |
| ====class AirTarget====
| | |- |
| Defines the sensor detection range in look-up conditions, when the target is positioned against a sky background.
| | | BIM-9X || IR || 180° || 250-5000 || 2160 |
| It's possible to cap the range by viewDistance (or its portion) for systems that work within visual range. Set the DistanceLimitCoefs to -1 to disable any impact of view distance on the sensor for beyond visual range systems.
| | |- |
| | | | BIM-120C || Radar (ARH) || 50° || 1000-12000 || 2880 |
| '''The actual sensor's range is the smallest of [maxRange, resulting objectViewDistanceLimit, resulting viewDistanceLimit] but never lower than minRange'''
| | |- |
| | | | BIM-120D || Radar (ARH) || 100° || 1000-13000 || 2880 |
| In the following case the sensor will be able to detect targets that are within the object view distance as terrain view distance will always be bigger. However if the obj. view distance is set above 5km the sensor won't be able to detect anything above 5km. If it's conversely set below 500m, the sensor will still be able to detect targets at 500m even if they are not visible.
| | |- |
| <syntaxhighlight lang="c">
| | | R73 || IR || 150° || 75-5000 || 2160 |
| class AirTarget // ranges for targets with sky background
| | |- |
| {
| | | R77 || Radar (ARH) || 65° || 1000-10000 || 2880 |
| minRange = 500; // -1 if undef; in meters
| | |- |
| maxRange = 5000; // -1 if undef; in meter
| | |} |
| viewDistanceLimitCoef = 1; // -1 if undef; coefficient, multiplies current view distance as set in player's options. -1 means view distance is not used to limit sensor range.
| |
| objectDistanceLimitCoef = 1; // -1 if undef; coefficient, multiplies current object view distance as set in player's options. -1 means object view distance is not used to limit sensor range.
| |
| | |
| };
| |
| </syntaxhighlight>
| |
| ====class GroundTarget====
| |
| Defines the sensor detection range in look-down conditions, when the target is positioned against ground clutter. Properties are the same as in [[#class_airTarget|airTarget]].
| |
| <syntaxhighlight lang="c">
| |
| class GroundTarget // ranges for targets with ground background
| |
| {
| |
| minRange = 500; // -1 if undef; in meters
| |
| maxRange = 3000; // -1 if undef; in meters
| |
|
| |
| viewDistanceLimitCoef = 1; // -1 if undef; coefficient, multiplies current view distance as set in player's options. -1 means view distance is not used to limit sensor range.
| |
| objectDistanceLimitCoef = 1; // -1 if undef; coefficient, multiplies current object view distance as set in player's options. -1 means object view distance is not used to limit sensor range.
| |
| };
| |
| </syntaxhighlight>
| |
| ====typeRecognitionDistance====
| |
| Distance in meters at which the sensor recognizes the actual target vehicle type (e.g. Mi-48 Kajman)
| |
| <syntaxhighlight lang="c">
| |
| typeRecognitionDistance = 1000; /// -1 if undef
| |
| </syntaxhighlight>
| |
| ====angleRangeHorizontal====
| |
| Sensor horizontal (azimuth) coverage (in degrees)
| |
| <syntaxhighlight lang="c">
| |
| angleRangeHorizontal = 120;
| |
| angleRangeHorizontal = 90; // if undef
| |
| </syntaxhighlight>
| |
| | |
| ====angleRangeVertical====
| |
| Sensor vertical (elevation) coverage (in degrees)
| |
| <syntaxhighlight lang="c">
| |
| angleRangeVertical = 120;
| |
| angleRangeVertical = 90; // if undef
| |
| </syntaxhighlight>
| |
| ====nightRangeCoef====
| |
| A coefficient of sensor's range during night time (used for visual sensors). Goes linearly between full light conditions (daytime) and poor light conditions (dusk). Overcast weather can sometimes move the range down the scale as well.
| |
| <syntaxhighlight lang="c">
| |
| nightRangeCoef = 0; // blind at night
| |
| nightRangeCoef = 0.5; // range halved at night
| |
| nightRangeCoef = 1; // full range at night; if undef
| |
| </syntaxhighlight>
| |
| ====maxFogSeeThrough====
| |
| A fog threshold, sensor won't be able to see through a fog with higher value than this number.
| |
| <syntaxhighlight lang="c">
| |
| maxFogSeeThrough= 0.1; // sensor blocked by even smallest amount of fog
| |
| maxFogSeeThrough= 0.95; // approx. the normal visibility in fog (vis. sensor)
| |
| maxFogSeeThrough= -1; // disable
| |
| </syntaxhighlight>
| |
| | |
| ====groundNoiseDistanceCoef====
| |
| Portion of sensor->target->ground distance. Below this number the targets become invisible to the sensor even if they are still within the [[#GroundTarget|GroundTarget]] range.
| |
| <syntaxhighlight lang="c">
| |
| groundNoiseDistanceCoef = 0.1; // if distance between vehicle and ground in the direction of the target is 1km then the target won't be detected as long as it stays less than 100m close to the ground background
| |
| groundNoiseDistanceCoef = -1 // if undef
| |
| </syntaxhighlight>
| |
| ====maxGroundNoiseDistance====
| |
| Distance from the ground background in meters, hard cap, above which the target will be visible even if still below [[#groundNoiseDistanceCoef|groundNoiseDistanceCoef]].
| |
| <syntaxhighlight lang="c">
| |
| maxGroundNoiseDistance = 50; // in the situation from prev. example the target now becomes detectable whenever it is more than 50m from the ground background and still within the sensor GroundTarget range.
| |
| maxGroundNoiseDistance = -1; // if undef
| |
| </syntaxhighlight>
| |
| ====minSpeedThreshold====
| |
| Target speed in m/s above which the target will start to become visible even if below [[#groundNoiseDistanceCoef|groundNoiseDistanceCoef]].
| |
| <syntaxhighlight lang="c">
| |
| minSpeedThreshold = 27.7; // following the prev. example if target is 20m from the ground background but it's moving more than 100km/h (27.7m/s) it may still be detected by the sensor.
| |
| minSpeedThreshold = 0; // if undef
| |
| </syntaxhighlight>
| |
| ====maxSpeedThreshold====
| |
| target speed above which the target becomes visible even if below [[#groundNoiseDistanceCoef|groundNoiseDistanceCoef]], linearly decreases to [[#minSpeedThreshold|minSpeedThreshold]].
| |
| <syntaxhighlight lang="c">
| |
| maxSpeedThreshold = 100; // following the prev. example if target is 20m from the ground background but it's moving more than 360km/h it will be detected by the sensor.
| |
| maxSpeedThreshold = 1000; // if undef
| |
| </syntaxhighlight>
| |
| ====minTrackableSpeed====
| |
| Minimum speed of the target that can be detected.
| |
| <syntaxhighlight lang="c">
| |
| minTrackableSpeed = -1e10; // if undef; no minimum speed
| |
| minTrackableSpeed = 27.7; // targets slower than 100km/h won't be detected at all
| |
| </syntaxhighlight>
| |
| ====maxTrackableSpeed====
| |
| Maximum speed of the target that can be detected.
| |
| <syntaxhighlight lang="c">
| |
| maxTrackableSpeed = 1e10; // if undef; no maximum speed
| |
| maxTrackableSpeed = 55; // targets faster than 200km/h won't be detected at all
| |
| </syntaxhighlight>
| |
| ====minTrackableATL====
| |
| Minimum altitude above terrain level that can be detected.
| |
| <syntaxhighlight lang="c">
| |
| minTrackableATL= -1e10; // if undef; no minimum altitude
| |
| minTrackableATL= 50; // targets flying lower than 50m above ground and ground vehicles (unless jumping or dropped from an airplane) won't be detected at all
| |
| </syntaxhighlight>
| |
| ====maxTrackableATL====
| |
| Maximum altitude above terrain level that can be detected.
| |
| <syntaxhighlight lang="c">
| |
| maxTrackableATL= 1e10; // if undef; no maximum altitude
| |
| maxTrackableATL= 1; // targets higher than 1m above won't be detected
| |
| </syntaxhighlight>
| |
| ====animDirection====
| |
| Model selection to set the sensor direction.
| |
| <syntaxhighlight lang="c">
| |
| animDirection = "mainTurret"; // sensor will be aligned with the turret and will rotate together with it
| |
| animDirection = ""; // if undef; sensor will be aligned with vehicle body
| |
| </syntaxhighlight>
| |
| ====aimDown====
| |
| Elevation offset in degrees of the sensor from the [[#animDirection|animDirection]].
| |
| <syntaxhighlight lang="c">
| |
| aimDown = 35; // sensor will be looking 35° downwards from its original direction given by the animDirection
| |
| aimDown = 0; // if undef
| |
| </syntaxhighlight>
| |
| ====allowsMarking====
| |
| Sets whether targets acquired by the sensor can be "marked", having track visualized in 3D and with possibility to use the info for various aiming aids or weapon guidance. This has specifically been made for RWR simulation via passive radar, so the active radars pop up on Sensor Display but they can't be marked unless also tracked by another sensor (vehicle or weapon).
| |
| <syntaxhighlight lang="c">
| |
| allowsMarking= 1; // default
| |
| allowsMarking= 0; // targets that are tracked by this sensor only won't be target-able
| |
| </syntaxhighlight>
| |
| | |
| | |
| == Example Config - full definition ==
| |
| <syntaxhighlight lang="c">
| |
| class cfgAmmo
| |
| {
| |
| class MissileCore;
| |
| class MissileBase: MissileCore
| |
| {
| |
| class Components;
| |
| };
| |
| class My_Missile_Base: MissileBase
| |
| {
| |
| missileLockMaxDistance = 3500;
| |
| missileLockMinDistance = 100;
| |
| missileLockMaxSpeed = 680;
| |
| missileLockCone = 50;
| |
| // The properties above limit the locking range, cone and conditions but they are are independent from the sensor. They don't say what the missile can see and track. In this case they are set to similar values as sensor, so what the missile seeker can see and track the missile will also be able to lock onto.
| |
| | |
| class Components: Components
| |
| {
| |
| class SensorsManagerComponent
| |
| {
| |
| class Components
| |
| {
| |
| class SomeRadarSensorComponent
| |
| {
| |
| componentType = "ActiveRadarSensorComponent";
| |
| class AirTarget // ranges for targets with sky background
| |
| {
| |
| minRange = 5000; //minimum possible range in meters
| |
| maxRange = 5000; //maximum possible range in meters
| |
| objectDistanceLimitCoef = -1; //range not limited by obj. view distance
| |
| viewDistanceLimitCoef = -1; //range not limited by view distance
| |
| };
| |
| class GroundTarget // ranges for targets with ground background
| |
| {
| |
| minRange = 3000;
| |
| maxRange = 3000;
| |
| objectDistanceLimitCoef = -1;
| |
| viewDistanceLimitCoef = -1;
| |
| };
| |
| typeRecognitionDistance = 1000; // distance how far the target type gets recognized
| |
| angleRangeHorizontal = 60; // sensor azimuth coverage in degrees
| |
| angleRangeVertical = 60; // sensor elevation coverage in degrees
| |
| groundNoiseDistanceCoef = 0.5; // portion of sensor-target-ground distance below which the targets become invisible to the sensor
| |
| maxGroundNoiseDistance = 250; // distance from the ground in meters, hard cap, above which the target will be visible even if still below groundNoiseDistanceCoef
| |
| minSpeedThreshold = 30; // target speed in m/s above which the target will start to become visible
| |
| maxSpeedThreshold = 45; // target speed above which the target becomes visible even if below groundNoiseDistanceCoef, linearly decreases to minSpeedThreshold
| |
| };
| |
| };
| |
| };
| |
| };
| |
| };
| |
| };
| |
| </syntaxhighlight>
| |
| | |
| == Example Config - inheritance from template ==
| |
| <syntaxhighlight lang="c">
| |
| class SensorTemplateActiveRadar;
| |
| class SensorTemplateIR;
| |
| | |
| class cfgVehicles
| |
| {
| |
| class Plane;
| |
| class Plane_Base_F: Plane
| |
| {
| |
| class Components;
| |
| };
| |
| class My_Plane_Base: Plane_Base_F
| |
| {
| |
| class Components: Components
| |
| {
| |
| class SensorsManagerComponent
| |
| {
| |
| class Components
| |
| {
| |
| class ActiveRadarSensorComponent : SensorTemplateActiveRadar
| |
| {
| |
| class AirTarget
| |
| {
| |
| minRange = 6000;
| |
| maxRange = 6000;
| |
| objectDistanceLimitCoef = -1;
| |
| viewDistanceLimitCoef = -1;
| |
| };
| |
| angleRangeHorizontal = 60;
| |
| angleRangeVertical = 60;
| |
| };
| |
|
| |
| class IRSensorComponent : SensorTemplateIR { };
| |
| };
| |
| };
| |
| };
| |
| };
| |
| };
| |
| </syntaxhighlight>
| |
|
| |
|
| = Related = | | = Related = |
| * [[CfgAmmo_Config_Reference|CfgAmmo]]
| |
| * [[CfgVehicles_Config_Reference|CfgVehicles]]
| |
| * [[Arma 3 Custom Info]] | | * [[Arma 3 Custom Info]] |
| * [[Arma 3 Components]]
| |
| * [[Arma 3 Targeting]] | | * [[Arma 3 Targeting]] |
| | * [[Arma 3 Sensors config reference]] |
| * [https://forums.bistudio.com/topic/200467-jets-sensor-overhaul/ Sensor Overhaul thread] | | * [https://forums.bistudio.com/topic/200467-jets-sensor-overhaul/ Sensor Overhaul thread] |
| | * [https://dev.arma3.com/post/oprep-sensor-overhaul Sensor Overhaul OPREP] |