About
Geoid is an implementation of the technique in Animation of Orthogonal Texture-Based Vector Field Visualization (2007) by Sven Bachthaler and Daniel Weiskopf, using the ocean flow dataset from ECCO2 and earth images from Blue Marble Next Generation.
I've exposed parameters of the algorithm so you can see experiment. They are explained briefly here:
- Velocity Masking
- To make motion stand out from noise, mask areas with low velocity. N and M control the masking level by the function described in Lagrangian-Eulerian Advection of Noise and Dye Textures for Unsteady Flow Visualization 4.10.2.
- LIC
- Line integral convolution over random noise, i.e. streaks along the field. You can choose either orthogonal lines, which are easier to follow in motion, or parallel lines, which look nicer in my opinion. Step size controls the numeric integration step, while backwards/forwards controls the number of loops to take. Increasing backwards/forwards taxes the GPU more.
- Advection
- The previous texture is advected along the fiel, i.e. is moved like dye in moving water. The Step size and number of Steps is similar to LIC. Increasing step stize speeds up the apparent velocity of the animation.
- Blending
- New noise is blended with advected old noise in order to keep enough noise in the system to show motion. Set the blend level all the way to the left to see the raw LIC texture or all the way to the right to see just the advection.
- Land
- Change the land texture from day to night, purely for aesthetic reasons.
- Time
-
- Control the time-varying ocean current field.
- Load more Data
-
- Attempt to load the other 18 years of available ocean data. Caution, the data takes up about 256 MB of graphics memory total, and I don't know what happens if you don't have enough.
Implementation
geoid is implemented in coco + WebGL shaders. The main flow of the algorithm is very well suited to GPU shaders. coco smoothes out the annoying parts of javascript.
View source on Github.