mrdoob/three.js
 Watch   
 Star   
 Fork   
2026-09-09 03:12:48
three.js

r186

https://github.com/mrdoob/three.js/wiki/Migration-Guide#185--186 https://github.com/mrdoob/three.js/milestone/99?closed=1

  • Global
    • Add linting for tsl/. #34488 (@ycw)
    • Clean up. #34499 (@Mugen87)
  • AnimationObjectGroup
    • Fix stale index bookkeeping in uncache() and unsubscribe_(). #34035 (@sean-kim05, @Mugen87)
  • Backend
    • Renderer: Add resetState() function. #33877 (@pepperoni505, @Mugen87)
  • Backends
    • Don't scale render target viewports by the pixel ratio. #34333 (@mrdoob, @claude)
  • BatchedMesh
    • Mark visibility dirty in setGeometryIdAt(). #34096 (@wrangelvid)
  • BezierInterpolant
    • Make interpolate_() more robust. #33934 (@Mugen87)
  • Bindings
    • Remove cached bind groups in _destroyBindings(). #33954 (@Mugen87)
    • Fix _destroyBindings(). #34014 (@Mugen87)
    • Fix stale storage buffer attributes. #34388 (@Mugen87)
  • BufferGeometry
    • Clean up serialization/deserilization. #34044 (@Mugen87)
  • Core
    • Fix some copy() and toJSON() implementations. #34083 (@Mugen87)
    • Don't check against default values in toJSON(). #34178 (@Mugen87)
    • Initialize render targets with valid dimensions. #34380 (@204a, @Mugen87)
  • Frustum
    • Improve docs. #34093 (@Mugen87)
  • Geometries
    • Delete the disposed geometry's own attributes. #33939 (@sashankaryal, @Mugen87)
  • ImageBitmapLoader
    • Fix regression in load(). #34151 (@Mugen87)
    • Avoid mutating loader options. #34500 (@cuishuang, @Mugen87)
  • KeyframeTrack
    • Serialize/deserialize tangent data. #34400 (@Mugen87)
  • Material
    • Add serialization/deserialization support for clipping planes. #34084 (@Mugen87)
  • MathUtils
    • Fix large isPowerOfTwo values. #34459 (@lprnmns, @Mugen87)
  • MeshPhysicalMaterial
    • Add support for retroreflectivity. #33949 (@bhouston)
    • Fix diffuse Fresnel blend for retroreflective. #34057 (@Mugen87)
  • Object3D
    • Add intersectsFrustum(). #34065 (@Mugen87)
    • Add dispose(). #34141 (@Mugen87)
  • PMREMGenerator
    • Replace separable blur with spiral blur on both renderers. #32367 (@mrdoob, @claude)
  • QuadMesh
    • Optimize rendering by bypassing MVP transforms. #33917 (@sunag)
  • Ray
    • New watertight intersectTriangle(). #33661 (@Mugen87)
    • Handle empty spheres in intersectSphere(). #34016 (@sean-kim05)
  • Renderer
    • Don't use MSAA for fullscreen-passes. #33936 (@Mugen87)
    • Fix operator-precedence bug. #33943 (@Mugen87)
    • Fix computation of _projScreenMatrix. #33947 (@Mugen87)
    • Clear inactive render lists. #33941 (@Mugen87)
    • Warn when using removed PCFSoftShadowMap. 1b7d5f7aed0bef0303ccceeb036f977584c84330 (@mrdoob, @claude)
    • Remove remaining PCFSoftShadowMap code. #33987 (@mrdoob, @claude)
    • Clarify PCFSoftShadowMap warning. 4d0de92db18c49a44a821762a43420dbdb7c29e8 (@mrdoob, @claude)
    • Use WeakMap in Info. #34045 (@Mugen87)
    • Simplify _getFrameBufferTarget(). #34157 (@Mugen87)
    • Introduce dispose() async. #34364 (@sunag)
  • Renderers
    • honor renderOrder with reversed depth buffer. #33945 (@LLiJJing, @claude)
    • Refactor sort key negate. #33948 (@Mugen87)
    • Optimize multi-scattering energy compensation. #34046 (@Mugen87)
    • Optimize DFG LUT sampling. #34055 (@Mugen87)
  • RenderTarget
    • Introduce storage flags for MSAA. #33974 (@Mugen87)
  • RenderTarget3D
    • Fix texture setup. #34117 (@Mugen87)
  • Shaders
    • Fix multi-scattering energy compensation, remove BRDF_GGX_Multiscatter. #33983 (@mrdoob, @claude)
    • Fix iridescence IBL multiscattering and transposed XYZ_TO_REC709. #33984 (@mrdoob, @claude)
    • Improve energy conservation for diffuse and sheen lighting. #33985 (@mrdoob, @claude)
    • Make comments more explicit. #34038 (@WestLangley)
    • Add environment lighting support for retroreflective materials. #33995 (@mrdoob, @bhouston, @claude)
  • Source
    • Reanme to TextureSource. #34202 (@Mugen87)
  • src
    • Remove deprecated code. #33886 (@linbingquan)
  • Src
    • Improve retroreflection nomenclature. #34079 (@WestLangley)
    • Clean up. #34161 (@WestLangley)
    • Clean up. #34272 (@WestLangley)
  • SunLight
    • Clean up. #34258 (@mrdoob, @claude)
    • Reduce cascade count to 2. 52184ab39216913eb2984cbcffaf0efe1b677378 (@mrdoob, @claude)
  • TimestampQueryPool
    • Clear timestamps Map on query resolution and dispose. #34243 (@sunag)
  • TorusGeometry
    • Forward thetaStart and thetaLength in fromJSON(). #34034 (@sean-kim05, @Mugen87)
  • Tour
    • Add Playground Projects and Templates. #34437 (@sunag)
  • Vector3
    • Clean up comments. #34037 (@WestLangley)
  • WebGLAnimation
    • Schedule next frame before the loop callback. #34448 (@aktanazat, @Mugen87)
  • WebGLBackend
    • Fix usage of storeMultisampledDepthBuffer. #34142 (@Mugen87)
    • Add support for MinEquation and MaxEquation. #34146 (@tonybart1337)
    • Make clear of default framebuffer more consistent. #34502 (@WilliamLiu-1997, @Mugen87)
  • WebGLOutput
    • Match depth texture format to stencil setting. #34008 (@sawa-zen, @Mugen87)
    • Optimize MSAA support. #34030 (@Mugen87)
  • WebGLRenderer
    • Fix clearLayerUpdates() call. #33989 (@Mugen87)
    • Tighten multi-scattering check. #34047 (@Mugen87)
    • Fix color texture check for BatchedMesh. #34056 (@Mugen87)
    • Optimize readRenderTargetPixels capability checks. #34183 (@dli7319, @Mugen87)
    • Support Node Materials in compile(). #34232 (@Mugen87)
    • Add SunLight with cascaded shadow maps. #34221 (@mrdoob, @claude)
    • Make GL init more robust. #34299 (@Mugen87)
    • Unbind PIXEL_PACK_BUFFER after async readback. #34321 (@TheBlek, @cursoragent)
    • fix compileAsync() crashing when a tracked material is disposed mid-flight. #34378 (@kvvasuu, @Mugen87)
    • Honor clipping in compile(). #34507 (@Mugen87)
  • WebGLTextures
    • Improve max textures warning. 7cab421ee0a0790bfc45e672fdf1702ff401e5f6 (@Mugen87)
  • WebGLTextureUtils
    • Delete PIXEL_PACK_BUFFER after copy. #34323 (@Mugen87)
  • WebGPU
    • Allow read_write storage buffers and atomic ops in non-compute stages. #33626 (@SebastianBaltes, @claude)
  • WebGPUAttributeUtils
    • Fix interleaved buffer handling for integer attributes. #34098 (@Ryan-G7, @Mugen87)
  • WebGPUBackend
    • WebGPUBackend - Fix type of _getDefaultRenderPassDescriptor. #33969 (@cmhhelgeson)
    • Check for render bundle/occlusion query combination. #34286 (@Mugen87)
    • compare GPU bind groups by handle in _draw(). #34276 (@jjmhalew, @Mugen87, @claude)
  • WebGPURenderer
    • Use UnfilterableFloat for NORM16 textures. #33910 (@Mugen87)
    • Do not render shadow maps when precompile. #33924 (@Mugen87)
    • Honor resolve flags in WebGPU backend. #33946 (@Mugen87)
    • Fix stale occlusion queries. #33959 (@Mugen87)
    • Make occlusion queries more robust. #33972 (@Mugen87)
    • Add support for TRANSIENT_ATTACHMENT. #33977 (@Mugen87)
    • Add missing layerUpdates support to CompressedArrayTexture. #33996 (@Mugen87)
    • Support shared depth texture between multiple passes. #34042 (@sunag)
    • Support dynamic swapping of the lighting system. #34050 (@sunag)
    • Fix XR shadows. #34088 (@cabanier, @Mugen87)
    • Introduce compileComputeAsync(). #32551 (@RenaudRohlinger)
    • Fix native WebGPU XR camera selection. #34112 (@cabanier)
    • Fix copyTextureToBuffer() 3D and array textures when using WebGL. #34129 (@Mugen87)
    • Fix transmission during WebXR rendering. #34114 (@cabanier)
    • Enable MSAA for native XR layers. #34143 (@cabanier)
    • Add MSAA support to WebXR WebGPU. #34120 (@cabanier)
    • Support material blend color and alpha. #34154 (@Mugen87)
    • Introduce refresh types for render objects. #34162 (@Mugen87)
    • Add DirectRenderPipeline. #34166 (@cabanier, @Mugen87, @sunag)
    • Fix draw offsets of BatchedMesh. #34212 (@Mugen87)
    • Fix timestamp query limits. #34236 (@sunag)
    • Refresh shared uniform buffers. #34283 (@cabanier, @Mugen87)
    • Make cache key for bind groups more robust. #34288 (@Mugen87)
    • Add clipping + stencil demo. #34325 (@Mugen87)
    • Dispose render objects when the renderer is disposed. #34327 (@wcandillon, @Mugen87)
    • Add missing material properties to state checks. #34406 (@Mugen87)
    • Fix viewport regression with array cameras. #34424 (@Mugen87)
    • Fix integer array texture bindings. #34422 (@WilliamLiu-1997, @Mugen87)
    • Add packed_4x8_integer_dot_product support. #34451 (@Mugen87)
  • WebGPUUtils
    • Refactor getTextureSampleData(). #34121 (@Mugen87)
  • WebXR
    • Restore camera properties at session end. #34152 (@Mugen87)

Nodes

  • Nodes
    • Make node buffer binding labels deterministic. #34069 (@RenaudRohlinger)
    • Add renderer.debug.onNodeBuilderCreated callback. #34068 (@RenaudRohlinger)
    • Remove top-level side effects for better tree-shaking. #34332 (@mrdoob, @claude)
    • Add updateBefore and updateAfter support for compute stage. #34401 (@sunag)
  • Batch
    • Support positionPrevious. #34100 (@Mugen87)
  • BitcountNode
    • Fix GLSL Bitcount + add test coverage for BRDF/BSDF, depth, color space, type constructors, and bit operations. #34350 (@bhouston, @Mugen87)
  • ContextNode
    • Avoid redundant calls. #34251 (@sunag)
  • DFGLUT
    • Mention direct lighting use in headers, fix generator output path. d60e5bd8688dbef0c0efab901cb2ddae2ecd447b (@mrdoob, @claude)
  • GLSLNodeBuilder
    • TSL Bug: Fix bitcast(uint, 'int')'s GLSL polyfill return type. #34429 (@bhouston)
    • TSL Bug: bitcast() fails unnecessary between int and uint vector types. #34430 (@bhouston, @Mugen87)
  • LightsNode
    • Introduce getBuiltinLights. #33909 (@sunag)
    • Detect dynamic shadow map size changes. #34360 (@Mugen87)
  • Line2NodeMaterial
    • Implement setupPosition(). #34005 (@Mugen87, @sunag)
  • MathNode
    • Fix integer min()/max() on the WebGL backend. #34018 (@mrcljx, @Mugen87)
    • TSL Unit Tests - Fix determinant() type inference reporting the matrix's own type instead of float. #34341 (@bhouston, @Mugen87)
  • MathUtils
    • TSL Unit Tests - Fix sinc() removable singularity computing a literal 0/0. #34337 (@bhouston, @Mugen87)
    • TSL Unit Tests - Fix gain() JS-ternary-on-a-Node bug and wrong base formula; fix pcurve() NaN exponent. #34340 (@bhouston, @Mugen87)
  • MeshPhysicalNodeMaterial
    • Fix specular nodes. #34164 (@Mugen87)
  • ModelNode
    • Support ArrayCamera in highp matrix nodes. #34384 (@Mugen87)
  • MRTNode
    • Fix blend modes bug in merge(). #34248 (@Mugen87)
    • Allow clear colors per attachment. #34250 (@Mugen87)
  • NodeBuilder
    • Check for reserved keywords. #33871 (@Mugen87)
  • NodeFunction
    • Filter initial spaces and comments. #34363 (@sunag)
  • NodeManager
    • Correctly dispose of background mesh. #34108 (@Mugen87)
  • NodeMaterial
    • Improve scene lighting enabled check. #34052 (@sunag)
  • NodeMaterialObserver
    • Honor retroreflective and fix updates with nested render calls. #33992 (@mrdoob, @claude)
    • Add geometry version check. #34064 (@Mugen87)
    • Fix stale render object cache. #34076 (@Mugen87)
    • Monitor dispose for geometries and textures. #34287 (@Mugen87)
    • Track shadow map sizes. #34361 (@Mugen87)
  • PMREMNode
    • Handle unresolved PMREM during setup. #33881 (@jure)
  • ReferenceElementNode
    • Move into own file. #34245 (@Mugen87)
  • RotateNode
    • TSL Unit Tests - Fix rotate() 3D Euler-angle path rotating in the wrong direction. #34338 (@bhouston, @Mugen87)
    • Add support for Euler Order. #34348 (@WestLangley)
  • RTTNode
    • Add autoUpdate, resolutionScale and preserve default type. #34307 (@sunag)
    • Fix reset and restore renderer state. #34385 (@sunag)
    • Keep the renderer state per instance. #34508 (@mrdoob, @claude)
  • ScreenNode
    • Refactor DPR handling. #34186 (@Mugen87)
  • ShadowNode
    • Fix WeakMap usage. #33964 (@Mugen87)
    • Move shadow material and render object helpers to base class. #34312 (@sunag)
  • Skinning
    • Support bone counts exceeding UBO limit. #34200 (@Mugen87)
  • StorageTextureNode
    • Preserve integer store values. #34423 (@WilliamLiu-1997)
  • SubgroupFunctionNode
    • TSL Unit Tests: Workgroups, StorageBuffer Atomics, Compute builtins, Barriers and Subgroups. #34431 (@bhouston)
    • TSL Bug: Fix subgroupAll()/subgroupAny() parameter length. #34432 (@bhouston)
    • TSL Bug: Fix subgroup broadcast first param length. #34433 (@bhouston, @Mugen87)
  • TextureNode
    • Add isPlainGather(). #34119 (@Mugen87)
    • Refactor isPlainGather(). #34201 (@Mugen87)
  • ToonLightingModel
    • Use the view space normal for the gradient irradiance. #34247 (@lazerg)
  • TSL
    • Respect texture format when sampling textures. #33875 (@sunag)
    • Make textureSize() more robust. #33925 (@Mugen87)
    • Inline transform of normal and tangent. #33938 (@WestLangley)
    • Do not export PMREMUtils. #33986 (@sunag)
    • Fixing rbmax / rbmin calculation of getParallaxCorrectNormal(). #34007 (@Mugen87)
    • Fix update range clear bug in Instance. #34022 (@explodi, @Mugen87)
    • Support individual lighting per pass(). #34051 (@sunag)
    • Add OnAfterObjectUpdate(). #34101 (@Mugen87)
    • Fix update of previous instance matrix data. #34107 (@Mugen87)
    • Add batchIndirectIndex. #34111 (@Mugen87)
    • Support primitive values in custom struct constructors. #34113 (@sunag)
    • Build CodeNode includes as references. #34132 (@Ryan-G7, @Mugen87, @sunag)
    • Remove export of 'append'. #34156 (@Methuselah96)
    • Add horizontalRotation option to billboarding(). #34197 (@sunag)
    • Add 4x8 pack/unpack functions. #34263 (@Mugen87)
    • Update exports in Three.TSL. #34310 (@sunag)
    • Honor type in toAttribute(). #34347 (@Mugen87)
    • Add TSL GPU unit test coverage for LTC area lights, point light, SH irradiance, equirect/spritesheet UV, and post-processing utils. #34358 (@bhouston)
    • Add warnings to GPGPU Nodes. #34291 (@cmhhelgeson)
    • Add atomic workgroup array support. #34428 (@WilliamLiu-1997, @bhouston)
    • Add missing clamp to V_Neubelt(). #34449 (@Mugen87)
  • UniformArrayNode
    • Fix update() overwrite. #33962 (@Mugen87)
  • WGSLNodeBuilder
    • TSL Unit Tests - Fix faceForward() WGSL capitalization bug. #34342 (@bhouston, @Mugen87)
  • WGSLNodeFunction
    • Add missing WGSL-TSL type entry. #34099 (@Mugen87)

Addons

  • Addons
    • Disable depth buffer when possible. #34043 (@Mugen87)
    • Fix typos. #34105 (@pailhead)
    • Gaussian Splat renderer / loader using TSL for WebGPU/WebGL + glTF import. #33950 (@bhouston, @Mugen87)
  • 3DMLoader
    • add views, namedViews, and strings to userData. #34498 (@YCoCg)
  • 3MFLoader
    • Basic support of Beam Lattice. #34267 (@Mugen87)
  • AST
    • TSL & Transpiler: Support parameterless loops (do ... while). #34209 (@sunag)
  • BufferGeometryUtils
    • Let toTrianglesDrawMode()modify geometries in-place. #33878 (@Mugen87)
    • avoid vertex hash overflow at zero tolerance. #34390 (@hamedrabah, @Mugen87)
  • CityGenerator
    • Improved city example. #33906 (@mrdoob, @claude)
  • CSS2DRenderer
    • Support Rotation. #33474 (@WestLangley)
  • FBXLoader
    • Support multiple clips in single timeline. #34167 (@Mugen87)
    • Fix missing userData copy. #34302 (@Mugen87)
    • Use global URL instead of window.URL. #34328 (@hybridherbst)
  • FirstPersonControls
    • Make keyboard movement world axis aligned. f88964a17e29a61e26ad4981754bb68ebf62264d (@mrdoob, @claude)
    • Restore R/F shortcuts and unify example look speed. #34485 (@mrdoob)
  • GaussianSplatMesh
    • Fix sort invalidation for transforms. #34233 (@gqfx, @Mugen87)
    • Add support for per-mesh bounding box, frustum culling. #34254 (@gkjohnson)
    • Inline splat data reads to improve bounding box generation performance. #34262 (@gkjohnson)
    • Pack RGBA8 colors in storage buffers. #34255 (@gqfx)
    • Add support for raycasting. #34284 (@gkjohnson, @bhouston)
  • GaussianSplatPLYLoader
    • PLYGaussianSplatLoader -> GaussianSplatPLYLoader. #34292 (@WestLangley)
  • GaussianSplatUtils
    • Simplify GaussianSplatUtils via ThreeJS math classes. #34223 (@bhouston)
  • Global
    • Remove deprecated code. #33880 (@Mugen87)
  • GLTFExporter
    • Cache normal maps. #33940 (@Mugen87)
    • Implement ability to export with a copyright notice. #34138 (@Mirei3D, @Mugen87)
  • GLTFGaussianSplatLoaderExtension
    • Optimize Gaussian Splat loading. #34205 (@bhouston)
    • View-dependent Gaussian Splatting via Spherical Harmonics. #34215 (@bhouston)
  • GLTFLoader
    • Fix EXT_mesh_gpu_instancing custom instance attributes shared across nodes. #33927 (@sebgoubier, @Mugen87)
    • Skip skinning without skin attributes. #33988 (@0b5vr, @Mugen87)
    • Fix KHR_texture_transform support when rotation is specified. #34033 (@zeux)
  • HTMLMesh
    • Improve form controls support. #34172 (@Mugen87)
  • Inspector
    • Stop keyboard events from leaking into the app. 0696807d586ab1c04b8fcedc71079559c07f1ddf (@mrdoob, @claude)
    • Add debounce(). #33932 (@Mugen87)
    • resolve bare three imports in TSL graph loader. #33965 (@bhushan6)
    • Fix TSLGraphEditor raycasting and refactor primary pass retrieval. #34133 (@sunag)
    • Use absolute positioning and add alignment configuration. #34137 (@sunag)
    • Add split screen, list grid mode and revisions. #34140 (@sunag)
    • Fix split screen overlay alignment on sub-window canvases. #34203 (@sunag)
    • Add Color Grading extension and improve lifecycle API. #34216 (@sunag)
    • Optimize Timeline tab rendering with virtual scrolling. #34230 (@sunag)
    • Polish split screen divider and select dark theme. #34318 (@sunag)
    • Implement disposal support and improve split screen handling. #34383 (@sunag)
    • Support nonce and CSP compliance. #34396 (@sunag)
  • LightProbeGrid
    • Rename to LightProbeGridWebGL. #33911 (@mrdoob, @claude)
    • Add WebGPURenderer version. #33913 (@mrdoob, @claude)
    • Support incremental baking. #34486 (@mrdoob)
  • LightProbeGridWebGL
    • Fix SunLight integration. #34370 (@Mugen87)
  • MaterialXLoader
    • Materialx upgrade. #33485 (@bhouston, @cursoragent, @sunag)
  • OrbitControls
    • Improve disconnect(). #34504 (@Mugen87)
  • PCDLoader
    • Fix regex to remove comments. #34199 (@Virtycle, @Mugen87)
  • PLYGaussianSplatLoader
    • a dedicated loader for Gaussian splat PLYs. #34278 (@bhouston)
  • Rename
    • GaussianSplatMesh -> GaussianSplat. #34306 (@WestLangley)
  • Rhino3dmLoader
    • performance, PBR materials, editor import. #34180 (@fraguada)
  • SimplifyModifier
    • Refactor implementation. #34021 (@Mugen87)
  • Sky
    • Sky, SkyMesh: More realistic clouds. #33942 (@mrdoob, @claude)
    • Fix FP16 overflow. #34058 (@Mugen87)
    • Sky, SkyMesh: Slow down default cloud speed. 04679755feb07e1d7ad256307d5c4a7bb8043f92 (@mrdoob, @claude)
  • Sky/SkyMesh
    • Remove up uniform. #34354 (@Mugen87)
  • SkyscraperGenerator
    • Cheaper weathering noise. #33900 (@mrdoob, @claude)
  • SPZLoader
    • add support for SPZ version 4 in SPZLoader and add new SPZ v4 example. #34222 (@bhouston)
  • SunLight
    • Move to addons. #34326 (@mrdoob, @claude)
  • TrackballControls
    • Avoid updating _movePrev too often. #34173 (@Mugen87)
    • Implemented multi-touch rotate. #34249 (@surdu, @Mugen87)
  • Transpiler
    • Add GLSL preprocessor directives and macro support. #34206 (@sunag)
    • Add array support. #34208 (@sunag)
  • TubePainter
    • Properly transform normals. #34061 (@WestLangley)
  • UnrealBloomPass
    • Don't request depth buffer. #34036 (@Mugen87)
    • Merge adjacent taps into bilinear fetches. #34479 (@mrdoob, @claude)
  • USDLoader
    • Resolve connected attribute values. #34309 (@cabanier)
  • VolumeSlice
    • Move property declarations. #34130 (@Mugen87)
  • WebGLXRFallback
    • Detect WebGPU XR support upfront. #34080 (@cabanier)
  • WebGPURenderer
    • Add SunLight support. #34259 (@mrdoob, @claude)
  • XRControllerModelFactory
    • Fix profile hot-swap. #34266 (@Mugen87)

