I’ve always been fascinated by those physical sky systems that can predict the Sun’s position based on longitude, latitude and time. Spinning that thought further it seemed enticing to also obtain the position of the Moon, Stars and Planets with such method and add some grounding to space and time of a 3D scene. After a bit of research I stumbled upon NASAS ephemerides page, where they advertise(d) the JPL Horizons system, but also some formulae to approximate the position of planets in a timespan of 3000BC-3000AD! If that system were transformed correctly it would be a great basis for this endeavour, I thought.
Since JPL Horizons works via online query of datasets I deciced to go with the approximate Keplerian formulae, as they would provide a continuous offline description that would be lightweight and cheap to calculate. Implement these, the provided keplerian elements (which define each body’s orbital properties) and the transforms to center the system around a planets surface position (or orbit) and we have a system that can approximate the planet’s/moon’s/star’s positions at around 0.5-1.5 degrees acurracy (from eg. the Earth’s surface). I still find it immensely fascinating to watch a simulated transit of mercury in 1605 or the weird patterns that planet’s orbits will draw in the sky.
So here you have a system to eg. create lighting by Sun-/Moonrises & Stars on Earth, watch the Earth rise on Mars or fly with the ISS. Satellites are a bit complicated tho (eg. the Moon which is only about 2 degrees accurate with this method), but we will get to that further down in the more in-depth presentation. For now here’s a few displays of the system’s output:
Transit of Mercury on November 11, 2019
Various planetary events in different coordinate systems. Scales are distorted so we can see anything
Moon and Jupiter on October 07, 1987 (left – measured, right – simulated)
INTRODUCTION:
COMING SOON
ToDo:
It would be interesting to combine this with a cached JPL Horizons query of the orbital elements. That way the accuracy for a specific point in time could be raised significantly.
An atmospheric shader like Arnolds implementation of this in Mantra/Karma would be great and possibly a lot faster than absorbing volumes (which work fine but slow down rendering by a lot)