Multiple cloud layers on a planet

All tutorials about Celestia go in here. For Celestia itself, add-ons, textures, scripting, etc.
Topic author
W0RLDBUILDER
Posts: 122
Joined: 02.06.2010
With us: 14 years 5 months

Multiple cloud layers on a planet

Post #1by W0RLDBUILDER » 29.05.2011, 18:12

Multiple cloud layers can be very useful and realistic on a planet. Using them can create the appearance of changing weather patterns on Terran or Jovian planets. But, Celestia doesn't support them! So, until Celestia gets support for more than one cloud layer, use this workaround. We'll assume that you already have the separate cloud maps. Note that using different cloud maps for different layers is important to prevent a "blurred/cloned" effect. Here's the default SSC for Earth:

Code: Select all

"Earth" "Sol"
{
   Texture "earth.*"
   NightTexture "earthnight.*"
   
   # SpecularTexture "earth-spec.*"
   Color [ 0.85 0.85 1.0 ]
   SpecularColor [ 0.8 0.8 0.85 ]
   SpecularPower 25.0
   HazeColor [ 1 1 1 ]
   HazeDensity 0.3
   Radius 6378.140  # equatorial
   # Oblateness 0.0034

   Atmosphere {
      Height 60
      Lower [ 0.43 0.52 0.65 ]
      Upper [ 0.26 0.47 0.84 ]
      Sky [ 0.40 0.6 1.0 ]
      Sunset [ 1.0 0.6 0.2 ]

      CloudHeight 7
      CloudSpeed 65
      CloudMap "earth-clouds.*"
      CloudShadowDepth 1.0

      Mie 0.001
      MieAsymmetry -0.25
      Rayleigh [ 0.001 0.0025 0.006 ]
      MieScaleHeight 12
   }

   CustomOrbit "vsop87-earth"

   # Overridden by CustomOrbit
   # EllipticalOrbit {   
   #   Period            1.0000
   #   SemiMajorAxis     1.0000
   #   Eccentricity      0.0167
   #   Inclination       0.0001
   #   AscendingNode   348.739
   #   LongOfPericenter 102.947
   #        MeanLongitude   100.464
   # }

        # Orientation of Earth's axis with respect to the ecliptic plane and
        # equinox of J2000 is computed with the long period extension of
        # extension of the the P03 precession model presented in
        # "Long-periodic Precession Parameters", J. Vondrak (2006)
   BodyFrame { EclipticJ2000 {} }
   CustomRotation "earth-p03lp"

   # Overriden by CustomRotation
   # UniformRotation
   # {
   #    Period         23.93447117
   #    Inclination   -23.4392911
   #    MeridianAngle 280.147
   # }

   Albedo            0.30
}

So now we have a planet to put the clouds on. The lowest cloud layer is already there. The next thing we need is to copy/paste the SSC and change some things. Delete the copy's texture, rotation, etc - we don't need them. You don't even need a good portion of the atmosphere, all you want is the clouds.

Code: Select all

"Earth" "Sol"
{
   Texture "earth.*"
   NightTexture "earthnight.*"
   
   # SpecularTexture "earth-spec.*"
   Color [ 0.85 0.85 1.0 ]
   SpecularColor [ 0.8 0.8 0.85 ]
   SpecularPower 25.0
   HazeColor [ 1 1 1 ]
   HazeDensity 0.3
   Radius 6378.140  # equatorial
   # Oblateness 0.0034

   Atmosphere {
      Height 60
      Lower [ 0.43 0.52 0.65 ]
      Upper [ 0.26 0.47 0.84 ]
      Sky [ 0.40 0.6 1.0 ]
      Sunset [ 1.0 0.6 0.2 ]

      CloudHeight 7
      CloudSpeed 65
      CloudMap "earth-clouds.*"
      CloudShadowDepth 1.0

      Mie 0.001
      MieAsymmetry -0.25
      Rayleigh [ 0.001 0.0025 0.006 ]
      MieScaleHeight 12
   }

   CustomOrbit "vsop87-earth"

   # Overridden by CustomOrbit
   # EllipticalOrbit {   
   #   Period            1.0000
   #   SemiMajorAxis     1.0000
   #   Eccentricity      0.0167
   #   Inclination       0.0001
   #   AscendingNode   348.739
   #   LongOfPericenter 102.947
   #        MeanLongitude   100.464
   # }

        # Orientation of Earth's axis with respect to the ecliptic plane and
        # equinox of J2000 is computed with the long period extension of
        # extension of the the P03 precession model presented in
        # "Long-periodic Precession Parameters", J. Vondrak (2006)
   BodyFrame { EclipticJ2000 {} }
   CustomRotation "earth-p03lp"

   # Overriden by CustomRotation
   # UniformRotation
   # {
   #    Period         23.93447117
   #    Inclination   -23.4392911
   #    MeridianAngle 280.147
   # }

   Albedo            0.30
}

"Earth_Clouds" "Sol"
{   
   Color [ 0 0 0 ]
   Radius 6377.140  # equatorial
   Mesh "none.3ds"
   # Oblateness 0.0034

   Atmosphere {
      CloudHeight 8
      CloudSpeed 55
      CloudMap "earth-clouds2.*"
      CloudShadowDepth 1.0
   }

   CustomOrbit "vsop87-earth"

   # Overridden by CustomOrbit
   # EllipticalOrbit {   
   #   Period            1.0000
   #   SemiMajorAxis     1.0000
   #   Eccentricity      0.0167
   #   Inclination       0.0001
   #   AscendingNode   348.739
   #   LongOfPericenter 102.947
   #        MeanLongitude   100.464
   # }

        # Orientation of Earth's axis with respect to the ecliptic plane and
        # equinox of J2000 is computed with the long period extension of
        # extension of the the P03 precession model presented in
        # "Long-periodic Precession Parameters", J. Vondrak (2006)
   BodyFrame { EclipticJ2000 {} }
   CustomRotation "earth-p03lp"
}

You don't need to have a mesh "none.3ds" anywhere, you're just specifying a mesh that doesn't exist so Celestia doesn't draw a surface. We've also decreased the radius a bit and increased the cloud height. The cloud speed has been lowered and the Earth clone has a different cloud map. Generally the cloud textures should have fewer and fewer clouds as more and more cloud layers are piled on top of each other (I hope I'm making sense). After saving the ssc and loading Celestia you should notice a change in Earth's appearance. The clouds have changed. Sync orbit, turn up ambient light, and speed up time. You should see the weather patterns changing. You're pretty much done at this point. If you want, copy/paste the Earth clone but again increase the height and decrease the speed, then change the name of the second clone, and set its cloud map to something else. Save again and press Ctrl+G to go to the surface. As you descend you should see the clouds approaching you at different speeds and pass through them at different times. Earth should also look great from space.

Return to “Tutorials”