Addons / Nodes

  • TSL
    • Add softParticles(). #33887 (@Mugen87)
    • Support primitive values in array(). #33929 (@sunag)
    • Introduce OnBeforeRenderPipeline and OnAfterRenderPipeline and update context directly on material. #34025 (@sunag)
    • Fix angle bug in hashBlur(). #34077 (@Mugen87)
    • Pass stepSize to RaymarchingBox callback. #34257 (@sunag)
  • Addons
    • Add TAAUtils for shared functions. #34458 (@Mugen87)
  • BloomNode
    • Add faster blur strategy. #33923 (@Mugen87)
  • ClusteredLightsNode
    • Add dispose(), optimize create(). #34375 (@204a, @Mugen87)
  • CSMShadowNode
    • Fix frame-late bug. #34213 (@Mugen87)
  • DenoiseNode
    • Dispose internal noise texture. #34418 (@204a)
  • DepthOfFieldNode
    • Fix render target leak on repeated setup. #34188 (@cl0nazepamm, @Mugen87)
  • DotScreenNode/RGBShiftNode
    • Make ctor more flexible. #34417 (@Mugen87)
  • DualKawaseBloomNode
    • Added DualKawaseBloomNode. #33920 (@mrdoob, @claude)
    • Remove DualKawaseBloomNode. #33979 (@mrdoob, @claude)
  • GTAONode
    • Add Quadratic ray stepping, smooth sphere falloff. #33895 (@Mugen87)
    • Improve code example. #33902 (@Mugen87)
    • Clip-space ray marching and loop micro-optimizations. #33903 (@mrdoob, @Mugen87, @claude)
    • Fix banding issue. #33919 (@marcofugaro, @Mugen87)
    • Optimize code. #33930 (@Mugen87)
    • Bake sample count into the shader. #33931 (@Mugen87)
    • Dispose internal noise texture. #34369 (@204a, @Mugen87)
  • Nodes
    • More consistent dispose() usage. #34419 (@Mugen87)
  • OITPassNode
    • Add node for Order Independent Transparency. #34253 (@Mugen87)
    • Improve MSAA support. #34274 (@Mugen87)
  • PassNode
    • Fix pixel ratio in derived passes. #34453 (@Mugen87)
  • SMAANode
    • Fix and simplification. #34031 (@sunag)
  • SSAAPassNode
    • Use single-sample render targets. #34367 (@204a, @Mugen87)
  • SSAONode
    • Add SSAONode and depthAwareBlur. #33921 (@mrdoob, @claude)
  • SSRNode
    • Clean up. #34377 (@Mugen87)
  • VXGINode
    • Voxel Cone Tracing for Diffuse GI. #34402 (@Mugen87)
  • WebGLNodesHandler
    • Reuse collected lights and preparation data. #34219 (@hybridherbst)
    • Fix error with getCanvasTarget in WebGLRenderer. #34303 (@hybridherbst)
  • WoodNodeMaterial
    • Specialize single-octave noise. #33970 (@mrdoob, @claude)

Docs

  • Fix heading typo in CONTRIBUTING.md. 6cac81241961e3b68b0a5992cf325b4e9db8b3af (@mrdoob)
  • Improve descriptions. #34027 (@Mugen87)
  • Resolve reamining TODOs. #34029 (@Mugen87)
  • Matrix4: Improve inline documentation. #34067 (@WestLangley)
  • Fix typos and a wrong parameter name in JSDoc comments. #34169 (@xdroberto)
  • fix broken TSL anchor links for roughnessNode and metalnessNode. #34170 (@latent-9)
  • Drop JSDoc params the functions no longer take. #34226 (@darkdi)
  • Drop three more JSDoc params in WGSLNodeBuilder. #34237 (@darkdi)
  • Fix usage of @class tag. #34244 (@Mugen87)
  • Fix broken cross-links to texture utils pages. #34271 (@FirmaSpring)
  • Improve BundleGroup. #34305 (@Mugen87)
  • Tour of TSL. #34085 (@sunag)
  • IndexNode - Update JSDoc. #34413 (@cmhhelgeson, @Mugen87)
  • LoopNode - Update JSDoc. #34415 (@cmhhelgeson, @Mugen87)

Manual

  • Remove i18n. #33997 (@Mugen87)
  • Add Addons section anchor. #34017 (@zackabrah)
  • Add anchors to headings. #34020 (@zackabrah)
  • Slowed down colourshift effect in scenegraph tutorial. #34048 (@chesterblack)

Examples

  • Improve performance of clustered lights demo. #33901 (@Mugen87)
  • webgl_postprocessing_pixel: Snap Objects to Pixel Grid. #33908 (@zalo, @claude)
  • Add SSAO blur toggle in webgpu_postprocessing_ao. 70820b8d96b7cb2221a24c8170429b4169745a01 (@mrdoob, @claude)
  • Optimise PNGs across the repo. #33882 (@Chubercik)
  • Skip TRAA for SSAO in webgpu_postprocessing_ao. 84569eb27a3e070e6a4844e59e906ea0ee26c4cb (@mrdoob, @claude)
  • Use FXAA in clustered light demo. #33935 (@Mugen87)
  • Removed (wip) from webgpu. d51eb061e673cb9ec7f22c0277eefe925d7e2f05 (@mrdoob)
  • Clean up. #33981 (@WestLangley)
  • Clean up. #33994 (@Mugen87)
  • Refresh external links in /examples. #34001 (@bhouston)
  • Clean up. #34010 (@Mugen87)
  • Properly transform normal vectors. #34015 (@WestLangley)
  • Clean up. #34026 (@Mugen87)
  • More clean up. #34028 (@Mugen87)
  • Properly transform normal. #34039 (@WestLangley)
  • Add webgpu_deferred example. #34049 (@sunag)
  • Optimize backdrop water demo. #34086 (@Mugen87)
  • Refined the webgl_volume_perlin with bisection based refinement. #34090 (@mmmovania, @Mugen87)
  • Refined the webgpu_volume_perlin with bisection based refinement. #34094 (@mmmovania, @Mugen87)
  • Update webgl_volume_perlin.html. be6469cce5f91576c9efc8dc984c7ae3970197d3 (@Mugen87)
  • Eliminate branch divergence in volume refinement loops. #34097 (@WestLangley)
  • Clean up. #34148 (@Mugen87)
  • Clean up. #34185 (@Mugen87)
  • Change preset in backdrop area. #34195 (@Mugen87)
  • Make example links clickable in title & info. #34207 (@bhouston, @Mugen87)
  • Make material arrays demo more interesting. #34220 (@Mugen87)
  • Optimize rain demo. #34229 (@Mugen87)
  • Replace sun-like DirectionalLights with SunLight. #34228 (@mrdoob, @claude)
  • Clean up. #34273 (@WestLangley)
  • Update tags.json. 04008d6f255b9e2c92244244f484bd4508a14908 (@Mugen87)
  • Rename Gaussian Splat Example. #34293 (@WestLangley, @Mugen87)
  • Update webgl_lightprobes_sponza screenshot for two sun cascades. 5c81184a805495f5394aa50ad4c33d5f332a4b37 (@mrdoob, @claude)
  • Add post-processing volumetric fog example. #34319 (@sunag)
  • Remove ecsy . #34359 (@Mugen87)
  • Clean up. #34408 (@Mugen87)
  • Update tags. #34411 (@Mugen87)
  • Optimize glTF asset. #34435 (@Mugen87)
  • Optimize glTF asset. #34436 (@Mugen87)
  • Improve tags. #34472 (@Mugen87)
  • Clean up tags. #34473 (@Mugen87)
  • Add Sculptor addon. #33164 (@mrdoob, @claude)
  • Improve fog scattering trees and performance. #34491 (@mrdoob)
  • Refine custom fog terrain and resource handling. 511de1d2ee7c89f534b457d72e4ea4a7b20b50d4 (@mrdoob)
  • Update custom fog screenshot. e0119d1b87122d74701db34a04354e8979aff98e (@mrdoob)
  • Use SunLight in WebGPU examples. #34476 (@mrdoob, @claude)
  • Improve webgpu_materials_retroreflective. #33990 (@mrdoob, @claude)

Devtools

  • Clean up, light count and 1.17. #34387 (@mrdoob, @claude)
  • Object details, box highlight and 1.18. #34399 (@mrdoob, @claude)

Editor

  • Don't use picker object with skeletons. #34062 (@Mugen87)
  • Fix animation selection. #34322 (@Mugen87)
  • Add group selection. #34144 (@Mugen87)

Tests

  • Try to fix the webgpu async timeouts. #34225 (@pailhead, @claude)
  • GPU-native unit tests for TSL. #34331 (@bhouston)
  • fix lint error. #34345 (@linbingquan)
  • Update screenshots. #34346 (@Mugen87)
  • Add TSL GPU unit test coverage for math, packing, conversion, vector/matrix, logic/bitwise, color, tone mapping, and procedural helpers. #34349 (@bhouston, @Mugen87)
  • Unit tests: import unbuilt source instead of build/ output. #34362 (@bhouston)
  • Remove empty QUnit.module scaffolding. #34409 (@samuel7james)
  • TSL Tests: Give each GPU unit test kernel its own random canary value. #34427 (@bhouston)
  • Stabilize input and video screenshots. #34474 (@mrdoob)

Utils

  • Dev: Improve preview.js. #34407 (@Mugen87)
  • Support branches in changelog.js. f64ed0d50506064c99445e4b72ff0f82b387968e (@mrdoob, @claude)
  • Improve changelog.js. 16e1f0369b3ea976a581ca651de868818c9f0a9b (@mrdoob, @claude)
  • Rename Tour of TSL to TSL Guide. #34457 (@mrdoob, @claude)
  • Update TSL links in llms build. c4ffe022f2a4f982b42b7da5af79a87066a138ae (@mrdoob, @claude)

Build

  • Deprecate CommonJS build. #33891 (@mrdoob, @claude)
  • Remove minified builds. #33893 (@mrdoob, @claude)

CI

  • Comment on PRs with E2E screenshot failures. #33971 (@mrdoob, @claude)
  • Add Core to bundle size report. #34330 (@mrdoob, @claude)
  • fix grammar. #34482 (@linbingquan, @Mugen87)
2026-06-25 17:37:58
three.js

r185

https://github.com/mrdoob/three.js/wiki/Migration-Guide#184--185 https://github.com/mrdoob/three.js/milestone/98?closed=1

  • Global
    • Remove deprecated code. #33407 (@Mugen87)
    • Update package-lock.json. #33563 (@Mugen87)
    • Harmonize errors. #33588 (@Mugen87)
    • Update Three.WebGPU.js. ebd2a765edd45f419f3e530c5d24c83d2567af4f (@Mugen87)
    • Update package-lock.json. bea0fa775817a8b1a25656ce0396e67580557f02 (@Mugen87)
  • AnimationAction
    • Fix time warping bug. #33617 (@Mugen87)
  • BezierInterpolant
    • Refactor inTangents/outTangents. #33515 (@Mugen87)
  • Bindings
    • TSL Compute: Fix needsUpdate. #33530 (@thelazylamaGit)
  • Box3
    • Improve docs. #33633 (@Mugen87)
  • BufferGeometry
    • Fix attribute count mismatch in computeVertexNormals() and computeTangents(). #33520 (@Mugen87)
    • Support Transformed Geometry when Serializing. #33641 (@WestLangley, @Mugen87)
  • CI
    • Improve permissions. #33466 (@Mugen87)
  • ClippingContext
    • Fix stale viewMatrix with multiple cameras. #33578 (@Mugen87)
  • ColorAdjustment
    • Add max() for outputs. #33854 (@sunag)
  • common.glsl
    • WebGLRenderer Shaders: introduce transformNormalByInverseViewMatrix(). #33351 (@WestLangley, @Mugen87)
    • Update inverseTransformDirection definition for clarity. #33431 (@WestLangley)
  • FrustumArray
    • Optimize frustum computations. #33804 (@Mugen87)
  • HTMLTexture
    • Support new WICG HTML-in-Canvas API signatures. #33788 (@ewewraw)
    • Annotate Chrome versions for each API code path. ff95cea91e31f5333ecb7c69edd6d1864ba626f8 (@mrdoob, @claude)
  • IESSpotLight
    • Make sure IES texture can be exchanged. #33502 (@dswhy)
  • Inspector
    • Fix FPS counter freeze when WebGLBackend query is unavailable. #33755 (@sunag)
  • InstanceNode
    • Sync update ranges in updateBefore. #33615 (@thejustinwalsh, @Mugen87)
  • Line2NodeMaterial
    • Refactoring, use native node material hooks. #33689 (@sunag)
    • Fix the warn on cache-key, keep it in set lineColorNode. a219a9deed6798ec7d333433c69c46d44cd1905f (@sunag)
  • LoadingManager
    • Loaders, Editor: Improve handling of assets with unicode characters. #33301 (@Mugen87)
  • Material
    • Fixed setValues() to honor Euler and Vector2 types. #33476 (@FE-kang, @Mugen87)
  • MaterialLoader
    • Add registerMaterial() and Material.fromJSON(). #33714 (@Mugen87)
  • Matrix3
    • deprecate .scale(), .rotate(), and .translate(). #33757 (@WestLangley)
  • Matrix4
    • Introduce faster version of determinant(). #33814 (@Mugen87)
    • Use determinant3x3() where appropriate. #33820 (@WestLangley)
    • Rename determinant3x3() to determinantAffine(). #33823 (@Mugen87)
  • Morph
    • Fix individual morphTargetInfluences per object. #33772 (@sunag)
  • NodeBuilder
    • Fast-path getDataFromNode when no sub-build is active. #33656 (@mrdoob)
    • Use .nodes as Set instead of Array. #33664 (@sunag)
    • Use .sequentialNodes as Set instead of Array. #33703 (@mrdoob)
    • Make registerDeclaration() more robust. #33869 (@Mugen87)
  • NodeMaterial
    • Dynamically copy properties in copy(). #33775 (@sunag)
  • NodeMaterialObserver
    • Fix default version value of textures. #33422 (@Mugen87)
    • Reuse lightsData cache entry per frame. #33425 (@RenaudRohlinger, @claude)
    • Fix environment rotation and intensity checks. #33764 (@Mugen87)
  • Nodes
    • Fix toConst() usage in Camera. #33831 (@Mugen87)
  • NodeUniformBuffer
    • Fix byteLength to follow overridden buffer getter. #33469 (@RenaudRohlinger)
  • NodeUtils
    • Update getAlignmentFromType to use 4-byte elements and add bool type. #33546 (@sunag)
  • npm
    • Exclude examples/fonts from the published package. #33744 (@mrdoob, @claude)
  • Object3D
    • Honor matrixWorldNeedsUpdate in updateWorldMatrix(). #33746 (@Mugen87)
  • ObjectLoader
    • Allow ObjectLoader to use custom loading managers in sync'd image loads. #33669 (@SeanCurtis-TRI)
  • PassNode
    • Fix implicit depth texture creation when depthBuffer: false. #33410 (@thelazylamaGit, @Mugen87)
  • PMREMGenerator
    • Avoid unnecessary depth buffers in render targets. #33585 (@shotamatsuda)
    • Apply await renderer.init() policy. #33587 (@Mugen87)
  • PMREMNode
    • Fix dispose of internal PMREMs. #33849 (@Mugen87)
  • PointShadowNode
    • Fix shadows with logarithmic depth buffer. #33584 (@Mugen87)
  • Raycaster
    • Fix setFromCamera() with ortho cameras. #33568 (@Mugen87)
  • Renderer
    • Export missing classes. #33623 (@pepperoni505)
    • Ensure valid camera state in compileAsync(). #33668 (@Mugen87)
    • Fix light invalidation by nested render calls. #33737 (@Mugen87)
    • Fix compileAsync(). #33784 (@Mugen87)
    • Improve render list processing of render bundles. #33811 (@Mugen87)
    • Merge update ranges if possible. #33813 (@Mugen87)
    • Fully support InstancedMesh with render bundles. #33839 (@Mugen87)
    • Improve texture check in _getShadowNodes(). #33845 (@sunag)
  • Renderers
    • Clean up logs. #33508 (@Mugen87)
    • Fix sort of render lists with reversed depth buffer. #33700 (@Mugen87)
    • Disable bump mapping for wireframe rendering. #33777 (@mrdoob, @claude)
  • RenderList
    • Fix occlusionQueryCount. #33765 (@Mugen87)
  • RenderObject
    • Guard against undefined geometry attribute in getAttributes(). #33460 (@RenaudRohlinger)
    • Properly compare interleaved buffer attributes. #33558 (@Mugen87)
    • Drop redundant morph target check. #33771 (@Mugen87)
    • Optimize getKeys(). #33805 (@Mugen87)
    • Fix handling of side. #33860 (@Mugen87)
  • RTTNode
    • Introduce setResolutioScale() and updates. #33606 (@sunag)
  • ShaderLib
    • Fix formatting of main function declaration. #33696 (@pohlt)
  • Shaders
    • Update nomenclature. #33727 (@WestLangley)
    • Add deprecation note. #33729 (@WestLangley)
  • ShadowFilterNode
    • Use textureGatherCompare in PCFSoftShadowFilter. #33534 (@RenaudRohlinger, @claude, @shotamatsuda)
  • ShadowNode
    • Fix shadow viewer inspect and introduce equirectDirection. #33752 (@sunag)
  • SphereGeometry
    • Make pole vertices more robust. #33652 (@Mugen87)
  • Src
    • Clean up. #33590 (@WestLangley)
  • StackNode
    • Fix outputNode flow propagation. #33405 (@sunag)
  • StereoCamera
    • Fix matrix computation. #33731 (@Mugen87)
  • StorageTextureNode
    • Bypass UV matrix transforms. #33545 (@thelazylamaGit)
    • Set referenceNode & add .store() function. #33544 (@thelazylamaGit)
  • TSL
    • Remove string, arrayBuffer definitions. #33430 (@sunag)
    • Fix setName() for attributes. #33432 (@sunag)
    • Introduce storageTexture3D. #33443 (@shotamatsuda)
    • Make not() on vector produce component-wise logical not. #33442 (@shotamatsuda)
    • Fix redundant min/max calls being generated. #33441 (@shotamatsuda)
    • Fix stack node sequence. #33402 (@sunag)
    • Cache function nodes per renderer's backend. #33517 (@sunag)
    • Add support for textureGather and textureGatherCompare. #33475 (@shotamatsuda, @sunag)
    • Make sure structs are built when compiling functions. #33524 (@Mugen87, @sunag)
    • Introduce nodeProxyConstructor. #33542 (@sunag)
    • Remove modInt export from Three.TSL.js. #33628 (@Methuselah96)
    • Add missing StorageTexture3DNode exports. #33630 (@Methuselah96)
    • Migrate vertex accessor classes to TSL Fn. #33674 (@sunag)
    • Fix varying code sequence in vertex stage. #33709 (@sunag)
    • Align packing nomenclature with packing.glsl.js. #33715 (@WestLangley, @sunag)
    • Introduce ambientOcclusion property. #33728 (@sunag)
    • Fix direction and normal transform methods. #33725 (@Mugen87)
    • Rename directionToFaceDirection -> negateOnBackSide. #33753 (@sunag)
    • Introduce override context. #33807 (@sunag)
    • Use RGBA for batching color. #33866 (@Mugen87)
  • UniformsGroup
    • Pool per-uniform update-range objects. #33427 (@RenaudRohlinger, @claude)
  • WebGLOutput
    • Handle antialias. #33446 (@mrdoob)
  • WebGLRenderer
    • Fix stale scratch framebuffers after context restore. #33533 (@vizerb, @Mugen87)
    • reset statistics (info.reset) before shadowMap.render. #33688 (@ldaoust01)
    • Improve lookups of shader stages. #33829 (@Mugen87)
    • Always bind position to location 0. #33841 (@Mugen87)
    • Fix normal maps with DoubleSide+ flat shading. #33859 (@Mugen87)
    • Fix normal maps with BackSide and vertex tangents. #33861 (@Mugen87)
  • WebGLTextureUtils
    • fix copyTextureToTexture() usage inside updateBefore(). #33736 (@marcofugaro, @Mugen87)
  • WebGLUniformsGroups
    • Optimize UBO updates to avoid GC churn. #33704 (@mrdoob, @claude)
  • WebGPUBackend
    • toggle comment causing import to appear in build. #33449 (@daigofuji)
  • WebGPUBindingUtils
    • Guard updateBinding() against destroyed GPU buffer. #33461 (@RenaudRohlinger, @Mugen87)
  • WebGPUPipelineUtils
    • reset shared render-pipeline descriptor before suspending in the async path. #33794 (@hsheth2, @Mugen87)
  • WebGPURenderer
    • Honor layerUpdates for compressed array textures. #33417 (@RenaudRohlinger, @sunag)
    • Ensure valid render pipelines when using depthBias. #33471 (@Mugen87)
    • Support all BPTC formats. #33482 (@Mugen87)
    • Surface uncaptured GPU errors and WGSL diagnostics. #33418 (@RenaudRohlinger, @claude, @sunag)
    • Restore framebuffer after clear. #33512 (@Mugen87)
    • Make structs work in vertex shader with WebGL. #33509 (@Mugen87)
    • Fix texture disposal for render targets. #33511 (@Mugen87)
    • Honor the Compositor Contract. #33457 (@WestLangley, @Mugen87)
    • Optimize submit() calls. #33513 (@Mugen87)
    • Support rendering to texture arrays. #33507 (@cabanier, @Mugen87, @elalish, @renovate[bot], @ycw)
    • Introduce descriptor classes and caching. #33525 (@Mugen87)
    • Fix mipmap filter mode. #33527 (@XorTdsc)
    • More descriptor usage. #33529 (@Mugen87)
    • Improve support for output types. #33299 (@sunag)
    • Add support for WebXR with WebGPU. #33583 (@cabanier)
    • Manage hardwareClipping on builder level. #33681 (@Mugen87)
    • Fix dispose of override material render objects. #33682 (@Mugen87)
    • Fix stale texture references in bindings. #33680 (@Mugen87)
    • Refactor material lighting setup. #33702 (@sunag)
    • Fix unsupported texture sample counts. #33722 (@sunag)
    • add lighting.enabled. #33721 (@sunag)
    • Fix getShaderAsync() render context retrieval. #33733 (@sunag)
    • Add WGSL polyfill for inverse(). #33745 (@Mugen87)
    • Fix displacement-map shadows. #33774 (@sunag)
    • Track frontFaceCW in needsRenderUpdate. #33780 (@LLiJJing)
    • Correctly honor 4-byte stride alignment. #33787 (@Mugen87)
    • Minor performance fixes. #33802 (@Mugen87)
    • Fully support ExternalTexture. #33816 (@Mugen87)
    • Scope sampler caching to bindings to prevent sampler collision on shared. #33847 (@sunag)
    • Improve Sampler disposal. #33850 (@Mugen87)
  • WebGPUUtils
    • Cache preferred canvas format. #33800 (@Mugen87)
  • XRManager
    • Use foveateBoundTexture() to enable foveation. #33484 (@cabanier)

