RenderableShadowCylinder

Inherits Renderable

Displays a shadow cylinder behind a planetary body. Given the SPICE name of a planetary body and an observer, it will show a cylinder extending behind the body away from the observer to highlight the areas of space from which the observer is occluded by the body. A concrete example is using the Sun as the observer, in which case the shadow cylinder indicates the areas in which there is darkness.

Members

Name

Documentation

Type

Description

Optional

Aberration

The aberration method that is used for computing the shadow cylinder. The options are “NONE”, “LT” (Light Time), “LT + S” (Light Time Stellar), “CN” (Converged Newtonian), and “CN + S” (Converged Newtonian Stellar).

String

In list { NONE, LT, LT+S, CN, CN+S }

No

Body

The SPICE name of target body that is used as the shadow caster.

String

Value of type ‘String’

No

BodyFrame

The SPICE name of the reference frame in which the shadow cylinder is expressed.

String

Value of type ‘String’

No

LightSource

The SPICE name of the object that is used as the illuminator for computing the shadow cylinder.

Identifier

An identifier string. May not contain ‘.’, spaces, newlines, or tabs

No

Observer

The SPICE name of the object that is the observer.

String

Value of type ‘String’

No

TerminatorType

Determines the type of terminator to use for calculating the shadow eclipse.

String

In list { UMBRAL, PENUMBRAL }

No

DimInAtmosphere

Decides if the object should be dimmed (i.e. faded out) when the camera is in the sunny part of an atmosphere.

Boolean

Value of type ‘Boolean’

Yes

Enabled

Determines whether this object will be visible or not.

Boolean

Value of type ‘Boolean’

Yes

NumberOfPoints

The number of control points used for constructing the shadow geometry. The higher this number, the more detailed the shadow is, but it will have a negative impact on the performance.

Integer

Greater or equal to: 0

Yes

Opacity

This value determines the opacity of this renderable. A value of 0 means completely transparent.

Double

In range: ( 0, 1)

Yes

RenderBinMode

A value that specifies if the renderable should be rendered in the Background, Opaque, Pre-/PostDeferredTransparency, Overlay, or Sticker rendering step.

String

In list { Background, Opaque, PreDeferredTransparent, Overlay, PostDeferredTransparent, Sticker }

Yes

ShadowColor

The color used for the shadow cylinder.

Color3

Value of type ‘Color3’

Yes

ShadowLength

A factor that controls the length of the shadow that is cast by the target object. The total length of the shadow is equal to the distance from the target to the light source multiplied with this value.

Double

Value of type ‘Double’

Yes

Tag

A single tag or a list of tags that this renderable will respond to when setting properties.

Table, or String

Value of type ‘Table’, or Value of type ‘String’

Yes

Type

The type of the renderable.

String

Value of type ‘String’

Yes

Inherited members from Renderable

Name

Documentation

Type

Description

Optional

DimInAtmosphere

Decides if the object should be dimmed (i.e. faded out) when the camera is in the sunny part of an atmosphere.

Boolean

Value of type ‘Boolean’

Yes

Enabled

Determines whether this object will be visible or not.

Boolean

Value of type ‘Boolean’

Yes

Opacity

This value determines the opacity of this renderable. A value of 0 means completely transparent.

Double

In range: ( 0, 1)

Yes

RenderBinMode

A value that specifies if the renderable should be rendered in the Background, Opaque, Pre-/PostDeferredTransparency, Overlay, or Sticker rendering step.

String

In list { Background, Opaque, PreDeferredTransparent, Overlay, PostDeferredTransparent, Sticker }

Yes

Tag

A single tag or a list of tags that this renderable will respond to when setting properties.

Table, or String

Value of type ‘Table’, or Value of type ‘String’

Yes

Type

The type of the renderable.

String

Value of type ‘String’

Yes

