Ship Models
Navigation
Return to Documentation Home or Bridge Command homepage.
Introduction
There are two classes of other ship models that can be defined in Bridge Command. These are 'own ships' and 'other ships.' Ownships are models
that have their full dynamics modelled, and are for use as the user's own ship. 'Other ships' are used to model all other ships in the
environment. For details of what you can do with these, and how to load them in scenarios, please see the Scenario
specification and the Scenario writer.
The most fundamental part of any ship model to load in Bridge Command is the 3D model itself. This can be in DirectX (.x) or 3DS Max format
(.3ds). Additionally, for own ship models, equirectangular panoramic photos can be used. For more details on this, please see below.
Alongside the model, the text file boat.ini is used to define the other characteristics. The specification of this file is detailed
below, but for a general introduction to the .ini file format used by Bridge Command, please read the .ini file
format.
Each vessel is contained in a folder, with the vessel's name, under Models\Othership or Models\Ownship as appropriate. So if Bridge Command
is installed in its default location, an own ship model called 'Protis' would be at 'C:\Program Files (x86)\Bridge Command X.X\models\Ownship\Protis'.
Bridge Command also looks in the user directory, which can be found using the button on the Bridge Command launcher, so users can add new ship models
without needing to be able to make changes in the installation directory.
Sections
The 3D model to load, and all of the characteristics of the own ship model are defined in the file Boat.ini in the model's folder. In addition,
a file Radar.ini sets up the parameters for the radar. A complete example of both files is given below, and the effect of each line is
explained below this:
If you are using panoramic photos for the own ship, each photo must be an equirectangular panorama, with transparency set for all areas of the photo
that are not part of the ship. So for example, all bridge windows must be transparent, so Bridge Command can render the surrounding scene. To use this
mode, instead of specifying a model file with the FileName parameter, FileName="360" should be used. The view positions are defined as for a normal ship
model, and are set as follows:
- Views: The number of viewpoints on board the vessel (Minimum 1)
- For each viewpoint, where # is the viewpoint number:
- ViewX(#): The viewpoint's X coordinate (in the model's unit system)
- ViewY(#): The viewpoint's Y coordinate (in the model's unit system)
- ViewZ(#): The viewpoint's Z coordinate (in the model's unit system)
- Pano(#): The filename of the equirectangular panorama image (must support transparency)
- PanoRotationYaw(#): Optional: The angle correction in the yaw direction (around vertical), in degrees
- PanoRotationPitch(#): Optional: The angle correction in the pitch direction, in degrees
- PanoRotationRoll(#): Optional: The angle correction in the roll direction, in degrees
Boat.ini
FileName="boat.x"
ScaleFactor=0.3
YCorrection=-3
AngleCorrection=0
Depth=3.0
Views=3
ViewX(1)=-0.3
ViewY(1)=15.74
ViewZ(1)=-6.0
ViewX(2)=9.4
ViewY(2)=16.0
ViewZ(2)=-9.8
ViewX(3)=-9.4
ViewY(3)=16.0
ViewZ(3)=-9.8
Max_propulsion_force=3000
AsternEfficiency=0.667
Mass=5000
MaxRevs=2500
DynamicsSpeedA=18.71
DynamicsSpeedB=100
PropSpace=2.0
AzimuthDrive=0
AzimuthDriveAstern=0
BlockCoefficient=0.87
MaxSpeed=6
aziToLengthRatio 0.2
azimuthDriveEngineIdleRPM=700
azimuthDriveClutchEngageRPM=1000
azimuthDriveClutchDisengageRPM=950
engineMaxChangePerSecond=0.25
schottelMaxDegPerSec=60
thrustLeverMaxChangePerSecond=0.4
azimuthDriveSameDirectionAsSchottel=1
azimuthDriveMaxDegPerSecond
DynamicsTurnDragA=180000
DynamicsTurnDragB=12000
DynamicsLateralDragA=187.1
DynamicsLateralDragB=1000
Inertia=120000
RudderA=5
RudderB=0.05
RudderBAstern=0
RudderAngularVelocity=10
BowThrusterForce=2000
SternThrusterForce=2000
BowThrusterDistance=3.0
SternThrusterDistance=2.5
Buffet=3.0
Swell=1.0
RollPeriod=8
PitchPeriod=12
PortThrottleX=-2.678
PortThrottleY=98.522
PortThrottleZ=190.715
StbdThrottleX=-2.478
StbdThrottleY=98.522
StbdThrottleZ=190.715
WheelX=0
WheelY=98.522
WheelZ=190.0
WheelScale=1.0
- FileName: Sets the name of the 3D model file to load
- ScaleFactor: The amount to scale the 3D model by. Bridge Command uses metres as it's units, so if the model is in feet, then this should be around 0.3
- Note that all subsequent positions/distances are in the units/coordinate system of the 3D model file, except for the propulsion system.
- YCorrection: The amount to move the model UP. Therefore, if the model's origin is at its keel, this should be a negative value
- AngleCorrection: The number of degrees the model should be rotated about its vertical axis to correctly align it: The Bridge Command axis system is Y up and Z towards the model's stern (when viewed in a 3d model editor with a right handed coordinate system. Bridge Command uses a left handed coordinate system internally, so the Z axis is towards the ship's bow)
- Depth: The vessel's depth under the water line (in the 3D model's units)
- Views: The number of viewpoints on board the vessel (Minimum 1)
- For each viewpoint, where # is the viewpoint number:
- ViewX(#): The viewpoint's X coordinate (in the model's unit system - as long as AngleCorrection is zero)
- ViewY(#): The viewpoint's Y coordinate (in the model's unit system - as long as AngleCorrection is zero)
- ViewZ(#): The viewpoint's Z coordinate (in the model's unit system - as long as AngleCorrection is zero)
- ViewHigh(#): (Optional) Set this to 1 if this is an elevated view, where the camera should automatically look straight down when switching to this view
- MakeTransparent (Optional): If this is set to 1, any part of the model that is partially transparent will be made fully transparent. This is useful where models have bridge windows where the material used partially obscures the view.
- HasDepthSounder: If this is set to 1, a depth sounder reading is displayed
- MaxDepth: If there is a depth sounder, the maximum depth that can be measured (m)
- HasGPS: If this is set to 1, the GPS position will be displayed
- HasRateOfTurnIndicator: If this is set to 1, a rate of turn indicator will be displayed
- BlockCoefficient (Optional): The ratio of the volume a ships hull displaces of water and the volume of a cuboid of the same length, breadth and draught as the ship. It is used to calculate the ships mass. A typical values are 0.68 for a high speed container ship, 0.75 for an LNG tanker, 0.87 for a bulk carrier. If BlockCoefficient is defined then it overrides Mass and Inertia parameters as the ships mass and inertias are calculated from the dimensions of the ship model and draught. So if Block Coefficient is defined then there is no need to define Mass , Inertia. If however a non displacement craft such as a hovercraft is being modelled then the mass would need to be explicitly declared.
- MaxSpeedAhead (Optional): The speed ahead of the vessel at maximum power ahead in knots. If this is defined then it is not necessary to define maxForce, DynamicsSpeedA, DynamicsSpeedB,
- AzimuthDrive (Optional): Set to 1 if the ship has azimuth drives, or 0 for conventional engine and rudder
- aziToLengthRatio (needed for Azimuth Drive models): the distance along the axis of the vessel of the azimuth drives expressed as a proportion of the vessels length. Valid values lie between (0 and 1). Typical values 0.2 for an azimuth stern drive tug, 0.1 for an azimuth driven coaster, 0.75 for a tractor tug
- AzimuthDriveAstern (optional): Set to 1 if the azimuth drives can be engaged astern (for example for an outboard motor)
- azimuthDriveEngineIdleRPM (needed for Azimuth Drive models): The engine RPM at which an engine idles with the thrust lever all the way back , engine declutched. It must be less than the azimuthDriveClutchDisengageRPM (a typical value for azimuthDriveEngineIdleRPM is 700)
- azimuthDriveClutchDisengageRPM (needed for Azimuth Drive models): The engine RPM below which the clutch automatically disengages. It must be less than the azimuthDriveClutchEngageRPM but greater than the azimuthDriveEngineIdleRPM. (A typical value for azimuthDriveClutchDisengageRPM is 950)
- azimuthDriveClutchEngageRPM (needed for Azimuth Drive models): The engine RPM which, when exceeded the clutch automaticall engages. It must be greater than the azimuthDriveClutchDisengageRPM (a typical value for azimuthDriveClutchEngageRPM is 1000)
- engineMaxChangePerSecond (needed for Azimuth Drive models): the proportion of the maximum engine rpm that the engine can change rpm in one second. e.g. 0.25 would mean it takes 4 seconds for an engine to go from a standstill to full power (typical value for a coaster 0.25, for an outboard engine on a speedboat 1, for a large bulk carrier 0.05)
- schottelMaxDegPerSec (needed for Azimuth Drive models): the maximum number of degrees that a schottel control can be rotated in within one second. It only applies to keyboard control for playability. In reality the schottel control can be turned as fast as your wrist can move it, however it will take time for the azimuth drive to follow it up. This is ignored if you have physical controls (typical value 60)
- thrustLeverMaxChangePerSecond (needed for Azimuth Drive models) : the maximum proportion of the full range that a thrust lever control can be changed in within one second, e.g 0.2 would mean it takes 5 seconds for the lever to go from full back to full forward. It only applies to keyboard control for playability. In reality the thrust lever can be moved as fast as your wrist can move it, however it will take time for the engine to respond to it. This is ignored if you have physical controls (typical value 0.4)
- azimuthDriveMaxDegPerSecond (needed for Azimuth Drive models) : the maximum number of degrees that the azipod drive can rotate in the lateral plane in one second. (typically 30)
- azimuthDriveSameDirectionAsSchottel (needed for Azimuth Drive models) : On most vessels the azimuth drive turns in the same direction as the shcottel, so the thrust lever is in the same direction as the actual thrust from the propellor. So in the case of an azimuth stern drive configuration, the turning behaviour is similar to a tiller. Turn the schottel clockwise and the ship will turn to port. The opposite is true in a tractor configuration where the azimuth drives are ahead of amidships. However, some vessels equipped with aft mounted azimuth drives (e.g. Lass class ships, Shetland Trader , Neptune) have a different control response, which is when the schottel is turned clockwise then the azimuth drive turns anticlockwise. So when the schottel is turned clockwise the ship steers to starboard. So the thrust lever only points in the direction of the thrust when it is in the dead ahead or dead astern position. The objective is to make it easier to steer. Trust me it doesn't. (value is typically and normally 1)
- Mass: The vessel's mass (in kg) (not needed if BlockCoefficient is defined)
- Inertia: The ship's polar moment of inertia about it's vertical axis(kg m^2) (not needed if BlockCoefficient is defined)
- The below Dynamics variables are not needed if the maxSpeedAhead has been defined
DynamicsSpeedA: The amount of drag on the ship proportional to its speed squared (drag(N)=DynamicsSpeedA*Speed(m/s)^2)(not needed if Block Coefficient is defined)
DynamicsSpeedB: The amount of drag on the ship proportional to its speed (drag(N)=DynamicsSpeedB*Speed(m/s))
DynamicsTurnDragA: The amount of angular drag on the ship proportional to the rate of turn squared (drag(Nm)=DynamicsTurnDragA*Rate Of Turn(rad/s)^2)
DynamicsTurnDragB: The amount of angular drag on the ship proportional to the rate of turn (drag(Nm)=DynamicsTurnDragB*Rate Of Turn(rad/s))
DynamicsLateralDragA: The amount of drag on the ship proportional to its lateral (sideways) speed squared (drag(N)=DynamicsLateralDragA*Speed(m/s)^2)
DynamicsLateralDragB: The amount of drag on the ship proportional to its lateral (sideways) speed (drag(N)=DynamicsLateralDragB*Speed(m/s))
- RudderA: The turning effect of the rudder proportional to the ship's speed (Rudder torque(Nm)=RudderA*Speed(m/s)*rudder angle (deg)
- RudderB: The turning effect of the rudder proportional to the engine speed (Rudder torque(Nm)=Rudder*Engine Thrust (N)*rudder angle (deg)
- RudderBAstern: The turning effect of the rudder proportional to the engine speed when going astern (Rudder torque(Nm)=Rudder*Engine Thrust (N)*rudder angle (deg)
- RudderAngularVelocity (Optional): The maximum rudder response rate in degrees per second. If not set, a default of 30 is used.
- BowThrusterForce (Optional): The maximum bow thruster force (in Newtons)
- SternThrusterForce (Optional): The maximum stern thruster force (in Newtons)
- BowThrusterDistance (Optional): The distance of the bow thruster forward of the centre of rotation of the vessel in metres (world, not model units)
- SternThrusterDistance (Optional): The distance of the stern thruster behind of the centre of rotation of the vessel in metres (world, not model units)
- Buffet: The amount the ship is affected by buffeting due to the weather.
- Swell: The amount the ship is rolls in the swell, due to the weather.
- RollPeriod: The period for one roll cycle in seconds (Default 8s)
- PitchPeriod: The period for one pitch cycle in seconds (Default 12s)
- Max_propulsion_force: The maximum propulsion force of one engine (in Newtons)
- AsternEfficiency: (Optional) The proportion of thrust available when going astern (range 0-1, default 1)
- MaxRevs: The ship's maximum engine revolutions (RPM)
- PropSpace: The spacing between the port and starboard propellors in metres (world, not model units). Set to zero to model a one-engined vessel.
- PropWalkAhead: (Optional) The maximum turning moment (Nm) applied by the 'prop walk' effect on the ship, with the engine engaged forwards. If the vessel has a normal propellor arrangement, with a single right turning propellor, or double outwards turning propellors, this should be positive.
- PropWalkAstern: (Optional) The maximum turning moment (Nm) applied by the 'prop walk' effect on the ship, with the engine engaged astern. This should be positive for normal vessels, and should normally be larger than the ahead value.
- PropWalkDriftEffect: (Optional) The amount the ship should move sidways due to the 'prop walk' effect (Metres per Nm of prop walk)
- Windage: (Optional) The ratio between the speed with which the ship is moved by the wind and the wind speed.
- WindageTurnEffect: (Optional) The rate of turn due to the wind's action on the ship (Degrees/second per metre/second of wind speed when beam on to the wind)
- Optional visualisation parameters. All locations in own ship model coordinates:
- RadarScreenX: X location to display a radar screen.
- RadarScreenY: Y location to display a radar screen.
- RadarScreenZ: Z location to display a radar screen.
- RadarScreenSize: Size of radar screen to display in ownship model coordinates.
- RadarScreenTilt: Tilt of radar screen in degrees (default is 0).
- PortThrottleX: X location to display a port engine throttle control.
- PortThrottleY: Y location to display a port engine throttle control.
- PortThrottleZ: Z location to display a port engine throttle control.
- StbdThrottleX: X location to display a stbd engine throttle control.
- StbdThrottleY: Y location to display a stbd engine throttle control.
- StbdThrottleZ: Z location to display a stbd engine throttle control.
- WheelX: X location to display a wheel.
- WheelY: Y location to display a wheel.
- WheelZ: Z location to display a wheel.
- WheelScale: Scale factor for wheel.
Radar.ini
If no radar.ini file is present in the vessel's ownship folder, defaults will be used for all of the Radar's parameters.
NumberOfRadarRanges=6
RadarRange(1) = 12
RadarRange(2) = 6
RadarRange(3) = 3
RadarRange(4) = 2
RadarRange(5) = 1
RadarRange(6) = 0.5
RADAR_RangeRes=256
RADAR_AngularRes=720
radar_range_sensitivity=5.0
radar_height=10
radar_noise=0.000000000005
radar_sea_clutter=0.000000001
radar_rain_clutter=0.00001
NumberOfRadarColourSets=2
radar1_red(1)=255
radar1_green(1)=255
radar1_blue(1)=0
radar_bg_red(1)=0
radar_bg_green(1)=0
radar_bg_blue(1)=255
radar1_red(2)=128
radar1_green(2)=0
radar1_blue(2)=0
radar_bg_red(2)=0
radar_bg_green(2)=0
radar_bg_blue(2)=0
- NumberOfRadarRanges: The number of radar ranges available on the vessel. This should be set as one or greater.
- For each radar range, where # is the range number (1 to NumberOfRadarRanges):
- RadarRange(#): The radar range in nautical miles
- RADAR_AngularRes: How many scan lines in a full rotation of the radar scanner. Default is 360.
- RADAR_RangeRes: How many steps per scan line. Default is 128.
- radar_range_sensitivity: The accuracy of the radar in detecting ranges, in metres. This is only used for contact range detection, for automatic contact tracking on the radar (ARPA).
- radar_height: The height of the radar scanner in metres above sea level.
- radar_noise: The amount of random 'noise' picked up on the radar display. Default value: 0.000000000005
- radar_sea_clutter: The intensity of the sea clutter on the radar from the waves near the radar. Default value: 0.000000001
- radar_rain_clutter: The intensity of the rain clutter on the radar from reflections from rain. Default value: 0.00001
- NumberOfRadarColourSets: How many sets of colours are available on the radar (e.g. 2 if there is a daytime and a nighttime colour scheme)
- For each radar colour set, where # is the set number (1 to NumberOfRadarColourSets):
- radar1_red(#), radar1_green(#), radar1_blue(#): The colour for the radar plot, in red green and blue components, each in the range 0-255.
- radar_bg_red(#), radar_bg_green(#), radar_bg_blue(#): The colour for the radar background, in red green and blue components, each in the range 0-255.
The 3D model to load, and all of the characteristics of the own ship model are defined in the file Boat.ini in the model's folder. A complete example is given below, and the effect of each line is explained below this:
FileName="boat.x"
ScaleFactor=0.3038
YCorrection=-17
SolidHeight=45
AngleCorrection=0
NumberOfLights=5
LightX(1)=26.4
LightY(1)=59.2
LightZ(1)=105.4
LightRange(1)=6
LightRed(1)=0
LightGreen(1)=255
LightBlue(1)=0
LightStartAngle(1)=-1
LightEndAngle(1)=112.5
LightX(2)=-26.2
LightY(2)=59.2
LightZ(2)=105.4
LightRange(2)=6
LightRed(2)=255
LightGreen(2)=0
LightBlue(2)=0
LightStartAngle(2)=247.5
LightEndAngle(2)=361
LightX(3)=0
LightY(3)=103.3
LightZ(3)=93.3
LightRange(3)=6
LightRed(3)=255
LightGreen(3)=255
LightBlue(3)=255
LightStartAngle(3)=247.5
LightEndAngle(3)=472.5
LightX(4)=0
LightY(4)=35.1
LightZ(4)=-171.6
LightRange(4)=6
LightRed(4)=255
LightGreen(4)=255
LightBlue(4)=255
LightStartAngle(4)=112.5
LightEndAngle(4)=247.5
LightX(5)=0
LightY(5)=116
LightZ(5)=6.6
LightRange(5)=6
LightRed(5)=255
LightGreen(5)=255
LightBlue(5)=255
LightStartAngle(5)=247.5
LightEndAngle(5)=472.5
- FileName: Sets the name of the 3D model file to load
- ScaleFactor: The amount to scale the 3D model by. Bridge Command uses metres as it's units, so if the model is in feet, then this should be around 0.3
- Note that all subsequent positions/distances are in the units/coordinate system of the 3D model file
- YCorrection: The amount to move the model UP. Therefore, if the model's origin is at its keel, this should be a negatve value
- (Optional): SolidHeight: The maximum height at which the model should block radar targets behind it. If omitted, this defaults to about half of the height above the waterline. Note that this should be set in the model units and above the model's origin.
- AngleCorrection: The number of degrees the model should be rotated about its vertical axis to correctly align it: The Bridge Command axis system is Y up and Z towards the model's stern (when viewed in a 3d model editor with a right handed coordinate system. Bridge Command uses a left handed coordinate system internally, so the Z axis is towards the ship's bow).
- NumberOfLights: The number of navigation lights
- For each light, where # is the light number:
- LightX(#): The light's X coordinate (in the model's unit system - as long as AngleCorrection is zero)
- LightY(#): The light's y coordinate (in the model's unit system - as long as AngleCorrection is zero)
- LightZ(#): The light's z coordinate (in the model's unit system - as long as AngleCorrection is zero)
- LightRange(#): The maximum range of the light (in nautical miles)
- The light's colour is defined in terms of it's red, green and blue values. Therefore a pure red light would have LightRed=255,LightGreen=0 and LightBlue=0:
- LightRed(#): The red colour component of the light (0-255).
- LightGreen(#): The green colour component of the light (0-255).
- LightBlue(#): The blue colour component of the light (0-255).
- LightStartAngle(#): The bearing relative to the ship's head that a light is visible from. (0-360)
- LightEndAngle(#): The bearing relative to the ship's head that a light stops being visible at. (0-720)
- So for example, a port steaming light could have LightStartAngle(2)=247.5 and LightEndAngle(2)=361. Note that the LightEndAngle should be greater than the LightStartAngle, and can therefore be between 0 and 720 degrees