Docs

  • Improve displacementMap JSDoc. #33453 (@Mugen87)
  • Document minimum texture sizes of PMREMGenerator. #33465 (@Mugen87)
  • Fix JSDoc. #33569 (@Mugen87)
  • Fix code example generation. #33586 (@Mugen87)
  • Fix typo in ARButton docstring. #33608 (@Carifio24)
  • Add color space notes. #33636 (@Mugen87)
  • Correct lightMap description. #33642 (@WestLangley)
  • Fix typos in JSDoc. #33713 (@hanityx)
  • Update TSL.md. 522bc18d8beaf8a145bc69f4c261108071d827fb (@Mugen87)
  • Fix Safari scrolling to anchors. #33719 (@shotamatsuda)
  • Update nomenclature. #33742 (@WestLangley)
  • NodeMaterial.setupOutput and TSL positionLocal. #33791 (@cmhhelgeson)
  • Update TSL.md. 67e7b21040c4224014a637f706c279ce548e98d6 (@sunag)
  • Update TSL.md. 5402547a11f7239473e9085c3dcf724f7aa953ce (@sunag)
  • Fix JSDoc type expressions for docs build. 1b4637dd8530a76dafc5565d49dc62b76982a82b (@mrdoob, @claude)

Manual

  • Fix links in material table. #33487 (@Mugen87)
  • Improve Installation guide. #33599 (@Mugen87)
  • Update nomenclature. #33723 (@WestLangley)
  • Fix link navigation. #33858 (@Mugen87)

Examples

  • Update webgl_loader_svg.html. 27867588d172f90bca9ee93ed3faf4de775a4f6f (@Mugen87)
  • Explicitly set clear color in WebGPU demos. #33452 (@gkjohnson)
  • Clean up. #33470 (@Mugen87)
  • Make wave speed frame rate independent in webgl_shaders_ocean. #33492 (@unrealsid, @Mugen87)
  • Fix final alpha issues. #33496 (@gkjohnson)
  • Update webgl_loader_ifc to use web-ifc directly. #33491 (@agviegas, @claude)
  • Clean up. #33505 (@Mugen87)
  • Add webgpu_furnace_test.html. #33516 (@WestLangley)
  • Added GUI to Furnace Tests. #33523 (@WestLangley)
  • Improve GUI in webgpu_lines_fat.html. #33498 (@WestLangley)
  • Improve GUI in webgl_lines_fat.html. #33538 (@WestLangley)
  • Add Open Graph Protocol fields. #33543 (@Mugen87)
  • Update tags.json. 82181ef0af3f2fbe0e275663b0fc7f287aff2fbd (@Mugen87)
  • Improve webgpu anamorphic, rtt and bloom. #33600 (@sunag)
  • Remove "setDecoderPath" in non-gltf path examples. #33604 (@gkjohnson)
  • Add TSL function for grounded skyboxes. #33611 (@Mugen87)
  • Add nanite-style rasterizer. #33605 (@sunag)
  • Update webgpu_compute_nanite-style.html. 76d1eba5eadada3c25ff8cb0657b8ed23e8aeff1 (@Mugen87)
  • Improve WebGPU AO example. #33631 (@marcofugaro)
  • Improve AO scale. #33637 (@Mugen87)
  • Cleanup webgpu_postprocessing_ssaa. #33653 (@Methuselah96)
  • Optimize and shade smooth Tennyson Bust model. #33655 (@marcofugaro)
  • webgpu_lights_clustered firefly-style HDR sprites. #33660 (@mrdoob)
  • Update CDN dependencies. #33677 (@mrdoob, @claude)
  • Improved face alignment in webgl_morphtargets_webcam. #33690 (@mrdoob, @claude)
  • Add webgpu_skinning_instancing_individual. #33644 (@RenaudRohlinger, @sunag)
  • Migrate examples to new DRACOLoader url config. #33724 (@gkjohnson)
  • Fix Animation Speed label of webgpu_compute_nanite-style. 607fc7dc268e47b94eccc66121224d87a33c5c91 (@sunag)
  • Subset MPLUSRounded1c font in webgl_geometry_text_stroke. #33743 (@mrdoob, @claude)
  • Add TileCreasedNormalsPlugin. #33767 (@mrdoob, @claude)
  • Add inspector to the ball pool example. 195e328825d0bbe237355ee0ab433f60af4f29b9 (@mrdoob, @claude)
  • Add LoftGeometry addon and example. #33776 (@mrdoob, @claude)
  • Rename webgpu_compute_nanite-style to webgpu_compute_rasterizer. 4c83d5e32dc8ef3f46d4024689a752eeb7df4561 (@mrdoob, @claude)
  • Clean up webgpu_compute_rasterizer. 60e798e6c40007d01f7a1392be4f761338a54166 (@mrdoob, @claude)
  • Remove ammo.js examples. #33786 (@mrdoob, @claude)
  • Use CDN version of Ammo.js. #33799 (@Mugen87)
  • Rework webgpu_lights_clustered. #33803 (@mrdoob, @claude)
  • Example: Fix and optimize snow compute demo. #33833 (@Mugen87, @sunag)
  • Add volumetric fire, enhances the VolumetricLightingModel. #33848 (@sunag)
  • Update misc_exporter_gltf_normals.html. 70ea716718752e84fa3223b73d5bd875ceac8a1e (@Mugen87)
  • Add procedural city generator. #33817 (@mrdoob, @claude)
  • Improve webgpu_custom_fog with terrain and forest generators. #33873 (@mrdoob, @claude)
  • Improve webgpu_custom_fog_scattering. #33825 (@mrdoob, @claude)
  • Add webgpu_compute_rasterizer_ibl. #33783 (@mrdoob, @claude, @sunag)
  • Use FirstPersonControls in webgpu_compute_rasterizer. aace2e8bab4ade32dd76af3d5e05b464d20f1a39 (@mrdoob, @claude)

Addons

  • Addons

    • Removed TiledLighting. #33751 (@sunag)
  • ArcballControls

    • Document correct usage of adjustNearFar. #33479 (@Mugen87)
    • Fix swapped X/Y gizmo ring orientations. #33536 (@raeraex2)
  • AsciiEffect

    • Add escapeHTML(). #33567 (@Mugen87)
  • BufferGeometryUtils

    • Optimize toCreasedNormals(). #33768 (@mrdoob, @claude)
  • CSMShadowNode

    • Add support for reversed depth buffer. #33506 (@shotamatsuda)
    • Fix inconsistency in frustum split. #33510 (@shotamatsuda)
  • ClusteredLightsNode

    • Fix point light distance attenuation. #33679 (@mrdoob, @claude)
    • keep castShadow point lights on the material-lights path. #33792 (@hsheth2)
    • include clustered lights in getLights(). #33793 (@hsheth2)
  • DRACOExporter

    • Removed bundled encoders in favor of CDN. #33789 (@mrdoob, @claude)
  • DRACOLoader

    • Use relative file urls by default. #33564 (@gkjohnson)
    • Deprecate "setDecoderConfig" function. #33602 (@gkjohnson)
    • Add exported urls for GLTF decoder. #33691 (@gkjohnson)
  • DataTextureLoader

    • Add createDataTexture(). #33705 (@Mugen87)
  • EXRLoader

    • Fix out-of-bounds read on partial scanline blocks. #33620 (@Mugen87)
  • FXAANode

    • Refactor ApplyFXAA(). #33708 (@Mugen87)
  • FirstPersonControls

    • Damping, separate move sources, release fix, E/Q keys. #33874 (@mrdoob, @claude)
  • GLTFExporter

    • Improve multi-scene animation support. #33748 (@Mugen87)
    • Fix export of normal maps. #33837 (@Mugen87)
  • GTAONode

    • Cosine-weighted integration with per-slice normal projection. #33654 (@marcofugaro)
  • ImportanceSampledEnvironment

    • Spatiotemporal Denoiser for SSR. #33843 (@0beqz)
  • Inspector

    • Added scope for styles. #33456 (@sunag)
    • Added storage settings and info feature. #33571 (@sunag)
    • Add unread warning and error notification badges. #33732 (@sunag)
    • Migrate Graph to Canvas & add FPS graph to toggle button. #33756 (@sunag)
    • Improved Viewer, Timeline. #33750 (@sunag)
    • Fix slider using step() after define the value. #33806 (@sunag)
    • Improve state preservation, layout sizing and add CPU/GPU graph metrics. #33808 (@sunag)
    • Inline extensions configuration and remove extensions.json. #33812 (@sunag)
    • Improve mobile compatibility. #33819 (@sunag)
    • Improve folder renaming, color/select value updates, and visibility controls. #33853 (@sunag)
    • Add overdraw render mode. #33870 (@mrdoob, @claude)
    • Group duplicate console messages and allow detached tab panels to remain visible. #33864 (@sunag)
    • Fix Timeline resize. c1889da3c4fe9f3828fa90786d6a8772252ba966 (@sunag)
  • KTX2Loader

    • Use relative file urls by default. #33603 (@gkjohnson)
    • Fix regression in rgba16 unorm support. #33662 (@donmccurdy)
    • Disable etc1 on Chrome Mesa (Linux). #33697 (@arpu, @Mugen87, @donmccurdy, @mrdoob)
  • LWOLoader

    • Deprecate loader. #33621 (@Mugen87)
  • LightProbeGrid

    • Improve docs. #33426 (@Mugen87)
    • Avoid redundant matrixWorld updates during bake. #33489 (@mrdoob, @claude)
    • Add indirect bounces option to bake(). #33657 (@mrdoob)
  • LineMaterial

    • Fix trimSegment() with reversed depth buffer. #33572 (@Mugen87)
    • Trim line distances. #33607 (@Mugen87)
  • LineSegment2

    • Don't raycast without a valid resolution. #33872 (@Mugen87)
  • LoftGeometry

    • Fix UVs for non-uniform sections. #33815 (@mrdoob)
  • MaterialXLoader

    • Avoid compiling unused BSDF lobes. #33712 (@mrdoob, @claude)
  • Matrix3

    • Remove remaining usage of translate() and scale(). #33754 (@Mugen87)
  • MikkTSpace

    • Add dispose(), cache promise. #33501 (@Shane-oo, @Mugen87)
  • PLYExporter

    • Honor data types of buffer attributes. #33625 (@Mugen87)
    • Support custom attributes. #33627 (@Mugen87)
  • PLYLoader

    • Honor PLY data types when creating buffer attributes. #33622 (@Mugen87)
  • PixelationPassNode

    • Fix examples to avoid fading alpha. #33450 (@gkjohnson)
  • RapierPhysics

    • Add applyImpulse(). #33459 (@Mugen87)
  • Reflector

    • Make getReflectionCamera() public. #33556 (@Mugen87)
  • SSAAPassNode

    • Make clear color handling more consistent. #33478 (@Mugen87)
  • SSGINode

    • Use a half float render target. #33769 (@mrdoob, @claude)
    • Optimize code. #33782 (@Mugen87)
    • Reduce bandwidth with RG11B10. #33822 (@Mugen87)
  • SVGLoader

    • Honor scale in strokeWidth. #33411 (@Mugen87)
    • Improve createShapes(). #33415 (@Mugen87)
    • Add material helpers. #33424 (@Mugen87)
    • Basic gradients support. #33436 (@Mugen87)
    • Make stroke generation more robust. #33438 (@Mugen87)
  • ShapePath

    • Update toShapes(). #33503 (@Mugen87)
  • TransformControls

    • Add viewport support. #33451 (@Mugen87)
    • Fix edge case transforms. #27719 (@AlaricBaraou, @Mugen87)
    • Allow visibility control of rotation gizmos. #33562 (@Mugen87)
  • USDAParser

    • Infer the elementSize of missing skeletal joint attributes. #33596 (@bigbigbiglazycat, @Mugen87)
    • Fix inline-brace prim definitions being silently dropped. #33773 (@wheresoli)
  • USDLoader

    • Preserve USDA animation timing metadata. #33560 (@mkeblx, @mrdoob)
    • Fix texture paths in standalone USD files. #33610 (@Mugen87)
  • USDZExporter

    • Support mimeType setting via Texture.userData. #33579 (@Mugen87)
    • Fix opacity regression. #33580 (@Mugen87)
    • Add animation support. #33589 (@Mugen87)
    • Improve usability. #33597 (@Mugen87)
    • Add multi-material support. #33598 (@Mugen87)
    • Basic normal scale support. #33851 (@Mugen87)
  • USDZLoader

    • Reorder quaternion components in USDA quatf[] array parsing. #33577 (@bigbigbiglazycat, @Mugen87)
    • Preserve attribute connections when a direct value follows. #33581 (@Mugen87)
    • Add onLoad() and onError() to parse(). #33582 (@Mugen87)
  • VRMLLoader

    • Allow multi-line strings. #33616 (@Mugen87)
  • VolumeShader

    • Support perspective cameras. #33493 (@Mugen87)
    • Improve apply_colormap(). #33867 (@Mugen87)
  • Water2Mesh

    • Simplify flowMap setup. #33540 (@Mugen87)
  • WebGPURenderer

    • Added ClusteredLighting (Forward+ clustered) shading. #33406 (@mrdoob, @claude, @sunag)
    • Add fallback for XR with WebGPU. #33497 (@cabanier, @Mugen87, @elalish, @renovate[bot], @ycw)
  • lottie_canvas.module

    • LottieLoader, TTFLoader: Removed bundled libs in favor of CDN. #33798 (@mrdoob, @claude)

Devtools

  • Make hierarchy collapsible. #33645 (@Mugen87)
  • Resolve linter issues. #33646 (@Mugen87)
  • Remove empty scenes. #33647 (@Mugen87)
  • Bump version to 1.16. 4e3822704a4ddca670beaa4f5f779ead0437762b (@mrdoob)
  • clean up. #33879 (@linbingquan)

Editor

  • Remove legacy JSON format Worker code. #33423 (@sebastiondev)
  • Improve SVG setup. #33447 (@Mugen87)
  • Make light targets editable. #33541 (@Mugen87)
  • Fix ListboxItem text content. #33648 (@Mugen87)
  • Add texture parameters dialog. #33651 (@Mugen87)
  • Fix name conflict during glTF export. #33699 (@Mugen87)
  • Rework auto-completion in script editor. #33711 (@Mugen87)
  • Fix collision detection in arkanoid demo. #33718 (@Mugen87)
  • Update arkanoid.app.json. 716b6448c37c77de9a0ec6a7f0368d34eb7b0c48 (@Mugen87)
  • Add support for orthographic cameras. #33701 (@Mugen87)
  • Fix outliner regression. #33735 (@Mugen87)
  • Make size of vertex normals helper configurable. #33790 (@Mugen87)

Tests

  • Add unit test for custom interpolant. #33480 (@Mugen87)
  • Run unittests in browser with Puppeteer. #33550 (@catalin-enache, @Mugen87)
  • Update CatmullRomCurve3.tests.js. 6b719702fbc30f1fc3d6448420601d409df883f8 (@Mugen87)
  • E2E: Update screenshot. #33635 (@Mugen87)
  • E2E: Fix WebGPU Device Lost errors. #33650 (@shotamatsuda)
  • test/e2e: fix Buffer handling for Node.js 23+. #33672 (@WestLangley)
  • E2E: Print elapsed seconds. #33726 (@shotamatsuda)

Utils

  • Improved changelog.js. d718472ad975a38a86bbc63b859f3b2286dc3a53 (@mrdoob, @claude)
2026-04-17 00:09:48
three.js

r184

