Skip to main content
Skip table of contents

Forest Fires

Overview


New as of rel2022.1+, the main purpose of this feature is to enable pc-nova to render a forest fire fighting simulation. As a whole, "fire fighting" covers a number of integrated pieces based on contractual requirements and these are summarized below:

  • Forest fire and smoke effects.
  • Multiple definable areas of trees that may be burnt
  • A content library of "burned" tree models that can be swapped with normal trees they are mapped to.
  • Blackened terrain in the clipmap over burned areas
  • Water dump effect with tunable spray dynamics.
  • AW-139 & 500-gal BAMBI bucket models which execute the water dump.

Configuration


Optional Tokens

  1. ConfigBurntTreeInstancedLib → DB_OVERLAY\DB_GLOBAL_DOD_V20\RELEASE\V20_1\R2P\DB_FEATURES\GENERIC\TREE_LIB\instancedlib_burnedtrees.cfg
    1. See burnt trees section below for a detailed example of the BurntTreeInstancedLib and .hie formats.

Required Data

AW-139 & BAMBI Bucket Models:

    • Using a post re-org database, you should be loading the AW-139 & BAMBI models into specific indices.
      Note: This will enable the keyboard shortcut "E" (requires token "ControlKeyboard Advanced" in override file) to have all the pieces it needs to setup the models & parenting. Press E 6 times as an alternative shortcut to enable turning on the forest fire icds.

      AW-139 & Bambi Bucket

      CODE
      list_type ASIGN_AER
      {
      7 COMMON/RELEASE/V1/DB/DB_MOVING_MODELS/MILITARY/HELICOPTER/AW_139/AW_139_AM.hie COMMON/RELEASE/V1/DB/DB_MOVING_MODELS/MILITARY/HELICOPTER/AW_139/AW_139_AM.fx
      }
      
      list_type ASIGN_SLING
      {
      3 COMMON/RELEASE/V1/DB/DB_MOVING_MODELS/ELEMENTS/SLING_LOAD/BAMBI_BUCKET_500gal/BAMBI_BUCKET_500gal.hie COMMON/RELEASE/V1/DB/DB_MOVING_MODELS/ELEMENTS/SLING_LOAD/BAMBI_BUCKET_500gal/BAMBI_BUCKET_500gal.fx
      }

Burnt Trees

Burnt trees refer to alternative textures for trees, which are swapped in when an area is in a burnt region defined in the forest_burn_hv packet.

    • The config token ConfigBurntTreeInstancedLib above points to a file which is used to load burnt tree textures and geostates. This file is NOT required to render the burnt trees.
    • Below is a BurntTreeInstancedLib file example.
    • BurntTreeInstancedLib Example

      TEXT
      # FORMAT: <instance #> <GST path without extension>
        1 R2P/DB_FEATURES/GENERIC/TREE_LIB/SHRUB_6FT_BURNT/SHRUB_6FT_BURNT
        2 R2P/DB_FEATURES/GENERIC/TREE_LIB/DECIDUOUS_46FT_BURNT/DECIDUOUS_46FT_BURNT

Trees that have alternative burnt textures should have two switch nodes in the .hie, with the first being SW_BURNT OFF and the second SW_BURNT ON.

    • Below the ON (burnt) branch is a geo node similar to the X-Tree geo node in the OFF branch except with a burnt tree geostate. The OFF branch is simply the old non-burnable tree structure.
    • Burnable Tree Hie Example

      CODE
      NAMEDSW SW_BURNT OFF 1
      {
        LOD LO_WALNUT_EUROPEAN_COLUMNAR_34FT C 0.0 0.0 0.0 R (0.0 384.0 65000.0)
        {
          GEO WALNUT_EUROPEAN_COLUMNAR_34FT_ANIM
          {
              CFILE WALNUT_EUROPEAN_COLUMNAR_34FT_ANIM.cpto GST_WALNUT_EUROPEAN_COLUMNAR_34FT
          }
          GEO WALNUT_EUROPEAN_COLUMNAR_34FT
          {
            CFILE WALNUT_EUROPEAN_COLUMNAR_34FT.cpto GST_WALNUT_EUROPEAN_COLUMNAR_34FT
          }
        }
      }
      NAMEDSW SW_BURNT ON 1
      {
        GEO WALNUT_EUROPEAN_COLUMNAR_34FT
        {
            CFILE WALNUT_EUROPEAN_COLUMNAR_34FT.cpto GST_DECIDUOUS_46FT_BURNT
        }
      }