Asset Examples

  1local transforms = asset.require("./transforms")
  2local kernels = asset.require("./kernels")
  3local coreKernels = asset.require("spice/core")
  4
  5
  6
  7local textures = asset.resource({
  8  Name = "Charon Textures",
  9  Type = "HttpSynchronization",
 10  Identifier = "charon_textures",
 11  Version = 3
 12})
 13
 14
 15local CharonRadius = 603500
 16
 17local CharonProjection = {
 18  Identifier = "CharonProjection",
 19  Parent = transforms.PlutoBarycenterAccurate.Identifier,
 20  Transform = {
 21    Translation = {
 22      Type = "SpiceTranslation",
 23      Target = kernels.ID.Charon,
 24      Observer = kernels.ID.PlutoBarycenter
 25    },
 26    Rotation = {
 27      Type = "SpiceRotation",
 28      SourceFrame = kernels.Frame.Charon,
 29      DestinationFrame = coreKernels.Frame.Galactic
 30    }
 31  },
 32  Renderable = {
 33    Type = "RenderablePlanetProjection",
 34    Radius = CharonRadius,
 35    Segments = 350,
 36    ColorTexturePaths = {
 37      textures .. "NH_Charon_mosaic.png",
 38      textures .. "NH_Charon_mosaic_8192.png"
 39    },
 40    HeightTexturePaths = {
 41      textures .. "NH_Charon_DTM.png",
 42      textures .. "NH_Charon_DTM_8192.png"
 43    },
 44    MeridianShift = true,
 45    Projection = {
 46      Observer = kernels.ID.NewHorizons,
 47      Target = kernels.ID.Charon,
 48      Aberration = "NONE",
 49      AspectRatio = 2,
 50      Instrument = {
 51        Name = kernels.Frame.Lorri,
 52        Method = "ELLIPSOID",
 53        Aberration = "NONE",
 54        Fovy = 0.2907,
 55        Aspect = 1,
 56        Near = 0.2,
 57        Far = 10000
 58      },
 59      PotentialTargets = {
 60        kernels.ID.Pluto,
 61        kernels.ID.Charon
 62      }
 63    }
 64  },
 65  GUI = {
 66    Path = "/Solar System/Dwarf Planets/Pluto",
 67    Name = "Charon Projection"
 68  }
 69}
 70
 71local CharonText = {
 72  Identifier = "CharonText",
 73  Parent = CharonProjection.Identifier,
 74  Transform = {
 75    Translation = {
 76      Type = "StaticTranslation",
 77      Position = { 0, -1000000.0, 0 }
 78    }
 79  },
 80  Renderable = {
 81    Type = "RenderablePlaneImageLocal",
 82    Size = 19952623.15,
 83    Origin = "Center",
 84    Billboard = true,
 85    Texture = textures .. "Charon-Text.png",
 86    BlendMode = "Additive"
 87  },
 88  GUI = {
 89    Name = "Charon Text",
 90    Path = "/Solar System/Dwarf Planets/Pluto",
 91    Focusable = false
 92  }
 93}
 94
 95local CharonShadow = {
 96  Identifier = "CharonShadow",
 97  Parent = CharonProjection.Identifier,
 98  Renderable = {
 99    Type = "RenderableShadowCylinder",
100    Opacity = 0.25,
101    TerminatorType = "PENUMBRAL",
102    LightSource = coreKernels.ID.Sun,
103    Observer = kernels.ID.NewHorizons,
104    Body = kernels.ID.Charon,
105    BodyFrame = kernels.Frame.Charon,
106    Aberration = "NONE"
107  },
108  GUI = {
109    Name = "Charon Shadow",
110    Path = "/Solar System/Dwarf Planets/Pluto",
111    Focusable = false
112  }
113}
114
115
116asset.onInitialize(function()
117  openspace.addSceneGraphNode(CharonProjection)
118  openspace.addSceneGraphNode(CharonText)
119  openspace.addSceneGraphNode(CharonShadow)
120end)
121
122asset.onDeinitialize(function()
123  openspace.removeSceneGraphNode(CharonShadow)
124  openspace.removeSceneGraphNode(CharonText)
125  openspace.removeSceneGraphNode(CharonProjection)
126end)
127
128asset.export(CharonProjection)
129asset.export(CharonText)
130asset.export(CharonShadow)