Skip to content
codecrush®
Our Process12 min readSeptember 12, 2026

Playable Campaign Proposals & Custom 3D Models

Most agencies pitch slides. We pitch a playable prototype and a rigged 3D model you can spin in your browser. Inside the Code Crush campaign proposal process.

Code Crush Team

Gamification Agency

A Code Crush campaign concept modelled in Blender and rendered in real time on the web

Any agency can write a deck. Ten slides of strategy, a moodboard, a mechanic described in one careful paragraph, and a line item near the back that reads 3D assets: TBC.

We stopped doing that.

When Code Crush answers a brief, the deliverable is a link. You open it on your phone in the meeting and the thing moves: a game you can actually lose, a prize wheel that really spins, a mascot you can drag around with your thumb. The strategy is still in there — it is just underneath something you can press.

This is the honest version of how that gets made. What goes into a campaign proposal, how we model and rig the 3D that carries it, where the hard parts are, and what we refuse to promise.

A Code Crush concept modelled and rendered in Blender, then shipped to the browser as a real-time 3D scene. The proposal and the production asset are the same file.
A Code Crush concept modelled and rendered in Blender, then shipped to the browser as a real-time 3D scene. The proposal and the production asset are the same file.

Why Most Campaign Proposals Die in the Room

A deck asks the client to do the imagining. It describes a feeling — "playful", "immersive", "snackable" — and then asks a marketing director to sign a budget against their own mental picture of it. Two things go wrong.

The picture in the room is not the same picture. Everyone nods at "3D spin-to-win", and four weeks later the brand team is surprised by the lighting, the weight of the wheel, the way the pointer lands. Nobody lied. Nobody was ever looking at the same thing.

The deck hides the risk. Slides are frictionless. They never reveal that the mechanic needs a platform that shut down last year, that the 3D model will not load on a mid-range Android in a TikTok in-app browser, or that the reward logic cannot be audited. Those discoveries arrive after the purchase order.

A playable proposal removes both problems on day one. If it runs, it runs. If it does not, you found out before the money moved.

What's Inside a Code Crush Campaign Proposal

Every proposal we send is built from the same five parts. The balance shifts with the brief; the shape does not.

DeliverableWhat it actually is
Playable prototypeA real build on a real URL. Phone, desktop, QR on a poster, in-app browser.
3D assetsEditable Blender sources plus web-ready glTF, modelled to the brief's real dimensions.
Beauty rendersOffline-rendered key visuals for the deck, the client's internal sell-in, and social.
Mechanic and reward specScoring, probabilities, guaranteed rewards, leaderboards, and where fraud gets checked.
A limits pageWhat the prototype does not yet do, and what a live campaign would still need.

That last one costs us pitches occasionally. It has also never cost us a client after signature, which is the trade we prefer.

The Proposal Process, Step by Step

1Read the brief literally. We write down the mechanics as specified — tracking method, round length, bonus conditions, reward tiers, channel — before we have any opinions.
2Stress-test each requirement against reality. Does the platform still exist? Does the tracking work on the devices the audience actually holds? Can the reward logic survive an audit? This step is where proposals earn their money.
3Model the hero object first. The wheel, the pack, the cabinet, the mascot — whatever the campaign is about gets built in 3D before the UI exists, because everything else is sized around it.
4Build the playable loop. One end-to-end path: intro, play, result, reward, share. Not every screen. The loop.
5Render the deck out of the same scene. The key visuals come from the model we just built, so the slides and the build can never disagree.
6Write down the limits. Then send one link.
A proposal concept modelled in Blender and driven in real time on the web: static parts are grouped by material to cut draw calls, while the fans, controls and screen stay separate so they can animate.
A proposal concept modelled in Blender and driven in real time on the web: static parts are grouped by material to cut draw calls, while the fans, controls and screen stay separate so they can animate.

When the Brief Asks for a Platform That No Longer Exists

The clearest example of why step two matters came from Decathlon Vietnam, who asked for a viral face-tracking filter game on TikTok and Instagram.

We could not build that brief as written, and neither could anyone else. Meta shut Spark AR — its third-party AR filter platform — down on 14 January 2025, so custom Meta filters cannot be published at all. TikTok's Effect House still exists, but it is a closed editor: your rewards, your CRM and your fraud checks have to live inside someone else's sandbox.

So we delivered the same experience as WebAR instead — face tracking with Google's MediaPipe FaceLandmarker, running in the mobile browser, shared by link or QR. One link works in TikTok's in-app browser, Instagram, Zalo, Messenger or off a poster, and the whole reward-and-data loop stays first-party. The full write-up is in Decathlon "Deal Frenzy": a shareable WebAR face-filter game.

That is what a proposal is for. Not to flatter the brief — to find the wall before the campaign does.

Custom 3D Models, Built in Blender and Shipped to the Browser

Our 3D is not stock. It is modelled in Blender, and — for anything we expect to revise — it is modelled by script, so the whole asset can be rebuilt from one command.