General Usage


ICD interface

The forest fire and forest burn ICDs support a total of 20 fire regions and 10 burn regions respectively. The water spray effect is controlled independently via its own ICD struct.  The blocks below generally summarize what each entity is capable of through the ICD structure.

forest_fire_hv[]

CODE
ICD.dat_hst.forest_fire_hv[i].fire_enable     = 0 or 1 -> enable/disable
ICD.dat_hst.forest_fire_hv[i].smoke_enable    = 0 or 1 -> enable/disable
ICD.dat_hst.forest_fire_hv[i].fire_intensity  = 0.0 - 1.0 -> Intensity scalar
ICD.dat_hst.forest_fire_hv[i].smoke_intensity = 0.0 - 1.0 -> Intensity scalar
ICD.dat_hst.forest_fire_hv[i].radius          = region radius in m
ICD.dat_hst.forest_fire_hv[i].position[0]     = lat component of region pos
ICD.dat_hst.forest_fire_hv[i].position[1]     = long component of region pos


forest_burn_hv[]

CODE
ICD.dat_hst.forest_burn_hv[i].enabled        = 0 or 1 -> enable/disable
ICD.dat_hst.forest_burn_hv[i].radius         = burned area in m
ICD.dat_hst.forest_burn_hv[i].position[0]    = lat component of region pos
ICD.dat_hst.forest_burn_hv[i].position[1]    = long component of region pos

fire_fighting_water_dump_hv

CODE
ICD.dat_hst.fire_fighting_water_dump_hv.enable                  = 0 or 1 -> enable/disable
ICD.dat_hst.fire_fighting_water_dump_hv.trigger                 = incremental triger (++) for spray dump
ICD.dat_hst.fire_fighting_water_dump_hv.parent.type             = parent entity type
ICD.dat_hst.fire_fighting_water_dump_hv.parent.id               = id of entity parented to
ICD.dat_hst.fire_fighting_water_dump_hv.parent.attachment_point = attach point for pairing water spray
ICD.dat_hst.fire_fighting_water_dump_hv.size                    = spray size scalar (0 is default size)
ICD.dat_hst.fire_fighting_water_dump_hv.speed[0]                = X component of water spray speed
ICD.dat_hst.fire_fighting_water_dump_hv.speed[1]                = y component of water spray speed
ICD.dat_hst.fire_fighting_water_dump_hv.speed[2]                = z component of water spray speed
ICD.dat_hst.fire_fighting_water_dump_hv.position[0]                = X component of water spray position (relative or absolute)
ICD.dat_hst.fire_fighting_water_dump_hv.position[1]                = y component of water spray position (relative or absolute)
ICD.dat_hst.fire_fighting_water_dump_hv.position[2]                = z component of water spray position (relative or absolute)

Runtime Operation

Basic end-to-end process for operating a small forest fire, then extinguishing it.

  1. Set forest_fire_hv → Through either the host, spy, path, etc. set the following properties. Ensure position is set somewhere in your view (applies to the other steps).
  • In forest_fire_hv[]
fire_enable1
smoke_enable1
fire_intensity1

smoke_intensity

0.4
radius70
position[0]Near ownship
posiition[1]Near ownship

2. Set forest_burn_hv → Through either the host, spy, path, etc. set the following properties.

IMPORTANT NOTE:
if no BurntTreeInstancedLib is provided at all, you will have a default DB texture in place of the trees.

  • In forest_burn_hv[]
