Skip to content
codecrush®
Case Studies8 min readSeptember 12, 2026

We Built a 3D Map of Vietnam You Can Fly Through

A whole country, 58,296 triangles, one browser tab, no app. Here is how we build interactive 3D maps for campaigns — and a live one you can drag around right now.

Code Crush Team

Gamification Agency

A 3D terrain map of Vietnam rendered in the browser, with Fansipan, Ha Long Bay, Hue and the Mekong Delta labelled

Most campaign sites track progress with a bar. It fills up from left to right. Everyone claps politely.

We were asked to show a million miles of greener driving spread across Vietnam, and a progress bar felt like a waste of a perfectly good country.

So we built the country.

Here it is. Not a video, not a screen recording — the actual scene. Drag it, spin it, zoom in on the mountains. Then grab the slider along the bottom and watch the forests come in.

The live map. Built as a concept for a Toyota Vietnam campaign pitch, so the mileage figures are demo data — the terrain, the roads and the trees are real work.
Open in a new tab

Take your time. The rest of this will still be here.

A Progress Bar Is a Missed Opportunity

Here is the thing about geography in marketing: brands sit on top of it constantly and almost never use it.

Your customers are somewhere. Your stores are somewhere. Your campaign is winning in Hanoi and doing nothing in Cần Thơ, and somebody has that fact in a spreadsheet, in a column, next to another column. A country is the most intuitive chart ever invented and we keep flattening it into bars.

The moment you put the actual place on screen, three things happen without you asking:

People look for their own town first. Every single time. It is the most reliable engagement mechanic we have ever shipped.
Regional competition becomes obvious instead of explained. Nobody needs a legend to understand that the north is greener than the south.
Progress stops being a number and becomes a landscape. "38%" means nothing. A country that is visibly half-forested means something.

The usual objection is that a map is decoration. It is not. It is the interface.

What You Are Actually Dragging Around

The Vietnam in that window is a real elevation model, not an illustration of one. Fansipan is tall because Fansipan is tall.

On a capable laptop it renders as 58,296 triangles of terrain. The roads and rivers threaded across it come from OpenStreetMap data, which is why the highway network actually goes where the highway network goes, and why there is an attribution line in the corner of the map — OSM data is free to use and it is not free to pretend you made it.

The north at close range: real relief, OSM road and river geometry, low-poly forest, and a couple of landmark models. The cable-car pylons climbing the ridge are hand-placed.
The north at close range: real relief, OSM road and river geometry, low-poly forest, and a couple of landmark models. The cable-car pylons climbing the ridge are hand-placed.

Everything ships inside one self-contained HTML file. The terrain mesh is baked into it as a binary blob, the fonts are embedded, the models are embedded. There is no tile server to pay for, no API key to rotate, nothing to break in eighteen months when a vendor changes their pricing page. You can put the file on a USB stick and it still works on a plane.

That last part is not a gimmick. It is how a client reviews a pitch in a meeting room with hostile wi-fi.

Making a Country Recognisable Is Not About Accuracy

This is the part that surprised us the first time.

You can model a coastline to the metre and still have people squint at it. Recognition does not come from precision, it comes from the four or five places a person actually has feelings about. So the map names Fansipan, Hạ Long Bay, Huế, and the Mekong Delta, and lets the rest be beautiful and anonymous.

Same logic for the props. The trees are not botanically correct. There is a pagoda roof up north, a few houses on stilts, a cluster of buildings where a city should be — all low-poly, all cheap to draw, all doing an enormous amount of work convincing you that you are looking at somewhere rather than something.

A map that is 100% accurate and 0% legible is a GIS export. We were not asked for a GIS export.

The Slider Is Where the Campaign Lives

Everything above is scenery. The mechanic is the slider.

Drag it and the country greens: bare hills fill with forest, colour shifts, the counter climbs toward a million. Drop it back to zero and the place goes pale and empty. That is the entire campaign narrative in one gesture, and it takes about four seconds to understand with no copy at all.

Left: the slider at zero. Right: the slider at a million. Same terrain, same camera, entirely different feeling — and no one needs the mechanic explained to them.
Left: the slider at zero. Right: the slider at a million. Same terrain, same camera, entirely different feeling — and no one needs the mechanic explained to them.

