Sanglard and collaborators benchmarked the shipping Wolfenstein 3D binary across surviving period hardware. The same executable ran at 5 fps on a 286/6MHz with a Hercules card and 34 fps on a 386DX-40 with a Cirrus Logic AVGA3M — a ~7× spread across one installed base.
The surprise in the data is that the video card mattered nearly as much as the CPU. Two 386DX-40s, identical but for the graphics card, land at 21 and 33 fps.
Roblox has the same shape of problem across a vastly wider distribution — from flagship phones to eight-year-old Android hardware to Quest. Every fidelity feature is bounded by the p10 device in the installed base, not the p90.
The useful reframe when a graphics announcement lands: not "does this look good," but what fraction of DAU can enable it, and what does the auto-scaler do to everyone else? A rendering feature that only the top decile can run is a marketing asset, not a product change.
id's answer to hardware variance was to let the player shrink the 3D canvas. Fewer rays cast, fewer pixels filled. The dial ran from 304 rays down to 64, and on a single 386SX-16 it moved the game from marginal to fluid.
Roblox's graphics-quality auto-scaler, render distance and resolution scaling are this dial, moved from a player-visible slider to an automatic policy. The 1992 version made the trade legible; the modern version hides it.
That hiding is mostly correct for a mainstream audience, but it means the quality a given user actually experiences is invisible in aggregate metrics. Two users on the same "experience" can be seeing materially different products.
The raycaster was only fast because the world was radically constrained: a 64×64 tile map, each tile solid or passable. Uniform wall height, right angles only, no textured floors or ceilings, no looking up or down.
Carmack, describing the iOS port seventeen years later: "as far as collision detection was concerned, everything was just a 64 x 64 tile map that was either solid or passable."
Rise of the Triad had to heavily fork the engine to get "textured floors and ceiling, different wall heights, stairs, trampolines, and even jumps." The constraint that bought the frame rate was the same constraint that capped the design space.
The choice to use ray casting was also an important pragmatic decision. I wasn't experienced enough yet to do a solid implementation of a polygon, or even line based, engine. Ray casting got me where I needed to be at an acceptable cost. JOHN CARMACK — foreword, Game Engine Black Book, p.5
Roblox's part-based, physically-simulated, server-replicated world model is its 64×64 grid. It is the reason user-generated 3D works at that scale — and it is the reason "Roblox moves upmarket to AAA fidelity" narratives keep hitting a wall. The representation was chosen for a different objective.
The thing worth tracking is whether Roblox can add its equivalent of stairs and textured floors without forking the client — i.e. whether new fidelity arrives as an extension of the existing data model or as a parallel one that fragments the catalogue.
The textbook states Roblox's central trade-off two decades before it mattered to Roblox:
RM platforms … create opportunities for automated performance optimization, and simplify many development tasks by making it easier to express complex constructions. However, when you use an RM platform, you lose the potential for peak performance and may experience delays in access to the latest hardware features when waiting for the next release of the middleware. COMPUTER GRAPHICS: PRINCIPLES AND PRACTICE — §16.1, p.452
The burden a retained-mode platform absorbs is exactly the one that consumed Carmack's first iPhone attempt. Bringing an existing codebase across meant an OpenGL ES conversion, a re-thought and re-tested user interface, artists and designers as well as coders — "several months of development time" before it was abandoned for a simpler path.
Roblox eats that port cost once, for every platform, on behalf of every creator. That is the moat. The price is that no creator can ship a custom shader on their own schedule — they wait for Roblox. Creator frustration about rendering control isn't a bug report; it is the structural cost of the model, and it will not go away.
CGPP's own prescription doubles as the roadmap: "work at the highest level practical for your application, and use a limited amount of lower-level code for performance-critical features." Watch how much low-level escape hatch Roblox concedes without breaking the one-client-runs-everywhere guarantee.
1,204 KiB of assets were compressed to 645 KiB so the game fit on a single 720 KiB floppy. The binary was 94 KiB, of which 64 KiB was the signon screen and 768 bytes the palette — the engine proper was 29 KiB.
Episode 1 shipped free and was explicitly built to be copied; episodes 2–6 cost $50. Sanglard: "In order to maximize income, it was therefore paramount to make the game easy to copy and redistribute." The distribution mechanism and the compression budget were the same decision.
Seventeen years later, the same instinct on iOS: "we were right around the 10 meg over-the-air app download limit with the converted media … so we should try to fit in." And: "There is definitely something to be said for a game that loads in a few seconds, with automatic save of your position when you exit."
Install size, join time and content streaming are the modern form. For the low-bandwidth, low-ARPU cohorts where Roblox's user growth actually lives, time-to-first-play is the growth curve.
Instance and content streaming should therefore be read as growth infrastructure rather than graphics features. If you are modelling emerging-market DAU, the join-latency distribution is a more load-bearing input than any fidelity roadmap.
TED5 — "Tile EDitor" — was not built for Wolfenstein. It came out of Commander Keen, was improved across years, and served side-scrollers, top-down games and Wolf 3D alike. The level content was disposable; the editor was the asset that compounded.
IGRAB-ed packed art into an archive and emitted a C header of asset IDs, so that "assets could be regenerated and reordered at will with no modification in the source code." An indirection layer between content and engine, in 1992.
Scale check: eight people, seven months, November 1991 to May 1992 — and no version control at all, a state of affairs that persisted at id until after Quake 3.
Studio is TED5. The marketplace asset-ID system is IGRAB's indirection layer at platform scale. The durable asset is the editor and the content pipeline; the tens of millions of experiences are the depreciating output.
Which argues for judging Roblox on Studio velocity and asset-pipeline throughput — including generative asset tooling and the time-cost of publishing a working experience — rather than on the performance of any individual hit game.
The textbook closes with a distilled list of principles (pp.1145–1147). Four of them bind unusually hard on a user-generated 3D platform:
Level of Detail — "Level of detail is important for both efficiency and correctness." The highest-leverage lever Roblox has, precisely because creators ship unoptimised geometry by default. Automatic LOD and decimation on user content is worth more than any lighting feature.
Culling — "one or more fast and conservative solutions that narrow the space by culling obviously incorrect values, and a slow but exact solution." Occlusion culling and streaming.
Memory — "The primary challenge of memory is coping with access latency and limited bandwidth. Capacity is a secondary concern." For a platform streaming arbitrary user content over arbitrary networks onto phones, this is the binding constraint — an argument that edge, CDN and replication spend move felt quality more than GPU features do.
Visual System Impact — perceived fidelity beats measured fidelity. Wolfenstein is the existence proof; CGPP Chapter 5 is the theory.
CGPP §38 attributes GPU success to four conditions — performance differentiation, workload sufficiency, market demand, and ubiquity — and warns that GPUs "amplify their own work requirements by implementing inefficient algorithms," naming accelerated ray tracing as the likely successor architecture. Written in 2014; it happened.
The Roblox-specific implication folds back into lesson 04: the floor device will acquire hardware ray tracing well before a retained-mode client can expose it. The middleware latency, not the silicon, is the gating factor.
CGPP is a 2014 text. Its GPU exemplar is a GeForce 9800 GTX, it predates mesh shaders, compute-driven pipelines and neural rendering, and it is a principles reference rather than a current-state survey. Sanglard is a postmortem of a seven-month project from 1992.
Neither book says anything about Roblox's bookings, ARPDAU, cost structure, or trust-and-safety exposure — which is usually what actually moves the name. What they give you is a well-grounded model of why the engine roadmap looks the way it does, and which levers are genuinely available.