https://github.com/mrdoob/three.js/wiki/Migration-Guide#183--184 https://github.com/mrdoob/three.js/milestone/97?closed=1

  • Global
    • Update @rollup/plugin-terser to 1.0.0. 456f1696908c6ff169f19c1318ac8b8a87c38541 (@mrdoob, @claude)
    • Update ESLint to ECMA 2022. #33128 (@PoseidonEnergy)
    • Added HTMLTexture. #31233 (@mrdoob, @claude)
  • AnimationAction
    • Preserve interpolant settings on action creation. #33033 (@gigajuad, @Mugen87)
    • Fix timeScale reversal jump. #33035 (@Mugen87)
  • AudioLoader
    • Fix race condition with loading manager. #33378 (@Mugen87)
  • BatchedMesh
    • InstancedMesh, BatchedMesh: Fix getColorAt throwing an error when colors have not been set. #33079 (@gkjohnson)
    • Remove deprecated instancing render paths. #33234 (@Mugen87)
  • CatmullRomCurve3
    • Geometry corruption on 2-point curves. #33270 (@Necro-Rohan)
  • CubeRenderTarget
    • Restore generateMipmaps correctly. #33069 (@PoseidonEnergy)
  • DataTextureLoader
    • Fix log regression. #33148 (@Mugen87)
    • Move return in catch block to correct position. #33243 (@Om-Mishra09)
  • Dev
    • Fix vulnerabilities. #33141 (@Mugen87)
    • Execute npm audit fix. #33333 (@Mugen87)
  • GLSLNodeBuilder
    • Fix texelFetch lod type. #33399 (@Mugen87)
  • ImageBitmapLoader
    • Improve docs. #33379 (@Mugen87)
  • Inspector
    • Add Memory tab and improve Renderer.info. #33097 (@sunag)
  • InstancedMesh
    • add consistent return values to functions. #33059 (@gkjohnson)
  • LightProbeGrid
    • Add position-dependent diffuse Global Illumination. #33125 (@mrdoob, @Mugen87, @claude)
  • Line2NodeMaterial
    • Fix clone() losing worldUnits, dashed, and linewidth. #33236 (@cyphercodes)
  • Line3
    • Handle degenerate line in closestPointToPointParameter(). #33264 (@Necro-Rohan)
  • Loaders
    • Make return types in load() consistent. #33380 (@Mugen87)
  • MaterialLoader
    • Simplified bool check. #33066 (@PoseidonEnergy)
  • Math
    • Make use of Static initialization blocks. #33140 (@PoseidonEnergy)
  • MeshPhysicalMaterial
    • Fix Anisotropic regression. #33205 (@Mugen87)
  • NodeManager
    • Make delete() more robust. #33160 (@Mugen87)
  • NodeMaterialObserver
    • Avoid usage of Object.keys(). #33113 (@Mugen87)
    • Speed up material comparisons. #33198 (@Mugen87)
    • Speed up geometry comparisons. #33199 (@Mugen87)
  • NodeObjectLoader
    • Fix parseAsync(). #33377 (@Mugen87)
  • NodeUtils
    • Replace instanceof Array with Array.isArray(). #33262 (@Mridul012)
  • Object3D
    • Correctly copy pivot. #33163 (@PoseidonEnergy, @Mugen87)
  • ObjectLoader
    • Fix log regression. #33240 (@Om-Mishra09)
  • PassNode
    • Fix scissor and viewport setup. #33204 (@Mugen87)
  • Plane
    • Add clampToLine to intersectLine(). #33398 (@Mugen87)
  • Renderer
    • Make hasCompatibility() more predictable. #33087 (@Mugen87, @sunag)
  • Renderers
    • Make animation modules more robust. #33159 (@Mugen87)
    • Cache pixel storage parameters. #33227 (@Mugen87)
    • Support EXT_texture_norm16 formats. #33303 (@pohlt, @Mugen87)
  • RenderOutputNode
    • Fixes typos in RenderPipeline related docs. #33034 (@jwheare)
  • RenderPipeline
    • Fix sync with renderer.outputColorSpace and renderer.toneMapping. #33187 (@sunag)
  • RenderTarget
    • Preserve multiview in copy(). #33285 (@Kundan-CR7)
  • Shaders
    • Clean up. #33133 (@WestLangley)
  • ShadowNode
    • Add support for renderer.highPrecision. #33246 (@shotamatsuda, @sunag)
  • SkinnedMesh
    • Update "applyBoneTransform" to optionally take Vector4, support direction or position transformation. #33091 (@gkjohnson)
  • Source
    • Fix getSize() for VideoFrame. #33131 (@PoseidonEnergy)
  • Texture
    • Remove default setter parameter. #33129 (@PoseidonEnergy)
  • Textures
    • Improved HTMLTexture support. #33400 (@mrdoob, @claude)
  • Triangle
    • Simpler bool check in isFrontFacing(). #33071 (@PoseidonEnergy)
  • TSL
    • Fix array texture with no .depth() defined breaks shader compilation. #33096 (@sunag)
    • Improves compilation performance by 3.0x. #33120 (@sunag)
    • Fix two issues in StorageTextureNode. #33167 (@PoseidonEnergy)
    • add hyperbolic math nodes. #33233 (@thelazylamaGit)
    • Make global context available within compute nodes. #33231 (@shotamatsuda, @sunag)
    • Add global and local scope. #33302 (@sunag)
    • Add OnFrameUpdate and OnBeforeFrameUpdate. #33356 (@shotamatsuda)
  • UniformsGroup
    • Fix incorrect index in Vector4 dirty check. #33276 (@Mridul012)
  • UniformUtils
    • Fix deep-copy with array of uniforms. #33384 (@Mugen87)
  • ViewportDepthTextureNode
    • Fixes framebuffer caching with multiple references of different sizes. #32690 (@arodic)
  • WebGLOutput
    • Add DepthTexture to scene render target. c0553ae6966096947e2b84499e788c52503a5a2e (@mrdoob, @claude)
  • WebGLRenderer
    • Use working color space for render targets. #33036 (@Mugen87)
    • Add support for packed normal maps. #33055 (@castano)
    • Fix feedback loop regression. #33063 (@Mugen87)
    • Fix envMap and background rotation. #33077 (@WestLangley)
    • Fix active texture setting in copyTextureToTexture(). #33153 (@geekuillaume, @Mugen87)
    • Add NodeMaterial compatibility layer. #32851 (@gkjohnson, @sunag)
    • Improve reverse depth buffer logging. #33176 (@Mugen87)
    • Save/restore textureUnits on render state stack. #33217 (@SSopin)
    • Set depth mask when clearing depth. #33241 (@mlavik1)
    • Implement normal bias fallback. #33391 (@Mugen87)
  • WebGLTextures
    • Prevent flipping image bitmaps. #33073 (@Mugen87)
  • WebGLTimestampQueryPool
    • Fixed warning message. #33068 (@PoseidonEnergy)
  • WebGPUBackend
    • Reuse clear color instance. #33189 (@Mugen87)
    • Simplify code. #33388 (@Mugen87)
  • WebGPURenderer
    • Make compileAsync() truly non-blocking. #32984 (@RenaudRohlinger, @sunag)
    • Fix texture compare fallback for shadows. #33050 (@Mugen87)
    • Honor layerUpdates for array textures. #33072 (@ahaensler)
    • Improve compatibility test for reversed depth buffer. #33086 (@Mugen87)
    • Make device capabilities handling more consistent. #33094 (@Mugen87)
    • Add individual dispose for CanvasTarget caching. #33106 (@sunag)
    • Remove inline functions in rendering methods. #33108 (@PoseidonEnergy, @Mugen87)
    • Use node events to update the binding groups. #33047 (@sunag)
    • Fix WebXR sampling array-texture. #33132 (@sunag)
    • Simplification of the frame buffer cache for WebXR layers. #33154 (@sunag)
    • Support unfilterable float32 StorageTextures. #33155 (@sunag)
    • Use depth32float instead of depth24plus when using reversedDepthBuffer. #33184 (@PoseidonEnergy, @Mugen87)
    • Ensure render targets have consistent default depth values. #33191 (@Mugen87)
    • Add compute shader bounds check. #33186 (@marcofugaro, @sunag)
    • Refactor env map rotation. #33232 (@Mugen87)
    • Introduce Quad cache per RendeTarget texture. #33228 (@sunag)
    • Implement WEBGL_multi_draw fallback. #33238 (@Mugen87)
    • Fix texture issues. #33296 (@Mugen87)
    • Clean up. #33305 (@Mugen87)
    • Introduce ReadbackBuffer and reuse getArrayBufferAsync() buffers. #33300 (@sunag)
    • Fix WebGPU render bundle reuse across render contexts. #33335 (@RenaudRohlinger)
    • Adjust getArrayBufferAsync behavior, add support for partial readback. #33322 (@gkjohnson, @sunag)
  • WebGPUTextureUtils
    • Fix check layerUpdates property. #33075 (@sunag)
    • Fix copyTextureToBuffer() dispose buffer. #33366 (@sunag)
  • WebXRController
    • Add grip update event if enabled. #33118 (@danrossi, @Mugen87)
  • WGSLNodeBuilder
    • Fix varying indexes. #33229 (@sunag)
    • Fix textureDimensions() cache scope. #33312 (@sunag)
    • Add allowGlobalVariables. #33319 (@sunag)

Docs

  • Fix billboarding examples in TSL.md. #33056 (@jwheare)
  • Using the correct class type for NodeManager. #33067 (@PoseidonEnergy)
  • Fix typo in JSDoc. #33130 (@PoseidonEnergy)
  • Improve JSDoc. #33213 (@Mugen87)
  • Fix module links in search. #33255 (@Mugen87)
  • Fix typos in TessellateModifier and LineMaterial. #33272 (@Jadu07)
  • Update incorrect documentation for setMatrixAt. #33310 (@nopeless)
  • Improve JSDoc. 37a0863cc7ce723922c67feb9cca30cdb5d2a637 (@Mugen87)

Manual

  • Translate manual/zh/game.html to Chinese. #33123 (@DDDDD12138)
  • Remove reference to Matrix4.setRotationFromQuaternion(). #33320 (@Kodub)

Examples

  • Add sky to scene. #33037 (@Mugen87)
  • Fix colors in webgpu_custom_fog. #33057 (@Methuselah96)
  • Fix floor threshold in games_fps. #33053 (@Mugen87)
  • Improve watch demo. #33089 (@lo-th, @Mugen87)
  • Rename webxr_xr_sculpt to webxr_xr_marchingcubes. 3a0e75bae17144edc35220c77cdfde029101d939 (@mrdoob)
  • Improve MapControls demo. #33171 (@Mugen87)
  • Add SSGI Ball Pool demo. #33258 (@mrdoob, @claude)
  • Fix links missing target="_blank" in webgl_loader_3dtiles example. 11e6acb93e826c62deb1e18cc251f6812e889cac (@mrdoob, @claude)
  • Add volumetric clouds and atmosphere to webgl_loader_3dtiles. #33292 (@mrdoob, @claude)
  • fix ArcherRi01 model ext name. #33324 (@linbingquan)
  • Update versions for external libraries. #33362 (@gkjohnson)
  • Autoplay sintel video, remove Play overlay. f3fa844ba4ca59d4f1bef62daadcea720456de39 (@mrdoob, @claude)
  • Remove unused memorial.png texture. 6814f96375a7eba5946c808d898422c7c5edb5f0 (@mrdoob, @claude)
  • Add banking to roller coaster track and camera. 354fc4ec29c0a5b7c9f21909e57e6e0e5d053e81 (@mrdoob, @claude)
  • Fix lightprobes complex scene issues. 4cf573d9ab3442b663eed9a1639376138f4797b1 (@mrdoob, @claude)

Addons

  • Addons

    • Update export file. #33390 (@Mugen87)
  • ArcballControls

    • Controls reset touch-action to empty string instead of 'auto'. #33144 (@Kodub)
  • Bayer

    • Bayer node: fix web worker usage. #33279 (@pavel-mazhuga, @Mugen87)
  • BufferGeometryUtils

    • Fix two bugs. #33338 (@nameearly)
  • CCDIKSolver

    • Fix limitation handling. #33386 (@Mugen87)
  • CSMShadowNode

    • Fix error when disposed multiple times. #33202 (@shotamatsuda)
  • ChromaticAberrationNode

    • Remove unused _invSize uniform. cbf6fff0287c3d259a17af418a549f8598eb47ed (@Mugen87)
  • ColladaLoader

    • Add suport for polygons primitive. #33143 (@Mugen87)
    • Add support for instance_joint. #33293 (@Mugen87)
  • ColorUtils

    • Add setKelvin(). #33381 (@Nedunchezhiyan-M, @Mugen87)
  • EXRLoader

    • Support YCbCr and B44/A. #33212 (@Mugen87)
    • Fix channel rule matching. #33216 (@Mugen87)
    • Add multi-part and deep scanline support. #33218 (@Mugen87)
    • Put known headers into "skipped" section. #33248 (@Mugen87)
    • Remove buggy getBigInt64() fallback. #33387 (@Mugen87)
  • FBXLoader

    • Add skinning fixes. #33316 (@Mugen87)
    • Correct bind matrix. #33317 (@Mugen87)
    • Fix penumbra computation. #33321 (@Mugen87)
    • Fix rotation animations. #33323 (@Mugen87)
    • Fix opacity fallback. #33325 (@Mugen87)
    • Guard against orphaned animation curve nodes. #33327 (@digitalbreed)
    • Add coordinate system correction for Z-up. #33332 (@Mugen87)
    • Fix morph deltas. #33350 (@Mugen87)
  • FSR1Node

    • Add FSR 1 port for WebGPURenderer. #33339 (@Mugen87)
  • FirstPersonControls

    • Update interaction model. #33124 (@mrdoob, @claude)
    • Fix deprecated handleResize() message. f5d4b94ac51f1a4e552770a5de588fd2a016bef3 (@mrdoob, @claude)
  • GLSLDecoder

    • Replace deprecated substr() with slice(). #33260 (@Mridul012)
  • GLTFExporter

    • Add EXT_texture_webp support. #33117 (@BorisKourt)
    • Make attribute prefix more robust. #33357 (@Mugen87)
  • GLTFLoader

    • Fix morph target parsing. #33020 (@Mugen87)
    • Handle zero ior edge case. #33119 (@Mugen87)
  • GPUComputationRenderer

    • Call dispose() on variable's material. #33318 (@madisonrickert, @claude)
  • GodraysNode

    • Simplify shadow coord computation. #33162 (@Mugen87)
  • HDRLoader

    • Fix header parse logic. #33174 (@stack1ng)
  • Inspector

    • Use fixed mini-panel. #33070 (@sunag)
    • Introduce forceWebGL. #33074 (@sunag)
    • Introduce Timeline ( Commands Recorder ). #33078 (@sunag)
    • Add Capture Stack Trace for Settings. #33122 (@sunag)
    • Added string type support to parameters. #33156 (@sunag)
    • Introduce TSL Graph Addons. #33165 (@sunag)
    • Add export functionality to Inspector Timeline tab and enhance call detail logging. #33192 (@Makio64, @sunag)
    • Added Extension support and revisions. #33200 (@sunag)
    • Improvements. #33230 (@sunag)
    • Fix Tab.isActive. 33feff9e355cddabc3493533fb4ee9bc09091c6d (@sunag)
    • Replace deprecated substr() with slice(). #33267 (@Mridul012)
  • KTX2Loader

    • Support RGBA 16-bit unsigned normalized formats. #33245 (@donmccurdy, @Mugen87)
  • LDrawLoader

    • Fix incorrect normals on double sided faces. #33383 (@Mugen87)
  • OutlineNode

    • Support sprites. #33112 (@Mugen87)
    • Early out when nothing is selected. #33358 (@Mugen87)
  • Reflector

    • Support orthographic cameras. #33249 (@Mugen87)
    • Clean up. b4822a411ab883290e21f9f5251ed40a7815265c (@Mugen87)
  • SSGINode

    • Remove dead code. 4c1fe47d87c2869af064101fab856d3fa289cc68 (@mrdoob, @claude)
  • SVGLoader

    • Fix round stroke joins and caps when arcDivisions = 1. #33256 (@georgpukk, @Mugen87)
  • SVGRenderer

    • Fix performance regression. #33220 (@Mugen87)
  • Sky

    • Make sun disc optional. #33031 (@jwheare)
  • TAAUNode

    • Adding new node for TAA with Upsampling. #33368 (@Mugen87)
  • TRAANode

    • Improve docs. d2d9d4069320de51d2e7f36855375f4640578ecb (@Mugen87)
    • Add velocity node source. #32274 (@shotamatsuda)
    • Add support for reversed/logarithmic depth buffers and orthograhic cameras. #33364 (@shotamatsuda)
  • TSL

    • Improve dispose() of some FX addons. #33126 (@Mugen87)
  • TransformControls

    • Allow visibility control of plane gizmos. #33170 (@Mugen87)
  • USDCParser

    • handle empty array payload and validate offsets. 9a141d0f9c0528275a7f3ca3bf7745a5cca70de2 (@mrdoob)
  • USDComposer

    • recurse mesh children and skip GeomSubset nodes. db5f5e5496e7844736aecb012e039018c1e43b0f (@mrdoob)
    • avoid global displayOpacity on subset materials. 7f89d9b273ef32af1666fbd2b61c6dc4d5c39822 (@mrdoob)
    • add Camera prim parsing. 8d9c591c1c93a5c583a69e5ec6083d26b85a028d (@mrdoob)
    • Add light support. a158b85f4eff6f3fdfa4dfdaa01087fca9fabcf6 (@mrdoob, @claude)
    • Fix reference parsing. #33294 (@Mugen87)
    • Fix uv data for multi-material meshes. #33297 (@Mugen87)
  • USDLoader

    • Fix flat shading on meshes without normals. #33081 (@mrdoob, @claude)
    • Add support for geometric primitives (Cube, Sphere, Cylinder, Cone, Capsule). #33082 (@mrdoob, @claude)
    • Add support for MaterialX UsdPreviewSurface materials. #33083 (@mrdoob, @claude)
    • Add metersPerUnit support. #33084 (@mrdoob, @claude)
    • Fix skeleton skinning distortion. #33085 (@mrdoob, @claude)
  • VTKLoader

    • Deprecated loader. #33363 (@Mugen87)
  • WebGPURenderer

    • Introduce Dynamic Lights. #33042 (@RenaudRohlinger, @sunag)
  • WebXR

    • Added model caching to XRHandModelFactory. #33252 (@NssGourav, @Mugen87)
  • meshopt_decoder.module

    • Upgrade meshopt_decoder.module.js to 1.1.1. #33393 (@zeux)

Devtools

  • Added new DevTools. #30870 (@mrdoob, @Darkensses, @cesmoak, @claude, @github-advanced-security[bot])

Editor

  • add deterministic dropped-file finder for URL resolution. 52133860a3021871867a9f194e92062c5931e4e6 (@mrdoob)
  • Improve animation panel. #33110 (@Mugen87)
  • Add TextGeometry. #33253 (@Mugen87)

Tests

  • E2E: Replace SwiftShader with software Dawn (Lavapipe). #33346 (@mrdoob, @claude)
  • E2E: Tighten pixel diff tolerance and refresh screenshots. #33389 (@mrdoob, @claude)
  • E2E: Added webgpu_compute_sort_bitonic to exceptionList. 4a48e81fa8691027b7fdc8180a5df04cf6827410 (@mrdoob)
2026-02-18 20:18:54
three.js

r183