We keep coming back to this pattern because it inverts the usual relationship. Normally the audience reads about the campaign's progress. Here they operate it, which means they have to find out what the maximum looks like. Everyone pushes the slider to the end. Everyone.

Then You Add the Party Tricks

Once a country is on screen and running at a decent frame rate, adding spectacle is almost free, so we did not hold back:

A guided flyover. Press one button and the camera lifts, banks and tours the country in nine stops, which is the same thing as an autoplay video except the viewer can grab the controls at any moment and go somewhere else.
Region focus. North, centre, south — each one reframes the camera instead of loading a new page.
A wave of light that rolls up the length of the country when a milestone lands.
A drone show that launches from the whole map at 250,000 miles, because somebody asked "what happens when we hit the first quarter?" and "a notification appears" was a bad answer.

None of these are technically hard once the scene exists. That is rather the point. The expensive part is the country; the set pieces are a weekend.

Mid-flyover. The camera tour is scripted but never locks the viewer out — grab the map at any moment and you take over.
Mid-flyover. The camera tour is scripted but never locks the viewer out — grab the map at any moment and you take over.

Making 16 MB Behave Itself

Now the unglamorous half, because a map nobody can load is a map nobody has seen.

That single file is about 16 MB, and most of it is terrain. Some of what we do about that:

The mesh has tiers. The scene checks what it is running on and builds terrain to match. The 58,296-triangle version is the top tier; weaker hardware gets a lighter country rather than a slideshow of a detailed one.
Geometry is Draco-compressed, and the decoder is served from our own origin — a campaign should not fall over because a third-party CDN had a bad afternoon.
Nothing loads until you ask. Notice that the embed above did not fetch 16 MB when you opened this article. It waited for a click. Any demo we put in front of an audience gets the same treatment, because our own page speed is not worth sacrificing for a scene most readers will scroll past.
The loading screen does something useful. It draws the outline of Vietnam while the terrain is being assembled, which reframes a wait as an intro. Cheap trick. Works every time.

What a Map Like This Cannot Do

Fair is fair.

It is not live GIS. The data in the demo is simulated — that counter is a slider, not a database, and a real campaign needs a backend behind it with actual trips, actual identities, and actual anti-fraud before anyone claims a real number in public.

It is not a routing engine either. It will not tell you the fastest way from Huế to Đà Nẵng. It draws roads; it does not think about them.

The terrain is stylised. Real elevation, dramatised — heights are exaggerated because a geographically honest Vietnam viewed from orbit is quite flat and quite boring.

And it is a heavy page. Gorgeous, but heavy. Anything shipped to a broad mobile audience gets a lighter build, a lower tier and a 2D fallback, which is a real trade-off rather than a footnote.

Maps We Can Build for You

If your campaign has a where in it, it probably wants a map. Some shapes we like:

Campaign shapeWhat the map does
National collective goalCountry fills, greens, lights up as everyone contributes
Store or dealer networkLocations as a 3D landscape, not a pin-drop list
Regional competitionNorth vs south vs centre, live and legible
Route or journeyA traced path with stops that unlock
Property or developmentSite, surroundings and phasing in one scene

We build them in Three.js, with real elevation data, real OpenStreetMap geometry, and models made in Blender — the same pipeline we describe in our campaign proposal process. If you would rather see what else we do with WebGL, there is a whole studio's worth here and a catalogue of branded games.

Or skip the reading and send us a brief. If it has a country in it, we are already interested.

The Vietnam map is a concept prototype designed and built by Code Crush for a Toyota Vietnam campaign pitch. Mileage figures, rewards and progress in the demo are illustrative. Road and river geometry © OpenStreetMap contributors.

Tagged with

3D mapsinteractive mapWebGLThree.jsdata visualisationOpenStreetMapterrainVietnamcampaign mechanicsbranded games
Free Newsletter

Get Gamification Insights Delivered Weekly

Join brand managers and marketers getting our best content on branded games, engagement strategies, and interactive marketing — no spam, unsubscribe anytime.

No spam. Unsubscribe anytime. We respect your inbox.

Let's Build Something Your Audience Will Love

From branded games to immersive 3D experiences — we bring engagement to life.