Cyberland: Rendering 3M+ Triangles & 50 Dynamic GLB Assets on Mobile WebGL via Custom Three.js Pipeline

Hi everyone!

I wanted to share a project we’ve been deeply working on called Cyberland. It is a fully dynamic, 100% interactable 3D ecosystem built entirely on top of Three.js.

Our primary engineering goal was brutal: achieve production-grade, AAA-like visual fidelity running flawlessly at locked high frame rates directly in mobile browsers (Safari/Chrome Mobile). To ensure broad accessibility, we heavily stress-tested the engine on hardware ranging from a base iPhone 11 (acting as our mid-tier performance baseline) up to an iPhone 13 Pro (for high-refresh-rate verification), achieving smooth, stable performance without a single browser crash or memory leak.

Here is a technical breakdown of how we structured our graphics pipeline, asset optimization, and post-processing to make this happen.

1. The Asset Pipeline & Scene Complexity

Instead of rendering a single static monolithic model, our environment is fully composable. A complete scene consists of:

  • 1 Base Land Plot: Uses a full set of high-fidelity 2K PBR material maps (BaseColor, Roughness, Metalness, Normal, and Emission).

  • Up to 49 Individual 3D MODs: High-poly modular assets equipped with 1K PBR maps that users can dynamically mount, unmount, or rearrange on the fly.

  • The Budget: At full load, the engine simultaneously renders 50 distinct GLB assets, totaling ~3 Million trianglesin a single active scene, paired with animated canvas-based UI layers.

2. Custom Tuning Stack & Post-Processing

Standard mobile WebGL pipelines often wash out deep metallic and dark materials into flat, grey plastic, while turning emissive neon channels into dead, opaque paint. To combat this, we bypassed default material limitations with a custom tuning stack built over Three.js:

  • Layer-Based Selective Bloom Isolation: Instead of relying on a performance-heavy glow threshold filter over the entire scene canvas, we isolate asset emission onto a dedicated render layer (mesh.layers.enable(1)). During the bloom pass, the engine completely bypasses global lighting and environment maps for these nodes. This ensures that dark metallic textures and heavy surfaces remain deep, clean, and un-blurred, while the neon lines and crystals breathe at full intensity.

  • Dynamic Pulse Animation: Integrated inside the useFrame loop, we animate the emissive channels dynamically: material.emissiveIntensity = baseIntensity * (1.0 + Math.sin(state.clock.elapsedTime * 0.8) * 0.15). This creates a living, breathing neon atmosphere with a strictly controlled 15% amplitude wave, iterating only through cached emissive materials to avoid heavy runtime scene traversal.

  • Mobile-Optimized Post-Processing: To avoid breaking the mobile memory budget, we avoided heavy standard pass chains and integrated a streamlined post-processing layout including a Custom Selective Bloom Pass, targeted Sharpening filters to counteract mobile canvas scaling blur, and highly calibrated Tone-Mapping alignment for deep blacks.

  • Procedural Void Clouds: The backdrop features animated, 6-octave purple void clouds. We spent weeks calibrating and optimizing the math to ensure it looks deeply volumetric while maintaining an extremely low processing footprint.

3. Extreme Memory Management & Instanced Hot-Swapping

Managing memory leaks on mobile Safari when dealing with dozens of un-instanced GLB files is a nightmare. Our engine handles rapid asset hot-swapping natively. Users can instantly switch between multiple fully equipped lands (each carrying 30–40 high-poly mods) seamlessly. The architecture aggressively manages garbage collection, geometry disposal, and texture unbinding, ensuring zero browser crashes or reloads during rapid scene transformations.

4. Under the Hood: Reactive State Engine (Web3 Integration)

To give these 3D graphics real-world utility, the entire backend is deployed natively as smart contract canisters on the Internet Computer Protocol (ICP) blockchain.

Each 3D mod carries a mathematical weight (baseBP). The exact millisecond an asset is mounted or unmounted in the 3D viewport:

  1. The custom engine pushes the state change to the blockchain.

  2. The smart canister instantly calculates complex staking and LiteDAO voting metrics on the fly.

  3. If an asset was listed on the integrated decentralized marketplace, an automated on-chain auto-delisting triggers instantly.

  4. The 3D environment reacts and re-renders the updated state within milliseconds.

By avoiding central oracles, we achieved a true zero-gas, sub-second reactive 3D ecosystem where graphics and blockchain states form a single loop.

Video Demonstrations & Comparisons:

Links & Resources:

We would love to hear your feedback, especially regarding mobile WebGL memory optimization hacks and advanced PBR tuning tricks under heavy scene loads!

That’s interesting. It would be nice if they didn’t share the info on Twitter—you can only watch the video if you have access.

Otherwise, I don’t understand the point of the game. Is this a game where you collect things?

1 Like

I could not try it (as it asked to login), but I’m curious about the claim of rendering more than 3 million triangles. No human can see so many triangles on a mobile screen. You should be able to skip 90% of them and still get nice visuals. Rendering that much is just a waste of battery.

3 Likes

Glad you checked out the platform! Since Twitter requires a login to watch videos, here is a YouTube mirror instead:

To answer your question: it’s a fully on-chain 3D metaverse rather than a simple collecting game. The system programmatically arranges up to 49 different MODs on your land based on your assets for staking and crafting.

For a full breakdown of the mechanics, you can check out the Guide section directly on the website. Let me know what you think!

Hi Pavel, thanks for the feedback! Here is the quick technical context behind our architectural choices:

  • Login: Strictly required to instantly generate your Web3 Principal ID and provision your random starter land. Takes 5 seconds via Face ID, Google, or Apple.

  • 3M Ceiling: This is the absolute worst-case limit only if a user fills almost all 49 modular asset slots simultaneously. Because the layouts are dynamic and programmatic, traditional LOD is tricky, so we enforce mesh.frustumCulled = true.

  • Dashboard vs. Game: It’s an on-chain metaverse hub for short asset-management sessions, not a multi-hour game grinder. Continuous battery drain isn’t our primary bottleneck.

  • AI & Fidelity: The 3D assets are generated via Tripo and Hunyuan AI. We optimized them down from 4.5M+ polygons, keeping the remaining budget high to preserve the topology for PCs and tablets, combined with max anisotropy and sharpening passes.

If you get a chance to log in via Face ID, let me know how the viewport smoothness feels on your device!

Three.js: Stress-test of dynamic runtime rendering — instant switching between 6 heavy biomes in a single canvas (mobile browser)

Hi!

I wanted to share the results of a stress test I built for my project. The video was recorded in a single take on a mobile browser — with no page reloads and without recreating the WebGL context.

What happens in the demo:

• Switching between 6 completely different biomes.

• Each biome consists of a heavy main GLB model with a full set of 2K PBR textures + 30–40+ additional modular GLB assets (1K).

• Total polygon count per scene: approximately 2.5 million triangles.

• Fully dynamic placement of modifiers (using the same asset pool, but with unique configuration and positioning in each biome).

• Inside the canvas background — a custom 6-octave procedural shader generating flying purple void nebula clouds.

• Complex UI overlay with numerous animated elements, pulsations, and a cosmic background.

• Active post-processing.

The most technically interesting parts:

• Complete dispose + rebuild of the entire scene (geometries, materials, textures, objects) plus custom post-processing passes, all done on the fly.

• No memory leaks or VRAM crashes throughout the entire test.

• Stable high FPS with no drops, even in the heaviest scene.

https://youtube.com/shorts/mHwpgf66g98?si=ODCq3bhRsSrIsBW8