https://github.com/mrdoob/three.js/wiki/Migration-Guide#182--183 https://github.com/mrdoob/three.js/milestone/96?closed=1

  • Global
    • Remove deprecated code. #32569 (@Mugen87)
    • Replace eslint-plugin-import with eslint-plugin-import-x. #32651 (@mrdoob)
    • Removed eslint-plugin-import-x. #32653 (@mrdoob)
    • Bump lodash from 4.17.21 to 4.17.23. #32814 (@dependabot)
    • remove jshint remnants. #32885 (@ycw)
    • Update package.json. 4c280ff9c2599baba7afe262e434a1449d6f67d4 (@Mugen87)
    • Update package.json. 3332b33bea214d2033de83272ec56bd08dca4a00 (@Mugen87)
  • Animation
    • Add BezierInterpolant. #32829 (@mrdoob, @claude)
  • AnimationAction
    • Fixed typos in /src folder. #32629 (@mrdoob)
  • AnimationMixer
    • DEVTOOLS access to AnimationMixer + Loaders. #32616 (@marwie)
  • BatchedMesh
    • correctly set the nextIndexStart, nextVertexStart. #32744 (@gkjohnson)
    • Enable per-instance opacity. #32725 (@vanruesc, @gkjohnson)
    • Add support for wireframe materials. #32948 (@gkjohnson)
  • BindGroup
    • Remove bindingsReference. #32910 (@Mugen87)
  • Cache
    • Don't cache Blobs. #32989 (@Mugen87)
  • Camera
    • Exclude scale from view matrix. #32805 (@Mugen87)
  • Clock
    • Deprecated module. #32798 (@Mugen87)
  • Core
    • Add ReversedDepthFuncs dictionary. #32983 (@Mugen87)
  • GLSLNodeBuilder
    • Fix CubeDepthTexture sampler. #32857 (@Mugen87)
    • Fix array texture layer support for filtered sampling. #33008 (@RenaudRohlinger)
  • Helpers
    • Clarify the usage of update(). #32717 (@Mugen87)
  • InstanceNode
    • Support velocity. #32586 (@Mugen87)
    • Fix UBO size and attribute update. #32615 (@Mugen87)
  • Lighting
    • Refactor camera usage. #32557 (@sunag)
  • LightShadow
    • Introduce biasNode. #32811 (@Mugen87)
  • Line2NodeMaterial
    • Avoid performance degradation with viewportSharedTexture(). #32639 (@Mugen87, @sunag)
    • Rename useColor property to vertexColors. #32670 (@sunag)
  • Line3
    • Fix closest point in distanceSqToLine3(). #32878 (@Mugen87)
  • Matrix4
    • Cache determinant result in decompose(). #32658 (@mrdoob, @microsoftcopilot)
    • Optimize invert() calculation. #32657 (@mrdoob)
  • MeshLambertMaterial
    • Add support for scene.environment IBL. #32791 (@mrdoob, @claude)
  • MeshPhongMaterial
    • Add support for scene.environment IBL. #32795 (@mrdoob, @claude)
  • MeshPhysicalMaterial
    • Added clearcoat support for rect area lights. #32809 (@TobiasNoell)
  • MeshPhysicalNodeMaterial
    • Fix missing iorNode in MeshPhysicalNodeMaterial copy method. #32821 (@TobiasNoell)
  • NodeBuilder
    • Fix shared group detection. #32913 (@Mugen87)
    • Fix update nodes sequence. #32991 (@sunag)
  • NodeBuilders
    • Unifies uniform groups of different shader stages. #32534 (@sunag)
  • NodeMaterial
    • Add maskShadowNode. #32598 (@sunag)
    • Remove shadowPositionNode fallback to reduce CPU load. #32699 (@Mugen87)
  • NodeMaterialObeserver
    • Fix detection of replaced attribute/index. #32933 (@Mugen87)
  • Nodes
    • Update exports. #32783 (@Mugen87)
    • Fix PMREM cache. #32941 (@Mugen87)
  • Object3D
    • Document static, add support in copy() and JSON. #32679 (@Mugen87)
  • ObjectLoader
    • Wrap JSON.parse() in try/catch for consistent error handling. #32947 (@glowsenior)
  • Playground
    • Archived playground. #32771 (@mrdoob)
  • PMREM
    • Simplify GGX VNDF importance sampling. #32737 (@Mugen87)
  • RenderContext
    • Refactor context key. #32546 (@Mugen87)
  • Renderer
    • Rename shadowMap.color to shadowMap.colored. #32608 (@Mugen87)
    • Rename shadowMap.colored -> shadowMap.transmitted. #32611 (@sunag)
    • Shadow map improvements. #32705 (@Mugen87)
  • RenderObject
    • Fix ID assignment bug. #32700 (@Mugen87)
    • Update bundle reference at correct point. #32901 (@Mugen87)
  • RenderTarget
    • minor formatting. #32988 (@epreston)
  • ShadowFilterNode
    • Fix TSL warning in VSMShadowFilter. #32836 (@Mugen87)
  • ShadowMaterial
    • Respect "premultiplied alpha". #32550 (@gkjohnson)
  • SkinningNode
    • Fix tangent transformation. #32718 (@Mugen87)
  • SpriteSheetUVNode
    • Transform to TSL function and fix countNode access. #32693 (@gayanMatch)
  • StorageTextureNode
    • Add TSL read/write support. #32734 (@NateSmyth)
  • Test
    • Remove servez reference. adfc78595273c614f1e0557131644924a039c322 (@mrdoob)
  • Texture3DNode
    • Remove outdated setupUV(). #32630 (@Mugen87)
  • TextureNode
    • Use compareNode for Android if compareStepNode is not compatible. #32956 (@sunag)
  • TSL
    • Introduce clipSpace. #32594 (@sunag)
    • Introduce TSL.md (TSL Spec). #32601 (@sunag)
    • Remove exports for removed TSL methods. #32635 (@Methuselah96)
    • use raw data for DebugNode callback. #32638 (@linbingquan)
    • Add exponentialHeightFogFactor(). #32659 (@Mugen87)
    • Check if the stack has a valid output. #32669 (@sunag)
    • Fix positionView sub-build. #32691 (@sunag)
    • Revert positionWorld re-computation. #32710 (@sunag)
    • Fixing invalid GLSL using nested structures. #32724 (@sunag)
    • Move SceneNode to TSL functions. #32838 (@sunag)
    • Support switching StorageBufferAttribute when using storage(). #32847 (@sunag)
    • Force flat shading for geometries without normals for normal* nodes. #32848 (@sunag)
    • Avoid side effect of getTextureLevel() in normals. #32877 (@Mugen87)
    • Remove scriptable node. #32925 (@sunag)
    • Introduce StackTrace. #32914 (@sunag)
    • Add RenderPipeline for TSL Spec. #32928 (@sunag)
    • Add retroPassand example. #32930 (@sunag)
    • Remove ScriptableNodeResources export. #32945 (@Methuselah96)
    • Cache camera* uniform nodes. #32938 (@sunag)
    • Fix instancedArray() bufferCount property. #32977 (@sunag)
  • UniformGroups
    • Partially updates. #32558 (@sunag)
  • UniformsGroup
    • Add range cache and fix clear old update ranges. #32561 (@sunag)
  • ViewportDepthNode
    • Support reversed depth in viewZ functions. #33001 (@Mugen87)
  • ViewportTextureNode
    • Change update type to RENDER. #32664 (@Mugen87)
  • WebGLRenderer
    • Allow InstancedMesh provide a unique ID for WebGLBindingStates. #32556 (@OndrejSpanel)
    • Consider skinning / instancing when sorting objects. #28125 (@OndrejSpanel)
    • Fix shadow map uniform management. #32590 (@Mugen87)
    • Fix PCFSoftShadowMap check. #32593 (@Mugen87)
    • Ensure readback checks work on correct attachment state. #32506 (@andredsm)
    • Fix pointlight shadows with reversed depth buffer. #32749 (@Mugen87)
    • Fix remaining shadow issues with reversed depth. #32751 (@Mugen87)
    • Fix shadow bias with reversed depth buffer. #32770 (@Mugen87)
    • Unify cubemaps and cubeuvmaps into WebGLEnvironments. #32792 (@mrdoob, @claude)
    • Force flat shading for geometries without normals. #32831 (@mrdoob, @claude)
    • Only clear when bit mask is set. #33010 (@Philipp-M)
  • WebGLShadowMap
    • Fix wrong camera state. #32777 (@Mugen87)
  • WebGLState
    • Fix polygon offset with reversed depth buffer. #32832 (@Mugen87)
  • WebGPURenderer
    • Fix compileAsync() with target scenes. #32530 (@Mugen87)
    • Prevent translation of skybox. #32537 (@Mugen87)
    • Prevent undefined GPUShaderStage. #32539 (@verekia)
    • Fix shadow comparison on Adreno GPUs. #32548 (@sunag)
    • Introduce shadowMap.color. #32596 (@sunag)
    • Unify uniformGroup bindings across shader stages. #32602 (@sunag)
    • Add per-attachment MRT blending support. #32636 (@sunag)
    • Fix depth/stencil format out-of-sync bug. #32731 (@Mugen87)
    • Use @interpolate(flat, either) for all cases. #32761 (@greggman)
    • Rename Nodes to NodeManager. #32786 (@sunag)
    • Rename RenderPipeline to RenderObjectPipeline. #32785 (@sunag)
    • Rename PostProcessing to RenderPipeline. #32789 (@sunag)
    • Always request compatibility mode and upgrade to core. #32762 (@greggman, @Mugen87)
    • Optimize chain key array reset. #32833 (@Mugen87)
    • Fall back to default texture when texture creation fails. #32853 (@ycw)
    • Introduce initRenderTarget(). #32867 (@Mugen87)
    • Export CubeRenderTarget and use it in examples. #32871 (@Mugen87)
    • WebGL viewport / scissors not working correctly with PostProcessing. #32883 (@TobiasNoell)
    • Fix overrideMaterial node assignments. #32896 (@Mugen87)
    • Turn off antialiasing in compat mode. #32902 (@greggman)
    • Make wireframe update more flexible. #32908 (@Mugen87)
    • Make generateMipmap work in compatibility mode. #32906 (@greggman)
    • Fix flipY and cache key when generateMipmap. #32922 (@sunag)
    • Improve checks for uniform buffer limits. #32949 (@sunag)
    • Fix wireframe rendering for BatchedMesh. #32955 (@Mugen87)
    • Improve compatibilityMode support for MRT. #32973 (@sunag)
    • Add basic reversed depth buffer support. #32967 (@Mugen87)
    • Add shared BindGroup via hash. #32936 (@sunag)
    • Use all visibility for shared BindingGroup. #32997 (@sunag)
    • Minor improvements for shared BindingGroup. #32998 (@sunag)
    • Reversed depth buffer fixes. #33000 (@Mugen87)
    • Fix stencilBack not matching stencilFront in pipeline. #33002 (@jpt)
    • Remove outdated bind groups. #33011 (@Mugen87)
  • WebGPUTexturePassUtils
    • Cleanup generateMipmaps. #32915 (@greggman)
  • WGSLNodeBuilder
    • Fix array texture layer support for filtered sampling. #32990 (@RenaudRohlinger)
  • XRManager
    • Fix XR camera layers inheritance. #32626 (@wrangelvid)

Docs

  • Update URL in VignetteShader.js documentation. #32573 (@jwheare)
  • Update documentation for ImageBitmapLoader options. #32574 (@jwheare)
  • Improved search results. #32577 (@mrdoob)
  • Remove .is properties from search results. #32578 (@mrdoob)
  • Fix JSDoc Example. #32603 (@leannepepper)
  • worldToLocal typo. #32647 (@satelllte)
  • Update documentation to include KHR_meshopt_compression. #32661 (@donmccurdy)
  • improve JSDoc documentation in utils.js. #32743 (@Angel98518, @Daniel)
  • Update TorusGeometry with thetaStart and thetaLength. #32760 (@3dpk-interactive)
  • Improve documentation for edge cases in MathUtils functions. #32806 (@dive2tech, @Gittensor Miner, @Mugen87)
  • Prevent translators from aggressively translating parameter names. #32868 (@ycw)
  • KTX2Loader. Fix typo in TYPE_MAP. #32899 (@epreston)
  • Clarify auto update flags. #32909 (@Mugen87)
  • Add missing JSDoc. #32921 (@Mugen87)
  • Fix typo in JSDoc. #32946 (@glowsenior)
  • Added llms.txt, llms-full.txt and llms/build.js script. #32673 (@mrdoob)
  • Fix typo and link in Installation manual. #32972 (@pavan-sh)
  • utils : update probeAsync jsdoc. #32995 (@epreston)

Manual

  • Frame-rate independent cube rotation example. #32627 (@satelllte)
  • Update rendering-on-demand.html. 4bbae20d6759dd0bd160fede992dd5d82e0b8294 (@Mugen87)
  • Improve Chinese translation. #32804 (@guo-weijie)
  • Update WebGPU guide. #32846 (@Mugen87)
  • docs(zh): translate "Getting Started" manual pages into Chinese. #32996 (@DDDDD12138)
  • Add Physics page. #33004 (@Mugen87, @Walid Chtioui)
  • Replace the template literal with string concat in lights page. #33012 (@v-stamenova)

Examples

  • Cleanup examples. #32528 (@Methuselah96)
  • Add external example for Polyslice G-code slicer. #32502 (@jgphilpott, @microsoftcopilot, @Mugen87)
  • Remove material AO demo. #32579 (@Mugen87)
  • Update webgpu_shadowmap. #32610 (@sunag)
  • Add basic fog scattering demo. #32613 (@Mugen87)
  • Add shadow tag to webgpu_postprocessing_sss. e85890ebc870883c4147fefd472cb13542bc9e4b (@mrdoob)
  • Clean up. 15cbc8c6f2b104835082cf08dadfdd1a72fcf5b0 (@mrdoob)
  • Improved grid in webgpu_loader_materialx. 5cde3c7ec5af65456dfc1c29d3e592be6051400f (@mrdoob)
  • Cleanup examples. #32634 (@Methuselah96)
  • Improved examples. 0168a66eaebd0cd5a5ae5dc85ad20ed34b03827a (@mrdoob)
  • Added bloom to ocean examples. #32680 (@mrdoob)
  • Improved webgl_animation_keyframes. #32685 (@mrdoob)
  • Remove obsolete shadow bias from WebGPU demos. #32715 (@Mugen87)
  • Add missing UnrealBloomPass parameters. #32736 (@Methuselah96)
  • Add support for reversed depth to post processing modules. #32773 (@Mugen87)
  • Replace Clock with Timer. #32782 (@Mugen87)
  • Update Godrays demo. #32801 (@Mugen87)
  • Improved draco example and re-encode bunny.drc with 2.2 (cl7) reducing file size from 96KB to 47KB. 89c278c26286bfb223a2c82ec388b094b69d2a94 (@mrdoob)
  • Update webgpu_postprocessing_godrays.html. d167b69e3c0b7157ac96ca9eda3c5a0c351cfa2b (@Mugen87)
  • Various fixes for WebGPU compatibility mode. #32907 (@greggman)
  • Add Volumetric Lighting using TRAA. #32953 (@sunag)
  • Update webgpu_parallax_uv, and webgpu_cubemap_adjustments examples using .hdr file. #32976 (@sunag)
  • Scroll sidebar to selected example. #32980 (@sunag)
  • Clean up. #32994 (@Mugen87)
  • Improve birds compute demo. #33016 (@Mugen87)

Addons

  • Anaglyph

    • Rename screenDistance to planeDistance. #32943 (@Mugen87)
  • AnaglyphEffect

    • Use frameCorners() for physically-correct stereo. #32929 (@zalo, @claude)
  • CCDIKSolver

    • Fixed typos in /examples/jsm folder. #32631 (@mrdoob)
  • ColladaLoader

    • Split into modular files. #32796 (@mrdoob, @claude)
    • Improve animation support. #32830 (@mrdoob, @claude)
    • Apply falloff angle to spot lights. 17529114983185f1266b40e36933d306badfd5f5 (@mrdoob, @claude)
  • Exporters

    • Add Object3D.pivot support. #32769 (@mrdoob)
  • GCodeLoader

    • Add support for M82/M83 commands. #32687 (@Mugen87)
  • GLTFExporter

    • Fix skinIndex export for InterleavedBufferAttribute. #32607 (@querielo, @Mugen87)
  • GLTFExporter/GLTFLoader

    • Add Object3D.pivot support. #32774 (@mrdoob)
  • GLTFLoader

    • Fix empty groups when multiple scenes reference same nodes. #32567 (@YusakuNo1)
    • GLTFLoader and KTX2Loader: Add a sanity check for navigator.userAgent before using it. #32633 (@leonmetthez)
    • Implement support for KHR_meshopt_compression. #32163 (@zeux)
    • Add getMaterialExtension helper. #32748 (@mrdoob, @claude)
  • Global

    • Remove deprecated code. #32572 (@Mugen87)
    • Replace Clock with Timer. #32793 (@Mugen87)
  • HalftoneShader

    • Add diamond shape option. #32942 (@NateWr)
  • Inspector

    • Store parameters object+key. #32507 (@marwie)
    • Add "Copy All" button to Console tab. #32825 (@seantai, @sunag)
  • JoltPhysics

    • Fix dynamic import Vite warning. e796263ee25703290d920d958888061b799c7ded (@mrdoob)
  • KTX2Loader

    • Fix alpha for BC3 textures. #32772 (@donmccurdy)
  • LDrawConditionalLineNodeMaterial

    • fix import. #32861 (@gkjohnson)
  • LDrawLoader

    • De‑magic condition. #32886 (@ycw)
  • LensflareMesh

    • Fix DPR usage. #32625 (@Mugen87)
  • LineMaterial

    • Set needsupdate when changing worldUnits property. #32952 (@dsafa)
  • Loaders

    • Use named fflate imports and native TextDecoder. #32765 (@mrdoob)
  • Nodes

    • Removing unnecessary nodesObject. #33014 (@sunag)
  • Object3D

    • Added pivot property. #32745 (@mrdoob)
  • OrbitControls

    • Expose pan, rotate and dolly methods. #32810 (@TobiasNoell)
    • Add cursorStyle property. #32981 (@Mugen87)
  • PCDLoader

    • Fix label parsing. #32683 (@Mugen87)
  • RapierPhysics

    • Fix dynamic import Vite warning. #32565 (@mrdoob, @claude)
  • RoomEnvironment

    • Adjust scene position. #32646 (@mrdoob)
  • SSRNode

    • Performance optimizations. #32637 (@mrdoob)
    • Add distance-aware blur for roughness. #32834 (@mrdoob, @claude)
    • Use squared roughness for blur LOD and simplify pointPlaneDistance. #32993 (@mrdoob, @claude)
  • Sky/SkyMesh

    • Remove legacy gamma correction curve. #32677 (@mrdoob)
    • Added procedural clouds. #32682 (@mrdoob)
  • TSL

    • Improve retroPass and example. #32954 (@sunag)
  • USDAParser

    • Improve text parsing robustness. #32747 (@mrdoob, @claude)
  • USDAParser/USDComposer

    • Clean up. 3cd3e5b87e4a75aa14cf43958ddcaf9c6edebebc (@mrdoob)
  • USDCParser

    • Fixed scalar handling. 43166fcb2c5378a3cdd4c782175d0daf136a10d1 (@mrdoob)
  • USDComposer

    • Fix color space handling for material colors. 73636e35bfc1800f0242cbd0a5c488b184546943 (@mrdoob)
    • Clean up. e3f4523ed8d11e538cdbfbe573514a7fe01ed64a (@mrdoob)
    • Added primvars:displayOpacity support. 27f2f4eb5fbf78f42d0447a7b7f1879445b96111 (@mrdoob)
    • Fixed variant composition. 9a711cc1f452a917fe92eab3b4538fd34f45687a (@mrdoob)
    • Support variant overrides on ancestor prims. 96432fc0bd1a4a44afea6ebed27f65e9ed342c9e (@mrdoob)
  • USDLoader

    • Added USDC file support. #32704 (@mrdoob)
    • Refactored into USDComposer and added animation support. #32740 (@mrdoob)
    • Improve material and UV support. #32746 (@mrdoob)
    • Unify USD format handling and add .usd support. 5532147c692e1ec3c34e8d6455a598945011223e (@mrdoob)
    • Add OpenPBR Surface shader and polygon hole support. #32764 (@mrdoob)
    • Various bug fixes and improvements. #32766 (@mrdoob)
    • Performance improvements and external texture support. #32790 (@mrdoob, @claude)
    • Improve transform handling, skinning, and image loading. #32828 (@mrdoob, @claude)
    • Fix material binding lookup for variants. 43c8ff7e8966b1a359b104915290b8d4619e80cc (@mrdoob, @claude)
    • Apply UsdUVTexture scale to material colors. 585b578fb735485a95b651ff9d9e001601d3090f (@mrdoob, @claude)
  • UltraHDRLoader

    • Add support for ISO 21496-1 gainmap metadata. #32862 (@mrdoob)
  • VRMLLoader

    • Add camera support. #32580 (@Mugen87)
  • VTKLoader

    • Fix ReDoS vulnerability. #32622 (@mrdoob)
  • ViewHelper

    • Add location property for positioning. 22afab942a46cd9f6b7310e3c210a6a19655ca0d (@mrdoob, @claude)
  • Water

    • Use HalfFloatType for reflection render target. #32678 (@mrdoob)
  • Water/WaterMesh

    • Improve realism. #32681 (@mrdoob)
  • WaterMesh

    • Remove unneeded Lambert material. 40d7441aee16fc0bc0839ba597b2f7ec84324045 (@mrdoob)
  • WebGLRenderer

    • More fixes for reversed depth buffer. #32799 (@Mugen87)
  • WebGPURenderer

    • Add GodraysNode. #32888 (@Mugen87)
  • WebGPU_Display_StereoExample

    • Add new Anaglyph Techniques. #32905 (@zalo)
  • examples

    • jolt-physics@1.0.0. #32711 (@linbingquan)

Editor

  • Modernized ui.js. #32545 (@mrdoob)
  • use ES6 const/let for app.js. #32712 (@linbingquan)
  • Move render options from sidebar to menubar. #32727 (@mrdoob)
  • Replace FFmpeg with WebCodecs for video rendering. #32728 (@mrdoob)
  • Use parseAsync when rendering image. f02c6851af95be4d2ca655521a6928bd7e35d297 (@mrdoob)
  • Add Resources panel to Project sidebar. #32729 (@mrdoob)
  • UI css scope. #32714 (@linbingquan)
  • Enable logarithmic depth buffer. #32732 (@mrdoob)
  • Debounce Resources panel updates. 8084de7640e5b7794754f8bad3b53b9641840493 (@mrdoob)
  • Add default environment. #32752 (@mrdoob)
  • ESLint: migrate to flat config, note missing eqeqeq rule. #32754 (@ycw)
  • Simplify environment handling. #32757 (@mrdoob)
  • Clean up sw.js. d9b39f4ea88d1b87d91c7f1f6cb43c04670658cd (@mrdoob)
  • Improve service worker caching and activation. c36ae33e09de7cb788ad098c6778ac2b8d10249b (@mrdoob)
  • Add dialog for glTF import. #32784 (@Mugen87)
  • Improve geometry sidebar with interleaved and instanced support. 86c5b3e9afb9a910909f06e6086ffccb519cc7dc (@mrdoob, @claude)
  • Change default tone mapping to Neutral. ceda42c71f661585fa16282536695ef0c18e781f (@mrdoob, @claude)
  • Added WebGPURenderer support. #32842 (@mrdoob, @claude)
  • Improve UI layout. 293ed86238d8563af70a4ddab51067891c7188ee (@mrdoob, @claude)
  • Fix camera move error. #32843 (@linbingquan)
  • Clean up Viewport.Controls. a97401bca9c0bbacbb931aa0f8a446ad161c1ae2 (@mrdoob, @claude)
  • Add morph target support. #32844 (@Mugen87)
  • Fix canvas reference for video rendering. #32864 (@ycw)
  • Retain viewport color when rendering images/videos. #32866 (@Mugen87)
  • Deprecate ServiceWorker. 3ab79b8334a6c905f7ab54ef02ed3e82884aad6a (@mrdoob, @claude)
  • fix app publishing for project using WebGPURenderer. #32897 (@ycw)
  • Refine eslint config: limited exclusion and lint fixes. #32917 (@ycw)
  • Cleanup. #32965 (@linbingquan)
  • Add Animation panel. #32869 (@mrdoob, @claude)