enabled1
radius70
position[0]Near ownship
position[1]Near ownship

3. Place Models → Use the mova_hv & sling_load_hv icd structures to place models, then parent the bucket to the hook under the helo.

  • For parenting sling_load_hv to AW-139, set
parent.type1
parent.id0
parent.attachment_point1


4. Pair water dump & trigger → Through either the host, spy, path, etc. set the following properties.

  • In fire_fighting_water_dump_hv
enable1
trigger++ increment
parent.type10
parent.idSlingLoad id
parent.attachment_point3
position[0, 1, 2]0
speed[0, 1, 2]0

5. Extinguish fire → Through either the host, spy, path, etc. set the following properties after water dump has been triggered over a fire.

  • In forest_fire_hv
fire_intensitygradually fade towards zero
smoke_intensity

fade only slightly


Changing Number of Fires in Region

The actual number of individual fire and smoke column sprites are by default determined by the radius of the fire region. This can be quickly summarized like so:

    • At radius < 75, one region will be populated by a singular fire and smoke sprite.
      At radius >= 75, one region will have up to 5 fire and smoke sprites spread out over its area.
      At radius > 200, one region will have up to 15 fire and smoke sprites spread out over its area.

From left to right, the pictures in the section below demonstrate how the fire sprites multiply according to these rules. 


Animating the BAMBI bucket

While animation of the bambi bucket is not required to trigger the fire fighting water dump, it has a bit of nice granularity between states and adds additional realism to the scene.

    • Through either the host, spy, path, etc. set the following properties.
    • In sling_load_hv[i]

      val_artic[0]0 - 10 (integers)


Adding Forest Fire Haze

In larger forest fires, it is common for a brown/orange haze to form which envelops the entire area in low visibility. Typically this happens because wildfire smoke scatters the sunlight, making the brownish red colors, which have the longest wavelength of light, appear more prominently. This is why in pc-nova we represent both the wildfire smoke, and the forest_fire_haze as the same color.

To use the forest fire haze, we interact with the fog ICD. A quick guide below:

NOTE: The left picture is comparison to a real world stock image of forest fire haze, the right is how we represent this in pc-nova

    • Through either the host, spy, path, etc. set the following properties.
    • In ICD.dat_ios

      .fog1
      .visib_fog47000
      .fog_range50000
      .forest_fire_haze1

  • If anything, I'd almost say our haze could be even more orange...


Optional Fx Tuning

The following files contain relevant FX tokens which act as knobs to tune various elements of the forest fires, burn regions and water spray.

    • Forest_Fire_base.fx → Tunes most fire related params. The following tokens will have the greatest visual impact if testing.
      • FIRE_SIZE_SCALE → positive values scale size
      • FIRE_HEIGHT_OFFSET → negative values brings fire above terrain
  •  
    • Fire_Fighting_Water_Dump_base.fx → Tunes most water dump related params.
      • No need to tweak much in most test cases
  •  
    • Smoke_base.fx → Can tweak global smoke settings which should also affect forest fire smoke. Some useful fx tokens below.
      • SMOKE_SIZE_SCALE → positive values scale puff size
      • SMOKE_FADE_TIME → Controls smoke fade
      • SMOKE_WIND_SCALE → Controls wind effect of smoke.

Forest Fires CIGI Control

The Forest Fire and Water Dump Effect are controlled through a mixture of Entity Control and Component Control Packets.  The necessary packets are outlined below along with their mapping to the ICD variables described above.

Forest Fires CIGI Controls

Forest Fire Entity Control

CIGI FieldRange/ValueICD Mapping
Entity IDUser DefinedN/A
Entity Type21101 - 21121N/A
LatitudeLatitude in degreesforest_fire_hv[x].position[0]
LongitudeLongitude in degreesforest_fire_hv[x].position[1]

Forest Fire Component Control - Fire

