← Back to Blog news

Three.js r185 removes deprecated code: what breaks in your GLB scene

By BitSoul Team8/7/20264 min read41 views
Three.js r185 removes deprecated code: what breaks in your GLB scene

Your Three.js scene still imports WebGLRenderer, and every glTF loader tutorial from the last three years tells you that's fine. It technically still is — but r185, shipped July 1, 2026, quietly deleted the deprecated code paths that used to just warn you in the console. If your codebase leans on any of those, you don't get a warning anymore. You get a broken build. The short answer: swap to WebGPURenderer now if you're starting anything new, and audit any custom ShaderMaterial before your next Three.js version bump.

WebGPU stopped being a bet in January 2026, when it hit Baseline status — stable and on by default in Chrome, Edge, Firefox, and Safari 26 on macOS Tahoe and iOS. Three.js has supported it as a near-zero-config swap since r171 (September 2025): import WebGPURenderer instead of WebGLRenderer, keep the rest of your scene graph, and it falls back to WebGL 2 automatically on anything older. Eight months later, r185 is the release that stops being polite about it.

What r185 actually changed

What r185 actually changed — illustrated

What r185 actually changed — illustrated

r185's release notes list a global removal of deprecated code — APIs marked for removal as far back as r150 finally stopped working instead of logging a console warning. The same release fixed a real, named bug: AnimationAction time-warping, where scrubbing a mixer at negative playback speed produced incorrect blend states. If you're driving a rigged character through AnimationMixer, that fix alone is worth the version bump.

The bigger performance story landed two releases earlier. r184 (April 16, 2026) fixed a per-frame allocation leak that was generating 240,000 to 500,000 unnecessary object instantiations per second on a scene rendering 1,000 meshes at 60fps — garbage-collection pauses that showed up as frame stutter on exactly the kind of prop-heavy scenes a GLB catalog produces. None of that required touching your code. You got it by updating the version number.

Loading a GLB into WebGPURenderer: what breaks, what doesn't

Loading a GLB into WebGPURenderer: what breaks, what doesn't — illustrated

Swapping renderers is genuinely one line of config for a standard glTF pipeline:

```javascript
import * as THREE from 'three';
import { WebGPURenderer } from 'three/webgpu';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';

const renderer = new WebGPURenderer({ antialias: true });
await renderer.init();
renderer.setSize(window.innerWidth, window.innerHeight);

new GLTFLoader().load('/assets/clockwork-knight.glb', (gltf) => {
scene.add(gltf.scene);
});
```

GLTFLoader output doesn't change. MeshStandardMaterial, MeshPhysicalMaterial, and the PBR textures baked into a GLB — base color, normal, metallic-roughness, AO — all convert automatically to the node-based material graph WebGPURenderer expects, so materials that came out of a glTF export don't need rewriting. Draco and KTX2 decoding paths are untouched too; if you're already following the loading pattern from Load GLB files in Three.js: Draco, KTX2, and animations in 2026, that half of your pipeline needs zero changes.

What breaks is anything hand-authored: a `ShaderMaterial` or `RawShaderMaterial` with GLSL written directly into `vertexShader`/`fragmentShader` strings. WebGPURenderer's native path expects TSL (Three Shader Language) node graphs, which compile to both WGSL and GLSL from one source. Raw GLSL materials still run, but only by forcing the WebGL 2 fallback — meaning you're paying for a WebGPU-capable browser and not using it. Custom water shaders, toon outlines, vertex-displacement grass, anything built as a string of GLSL, is the real migration cost. Budget for it before you flip the switch on a shipping project, not after.

WebGLRenderer vs WebGPURenderer, six months into Baseline

| | WebGLRenderer | WebGPURenderer |
|---|---|---|
| Browser support (2026) | Universal, no fallback needed | Native in Chrome, Edge, Firefox, Safari 26+; auto-falls back to WebGL 2 |
| Compute-driven particles | ~50,000 practical ceiling | 1,000,000+ via compute shaders |
| Custom shaders | Raw GLSL strings | TSL node graphs (compiles to WGSL and GLSL) |
| glTF/GLB material support | Full | Full, auto-converted |
| Three.js status as of r185 | Maintenance mode | Recommended default |

Gotchas before you upgrade a shipping scene

Pin your Three.js version before touching this on a live project. Jumping straight to r185 from a codebase that hasn't been updated since, say, r160 surfaces every deprecated call at once instead of one warning at a time. Test the WebGL 2 fallback path deliberately — disable WebGPU in `chrome://flags` and confirm your scene still renders, because a silent fallback nobody tested is how you discover in production that a TSL-only material has no GLSL equivalent. If your scene leans on GPU instancing for crowds of props, the instancing approach itself doesn't change between renderers, but retest your draw calls after the swap — instance buffer handling is one of the areas r185's cleanup touched.

For prop-heavy scenes — crates, weapons, foliage, background characters — bring poly counts down before you're debugging renderer behavior on top of an overdrawn scene. The poly-count checker in 3D Studio checks tris and UVs against a target budget in-browser, which is one less variable while you're isolating whether a slowdown is the renderer or the asset.

A free account's two monthly downloads cover evaluation; commercial use is included with paid memberships — see pricing.

The Character Clockwork Automaton Knight is a reasonable stress test for this migration specifically — the heavy metallic-roughness variation across the model is exactly where WebGPURenderer's node-based PBR path is easiest to visually diff against old WebGLRenderer output before committing a whole scene to the swap.

---

*This post is part of the Ultimate Guide to Free 3D Game Assets — BitSoul's complete reference for formats, texturing, rigging, optimization, and engine integration.*

Tags: shaders workflow optimization game-assets 3d-models pbr

Skip the modelling — download it instead

A free BitSoul account gets you 2 game-ready models every month plus 25 AI Engine credits to generate one of your own, no card required. Clean topology, PBR textures, and GLB downloads that drop straight into Unreal, Unity, Godot or Blender — plus OBJ and 3D-printable STL export.

Create a free account → Browse 846 models