Tests

  • Quaternion - Support extrapolation in slerp methods. #32541 (@WestLangley)
  • Puppeteer: Remove express dependency. #32649 (@mrdoob)
  • Removed rollup-plugin-filesize dependency. #32650 (@mrdoob)
  • Puppeteer: Replaced jimp with jpeg-js and pngjs. #32652 (@mrdoob, @claude)
  • Puppeteer: Removed pixelmatch dependency. #32656 (@mrdoob)

Utils

  • Replaced servez with custom server.js. #32654 (@mrdoob)
  • Replaced concurrently with custom preview.js. #32655 (@mrdoob)
  • Update utils/server.js to selfsigned 5.0.0. 5b5594a161c3c41f6e1fc9aa58e96949bbc5c2d8 (@mrdoob)
  • server.js: removed redundant call to path.normalize(). 7cc18054c7fa5e438b9a6cd648b1d4296282920d (@mrdoob)
  • server.js: simplified code. 7cd43e066a725ea6b2349e52911a01613a9cbeaa (@mrdoob)
  • Remove dev-ssl and preview-ssl. #32672 (@mrdoob)
  • utils/server.js: cross-platform isMain check. #32674 (@ycw)
  • Add changelog generator. #32781 (@mrdoob, @claude)
  • Fix loading of sites without .html extension. #32970 (@Mugen87)
  • build-llms: Clean up stale .md files before generating new ones. f45d6f94de70d6f8351a0e0a17628979718044dc (@mrdoob, @claude)
  • build-docs: Clean up stale .html files before generating new ones. ed98cc4aa1f5decd9b23f54aa5ca2865e95fa56a (@mrdoob, @claude)
  • Improve changelog.js. 2cc37c2bdab8318bdb14033bdbe6763b695d21b2 (@mrdoob, @claude)
  • Improve changelog.js. 8863cdbd3aa3f66df4c5e5385f717adaf8b06ada (@mrdoob, @claude)
2025-12-11 00:14:25
three.js

r182

https://github.com/mrdoob/three.js/wiki/Migration-Guide#181--182 https://github.com/mrdoob/three.js/milestone/95?closed=1

  • Global
    • Migrate to ESLint 9, flat config. #32471, #32518, #32519, #32520 (@gkjohnson, @Mugen87)
  • BatchedMesh
    • Fix index and attribute updates in optimize(). #32185 (@querielo)
  • BatchNode
    • Optimize generated shader code. #32203 (@Mugen87)
  • BufferGeometry
    • Add indirectOffset parameter for indirect drawing. #32392, #32413 (@holtsetio, @RenaudRohlinger)
  • ChainMap
    • Improve dynamic key size. #32510 (@sunag)
  • ExtrudeGeometry
    • Honor closed property of CatmullRomCurve3. #32410 (@Mugen87)
  • InstanceNode
    • Add support for StorageInstancedBufferAttribute. #32240 (@RenaudRohlinger)
  • Light
    • Unify toJSON() implementations. #32414 (@Mugen87)
  • LightProbe
    • Remove fromJSON(). #32415 (@Mugen87)
  • Line2NodeMaterial
    • Align wide lines with WebGLRenderer version. #32234 (@Mugen87)
  • Material
    • Fix copy() to include allowOverride. #32269, ba1655cf3587349768665c442a4f7cc0ecd23759 (@crazylogic03, @Mugen87)
  • Matrix4
    • Optimize determinant() calculation. #32157 (@mrdoob)
    • Avoid NaN values when scale is zero. #32440 (@Om-Mishra09)
  • MeshPhysicalMaterial
    • Fix iridescence energy conservation for mixed materials. #32309 (@mrdoob)
    • Improve Sheen energy conservation and analytic approximation. #32356, #32397 (@mrdoob)
  • MeshStandardMaterial
    • Fix furnace test energy loss for intermediate metalness values. #32190, #32201 (@mrdoob)
    • Improve physical accuracy. #32330 (@mrdoob)
  • NodeBuilder
    • Add missing vector types to generateConst(). #32162 (@cmhhelgeson)
    • Cache node attributes for vertex stage only. #32189 (@Mugen87)
    • Ignore events for shared context. #32492 (@sunag)
  • NormalMapNode
    • Add basic support for normal unpacking. #31695 (@castano)
  • PMREMGenerator
    • Improve GGX VNDF accuracy and match Blender roughness. #32311 (@mrdoob)
    • Reduce DFG LUT resolution to 16x16. #32358 (@mrdoob)
  • PointShadowNode
    • Refactor to use native cube depth texture. #32379 (@mrdoob)
  • PolyhedronGeometry
    • Fix typo in fromJSON(). #32475 (@Ayush123-e)
  • ShaderMaterial
    • Fix copy() to include missing properties. #32219 (@NssGourav)
  • Source
    • Guard reference to VideoFrame. #32301 (@Mugen87)
  • StructTypeNode
    • Fix memory length calculations. #32377 (@holtsetio)
  • TSL
    • Add renderer context node (global). #32295 (@sunag)
    • Check for undefined in uniform(). #32183 (@Mugen87)
    • Add texture3DLoad() and texture3DLevel(). #32171 (@RenaudRohlinger)
    • Add bitcount related functions. #31990 (@cmhhelgeson)
    • Add support for mat3 and mat4 using bufferAttribute(). #32204 (@sunag)
    • Do not auto-generate tangent attribute. #32220 (@Mugen87)
    • Pre-pass using global context. #32276, #32345 (@sunag)
    • Introduce float packing / unpacking intrinsics. #32329 (@Ne0nWinds)
    • Introduce builtinShadowContext() and builtinAOContext(). #32384, #32378 (@sunag, @querielo)
    • Renamed DFGApprox to DFGLUT. #32399 (@mrdoob)
    • Fix non-stack function call with loops. #32420 (@sunag)
    • Prevent memory leaks in ShadowNode. #32395 (@querielo)
    • Fix get member from array element. #32514 (@sunag)
    • Remove nodeObject() for Node classes. #32515 (@sunag)
  • Vector3
    • Clean up. #32363 (@MOHITKOURAV01)
  • WebGLRenderer
    • Support more EAC texture formats. #32308 (@castano)
    • Modernized shadow mapping. #32181, #32303, #32407, #32443 (@mrdoob)
    • Align transmission render target samples with canvas. #32444 (@mrdoob)
    • Remove SUPPORTS_VERTEX_TEXTURES. #32455 (@mrdoob)
    • Clean up setupRenderBufferStorage(). #32456 (@mrdoob)
    • Use Map for O(1) program lookup. #32463 (@mrdoob)
    • Move point light shadow logic from PointLightShadow. #32473 (@mrdoob)
    • Refactor tone mapping and shadow map functions. #32512 (@mrdoob)
    • Add outputBufferType and setEffects(). #32461 (@mrdoob)
  • WebGPURenderer
    • Support more EAC texture formats. #32308 (@castano)
    • Fix textured backgrounds with ortho cameras. #32313 (@Mugen87)
    • Improve StorageTexture3D support. #32150 (@RenaudRohlinger)
    • Optimize VSM shadow code. #32209 (@mrdoob)
    • Fix shadowing of error function. #32245 (@Methuselah96)
    • Improve cache bindings from node uniforms. #32244 (@sunag)
    • Set opaque blend mode for secondary MRT targets. #32265 (@sunag)
    • Add update ranges for bindings. #32248 (@sunag)
    • Buffer labeling adjustment. #32247 (@cmhhelgeson)
    • Relates MRT for RenderContext in obtaining a unique context. #32264 (@sunag)
    • Fix VSM shadow artifacts. #32327 (@mrdoob)
    • Fix point light shadows. #32365 (@mrdoob)
    • PCF shadow filtering with Vogel disk sampling and IGN. #32381, #32407 (@mrdoob)
    • Use correct cache for default cube textures. #32425 (@SE7EN2028)
    • Refine video texture warning. #32439 (@Mugen87)
    • Improve resource disposal. #32446 (@querielo)
    • Skip invalid frame of video textures. #32441 (@whatisor)
    • Improve Bind Group Layout cache system. #32451, #32249 (@cmhhelgeson, @Mugen87)
    • Consistent enable() and disable() usage. #32503 (@Mugen87)
    • Consistent bindFramebuffer() usage. #32504 (@Mugen87)
    • Rename getColorBufferType() to getOutputBufferType(). #32501 (@sunag)
    • Use outputType as default in getPreferredCanvasFormat(). 5ae9a2edc7698b96457064355bd4df505814f475 (@sunag)
    • Prevent translation of skybox. #32526 (@Mugen87, @SebastianTusk)
  • WGSLNodeBuilder
    • Improves code formatting. #32511 (@sunag)

Docs

  • Clean up. d70adae523c1b3c67defbe9fdf3a69c153cbd454, 9e94632cb90fc22f0b32f1461d625439b9db47e8, 72f91e3cf64eee7f392c8b15bddbc36bc56247d5 (@Mugen87)
  • Add missing @private annotation. #32165 (@Mugen87)
  • Fix external links. #32161 (@mrdoob)
  • Fix ShadowNode JSDoc. #32166 (@Mugen87)
  • Improved search with category matching. #32164 (@mrdoob)
  • Fix JSDoc of inspector. #32192 (@Mugen87)
  • Remove unused parameter from BatchedMesh.optimize(). #32186 (@querielo)
  • Improve ShaderMaterial.fog. #32224 (@Mugen87)
  • Fix return type in compileAsync(). #32205 (@querielo)
  • Fix options of PMREMGenerator. #32285 (@ycw)
  • Improve SkyMesh. #32289 (@jwheare)
  • Open panel on mobile when no page is selected. #32261 (@mrdoob)
  • Fix typo in MaterialLoader. #32316 (@michael-erskine)
  • Replace [name] in docstring. #32332 (@ycw)
  • Update default anisotropy value in Texture. #32346 (@thibka)
  • Fix restitution param desc in physics addons. #32341 (@SollyBunny)
  • Fix typo in DecalGeometry. #32366 (@rotu)
  • Improve Bloom radius description. #32450 (@Mugen87)
  • Fix Renderer WebGPU convention. #32457 (@sunag)
  • Fixed typo in BufferGeometry. #32477 (@Magnus1X)

Manual

  • Update OffscreenCanvas support details. #32184 (@aganders3)
  • Fix formatting in prerequisites.html. #32217 (@Mugen87)
  • Add guide about Post-Processing with WebGPURenderer. #32279 (@Mugen87)
  • Add guide about WebGPURenderer. #32260 (@Mugen87)

Examples

  • Add radial blur demo. #32297 (@Mugen87)
  • Fix chromatic aberration type usage of caustics example. #32169 (@sunag)
  • Improve BPCEM demo. #32172 (@Mugen87)
  • Fix thumbnail of backdrop demo. #32178 (@Mugen87)
  • Simplify render bundle demo. #32215 (@Mugen87)
  • Cleanup stats-gl. #32242 (@RenaudRohlinger)
  • Improve ray marching in volume rendering examples. #32235 (@mrdoob)
  • Move webgpu_struct_drawindirect to TSL. #32222 (@cmhhelgeson)
  • Add WebGPU Contact Shadows. #32262 (@querielo)
  • Renamed “external” tag to “community”. #32232 (@mrdoob)
  • Open panel on mobile when no example is selected. #32261 (@mrdoob)
  • Update credit link in webgl_animation_skinning_ik. #32259 (@abernier)
  • Add model selector to glTF loader examples. #32364, 1296afb199e2420f322bd5d45701fd686cfe2f38, #32406 (@mrdoob)
  • Made shadows soft in webgl_shadowmap_pointlights. 56838ce12c409fdf24992932839490d7ab58877f (@mrdoob)
  • Added webgpu_shadowmap_pointlight example. 3b0c9cd4760c0b75f3fa4ce1ac5f882e37f68fd3, 645e0898bdbf6992cbd24c016e6a539d68181873 (@mrdoob)
  • Migrate royal_esplanade examples to UltraHDRLoader. #32380 (@mrdoob)
  • Use real-world scale in stereo demo. #32403 (@Mugen87)
  • Fix WebGPU water simulation on mobile GPUs. #32411 (@mrdoob)
  • Update Compute Fluid to use IndirectStorageBuffer. #32176 (@cmhhelgeson)
  • Update webgl_loader_texture_ktx example with new formats. #32448 (@castano)
  • Improved RectAreaLight examples. #32493 (@mrdoob)
  • Unify import path for WebGPU related classes. #32494 (@Mugen87)
  • Fix MRT readback with WebGL backend. #32505 (@Mugen87)

Addons

  • AmmoPhysics

    • Support restitution. #32347 (@SollyBunny)
  • BloomNode

    • Implement disposal of materials to prevent memory leaks. #32452 (@querielo)
  • Controls

    • Fix stuck state when releasing mouse outside window. #32323 (@mrdoob)
  • CSM

    • Reuse origin vector. #32331 (@Mugen87)
  • Inspector

    • Fix Viewer aspect ratio. #32194 (@sunag)
    • Fix slider dimensions. #32177 (@Mugen87)
    • Improve UX. #32197, a6ca2537932e47510b2542990f6033d9f794454a (@sunag)
    • Add window/panel boundary constraints. #32208 (@sunag)
    • Mini-panel for parameters. #32257 (@sunag)
    • Fix value update of number and checkbox elements. #32355 (@Mugen87)
    • Fix cube depth texture error. #32412 (@sunag)
    • Update checkmark internal box size. 7ad089e773167ed7a7da33dc13ee7fd05280bc36 (@sunag)
    • Add warn if the inspected node outside of frame scope. #32458 (@sunag)
  • LDrawLoader

    • Align material, group behavior with other loaders. #32522 (@gkjohnson)
  • MapControls

    • Improve panning accuracy. #32324 (@mrdoob)
  • Octree

    • Add Box3 interface. #32343, 6e006b29964ff6facb832690d3e38918d8434b64 (@Mugen87, @mrdoob)
  • Physics

    • Add errors when trying to use getShape() for unsupported geometry types. #32372 (@SollyBunny)
  • PixelationPassNode

    • Fix zero normal processing. #32159 (@Mugen87)
  • SkyMesh

    • Add isSkyMesh flag and deprecate isSky. #32263 (@querielo)
  • SSRNode

    • Ensure boolean value for isPerspectiveCamera uniform. #32218 (@FarazzShaikh)
  • SVGLoader

    • Add stylesheet jsName vs svgName fix. #32119 (@jhlggit)
  • SVGRenderer

    • Add depth sorting for Sprites and SVGObjects. #32212 (@mrdoob)
    • Add near/far plane clipping support. #32210 (@mrdoob)
  • TRAANode

    • Improve motion factor and disocclusion. #32296 (@shotamatsuda)
    • Replace MSAA sample pattern with Halton sequence. #32319 (@shotamatsuda)
    • Reduce smearing. #32322 (@shotamatsuda)
  • TSL Transpiler

    • Support struct definitions and declarations. #32300 (@Ne0nWinds)
    • Fix Fn layout generation when generating a function with no input parameters. #32272 (@Ne0nWinds)
  • UltraHDRLoader

    • Fix incorrect alpha channel values. #32464 (@mrdoob)
    • Improve parsing performance. #32468, 4b110fe4c39799672f1d1de51fc013d5f2930989, d7f67fafff6eaa4871963b14baeff060f2f13102 (@mrdoob)
    • Remove debug console. #32513 (@sunag)
  • UnrealBloomPass

    • Fix alpha handling. #32517, #32521(@mrdoob, @gkjohnson)
  • VOXLoader

    • Added scene graph support. #32488 (@mrdoob)
    • Implemented greedy meshing. #32489 (@mrdoob)
    • Accept version 200 files. #32490 (@mrdoob)
    • Replace VOXMesh and VOXData3DTexture classes with functions. #32491 (@mrdoob)

Editor

  • Save and restore controls state. #32408 (@mrdoob)
  • Scale PointLightHelper based on camera distance. b7c9099db9d7e6a959d2bf46b2e5fb807e91dbcf (@mrdoob)
  • Cycle through overlapping objects on click. c745aee7c0b5297a986818235d2f2ffae029223c (@mrdoob)
  • Scale down touchscreen zoom speed #32454 (@TylerSelden)

Tests

  • Removed todo()s. #32483 (@mrdoob)
2025-10-31 18:39:26
three.js

r181

https://github.com/mrdoob/three.js/wiki/Migration-Guide#180--181 https://github.com/mrdoob/three.js/milestone/94?closed=1

  • Global
    • Use internal log, warn and error functions instead of the system ones. #31790 (@sunag)
  • Earcut
    • Updated to latest version. #31956 (@tonybart1337)
  • InstanceNode
    • Honor updateRanges. #31816 (@Mugen87)
  • LoadingManager
    • Lazily instantiate abort controller. #32120 (@NuroDev)
  • MeshMatcapMaterial
    • Support wireframe. #31917 (@WestLangley)
  • NodeBuilder
    • Add hints in comments. #32004 (@cmhhelgeson)
  • NodeFrame
    • Simplify caching. #31896 (@cmhhelgeson)
  • NodeMaterial
    • Fix alpha discard. #31927 (@Mugen87)
    • Honor aoNode in clone(). #32084 (@querielo)
  • PassNode
    • Ensure clear of internal render target. #31993 (@Mugen87)
  • PhysicalLightingModel
    • Fix Favg assignment. #32094 (@sunag)
  • PMREMGenerator
    • Implement GGX VNDF importance sampling. #32114, #32134, #32148, #32154, #32225, #32310 (@mrdoob)
  • Quaternion
    • Rewrite slerp() and slerpFlat(). #31875 (@WestLangley)
  • RenderTarget
    • Fix resize of 3D textures. #31854 (@Mugen87)
  • Sampler
    • Don't set _texture to null. #31874 (@Mugen87)
  • ShadowNode
    • Fix shadows in first frame. #32021 (@Mugen87)
  • TextureNode
    • Manage y-flip as a uniform. #31929 (@Mugen87, @sunag)
  • TSL
    • Clone PassMultipleTextureNode with offsetNode. #31849 (@shotamatsuda)
    • Fix onDispose listener not being removed in Sampler. #31868 (@shotamatsuda)
    • Minor fixes. #31808 (@Mugen87)
    • Fix coordinate types for load() on 3D texture nodes. #31775 (@shotamatsuda)
    • Add member type support for layout function parameter. #31838 (@sunag)
    • Fix conditional cache and introduce isolate(). #31973, 594893f13ea9f252a2e918d2c3755878157220cb (@sunag)
    • Forces assignment of a function call if a loop is detected. #31974 (@sunag)
    • Fix auto type conversion for layout parameters. #32059 (@sunag)
    • Resolve some name collision. #32032 (@sunag)
    • Move Interleaved Gradient Noise into PostProcessingUtils. #32074 (@Mugen87)
    • Fix recursive cache key. #32070 (@sunag)
    • Fix size computations in FX/RTT nodes. #32077 (@Mugen87)
    • Ensure nodeProxyIntent always sets intent: true. #32092 (@querielo)
    • Refactor positionViewDirection to handle orthographic camera cases. #32088 (@querielo)
    • Fix overloadingFn return type. #32112 (@sunag)
    • Add active stack and improve "node block" support. #32109 (@sunag)
    • Assign stack for nodes after remove stack. #32137 (@sunag)
    • Add OnBefore* events. #32144, 1d9c5a0859ac357488443d62b44ed2c457915fc1 (@sunag)
    • Fix get element through an output Fn value. #32143 (@sunag)
  • VideoTexture
    • Reset internal state rVFCId on dispose. #32082 (@ycw)
  • WebGLRenderer
    • Fix WebXR Depth Sensing. #31831 (@cabanier)
    • Use DFG LUT instead of analytical approximation. #32054, 9b0d0937c75eab4d46f5f66b3e0c18bcb1f8c07b, 5e3cd6c52b3151a7243a0dd639334c7ce4d9c320, 361853114a24b7df70df907d3f38d1997a24b34d, e225530224722d9df1e392dbfcffc7dbdbe46a4a (@mrdoob)
    • Clean up. 39b05002504a06b6a58a07570b0a6231f9390417 (@mrdoob)
    • Remove WebGL 1.0 compatibility code. #32071, 62e6f436cec8bae9a55f47f7fca16629ea0eb679 (@mrdoob)
    • Add multi-scattering energy compensation for direct lighting. #32072 (@mrdoob)
    • Improve rough reflection mixing for IBL. #32102 (@mrdoob)
  • WebGPURenderer
    • Guard reference to VideoFrame. #31864 (@Mugen87)
    • Prevent dispose of default textures. #31860 (@Mugen87)
    • Fix renderer not being garbage collected. #31798 (@shotamatsuda)
    • Properly delete compute node bindings in dispose(). #31832 (@cmhhelgeson)
    • Properly delete bind groups when render objects are disposed. #31879 (@cmhhelgeson)
    • Align copyTextureToTexture() with WebGLRenderer. #31810 (@shotamatsuda)
    • Fix shadow's alphaTest if used material.map. #31803 (@sunag)
    • Add cache for shadow nodes. #31880 (@sunag)
    • Decouple samplers from textures. #31899 (@Mugen87)
    • Introduce Inspector. #31869, #31928, #31958, #31963, #31962, #31982, #31997, #32003, #32007 (@sunag)
    • Fix rendering morphed meshes. #31904 (@Mugen87)
    • Skip resolving anti-aliasing twice. #31743, #31924 (@sunag)
    • Introduce CanvasTarget. #31919 (@sunag)
    • Make Render Bundle work with MRT. #31906 (@Berthur)
    • Fix tone mapping mode detect. #31957 (@sunag)
    • Fix binding sampler update. #31971 (@sunag)
    • Fix logs in WebGL backend. #31978 (@Mugen87)
    • Fix compressed texture feature detection for WebGL backend. #31980 (@Mugen87)
    • Adjustments and Polyfill in GLSLNodeBuilder. #31999 (@cmhhelgeson)
    • Fix functions with struct layouts cannot resolve struct types. #32000 (@shotamatsuda)
    • Allow manual mipmap creation with StorageTexture. #31983, #32039 (@RenaudRohlinger)
    • Deprecate renderAsync(), computeAsync() and related async methods. #32022, #32026, #32029, #32033, #32042, #32063 (@Mugen87, @sunag)
    • Remove waitForGPU(). #32024 (@Mugen87)
    • Fix transmission flicker. #32043 (@Mugen87)
    • Add multi-scattering energy compensation for direct lighting. #32089 (@mrdoob)
    • Improve rough reflection mixing for IBL. #32108 (@mrdoob)
    • Fix material transparent assignment. #32110 (@sunag)
    • Enable dynamic shadowMap type switching. #32105 (@querielo)
    • Introduce dispatchWorkgroupsIndirect #31488 (@Spiri0)
    • Improve shader validation #32130 (@sunag)
    • Fix dispose RenderTarget textures. #32131 (@sunag)
    • Fix types for indirect compute and modify example to show usage. #32129 (@TheBlek)
    • Improve cache key verification. #32138 (@sunag)
  • XRManager
    • Reset XRWebGLBinding on session end. #31835 (@harryhjsh)