CIGI FieldRange/ValueICD Mapping
Comp ClassEntityV3 (0)N/A
Instance IDCIGI Entity ID of Forest FireN/A
Comp ID0N/A
Comp StateFire Enable 0: off, 1: onforest_fire_hv[x].fire_enable
Comp Data 0Fire Intensity [0.0 - 1.0]forest_fire_hv[x].fire_intensity
Comp Data 1Radius in metersforest_fire_hv[x].radius

Forest Fire Component Control - Smoke

CIGI FieldRange/ValueICD Mapping
Comp ClassEntityV3 (0)N/A
Instance IDCIGI Entity ID of Forest FireN/A
Comp ID1N/A
Comp StateSmoke Enable 0: off, 1: onforest_fire_hv[x].smoke_enable
Comp Data 0Smoke Intensity [0.0 - 1.0]forest_fire_hv[x].smoke_intensity

Fire Fighting Water Dump CIGI Controls

Fire Fighting Water Dump Entity Control

CIGI FieldRange/ValueICD Mapping
Entity IDUser DefinedN/A
Entity Type21122N/A
Parent IDValid Parent Entity IDfire_fighting_water_dump_hv[x].parent
Latitude / X OffsetX Offset from Parent in metersfire_fighting_water_dump_hv[x].position[0]
Longitude / Y OffsetY Offset from Parent in metersfire_fighting_water_dump_hv[x].position[1]
Altitude / Z OffsetZ Offset from Parent in metersfire_fighting_water_dump_hv[x].position[2]

Fire Fighting Water Dump Component Control - Size

CIGI FieldRange/ValueICD Mapping
Comp ClassEntityV3 (0)N/A
Instance IDCIGI Entity ID of Forest FireN/A
Comp ID0N/A
Comp Data 0 (float)Water Dump Size in meters

fire_fighting_water_dump_hv.size

NOTE: fire_fighting_water_dump_hv.trigger automatically gets incremented when this component control is sent

Fire Fighting Water Dump Component Control - Speed

CIGI FieldRange/ValueICD Mapping
Comp ClassEntityV3 (0)N/A
Instance IDCIGI Entity ID of Forest FireN/A
Comp ID1N/A
Comp Data 0 (float)Speed Vector X (meters/sec)fire_fighting_water_dump_hv.speed[0]
Comp Data 1 (float)Speed Vector Y (meters/sec)fire_fighting_water_dump_hv.speed[1]
Comp Data 2 (float)Speed Vector Z (meters/sec)fire_fighting_water_dump_hv.speed[2]

Fire Fighting Water Dump Component Control - Attachment Point

CIGI FieldRange/ValueICD Mapping
Comp ClassEntityV3 (0)N/A
Instance IDCIGI Entity ID of Forest FireN/A
Comp ID2N/A
Comp StateParent Attachment Pointfire_fighting_water_dump_hv.parent.attachment_point

Forest Burn CIGI Controls

Forest Burn Entity Control

CIGI FieldRange/ValueICD Mapping
Entity IDUser DefinedN/A
Entity Type21151 - 21161
LatitudeLatitude in degreesforest_burn_hv[x].position[0]
LongitudeLongitude in degreesforest_burn_hv[x].position[1]

Forest Burn Component Control - Size

CIGI FieldRange/ValueICD Mapping
Comp ClassEntityV3 (0)N/A
Instance IDCIGI Entity ID of Forest BurnN/A
Comp ID0N/A
Comp Data 0 (float)Burn Area Radius in meters

forest_burn_hv[igIdx].radius



Forest Fire Haze CIGI Control

Forest Fire Haze Component Control - Enable

CIGI FieldRange/ValueICD Mapping
Comp ClassGlobalLayeredWeatherV3 (9)N/A
Comp ID7N/A
Comp StateFire Haze Enable 0: off, 1:on

forest_fire_haze



Example Path

You can download the path below for a basic example scene.

fireFighting_basic.pth

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.