COLLADA Models

AGI recommends using glTF models, but supports MDL and COLLADA for backward compatibility with older scenarios.

STK natively reads COLLADA (.dae) files. COLLADA is a popular open standards-based format that can be exported from many 3D editing applications (e.g., 3D Studio Max, Maya, Softimage, Blender, and Google SketchUp) and model converters, such as:

Ancillary Features

STK-specific features such as articulated components, attach points, and pointable elements can be added to COLLADA models. These features only pertain to STK and are called ancillary features. For the equivalent features in the MDL format, see Model Parameters.

Ancillary features use extended XML keywords that are associated with the COLLADA model using two methods.

  • Adding ancillary keywords inside the COLLADA file. This option is more compact but keywords can get lost when resaving the model from a 3D editing tool.
  • Storing ancillary keywords in a separate ancillary file (*.anc). STK associates the ancillary file with the COLLADA file when both reside in the same directory and share the same base name (e.g., ikonos.dae and ikonos.anc). This option minimizes the risk that ancillary keywords get lost when resaving a COLLADA file.

The ancillary file is an XML document with the following header and footer:

<?xml version="1.0" standalone="yes" ?>
<ancillary_model_data version="1.0">

…. ancillary data belongs here….

</ancillary_model_data>

Syntax for Ancillary Features

Syntax for adding the ancillary data to the COLLADA model is shown below for both methods. Either way produces equivalent results, so only one method should be used.

Articulations

Articulations are components (e.g., rocket stages, landing gear, doors, and propellers) that move in various ways. The motion is controlled via an articulation script.

Ancillary Syntax in COLLADA (*.dae)

<extra type="articulation_data">
   <technique profile="AGI">
      <library_articulations>
         <articulation id="HGA_Az" type="transform">
            <stage type="xRotate" name="Roll" min="-182.5" init="0" max="72.5"/>
         </articulation>
         <articulation id="HGA_El" type="transform">
            <stage type="yRotate" name="Pitch" min="-67.5" init="0" max="187.5"/>
         </articulation>
         <articulation id="Ikonos_1" type="transform">
            <stage type="uniformScale" name="Size" min="0" init="1" max="1"/>
            <stage type="xRotate" name="Roll" min="-360" init="0" max="360"/>
            <stage type="yRotate" name="Pitch" min="-360" init="0" max="360"/>
            <stage type="zRotate" name="Yaw" min="-360" init="0" max="360"/>
            <stage type="xTranslate" name="MoveX" min="-1000" init="0" max="1000"/>
            <stage type="yTranslate" name="MoveY" min="-1000" init="0" max="1000"/>
            <stage type="zTranslate" name="MoveZ" min="-1000" init="0" max="1000"/>
         </articulation>
         <articulation id="Logo" type="transform">
            <stage type="uniformScale" name="Size" min="0" init="1" max="1"/>
         </articulation>
         <articulation id="SolarPanel" type="transform">
            <stage type="yRotate" name="Fold" min="-90" init="0" max="0"/>
         </articulation>
         <articulation id="Thermal_Door" type="transform">
            <stage type="xRotate" name="Roll" min="-220" init="0" max="0"/>
         </articulation>
      </library_articulations>
   </technique>
</extra>

Ancillary Syntax in Ancillary File (*.anc)