Take the Lucky Wheel. A single headless Blender run regenerates three things at once: the editable .blend source, the wheel.glb the game loads (about 635 KB), and the beauty render the configurator shows in its template picker. Change a bevel, re-run, and the source, the shipped model and the deck visual all move together. There is no stale render sitting in a folder contradicting the build.

That discipline is what made a collection affordable. The wheel now ships as four distinct sculptures — Signature, Orbit, Atelier and Prism — each with its own frame, materials and lighting, and each swappable in the configurator without touching the prizes, probabilities, uploaded images or centre logo.

Three of the four Lucky Wheel sculptures — Orbit, Atelier and Prism — regenerated from scripted Blender sources. Same geometric contract, same game code, entirely different object.
Three of the four Lucky Wheel sculptures — Orbit, Atelier and Prism — regenerated from scripted Blender sources. Same geometric contract, same game code, entirely different object.

Materials are named deliberately, not decoratively. The wheel exposes CC_Chrome, CC_Hub, CC_Pointer and CC_Accent, so a brand's palette is applied live in the configurator instead of coming back to us as a re-export request. Sector artwork and the centre medallion sit on their own independent textures, customisable from 2 to 12 sectors.

The same thinking scales up. In the 3D apartment showroom, the architectural geometry is measured in metres, colour maps are sRGB while data maps stay linear, and the scene runs HDR image-based lighting, 4096px directional shadows with PCSS penumbra, screen-space ambient occlusion, planar parquet reflections, restrained bloom and ACES filmic tone mapping — in a browser, in real time. A prefiltered cube capture of the furnished interior feeds the stone, brass and dark metal, and refreshes once a lighting or finish change has settled.

The Geometry Contract: Why the Model and the Game Never Drift

Here is the part nobody puts in a pitch deck, and the part that decides whether a campaign embarrasses a brand.

A prize wheel is a promise. If the pointer visually lands between two sectors while the server says the player won a scooter, the campaign has a credibility problem and the client has a support problem. So the model and the code share an explicit, written geometry contract:

The model faces +Z and keeps its authored coordinates on export — no silent axis conversion between Blender and the web.
The prize circle sits at a radius of 0.948, at Z = 0.061.
The pointer stays at twelve o'clock, and sector 0 begins centred underneath it.
The disc rotates around Z independently of the frame and the medallion, so a new sculpture never changes where a prize lands.

Because that contract is written down, it can be tested. The Lucky Wheel ships with 28 targeted tests covering the draw itself, zero-weight exclusion, content preservation, pointer alignment for every sector count from 2 to 12, and loading all four GLB files through the game's own decoder. Swapping the 3D model cannot move the prize. That is a design decision, verified on every commit.

Rigged 3D Characters From Flat Reference Art

Mascots are the hardest ask in this category, because a brand's character already exists — as flat illustration, in a usage guide, in everyone's memory. It has to arrive in 3D recognisably itself.

For Toyota Vietnam's Million Green Miles pitch we rebuilt the campaign mascot, Miraito, as a fully rigged 3D character from supplied reference art: 33 bones, 8 IK controls in Blender, and 4 facial expressions driven as morph targets. It ships with five motion states — idle, walk, wave, celebrate, point — auto-blink, and independent left and right eye control. The whole build, and the review tool around it, is written up in how we turn a 2D mascot into a 3D character.

Then we wrapped it in a review tool, because a rig you cannot inspect is a rig nobody can approve. The client opens one link and gets:

Drag to orbit, pinch or scroll to zoom, plus fixed inspection angles — face, three-quarter, profile, back.
Playback with loop, pause, a speed dial, and single-frame stepping at 1/24s for animators.
Skeleton and wireframe overlays, and a rest pose.
A quality switch between the Detailed and Mobile versions of the model, so the brand team sees exactly what a phone will render — not a desktop-only beauty pass.
A language toggle, because the people approving it and the people briefing it are not always reading the same language.

One caveat we hold to: where a mascot's usage guide forbids recolouring or redrawing the character, our 3D reconstruction is an approximation for review and gets brand-team sign-off before anything ships — and any flat placement in the deck composites the official artwork rather than our version of it.

Three Routes to a 3D Model — and When We Use Each

Not every object deserves the same investment. Deciding that up front is most of the craft.

RouteUse it forWhat you get
Scripted Blender modellingBrand-critical heroes: the pack, the wheel, the mascot, the cabinetExact dimensions, named materials for live recolouring, one-command rebuilds
AI image-to-worldEnvironments and set dressing generated from a single reference photoMeshes with PBR materials, an explorable environment, lighting and audio in hours
Licensed and CC0 librariesProps nobody looks at twiceCorrect licences, checksum-pinned sources, reproducible downloads

The middle route is newer than most agencies realise, and we have put it into production: a single photograph can now yield object meshes, a walkable environment, matched lighting and spatial audio. We took that pipeline apart in Image Blaster: turn a single photo into a walkable 3D world.