Docs

  • Document animation loop parameter. #31853 (@Mugen87)
  • Add PLYLoader page. #31848 (@mmjinglin163)
  • Improve AnimationClip page. #31915 (@kang-git)
  • Improve Chinese translation. #31806, #31817, #31828, #32041 (@mmjinglin163, @pangda9527)
  • Improve JSDoc. #31822, #31819, #32017 (@s-rigaud)
  • Update link to packLDrawModel script extension. #31938 (@jjohnson5253)
  • Improve translation accuracy and consistency. #31960 (@puxiao)
  • Added redirects for old docs URL. #31986 (@mrdoob)
  • Reduce folder size of new docs. #31992 (@mrdoob)
  • Updated templates with old design. #32002 (@mrdoob)
  • Generate old docs system and design. #32036, 28dcaf5f9db3326dc40eb98d377b48e72afbf771, 64d3d974170722d303d49b77b48d7e466da2608d, ed360e81958bbebd4a4c0bf4ae254dc884aa5593, a02ba14525946ce991a6a119449b7ea9c04f358e, 4b510dfb7df38ac8aa1e0a7f64a2b3550dbc7615, 1ef293278f707f7f715c0313772bc86d10d3216c, a4777982c4b1c1ba3106fd59a10393172bfd63cb (@mrdoob)
  • New Docs: Add translation disable flags. #32048 (@mrdoob)
  • Add type annotations for dispatch size in ComputeNode. #32068 (@shotamatsuda)
  • Improve GLTFLoader page. #32096 (@marwie)
  • Removed legacy docs. #32117
  • Added new docs generated with JSDocs. #32118, 96fe466f8edce6e90f7c48a6fe252a2b22f7b667 (@mrdoob)
  • Update JSDoc links for better readability. #32132 (@marwie)
  • Fixed properties layout. #32156 (@mrdoob)

Manual

  • Don’t open external URLs in iFrame. #31856 (@xjh22222228)
  • Manual: Improve Responsive guide. #31942 (@davcri)

Examples

  • Clean up. #31830, #31829, #31823, #31855, #31843, #31811, #31842, #31844, #31824, #31898, #31887, #31914, #32011, #32018, #32051, #32057 (@WestLangley, @s-rigaud, @Methuselah96, @Mugen87)
  • Use instancing in webgpu_compute_birds example. #31766 (@cmhhelgeson)
  • Add WebGPU HDR example. #31893 (@RenaudRohlinger)
  • Update with the new style and inspector. #31907, #31951, #31954, #31964, #31976, #31984, #31995, #32060 (@sunag, @Mugen87)
  • Set OrthographicCamera near plane >= 0. #31912 (@WestLangley)
  • Use globalId in compute water demo, update IndexNode comments. #31941 (@cmhhelgeson)
  • Add shadow intensity to spotlight examples. #31972 (@WestLangley)
  • Don’t use property() for creating variables. #32028 (@shotamatsuda)
  • Improve webgl_watch example. b61441df2e92a487f3063cd44cc614be8bbd9a4a (@mrdoob)
  • Improve webgl_postprocessing_unreal_bloom example. 2cff1474de2e0037c12bc46c1d9d472f14b04637 (@mrdoob)
  • Apply camera constraint immediately in WebGPU bloom demo. #32081 (@ycw)
  • Fix output control in SSS demo. #32083 (@ycw)
  • Add bloom strength to webgl_postprocessing_unreal_bloom_selective. #32125 (@querielo)
  • Visualize normal as color in webgpu_postprocessing_ao. #32141, #32153 (@ycw, @sunag)

Addons

  • AfterImageNode

    • Fix swap. #32140 (@Mugen87)
  • AsciiEffect

    • Remove noise from black texture. #31858 (@s-rigaud)
  • BitonicSort

    • Add new bitonic sort addon. #31852, #31949 (@cmhhelgeson)
  • CSS2DRenderer

    • Add sortObjects. #31946 (@Konseyy)
  • CSSRenderer

    • Ensure element exists when execute remove. #31905 (@xiaoliyooo)
  • DRACOLoader

    • Implement data alignment for WebGPU. #31991 (@donmccurdy)
  • FontLoader

    • Add text direction. #31683, #32078 (@Rikahei)
  • GlitchPass

    • Fix heightMap member name. #32047 (@joey8angelo)
  • GTAONode

    • Optimize render target format. #31883 (@Mugen87)
    • Add basic support for temporal filtering. #32076 (@Mugen87)
  • HTMLMesh

    • Fix dimensions of canvas drawing. #31931 (@pvtech-adam)
  • KTX2Loader

    • Fix ETC1S/UASTC prioritization. #31871 (@zeux)
    • Honor setRequestHeader(). #32115 (@LR17)
  • MaterialXLoader

    • Use ImageBitmapLoader to prevent blocking. 154e14558021d0aae2770eafb621741ac25680e4, bca53e60926c4afb05c6d16672c00554d9c8bbde (@mrdoob)
  • ProgressiveLightMap

    • Make normals mandatory. #31825 (@Mugen87)
  • SelectionBox

    • Add support for BatchedMesh. #32052 (@sunjiang0018)
  • SSGINode

    • New node for screen-space global illumination. #31839, #31865, #31867, #31863, #31873, #31881, #31890, #31882 (@Mugen87, @zalo)
  • SSSNode

    • Add new node for Screen-Space Shadows. #32050 (@Mugen87)
  • SVGLoader

    • Make node transform parsing more robust. #31985 (@Mugen87)
  • TRAANode

    • Reduce Ghosting/Smearing. #31895 (@zalo)
    • Make depth copy more robust. #31908 (@Mugen87)
    • Add adaptive blend weights. #32139 (@Mugen87)
  • TSL Transpiler

    • Fix immutable to dynamic parameter conversion and shadertoy example. #31996 (@sunag)
  • TubePainter

    • Improved generated geometry and added caps. #32025 (@mrdoob)
    • Fixed end caps and removed object allocations. #32030, 21009ebc442a3566e76ba0f4d9b8b19a5c910c7d (@mrdoob)
  • UnrealBloomPass

    • Backported blur improvements. 057d341afde09e38c59037e39fc81198b241258d (@mrdoob)
  • USDZExporter

    • Improve material prop types and setup. #32008 (@mkeblx)
  • ViewHelper

    • Add OffscreenCanvas support. #32128, f957f0b2adada81cb7c1de6fe34a79ead0026a93, babe7f2cc2946b87cdf5e6958fb660bc8ba5d8a3 (@Mugen87)
  • WaterMesh

    • Fix incorrect resolution scale assignment. #32056 (@jonsmithers)
  • XRHandModelFactory

    • Fix inverted hand models. #31634 (@jorodi)

Tests

  • Remove obsolete material callbacks. #31876 (@codyjasonbennett)
  • Improved E2E robustness. #32091, #32090, b3dde01ebb2509893dc41a9d29bd6dfba1794731, 3a987fad398939a7b6a2c4e9b7d2dd5df99ffa50 (@mrdoob)

Editor

  • Fix material reference in SetMaterialRangeCommand. #32080 (@ycw)

Node Editor

  • Fix usage of timerLocal. #31889 (@Mugen87)
2025-09-03 19:47:06
three.js

r180

https://github.com/mrdoob/three.js/wiki/Migration-Guide#179--180 https://github.com/mrdoob/three.js/milestone/93?closed=1

  • Global
    • Clean up. #31719, #31564, #31671, #31732, #31734, #31726 (@Methuselah96, @WestLangley, @s-rigaud)
    • Remove deprecated code. #31632, #31555 (@Mugen87)
  • AnimationClip
    • Add userData and honor in glTF loader and exporter. #31586 (@repalash)
  • Bindings
    • Fix caching of texture bindings. #31755 (@Mugen87)
  • ClippingNode
    • Move uniforms into render group. #31716 (@Mugen87)
  • ExternalTexture
    • Support copy(), clone(). #31731 (@donmccurdy)
  • GLSLNodeBuilder
    • Fix texelFetch*() code generation with depth textures. #31760 (@shotamatsuda)
    • Fix texture() code generation for depth texture. #31770 (@shotamatsuda)
  • Material
    • Add missing map properties to toJSON(). #31578 (@Mugen87)
  • NodeBuilderState
    • Fix type of bindingsReference in createBindings(). #31678 (@cmhhelgeson)
  • PointsNodeMaterial
    • Fix scaling bugs. #31627, #31707 (@WestLangley)
    • Fix broken point primitive rendering. #31702 (@Mugen87)
    • Improve JSDoc. #31703 (@Mugen87, @WestLangley)
  • Renderer
    • Make dispose() more robust. #31681 (@Mugen87)
  • RenderObject
    • Honor sampler data in material cache key. #31633 (@Mugen87)
    • Fix cache key for instanced meshes. #31783 (@Mugen87)
  • Sampler
    • Fix dispose. #31751 (@Mugen87)
  • Sprite
    • Improve JSDoc. #31642 (@cmhhelgeson)
  • SpriteNodeMaterial
    • Honor sizeAttenuation for perspective camera only. #31628 (@WestLangley)
  • TSL
    • Add texture offset feature. #31715 (@shotamatsuda)
    • Refine pow2/3/4 and remove polyfill for Windows. #31720 (@shotamatsuda)
    • Improve camera array support and introduce cameraViewport. #31615 (@RenaudRohlinger)
    • Replace Proxy approach with prototypes. #31691 (@sunag)
    • Fix update type of screenDPR. #31706 (@Mugen87)
    • Fix type propagation in members. #31699 (@sunag)
    • Fix member type in function layout. #31609 (@sunag)
    • Fixed persistent reference of the first stack. #31717 (@sunag)
    • Uniformly implement resolution scale. #31697 (@Mugen87)
    • Fix performance of viewportTexture(). #31591, #31599 (@sunag, @Mugen87)
    • Add SubgroupFunctionNode with compute reduction demo. #31378 (@cmhhelgeson)
    • Introduce uniformFlow(). #31531 (@cmhhelgeson)
    • Fix instance buffer size in instance(). #31608 (@ahaensler)
    • Fix missing getMemberType() in context(). #31601 (@sunag)
    • Use dynamic parameters eval for Fn(). #31592 (@sunag)
    • Improve error message for operators with void values. #31593 (@sunag)
    • Improve warnings. #31562 (@sunag)
    • Add AA-samples parameter to reflector-node. #31542 (@NoxDawnsong)
    • Improve Fn() warning if not invoked. #31552 (@sunag)
    • Fix assignment to swizzled for var intent. #31647 (@sunag)
    • Show an error message if no stack defined for assign operation. #31756 (@sunag)
    • Fix bitcast type resolver. #31746 (@cmhhelgeson)
    • Fix primitive vector conversion, vec* with ivec*. #31793 (@sunag)
    • Add bitcast functions and transpiler support. #31781 (@cmhhelgeson)
    • Export screenDPR. #31809 (@shotamatsuda)
  • WebGLBackend
    • Fix manual clear with MSAA render targets. #31705 (@Mugen87)
    • Cache WebGL buffer when updating UBOs. #31684 (@Mugen87)
    • Honor layerUpdates for array textures. #31582 (@ahaensler)
  • WebGPUBackend
    • Remove redundant dispose handlers. #31603 (@Mugen87)
  • WebGPURenderer
    • Fix broken worker support. #31607 (@Mugen87)
    • Fix rgb9e5ufloat usage and rg11b10ufloat constant value. #31698 (@Mugen87)
    • Add HDR support. #29573 (@RenaudRohlinger, @donmccurdy)
    • Support ExternalTexture with GPUTexture #31653 (@donmccurdy)
    • Fix rendering into mips. #31645 (@Mugen87)
    • Add support for manual mipmaps for regular textures. #31637 (@Mugen87)
    • Add support for manual mipmaps for cube textures. #31639 (@Mugen87)
    • Add warning when video textures with invalid color spaces are used. #31569 (@ycw)
    • Fix MSAA using mipmap levels. #31544 (@NoxDawnsong)
    • Add missing rgba8unorm-srgb to WebGPUTextureUtils. #31655 (@Mugen87)
    • Add support for BC4 and BC5 texture compression. #31737 (@Mugen87)
    • Fix Texture.onUpdate() call. #31752 (@Berthur)
    • Fix timestamp query conflict. #31762 (@sunag)
    • Align frontFace and cullMode setup. #31784, #31769 (@sunag, @Mugen87)
  • WebGPUTextureUtils
    • Fix readback buffer size. #31765, 6c7d8077a36efe80e1bb4b42fa5c2846fcd965a4 (@Mugen87, @greggman)
  • XRManager
    • Lazily initialise XRWebGLBinding in XR managers. #31648 (@harryhjsh)
    • Fix typo in getBinding JSDoc. #31656 (@vincentfretin)

Docs

  • Improve JSDoc. #31733, #31742, #31754, #31773, #31772 (@s-rigaud, @Mugen87)
  • Improve Chinese translation. #31616, #31795, #31797 (@IanDingMing, @mmjinglin163)
  • Improve WebXRManager page. #31657 (@harryhjsh)

Manual

  • Improve Chinese translation. #31635, #31574, #31575, #31589, #31590 (@HappyColour, @yuangang123)
  • Fix missing href parameters for manual/#xx/lights. #31763 (@Rikahei)
  • Fix double open hyperlink by open in new tab. #31780 (@Rikahei)

Examples

  • Clean up. #31725, #31700, #31696, #31643, #31623, #31651, #31736, #31738 (@Methuselah96, @linbingquan, @Mugen87, @WestLangley)
  • Add webgpu_multiple_elements example. #31724, #31782 (@sunag)
  • Add WebGPU KTX2 test demo. #31714 (@Mugen87)
  • Add reflector resolutionScale to webgl_mirror example. #31692 (@WestLangley)
  • Add GLTF progressive example. #31625 (@marwie)
  • Add WebGPU check to some compute demos. #31685 (@Mugen87)
  • Improve comments in webgpu_custom_fog_background example. #31626 (@WestLangley)
  • Fix webgpu_compute_particles_fluid GUI. #31570 (@ycw)
  • Rename reversed depth buffer example. #31563 (@WestLangley)
  • Align webgpu_camera with WebGL demo. #31594 (@WestLangley)
  • Add TSL Procedural Wood Material. #31640, #31786 (@SeeleyLogan, @bhouston)
  • Add KHR animation pointer example page. #31761 (@marwie)
  • Added CSS3D + WebGL example. #31572 (@mrdoob)
  • Add FastHDR environment example page #31749 (@marwie)

Addons

  • DepthOfFieldNode

    • New implementation. #31547, #31554 (@Mugen87)
  • DragControls

    • Fix firing events when actions are disabled. #31612 (@ahaensler)
  • FirstPersonControls

    • Fix dispose not release listener. #31606 (@314159265358x)
  • GLTFExporter

    • Make getToBlobPromise() more robust. #31598 (@boggan)
  • GTAONode

    • Add comments to TSL. #31676 (@Mugen87)
  • KTX2Loader

    • Fix WebGPU feature detection. #31721 (@Mugen87)
    • Add VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT. #31689 (@hybridherbst)
    • Support generateMipmaps=true. #31621 (@donmccurdy)
    • Support RGB9E5. #31611 (@donmccurdy)
    • Support R11G11B10 in loader and renderers. #31613 (@donmccurdy)
    • Support for BC4, BC5. #31713 (@donmccurdy)
    • Add PVRTC1 RGBA support. #31771 (@donmccurdy)
  • RGBELoader

    • Rename to HDRLoader. #31604 (@mrdoob)
  • RGBMLoader

    • Removal. #31566 (@mrdoob)
  • ShadowMapViewerGPU

    • Fix DepthTexture usage. #31673 (@sunag)
  • SSRPass

    • Add resolutionScale. #31629 (@Mugen87)
  • SSRNode

    • Use linear filtering and half float for reflection buffer. #31646 (@Mugen87)
    • Improve performance and add quality setting. #31576 (@Mugen87)
    • Add blurred mipmaps and honor roughness. #31649, #31663 (@Mugen87, @sunag)
  • TSL

    • Add boxBlur(). #31556 (@Mugen87)
    • Align API of blur filters and deprecated premultipliedGaussianBlur(). #31557, #31559, #31741 (@Mugen87, @sunag, @s-rigaud)
  • TSL Transpiler

    • Add grouped precedence levels. #31581 (@sunag)
    • Remove the need for toVar(). #31580 (@sunag)
    • Fix addition of Before for non ++ or –. #31579 (@sunag)

Tests

  • Run addons unit tests. #31664 (@mkeblx)
  • Add an USDZ E2E test. #31662 (@mkeblx)
2025-08-02 08:55:27
three.js

r179

https://github.com/mrdoob/three.js/wiki/Migration-Guide#178--179 https://github.com/mrdoob/three.js/milestone/92?closed=1

  • Global
    • Optimize CI workflow by eliminating redundant setup steps. #31383 (@souhailaS)
  • BatchedMesh
    • Fix setInstanceCount(). #31458 (@andreas-hilti)
  • PassNode
    • Add compileAsync(). #31501 (@Mugen87)
    • Provide viewport and scissor API. #31390, #31428 (@Mugen87)
  • ProjectorLight
    • Fix back-projection. #31473, #31474 (@Mugen87)
  • Line2NodeMaterial
    • Remove unused lineWidth property. #31401 (@Jenychen1996)
  • Line3
    • Add method for computing closest squared distance between line segments. #31384 (@TheBlek, @Mugen87)
  • Loader
    • Add abort(). #31276 (@Mugen87, @gkjohnson)
  • MaterialXNodes
    • Improved MaterialX import support to align with Blender's MaterialX exporter. #31439 (@bhouston, @sunag)
  • Matrix4
    • Rewrite makeOrthographic() for clarity. #31451 (@WestLangley)
  • NodeMaterial
    • Make sure fog is applied only once. #31463 (@Mugen87)
  • NodeMaterialObserver
    • Add checking the lights. #31440 (@sunag)
  • NodeUtils
    • Ignore private sub properties in getNodeChildren(). #31523 (@Mugen87, @sunag)
  • Renderer
    • Make info log evaluation more robust. #31438 (@Mugen87)
  • SkeletonHelper
    • Add setColors(). #31484 (@lukehorvat)
  • StorageTexture
    • Add .setSize(). #31502 (@sunag)
  • Timer
    • Move into core. #31385 (@Mugen87)
  • TSL
    • Double-check on the parents of the atomic functions to prevent errors. #31509 (@sunag)
    • Add load() function to texture(). #31510 (@sunag)
    • Introduce boolean for uniform(). #31507 (@sunag)
    • Sequential object as parameters for Fn( { .. } ). #31498 (@sunag)
    • Rename label() to setName(). #31490, #31546 (@Mugen87, @sunag)
    • Add debug() for the stack when running outside the code flow. #31486 (@sunag)
    • Introduce automatic use of toVar() to assign(). #31459 (@sunag)
    • Introduce computeKernel(). #31402 (@Spiri0, @sunag)
    • Fix pass() build during sample() call using Mesh. #31431 (@sunag)
    • viewportTexture() cache FramebufferTexture according to RenderTarget. #31343 (@sunag)
    • Introduce events. #31514 (@sunag)
    • Fix blocky gaussian blur. #31528 (@NoxDawnsong)
  • VideoTexture
    • Cancel rVFC on Dispose. #31375 (@ycw)
  • WebGLRenderer
    • Improve reversed depth buffer support. #31508, #31495, #31499, #31496, #31500, #31464, #31481, #31466, #31370, #31391, #31426, #31410, #31405, #31407, #31512 (@WestLangley, @CodyJasonBennett, @sunag)
    • Support MRT for 2d array textures. #31476 (@mrxz)
  • WebGPUBackend
    • Remove obsolete argument from getDrawingBufferSize(). #31460 (@Mugen87)
    • Fix manual clear() regression. #31388 (@Mugen87)
  • WebGPURenderer
    • Improve and fix texture bindings manager. #31497 (@sunag)
    • SampledTexture extends of Sampler for bindings. #31494 (@sunag)
    • Persistent video texture approach. #31416, #31425, #31423 (@sunag, @Mugen87)
    • Avoid hardcoding color spaces. #31519 (@Mugen87)
    • Explicitly set colorSpace for video textures. #31534 (@ycw)
  • WebGPUUtils
    • Ensure sample count is valid. #31352 (@ycw)
  • WebXRManager
    • Set glBinding separately from layer creation. #31443 (@mikeskydev)
    • Disable left eye layer for right eye camera and vice versa. #31437 (@mrxz)
    • Add Raw Camera Access module. #31487, #31543 (@mikeskydev, @Mugen87)