<articulations>
   <articulation name = "HGA_Az" type = "transform">
      <stage init = "0" max = "72.5" min = "-182.5" name = "Roll" type = "xRotate" />
      <assigned_nodes>
         ParentLayer4_ikonos_M2L-Refer
      </assigned_nodes>
   </articulation>
   <articulation name = "HGA_El" type = "transform">
      <stage init = "0" max = "187.5" min = "-67.5" name = "Pitch" type = "yRotate" />
      <assigned_nodes>
         ParentLayer1_ikonos_M2L-Refer-3
      </assigned_nodes>
   </articulation>
   <articulation name = "Ikonos_1" type = "transform">
      <stage init = "1" max = "1" min = "0" name = "Size" type = "uniformScale" />
      <stage init = "0" max = "360" min = "-360" name = "Roll" type = "xRotate" />
      <stage init = "0" max = "360" min = "-360" name = "Pitch" type = "yRotate" />
      <stage init = "0" max = "360" min = "-360" name = "Yaw" type = "zRotate" />
      <stage init = "0" max = "1000" min = "-1000" name = "MoveX" type = "xTranslate" />
      <stage init = "0" max = "1000" min = "-1000" name = "MoveY" type = "yTranslate" />
      <stage init = "0" max = "1000" min = "-1000" name = "MoveZ" type = "zTranslate" />
      <assigned_nodes>
         ikonos_M2L_ROOT-Refer
      </assigned_nodes>
   </articulation>
   <articulation name = "Logo" type = "transform">
      <stage init = "1" max = "1" min = "0" name = "Size" type = "uniformScale" />
      <assigned_nodes>
         ParentLayer1_ikonos_M2L-Refer
      </assigned_nodes>
   </articulation>
   <articulation name = "SolarPanel" type = "transform">
      <stage init = "0" max = "0" min = "-90" name = "Fold" type = "yRotate" />
      <assigned_nodes>
         IncludeLayer6_ikonos_M2L-Refer
         IncludeLayer6_ikonos_M2L-Refer-2
         IncludeLayer6_ikonos_M2L-Refer-3
      </assigned_nodes>
   </articulation>
   <articulation name = "Thermal_Door" type = "transform">
      <stage init = "0" max = "0" min = "-220" name = "Roll" type = "xRotate" />
      <assigned_nodes>
         ParentLayer1_ikonos_M2L-Refer-2
      </assigned_nodes>
   </articulation>
</articulations>

Sensor Attach Points

Sensor attach points are used for attaching STK sensors to the 3D model.

Ancillary Syntax in COLLADA (*.dae)

<node id="AP13_HGA_AP">
   ..............
      <extra type="attach_point">
         <technique profile="AGI">
            <sensor_attach_point/>
         </technique>
      </extra>
   ..............
</node>

Ancillary Syntax in Ancillary File (*.anc)

<sensor_origins>
   AP13_HGA_AP
</sensor_origins>

Effect Attach Points

Effect attach points are used for attaching vapor trails to the 3D model.

Ancillary Syntax in COLLADA (*.dae)

<node id="AP13_HGA_AP">
   ..............
   <extra type="attach_point">
      <technique profile="AGI">
         <effect_attach_point/>
      </technique>
   </extra>
   ..............
</node>

Ancillary Syntax in Ancillary File (*.anc)

<effect_origins>
   AP13_HGA_AP
</effect_origins>

Pointable Elements

Pointable elements are components (e.g., radio dishes, cameras, and sun tracking panels) that can automatically point to and target other objects.

Ancillary Syntax in COLLADA (*.dae)

<node id="ParentLayer1_ikonos_M2L-Refer-3">
   .............
   <extra type="attach_point">
      <technique profile="AGI">
         <pointing_attach_point>
            <pointable_vector>
            0 0 1
            </pointable_vector>
         </pointing_attach_point>
      </technique>
   </extra>
   ..............
</node>

Ancillary Syntax in Ancillary File (*.anc)

<pointing_data>
   <pointing node = "ParentLayer1_ikonos_M2L-Refer-3" vector = "0 0 1" />
</pointing_data>

Solar Panel Groups

Solar Panel Groups are components defined as solar panels and assigned an efficiency value. This is useful when running the STK solar panel tool.

Ancillary Syntax in COLLADA (*.dae)

<node id="SolarPanel-PolygonMesh">
   ......................
   <extra type="attach_point">
      <technique profile="AGI">
         <solar_panel group="Ikonos" efficiency="14"/>
      </technique>
   </extra>
   ......................
</node>

Ancillary Syntax in Ancillary File (*.anc)

<solar_panel_groups>
   <solar_panel_group efficiency = "14" name = "Ikonos">
      <assigned_nodes>
         SolarPanel-PolygonMesh
      </assigned_nodes>
   </solar_panel_group>
</solar_panel_groups>

Non-obscuring Material

Non-obscuring materials are components (e.g., secondary mirrors, and radar domes) that are invisible to sensors. This is useful when running the STK sensor obscuration tool.

Ancillary Syntax in COLLADA (*.dae)

<node id="Camera-PolygonMesh">
   ............................
   <extra type="attach_point">
      <technique profile="AGI">
         <no_obscuration/>
      </technique>
   </extra>
   ............................
</node>

Ancillary Syntax in Ancillary File (*.anc)

<no_obscuration_nodes>
   Camera-PolygonMesh
</no_obscuration_nodes>

Collada does not contain the equivalent BoundRadius keyword from the MDL format. The bound radius is automatically computed with COLLADA models but not with MDL.