Skip to content

Animated World Population

In this tutorial, we will learn how to visualize a time series of the world population in Blender 5.0.1.

Here's how the final result looks as an image:

World population time series

And here as a video:

Download earth_population.blend

Preparing Data

We start with a simple CSV file that contains urban agglomeration population data from the United Nations World Urbanization Prospects (WUP2018).

Download WUP2018-F22-Cities_Over_300K_Annual.csv

CSV file screenshot

From this dataset, we want the following columns:

  • Latitude and Longitude — the geographic coordinates
  • 1950–2035 — the population values for each year

Import into Blender

First, install the CSV Importer add-on and drag'n'drop the dataset into Blender's viewport.

Now we will see the spreadsheet like this:

CSV imported into Blender

Next, we add a background image. A good choice is an equirectangular projection of the Earth, since the latitude and longitude values from our dataset map directly to x and y coordinates in this projection.

Equirectangular projection of the Earth

Source: Wikimedia Commons — Equirectangular projection

Now we scale it to match the Earth's longitude and latitude, and adjust the colors with shader nodes:

Earth background with shader nodes in Blender

With this in place, we continue to add the data as bar charts using Geometry Nodes:

Bar charts on the world map in Blender

To color the bars, we create a separate reference cylinder and assign a material to it. This material uses a Color Ramp driven by the Z height of each bar, so taller bars appear in warmer colors. The Geometry Nodes setup then applies this material to all instanced bars automatically.

Bar material with height-based color ramp

To animate the bars over time, we replace part of the node tree so that it reads the year columns dynamically and interpolates between them. A single value input drives the current year: using Floor and Ceiling, we look up the two neighboring columns by name, then mix between them based on the fractional part. This way, scrubbing through the timeline smoothly transitions the bar heights from one year to the next.

Animation node setup with year interpolation

We add a Sun light object for lighting and switch to the Cycles render engine.

Sun lighting and Cycles render engine

Finally, we add a separate scene for the overlay: Showing the current year, title, data source, and a color legend. This overlay is rendered separately from the main 3D scene and then combined in DaVinci Resolve.

Overlay scene in Blender

Download earth_population.blend

Here's the final result:

World population time series

If you come up with your own creations and post them online, you're welcome to tag me on Bluesky!