Simulating Solar/Lunar Eclipse
Using accurate ephemeris of the Sun, Earth, and Moon, we can simulate both solar and lunar eclipses of the past and future. Using real images of the Sun/Earth/Moont layered as textured images in a 3-D model, the simulation can show realistic eclipses as seen by an observer in space. By allowing a user to choose (1) the observation date and (2) the location of the viewing camera, we will allow students to explore the environment of the eclipse phenomenon so that students can grasp the underlying principles that govern the eclipse even with the minimal information from a lecture.
In the simulation module, we can simulate the dynamics of shadows (both umbra and penumbra) via a fog
-like volume rendering.
This project is led by Ridwan and Emre
Ridwan and Emre are 1st-year engineering students at UGA, and they are deeply involved in creating 3D astronomical simulations using Blender, Unity, and Unreal Engine. Currently, they are working on the topic of Solar/Lunar Eclipses, and here is a short report on the progress.
Pending Tasks
- Develop a simulation with the following capabilities
- Interactive (or script-based) choice of observation date/time, and location on the Earth.
- Ability to choose the location of a viewing camera (i.e., observer's point of view) from a set of preselected locations of interest. This allows students to transport across the solar system.
Technical Aspects
Prerequisites
- We can use the
SkyTracker
as the starting point or build Sun/Earth/Moon specific model from the scratch. It's the latter that was chosen. - Accurate ephemeris (done already by obtaining data from NASA)
Newly created components from this simulation
These are newly created (or to-be-developed) components (functions, materials, cameras, etc.) from this topic simulation.
- Accurate Sun/Earth/Moon system in Blender with textured images on their surfaces
- By adjusting the sizes of blocking objects, we can see the changing shapes of eclipses.
- By changing the inclination angle of the lunar orbit, we can see the effect of a 3-D geometrical project and the resultant eclipse frequency.
- By putting the system in the extreme case, we can connect the concept of “transit” to the eclipse.
- By simulating transits of the Mercury at two different latitudes on Earth, one can even measure the distance to the Sun.
Challenging
By allowing a camera placed on the surface of the Earth at a given location (longitude and latitude) looking toward the Sun/Moon, this accurate simulation can even predict the type of solar eclipse whether it is (1) partial eclipse, (2) total eclipse, or (3) annular eclipse.
- User interactivities can be done via a Python script (eclipses.py)
Tracking Shadow conic regions Using three cones as shown in the below image, we can track the umbra and penumbra regions. Relative sizes and positions of these cones can be determined from radii of the Sun and Earth (or Moon) and the distance between them.
Check https://astro.unl.edu/classaction/animations/lunarcycles/shadowsim.html for a simple simulation of eclipse shadows on 2D. This can demonstrate the formation of shadow cones of Earth and Moon.
Projecting the total eclipse path on the Earth surface
This is called groundtracking
in satellite engineering. This page, https://docs.poliastro.space/en/stable/examples/Generating%20orbit%20groundtracks.html may provide some useful information.
Astro Concepts
- What is an eclipse?
- Requirements for an eclipse
- Effects of inclination, object sizes, and orbital sizes to eclipse frequency
- Conjunction & opposition ⇒ solar or lunar eclipse
- Similarities b/w transit and eclipse
- Saros cycle and predicting future eclipses
Updates in May 2024
Ridwan and Emre worked on the scene in Blender. Why are they still working in Blender? Why not in Unity as we had discussed before the CURO symposium? Here are shared documents from them.
- Ridwan's (04/21/2024): ridwanh_simulating_solarlunareclipse_project_documentation.pdf
- Emre's (05/14/2024): emre_0514.pdf
- Ridwan's (05/24/2024): blender_python_simulation_ui_documentation.pdf
import bpy class AccountPanel(bpy.types.Panel): bl_label = "Account" bl_idname = "OBJECT_PT_custom_account" bl_space_type = 'VIEW_3D' bl_region_type = 'UI' bl_category = "Custom Category" def draw(self, context): layout = self.layout for label in ["Account Name: "]: layout.label(text=label) class TimePanel(bpy.types.Panel): bl_label = "Time" bl_idname = "OBJECT_PT_custom_time" bl_space_type = 'VIEW_3D' bl_region_type = 'UI' bl_category = "Custom Category" def draw(self, context): layout = self.layout layout.label(text="Current Time:") layout.label(text="Select Time:") layout.prop(context.scene, "day", text="Day") layout.prop(context.scene, "month", text="Month") layout.prop(context.scene, "year", text="Year") class SettingsPanel(bpy.types.Panel): bl_label = "Settings" bl_idname = "OBJECT_PT_custom_settings" bl_space_type = 'VIEW_3D' bl_region_type = 'UI' bl_category = "Custom Category" def draw(self, context): layout = self.layout layout.label(text="Rendering Strength") layout.prop(context.scene, "rendering_strength", text="") layout.label(text="Travel Speed") layout.prop(context.scene, "travel_speed", text="") def register(): bpy.types.Scene.day = bpy.props.IntProperty(name="Day", min=1, max=31) bpy.types.Scene.month = bpy.props.IntProperty(name="Month", min=1, max=12) bpy.types.Scene.year = bpy.props.IntProperty(name="Year", min=1900, max=2099) bpy.types.Scene.rendering_strength = bpy.props.EnumProperty( name="Rendering Strength", items=[ ("LIGHT", "Light", ""), ("MEDIUM", "Medium", ""), ("ULTRA", "Ultra", "") ] ) bpy.types.Scene.travel_speed = bpy.props.IntProperty(name="Travel Speed", min=0, max=100) bpy.utils.register_class(AccountPanel) bpy.utils.register_class(TimePanel) bpy.utils.register_class(SettingsPanel) def unregister(): bpy.utils.unregister_class(AccountPanel) bpy.utils.unregister_class(TimePanel) bpy.utils.unregister_class(SettingsPanel) if __name__ == "__main__": register()