Docs

  • Clean up. #31447, #31450 (@s-rigaud)
  • Add KTX2Exporter page. #31441 (@mkeblx)
  • Add USDZExporter page #31417 (@mkeblx)
  • Improve AnimationClip page. #31415 (@Mugen87)
  • Improve KeyframeTrack page. #31373 (@floriandotorg)
  • Improve Texture page. #31477 (@agargaro)
  • Improve Korean translation. #31344 (@sonwonjae)
  • Improve JSDoc. #31475, #31380, #31341, #31529, #31535 (@powah, @Mugen87, @WestLangley, @cmhhelgeson)

Examples

  • Clean up. #31504, #31483, #31485, #31412, #31411, #31379, 827a421c0fad4f4cc5c4be12bef62568459aa435 (@Mugen87, @WestLangley, @linbingquan, @mrdoob)
  • Improved webgpu_reflection example. #31409, #31372 (@mrdoob, @Mugen87)
  • Add webgpu_postprocessing_dof_basic. #31445 (@Mugen87)
  • Upgrade meshopt_decoder.module.js to 0.22. #31449 (@zeux)
  • Switch to OrbitControls in webgl_shadowmap example. #31406 (@WestLangley)
  • Improve AA approach in WebGPU water demo. #31354 (@Mugen87)
  • Use onLoad() in webgpu_materials. #31362 (@andyleiserson)
  • Add webgpu_compute_texture_3d example. #31337 (@RenaudRohlinger)
  • Rename import from three to three/webgpu in WebGPU demos. #31518 (@sunag)
  • Add GUI to webgpu_loader_materialx example. #31530 (@WestLangley)
  • Improve WebGPU SSR example. #31539 (@mrdoob)
  • Improve MaterialX example. #31541, d71fc3874e846b63960355f25c44c1a5315c9314 (@mrdoob)
  • Improve WebGPU reflection example. 5e919439cc0362c6b32fa1f493aaba0315b22579 (@mrdoob)
  • Improve transpiler example. 0688cb08bf181e1d7e6367a04a4c89c8b3cdc5bf ba0568f4f51644ec2b6c81e177bd4a1ad4c1db52 (@mrdoob)

Addons

  • EXRLoader

    • Added lossyDctChannelDecode. #31482 (@mrdoob)
    • Introduces output-format API. #31511 (@sciecode)
    • Set color space to linear-sRGB. #31525 (@WestLangley)
  • FBXLoader

    • Fix vertex color check. #31420 (@Mugen87)
  • GTAOPass

    • Improve cache performance. #31454 (@querielo)
    • Exclude Line2 objects from AO calculation #31422 (@wyc001122)
  • HTMLMesh

    • Add support for email and password inputs. #31345 (@HuangLinBao)
  • LensflareMesh

    • Use colorNode instead of fragmentNode. #31433 (@Mugen87)
  • LightProbeGenerator

    • Support FloatType in fromCubeRenderTarget(). #31349 (@Mugen87)
  • OutlinePass

    • Exclude Line2 objects from outline computation. #31503 (@pwlviolet)
  • RapierPhysics

    • Support RoundedBoxGeometry. #31351 (@linbingquan)
  • RoomEnvironment

    • Set emissiveIntensity instead. #31348 (@WestLangley)
  • RoundedBoxGeometry

    • Add type, parameters and toJSON(). #31340 (@vis-prime)
  • SSAOPass

    • Improve cache performance. #31453 (@querielo)
  • TRAANode

    • New TRAA implementation. #31421 (@Mugen87, @sunag)
  • TTFLoader

    • Fix when TTF has different unicode assign to same glyph index. #31386 (@Rikahei)
  • TSL Transpiler

    • Fix operator precedence of GLSLDecoder. #31515 (@sunag)
  • USDZExporter

    • Add option for onlyVisible. #31489 (@mkeblx)
    • Export scene hierarchy. #31448 (@mkeblx)
    • Use object names #31442, #31444 (@mkeblx)
    • Refactor to use two stages. #31400 (@mkeblx)

Tests

  • Clean up Frustum tests. #31456 (@WestLangley)
  • Add test for USDZExporter. #31435 (@mkeblx)

Editor

  • Fix crash when geometry lacks position attribute. #31334 (@AlexRynas)
  • Add support for EXR files. 01d3c943f0452ff856b4bdd162f4c86bd67dc2ee (@mrdoob)
  • Load image loaders only when needed. 2f3dd3822cb270b422dae55153f69dfffd08ff85 (@mrdoob)
2025-06-30 21:37:14
three.js

r178

https://github.com/mrdoob/three.js/wiki/Migration-Guide#r177--r178 https://github.com/mrdoob/three.js/milestone/91?closed=1

  • Global
    • Remove deprecated code. #31254 (@Mugen87)
    • Correct the blending formulas in all renderers. #31246 (@WestLangley)
    • Upgrade monaco-editor. #31300 (@linbingquan)
    • Initial support for Float16Array in renderers. #31305 (@Mugen87)
  • Clock
    • Inline performance.now(). #31295 (@linbingquan)
  • Frustum
    • Honor sprite offset in intersectsSprite(). #31307 (@Mugen87)
  • GLBufferAttribute
    • Add normalized property. #31268 (@Rtwo-Dtwo)
  • ImageLoader
    • Optimize caching. #31258 (@Mugen87)
  • Loader
    • Use unique cache keys per loader type. #31315, ac07a8accb1228707e694a221d9ed8ab71d694f6, ee327fd8e13ae7d6e5fbcd6506a4006405aa5232 (@Mugen87, @mrdoob)
  • NodeBuilder
    • Fix interpolation specifier. #31222 (@cmhhelgeson)
  • NodeMaterial
    • Honor material.premultipliedAlpha in the shader. #31166 (@WestLangley)
  • Quaternion
    • Update epsilon in setFromUnitVectors(). #31302 (@Mugen87)
  • RenderObject
    • Check attributes version of the geometry. #31227 (@sunag)
  • SampleNode
    • Remove PURE annotation. #31293 (@Mugen87)
  • TSL
    • Fix Fn as parameter. #31214 (@sunag)
    • Introduce sample(). #31287 (@sunag)
    • Introduce textureBicubicLevel(). #31288 (@sunag)
    • Move TriplanarTexturesNode to triplanarTextures() Fn. #31285 (@sunag)
    • Move EquirectUVNode to equirectUV() Fn. #31283 (@sunag)
    • Move MatcapUVNode to matcapUV Fn constant. #31284 (@sunag)
    • Remove transformed* prefix. #31271 (@sunag)
    • Fix convertToTexture() auto resize. #31277 (@sunag)
    • Fix outgoingLight redeclaration. #31266 (@sunag)
    • Introduce Chromatic Aberration. #31236 (@pashaydev)
    • Fix inconsistent chaining for step() (Parameter order). #31241 (@sunag)
    • Rename premult to premultiplyAlpha. #31240 (@sunag)
    • Introduce tangentViewFrame and bitangentViewFrame. #31282 (@sunag)
    • Use node.nodeType instead of safeGetNodeType(). #31328 (@sunag)
    • Introduce subBuild(). #31260 (@sunag)
  • WebGLPrograms
    • Don't use flat shading with enabled wireframe. #31242 (@Mugen87)
    • Fix cache key with gradient maps. #31292 (@Mugen87)
  • WebGLRenderer
    • Correctly restore render target during transmission pass. #31320 (@Mugen87)
  • WebGPUConstants
    • Add missing features. #31323 (@cmhhelgeson)
  • WebGPURenderer
    • Use correct invalidation array in WebGL backend. #31255 (@cabanier)
    • Make MSAA with MRT work with WebGL backend. #31228 (@Mugen87)
    • Honor depth/stencil in blitFramebuffer(). #31219 (@Mugen87)
    • Add Storage3DTexture and StorageArrayTexture. #31175, #31327 (@Spiri0, @sunag)
    • Allow storage buffer on Iindex attribute. #31335 (@RenaudRohlinger)
  • XRManager
    • Silence opaque framebuffer warning. #31201 (@cabanier)
  • XRRenderTarget
    • Clean up. #31210 (@Mugen87)

Docs

  • Improve JSDoc. #31261, #31224, #31317 (@linbingquan, @SamJB123)

Manual

  • Open external links in new tab. #31273 (@Mugen87)
  • Fix code typo in scene graph page. #31289 (@MeirArani)
  • Improve French translation. #31252 (@AlexandreGagne10)
  • Fix links to homepage. #31301 (@Mugen87)

Examples

  • Clean up. #31265, #31303, 15ff86b24fdd1d81415936eb143a01c5bcff445b, 4106588164c61e93052d51fb4be5d5cfbfb30c5b (@zeevick10, @Methuselah96. @mrdoob)
  • Improve water demo. #31291, a9666c619752a355649fcc832b7f27286d4b3940 (@Mugen87, @mrdoob)
  • Add BatchedMesh LOD and BVH example page. #31239 (@agargaro)
  • Merge geometry demos. #31253 (@Mugen87)
  • Fix GUI colors in webgpu_compute_cloth example. #31232 (@WestLangley)
  • Fix instancedArray() usage of webgpu_compute_birds. #31230 (@sunag)
  • Fix texture path of webgpu_sandbox. #31217 (@sunag)
  • Merge OBJ demos. #31216 (@Mugen87)
  • Add new path demo. #31209 (@Mugen87)
  • Add webgpu_reflection_roughness. #31294, c06fa765243ce8379b539d73e6690914bec2039a, f7e8be081f447ad13c268b025ef4862af323f362 (@sunag, @mrdoob)
  • Improve lottie example. #31321 (@linbingquan)
  • Add window resize event to webgl_geometry_extrude_shapes. #31324 (@linbingquan)

Addons

  • ArcballControls

    • Add passive: false for wheel event. #31259 (@juji)
  • FBXLoader

    • Gracefully handle missing color data. #31248 (@Mugen87)
  • RapierPhysics

    • Add removeMesh(). #31296, #31298 (@linbingquan)
  • RoundedBoxGeometry

    • Fix parameters of the parent class. #31319 (@linbingquan)
  • TransformControls

    • Make gizmo colors configurable. #31262 (@Mugen87)
  • TSL Transpiler

    • Add support for switch statements. #31272 (@cmhhelgeson)
    • Fix unary negate after arithmetic operator. #31297 (@sunag)
    • Add simplified Fn() layout. #31299 (@sunag)
    • Introduce Linker and improvements. #31314 (@sunag)
    • Introduce WGSLEncoder. #31329 (@sunag)

Editor

  • Fix typo in comment. #31264 (@vtjl10)
2025-05-31 01:30:20
three.js

r177

https://github.com/mrdoob/three.js/wiki/Migration-Guide#r176--r177 https://github.com/mrdoob/three.js/milestone/90?closed=1

  • Global
    • Increase version of Object/Scene format. #31096 (@repalash)
    • Fix exports in src/three.tsl.js. #31109 (@ycw)
    • Add DeepWiki link. #31182, c421357d4384e99a6e5500665b72a58a547cf8a8 (@lumotai, @mrdoob)
  • AudioListener
    • Set the proper up-direction. #31054 (@WestLangley)
  • Box3
    • Add toJSON() and fromJSON() methods. #31028 (@gkjohnson)
  • ColorManagement
    • Improve Nomenclature. #31152 (@WestLangley)
  • HemisphereLightNode
    • Change normalView to normalWorld. #31074 (@vitro-mod)
  • ImageBitmapLoader
    • Make error handling more robust. #31088 (@Mugen87)
  • LightsNode
    • Fix castShadow regression. #31106 (@Mugen87)
  • MaterialNode
    • Fix dashOffset with LineDashedMaterial. #31008 (@Mugen87)
  • Mesh
    • Add count property. #31091 (@sunag)
  • NodeMaterial
    • Cleanup alphaTest. #31147 (@sunag)
    • Introduce maskNode and improve shapeCircle(). #31127 (@sunag)
    • Execute setupVertex() if vertexNode is defined. #31136 (@sunag)
  • NodeMaterialObserver
    • Fix missing intensity uniform updates. #31120 (@Mugen87)
  • PMREMGenerator
    • Fix usage with PMREMNode. #31001 (@Mugen87)
  • Ray
    • Handle empty spheres in intersectsSphere(). #31200 (@Mugen87, @jmeurice)
  • ShadowMaskModel
    • Fix usage with non shadow casting light. #31081 (@Mugen87)
  • ShadowNode
    • Fix VSM with point lights. #31103 (@Mugen87)
    • Clean up. #31104 (@Mugen87)
  • Sphere
    • Add toJSON() and fromJSON() methods. #31028 (@gkjohnson)
  • SpotLightNode
    • Add custom attenuation using spotLight.attenuationNode. #31013 (@sunag)
  • SpotLightShadow
    • Introduce aspect property. #31020 (@sunag)
  • Sprite
    • Add count property. #31091 (@sunag)
  • StorageBufferNode
    • Add getMemberType(). #31139 (@HongchengZhao)
  • Texture
    • Add setValues(). #31087 (@CodyJasonBennett)
    • Texture: Introduce width, height, depth. #31025 (@sunag)
    • Add updateRanges. #30998 (@CodyJasonBennett)
  • TSL
    • Improve build stages #31156 (@sunag)
    • Ensure memory alignment for struct(). #31151 (@sunag)
    • Fix mat2 boundary size. #31162 (@sunag)
    • Ensure 4 byte alignment for instancedArray() and attributeArray(). #31146 (@sunag)
    • Add premult() and unpremult(). #31114 (@sunag)
    • Fix reflector() clear texture and stop update if bounce is false. #31110 (@sunag)
    • Add hashBlur() options {repeats,mask,premultipliedAlpha}. #31115 (@sunag)
    • Fix getBitangent(). #31059 (@Mugen87)
    • Fix lightShadowMatrix() if renderer.shadowMap.enabled is false. #31024 (@sunag)
    • Fix .toVarying() analyze for optimization. #31090 (@sunag)
    • Fix auto-cache if using multiple conditionals. #31076 (@sunag)
    • Introduce namespace. #31168 (@sunag)
    • Fix object-as-parameter checking for Fn(). #31176 (@sunag)
    • Introduce uniformTexture() and uniformCubeTexture(). #31190 (@sunag)
    • Use multi argument versions of min() and max(). #31196 (@kristiker)
  • WebGPURenderer
    • Honor Texture.premultiplyAlpha in WebGPU backend. #31157 (@Mugen87)
    • Fix generate mipmaps when using copyFramebufferToTexture() in WebGPU backend. #31163 (@sunag)
    • Apply color management changes from #26644. #31142 (@Mugen87)
    • Fix runtime errors introduced by texture array refactor. #31108, #31099 (@cabanier)
    • Rename XRResetState() to _resetXRState(). #31105 (@cabanier)
    • Introduce ProjectorLight. #31022 (@sunag)
    • Array-Based RenderTarget Refactor. #30959 (@RenaudRohlinger)
    • Cache pipeline per render/compute pass. #31066 (@Mugen87)
    • Optimize WebXR render path. #31134, #31189, #31198 (@cabanier)
    • Fix blend factor nomenclature. #31188 (@WestLangley)
    • Check if OffscreenCanvas is in window before accessing. #31194 (@pavel-mazhuga)
  • WebGLRenderer
    • Add MRT support to readRenderTargetPixels(). #31204 (@Mugen87, @repalash)
  • WebGLTextureUtils
    • Clean up. #31195 (@linbingquan)
  • WGSLNodeBuilder
    • Fix use of sampler for vertex stage. #31052 (@sunag)
  • XRManager
    • Fix layer color correction. #31124 (@cabanier)

Docs

  • Clean up. #31046 (@Mugen87)
  • Improve LoaderUtils page. #31082 (@ycw)
  • Improve SkeletonHelper JSDoc. #31113 (@upisfree)
  • Improve XRManager JSDoc. #31101 (@Mugen87)

Manual

  • Fix primitives page. #30997 (@Mugen87)

Examples

  • Clean up. #31130, #31138, #31030, #31107 (@WestLangley, @linbingquan, @ycw)
  • Add webgpu_compute_particles_fluid. #31148, #31159 (@holtsetio)
  • Add webgpu_compute_cloth. #31123 (@holtsetio)
  • Improve noise.png. #31137 (@Mugen87)
  • Improve webgpu_compute_particles. #31092 (@mrdoob)
  • Add webgpu_reflection_blurred. #31116, #31118 (@sunag)
  • Add textured assets to webgl_loader_fbx. #31117 (@tatsuya-ogawa)
  • Integrate lookAt() into the rotateTowards() demo. #31063 (@Mugen87)
  • Fix memory leak in FBX demo. #31068 (@Mugen87)
  • Make dynamic instancing demo more interesting. #31058 (@Mugen87)
  • WebGPU Compute Water Adjustment. #30985, #31011 (@cmhhelgeson, @sunag)
  • Update shadow opacity in webgpu_shadowmap_opacity. #30984 (@sunag)
  • Cleanup webgl_reverse_depth_buffer. #30989 (@CodyJasonBennett)
  • Fix shadows in physics instancing demos. #30988 (@Mugen87)
  • Fix webgpu_water GUI. #31014 (@sunag)
  • Add resize event listener for physics_rapier_instancing. #31012 (@linbingquan)
  • Clean up XR examples browser notices. #31053 (@mkeblx)
  • Make point lights demo more interesting. #31040 (@Mugen87)
  • Remove webgl_geometry_dynamic. #31047 (@Mugen87)
  • Make tone mapping demos more interesting. #31045 (@Mugen87)
  • Make layers example a bit more interesting. #31036 (@Mugen87)
  • Add GUI to normal and bump map demo. #31077 (@Mugen87)
  • Fix memory leak in SVG demo. #31170 (@Mugen87)
  • Enable MSAA in AO demo. #31192 (@Mugen87)
  • Refactored webxr_vr_haptics. 1859806c1f861870410701014e366659ed307109 (@mrdoob)

Addons

  • AfterimagePass

    • Add damp accessor. #31035 (@neilrackett)
  • ArcballControls

    • Fix state data for reset. #31184 (@Mugen87)
  • CSMShadowNode

    • Fix toggle of castShadow. #31186 (@Mugen87)
  • FBXLoader

    • Improve error handling. #31017 (@Mugen87)
    • Use getHandler() for custom texture loaders. #31032 (@tatsuya-ogawa)
    • Add webp MIME type. #31098 (@Altrozero)
  • FXAAPass

    • Add pass class for FXAA post processing shader. #31044 (@neilrackett)
  • GLTFExporter

    • Push nodes parent-first instead of child-first. #31125 (@aaronfranke)
  • GLTFLoader

    • Clone node associations. #31051 (@nkrajina)
  • HTMLMesh

    • Add support for input of type text and number in VR. #31160 (@vincentfretin)
  • KTX2Loader

    • Support ETC2, BCn, and ASTC 4x4 sRGB. #31155 (@donmccurdy)
  • LDrawLoader

    • Don't clear already-loaded materials onload. #31150 (@Floppy)
    • Improve docs. #31153 (@Mugen87)
  • LineMaterial

    • Fix clipping planes. #31144 (@rtortajada)
  • Octree

    • Improve configurability. #31097 (@Mugen87)
  • PCDLoader

    • Parse header without TextDecoder. #31069 (@F-loat)
    • Implement data type dependent binary parsing. #31061 (@F-loat)
  • PeppersGhostEffect

    • Remove addon. #31037 (@Mugen87)
  • SkyMesh

    • Improve varyings declaration. #31133 (@sunag)
  • USDZExporter

    • Fix object indentation level. #31126 (@mkeblx)
    • Fix JSDoc to match default value. #31119 (@mkeblx)

Editor

  • Fix minor bugs. #31050 (@Mugen87)