The third route matters more than it sounds. Every downloaded material and HDR in our showroom is recorded with its source page and checksum in a manifest, and the whole set can be re-fetched with one script. A client should never inherit an asset nobody can license or replace.

Making 3D Fast Enough for a Mid-Range Android

A beautiful model that stalls on the device your audience owns is a failed model. So the performance work is part of the modelling work, not a later pass.

Compressed geometry, self-hosted. Our glTF files are Draco-compressed, and the decoder is served from our own origin rather than a third-party CDN — a campaign should not depend on someone else's script host.
Draw calls treated as a budget. In the arcade scene, static parts are grouped by material; only the fans, controls and screen stay separate, because only they animate.
Real network ceilings. Playable-ad formats cap the bundle. Our playable ad ships the full wheel collection embedded in a single HTML file at roughly 4.93 MB, deliberately under the 5 MiB limit — and it exports to Facebook Instant Games, playable ads, and MRAID for Meta, Google, TikTok and Moloco.
Motion that behaves. Real-time scenes cap at 30fps, pause when off-screen, and honour prefers-reduced-motion.
Fallbacks that are real. Every 3D experience has a route for a device that cannot run it: a 2D wheel, poster images, a drag-controlled game instead of a face-tracked one. Tested down to a 320 × 568 screen.

What We Don't Promise

The limits page is a real page. A few of the things on ours:

A visual-quality pass is not a mobile-performance pass. The showroom's current delivery is deliberately heavy — roughly 120 MiB of materials and HDRs plus 19 MiB of furnishing models, uncompressed, desktop-first. Texture compression and a mobile budget are a separate, scoped piece of work, and we say so instead of implying the desktop render is the phone experience.
It is real-time rendering, not physics. Bounced daylight is approximated with area lights and an environment map. It is not a path-traced or geographically calibrated sun simulation, and a photographic backdrop has no local parallax.
Prototype leaderboards are not live leaderboards. In a proposal, scores are seeded client-side. Real prize money needs a server, identity checks, attempt caps and de-duplication before launch.
On-device face tracking is device-dependent. It needs a reasonably modern phone and camera permission, which is exactly why the fallback mode exists.
AI-generated 3D needs a human pass. It is a fast route to a scene, not a finished brand asset.

The Proposal Is the First Sprint of Production

Because the proposal is a real build, approving it does not restart the work.

The Blender sources are yours, editable, in an open format — no proprietary scene file, no lock-in. The glTF the prototype loaded is the glTF production loads. The geometry contract the prototype was tested against is the contract the live campaign inherits. The renders in the deck came out of the same scene. When a client says yes, we are not opening a blank file; we are hardening something that already runs.

That is also why the game builder platform exists: once the hero model respects a contract, the campaign around it — prizes, probabilities, palettes, copy, exports — becomes configuration rather than a rebuild.

Bring Us a Brief

If you have a campaign that needs an object at the centre of it — a product, a mascot, a prize, a machine — the fastest way to find out whether it works is to hold it.

See what we have built in our projects, browse the branded games catalogue, read how the 3D rendering stack works, or just send us the brief. We will send back a link.

Technical details in this article describe work built by Code Crush. Client prototypes are concepts unless stated otherwise; the Spark AR shutdown date is per Meta's public announcement.

Frequently Asked Questions

How long does a playable campaign proposal take?
Days, not weeks, for a single playable loop plus one hero 3D asset. The variable is 3D scope: a scripted hero object is fast, while a rigged character with facial expressions and several motion states is the longest item on the list.
Do we get the actual 3D files, or just a video?
The actual files. Editable Blender sources, web-ready glTF/GLB, and the offline renders — all in open formats that drop straight into Blender, Unity, Unreal or a web viewer.
Can you model our product or mascot accurately from what we have?
Yes. We work from reference art, photography, packaging or CAD. Where a licensed character carries usage rules that forbid redrawing or recolouring it, our 3D build is an approximation for review and goes to the brand team for sign-off before anything ships.
Will the 3D actually run on low-end phones and in-app browsers?
That is designed in, not hoped for: Draco-compressed geometry served from our own origin, a separate mobile quality tier, a 30fps cap with off-screen pausing, reduced-motion support, and a 2D fallback when WebGL is unavailable. We test down to a 320px-wide screen.
What do you need from us to start a campaign proposal?
The brief, your brand assets and guidelines, the reward mechanics you have in mind, and the market and channel you are targeting. If a requirement cannot survive contact with a real device or a real platform, you will hear it from us in the first conversation rather than after signature.
Can the proposal be published as a live campaign?
Yes. The same build exports to Facebook Instant Games, playable ads and MRAID for Meta, Google, TikTok and Moloco, or ships as a hosted link and QR code. What a live campaign adds is the server side: real draws, stock reservation, quotas, receipts and anti-fraud.

Tagged with

campaign proposal3D modelingBlenderThree.jsWebGL3D charactersriggingglTFbranded gamesgamificationpitch processVietnam
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.