The asset budget is what breaks 3D at 500 units, not your polygon count

Key Takeaways
- At 500+ units the load-time ceiling is a fixed asset budget: texture memory, draw calls, and geometry that must fit the weakest phone in your audience.
- LOD tiers, texture atlasing, and chunked streaming order push that budget further, but cannot buy back memory a 3-year-old handset does not have.
- Safa Al Fursan (528 units) and Safa Almukaymen (535 units) stay smooth on any handset because the render finishes before the link opens.
- Pre-rendering removes the per-device asset ceiling; the render-location move is why (see the canonical pre-rendered vs real-time post).
On the sales team's laptop, the masterplan is flawless: you glide from a bird's-eye view of the whole district down to a single balcony without a hitch. Then a high-net-worth investor opens the exact same link on a mid-range Android in the sales gallery, and it spins. Ten, twenty, thirty seconds of a loading state while the phone tries to download and assemble an entire neighborhood. On a six-unit boutique building nobody notices. On a 500-unit off-plan development, where the whole pitch is see the entire place before a brick is laid, that stall is the moment the lead cools.
Grinding on the model has a ceiling
The reflex, when a big scene loads slowly, is to optimize the 3D harder. Decimate the meshes. Tune the levels of detail. Atlas the textures, batch the draw calls, lazy-load the geometry chunk by chunk as the camera moves. All of it is real work and all of it helps. What it never does is change which machine does the work: every frame is still assembled on a device in someone else's pocket, and no amount of tuning upgrades the phone in your buyer's hand.
In our experience the useful question is not how much more you can optimize. It is what budget you are optimizing against, and whether that budget is even reachable. At 500-plus units it is fixed by the weakest device in your addressable market. The mistake most teams make is to keep grinding as if the ceiling were soft. You can shave a heavy scene for months and still lose the one investor whose three-year-old handset was the entire reason you built a browser experience.
What an asset budget actually is at 25-building scale
An asset budget means the set of hard numbers a scene has to fit inside before it will run at all on a target device. It is not a style preference. Cross it and the browser tab does not render slowly, it crashes or thrashes the GPU. Four line items dominate at development scale.
Texture memory. A mobile GPU gives you a working set on the order of a few hundred megabytes for textures, shared with everything else the browser is doing. Every facade material, every ground texture, every interior finish competes for it. At 25 buildings with distinct materials, naive texturing blows past that ceiling long before the geometry does, and the browser starts evicting and re-uploading textures mid-pan, which is the stutter buyers read as "broken."
Draw calls. Each distinct mesh-plus-material the GPU has to issue separately is a draw call, and a mobile renderer starts dropping frames in the low thousands per frame. 528 units, each with balconies, railings, window frames and door handles, is tens of thousands of them unless you batch aggressively.
Geometry / triangle count. A single detailed apartment interior can run into the millions of triangles. Multiply by 528 and no phone finishes the frame. The whole scene can never be resident at once, which is why the budget is really about what is loaded when, not what exists.
Download weight. Before any of the above matters, the model has to arrive over a hotel Wi-Fi or an LTE connection. A multi-hundred-megabyte initial payload is seconds of blank screen, and that is the window the earlier bounce data covers.
The three moves that stretch the budget, and where each stops
The optimization playbook exists precisely to fit those numbers. It is worth knowing exactly how far each move buys you, because each has a wall.
LOD tiers swap a full-detail mesh for progressively cheaper versions as the camera pulls back. At district scale you might carry four or five tiers per building: full interior geometry only when a unit fills the screen, a simplified shell at street level, a boxy proxy at the skyline. LOD is what makes the macro-to-micro pan possible at all. Its limit: the close tier still has to be full detail, so the moment a buyer zooms into one duplex, that one unit's full triangle and texture cost lands on their device in full. LOD moves the average cost down; it does nothing for the peak.
Texture atlasing packs many small textures into one large sheet so the GPU binds it once instead of hundreds of times, cutting draw calls and state changes. It is one of the highest-leverage moves at 25-building scale. Its wall is total texture memory: atlasing changes how many binds, not how many megabytes must be resident. Past the memory budget, no packing scheme helps.
Chunked geometry with a streaming order loads the world in pieces and decides which pieces first. Get the order right — the buildings in view before the ones behind the camera, the exterior shell before the interior a buyer has not opened yet — and time-to-first-interaction drops sharply because you are never downloading geometry nobody is looking at. Get it wrong and the buyer stares at a hole in the map while a distant building loads. Streaming order is the single most underrated lever here, and it is pure sequencing: same total bytes, very different perceived load. Its wall is the same as LOD's: it defers cost, it does not remove it. Everything a buyer actually looks at still has to arrive and still has to fit.
Vinode's own stated platform figure, even on a low-powered phone. Individual projects report faster.
Why the ceiling is fixed, not soft
Stack those three moves as well as anyone in the industry and you arrive at the same place: a peak cost as soon as one unit is inspected up close, bounded by the texture memory and triangle budget of the device in the buyer's hand. That number does not move because you tuned harder. It moves only when the buyer buys a newer phone, which is not a lever you control.
This is the part the usual "how to optimize your web 3D" guides leave implicit. Every technique they list — decimation, atlasing, LOD, instancing, draw-call batching — operates below the ceiling. They help you reach the budget. None of them raise it. Push the scene to a government-scale masterplan whose sightlines run clear across a district, and there is always a handset weak enough that the reachable budget and the required budget do not meet. At that point you are not under-optimized. You are optimizing a variable that has run out of room.
The dangerous case is the scene that passes on the team's test devices and fails in the field. It runs on the two flagship phones in the office, so it goes live, and the memory ceiling only bites on the older mid-range handset that never got tested. Budget against the weakest device you expect in your audience, not the newest one on the desk. If you can't name that device, you haven't set a budget yet.
Proof at 528 units: Safa Al Fursan
Safa Al Fursan in Riyadh is the asset-budget problem at full size, and one you can open and test. 67,000 square meters, 25 buildings, 528 premium units including two-story duplexes, plus the anticipated Al Fursan government mega-project rendered into the far view rather than a flat skybox. Every one of the four budget line items is at its worst here at once: distinct materials across 25 buildings, a draw-call count in the tens of thousands, multi-level duplex interiors, and a far-view environment that has to read at district scale.
In the delivered experience the frame rate holds steady while you pan across all 25 buildings or read the layout of one duplex floor by floor, and it holds identically on a flagship handset or the cheapest Android in the room. The reason is not that the asset budget was beaten by tuning. It is that the buyer's device never runs the budget at all: the heavy rendering finished on Vinode's infrastructure before anyone opened the link, so what streams down is video plus light interactive layers, not the 528-unit scene graph.
The streaming-order test: Safa Almukaymen
Safa Almukaymen in Medina makes the streaming-order point concrete, because it loads the whole city context — 535 units across 14 buildings, the real Medina skyline, and a government investment district — interactive in the browser in under a second, per the case study. At that scale, a real-time engine's success or failure would hinge almost entirely on streaming order: which of the 14 buildings and how much of the surrounding city arrives first. A bad order leaves the buyer waiting on a distant, invisible building. A good one has the in-view district ready while the rest fills in behind.
A pre-rendered build sidesteps the ordering problem for the buyer's device entirely. The sub-second load is not a streaming-order win squeezed out of a hard budget; it is the absence of a per-device budget. That is also why the same project ships as a self-contained offline kiosk on the sales floor: switch the network off and it keeps running, because the rendering already happened. A buyer can filter all 535 units without lag or thumb from the district-wide view into the facade of one unit, on the show display or their own phone.
The render-location move underneath all of this
One variable decides whether the asset budget is even the buyer's problem: where the rendering happens. Move the compute off the viewer's device — pre-render once on your own infrastructure, then stream video plus lightweight interactive layers — and the per-device texture, draw-call and geometry budgets stop applying to the phone entirely. That is the whole reason Safa Al Fursan and Safa Almukaymen hold frame rate on any handset. The full argument for that trade, and when it does and doesn't win against real-time rendering, is the canonical pre-rendered 3D over real-time rendering post; this piece is about the budget it lets you escape.
When grinding on the model is still the right call
Re-architecting delivery is the wrong move for a small or controlled scene. If your development is a handful of units, the budget sits comfortably within reach of any modern phone, and the whole optimization playbook — LOD, atlasing, sensible streaming order — will get you there without leaving on-device rendering behind. Below roughly a boutique-building scale, the ceiling this article is about simply isn't where you are.
It is also the wrong frame when the product genuinely needs runtime interactivity a pre-render can't anticipate: a live configurator with effectively infinite permutations, or a simulation that reacts to inputs at play time. There the per-viewer GPU bill is a cost you pay on purpose, and the asset budget on the server side is a real engineering problem you can't dodge. Pre-rendering trades open-ended runtime freedom for reach; for selling large off-plan real estate, where the meaningful interactions are known before launch, that trade is worth making, and the asset-budget ceiling is exactly why.
Load time is a conversion input, not polish
None of this is only an engineering concern. Slow mobile pages lose people before they see anything at all. Google's cross-industry mobile benchmarks found that as page load moves from one second to three, the probability of a bounce rises by 32%, and from one to five seconds it climbs 90% (Think with Google). That is general web data from around 2017, not a real-estate measurement and not a Vinode result. The direction is not controversial: on the phone in a buyer's hand, the seconds before your development appears are seconds you can lose the lead in. An asset budget the weakest device can't meet is not a rendering detail. It is a bounce curve with your leads on it.
See a 528-unit scene on your own phone
Open a live Vinode development on the worst device you can find, then tell us about your project for a custom quote.

Why pre-rendered 3D beats real-time for real estate sales
Real-time engines look impressive in a demo, but they buckle on the devices your buyers actually use. Here's why Vinode streams pre-rendered 3D instead, and what it means for your conversion rate.

The real cost of streaming 3D per viewer: a worked GPU-and-CDN cost study
Two ways to serve an interactive 3D tour, two cost curves that point in opposite directions. This is the arithmetic worked out at dated public rates: what 100, 1,000 and 10,000 concurrent viewers actually cost on a GPU fleet versus a CDN, and the two numbers that decide where the lines cross.

Serving a photoreal scene to a launch-day crowd: the 3-second threshold and CDN edge economics
A heavy 3D scene reaching thousands of phones at once is a delivery problem, not a rendering one. The bar is Google's 3-second abandonment threshold, and the mechanism is a CDN handing the same static bytes to a crowd, where the 1,001st viewer costs about what the first did.
