# Three.js changelog > A JavaScript 3D library. - Vendor: Three.js - Category: Frameworks & Libraries - Official site: https://threejs.org - Tracked by: What's New (https://whatsnew.fyi/product/three-js) - Harvested from: GitHub (mrdoob/three.js) - Entries below: 10 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. ## Releases ### r185 - Date: 2026-07-01 - Version: r185 - Original notes: https://github.com/mrdoob/three.js/releases/tag/r185 - Permalink: https://whatsnew.fyi/product/three-js/releases/r185 - **removed** — Remove deprecated code - **fixed** — Fix time warping bug in AnimationAction - **changed** — Refactor `inTangents`/`outTangents` in BezierInterpolant - **fixed** — Fix needsUpdate in TSL Compute Bindings - **fixed** — Fix attribute count mismatch in `computeVertexNormals()` and `computeTangents()` in BufferGeometry - **added** — Support Transformed Geometry when Serializing in BufferGeometry - **fixed** — Fix stale viewMatrix with multiple cameras in ClippingContext - **added** — Add `max()` for outputs in ColorAdjustment - **added** — Introduce `transformNormalByInverseViewMatrix()` in WebGLRenderer Shaders - **added** — Support new WICG HTML-in-Canvas API signatures in HTMLTexture - **fixed** — Make sure IES texture can be exchanged in IESSpotLight - **fixed** — Fix FPS counter freeze when `WebGLBackend` query is unavailable in Inspector - **fixed** — Sync update ranges in updateBefore in InstanceNode - **changed** — Refactor Line2NodeMaterial to use native node material hooks - **changed** — Fixed setValues() to honor Euler and Vector2 types in Material - **added** — Add `registerMaterial()` and `Material.fromJSON()` in MaterialLoader - **deprecated** — Deprecate `.scale()`, `.rotate()`, and `.translate()` in Matrix3 - **changed** — Introduce faster version of `determinant()` in Matrix4 - **fixed** — Fix individual `morphTargetInfluences` per object in Morph - **fixed** — Fix environment rotation and intensity checks in NodeMaterialObserver 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 `dept _[Truncated at 4000 characters — full notes: https://github.com/mrdoob/three.js/releases/tag/r185]_ ### r184 - Date: 2026-04-16 - Version: r184 - Original notes: https://github.com/mrdoob/three.js/releases/tag/r184 - Permalink: https://whatsnew.fyi/product/three-js/releases/r184 - **added** — Add HTMLTexture - **added** — Add position-dependent diffuse Global Illumination with LightProbeGrid - **added** — Add support for EXT_texture_norm16 formats in renderers - **added** — Add hyperbolic math nodes to TSL - **added** — Add OnFrameUpdate and OnBeforeFrameUpdate to TSL - **added** — Add global and local scope to TSL - **added** — Add DepthTexture to scene render target in WebGLOutput - **added** — Add NodeMaterial compatibility layer to WebGLRenderer - **added** — Add support for packed normal maps to WebGLRenderer - **changed** — Update @rollup/plugin-terser to 1.0.0 - **changed** — Update ESLint to ECMA 2022 - **changed** — Improve HTMLTexture support - **changed** — Update applyBoneTransform in SkinnedMesh to optionally take Vector4 and support direction or position transformation - **changed** — Improve compilation performance in TSL by 3.0x - **changed** — Make WebGPURenderer compileAsync() truly non-blocking - **changed** — Cache pixel storage parameters in renderers - **fixed** — Fix timeScale reversal jump in AnimationAction - **fixed** — Fix race condition with loading manager in AudioLoader - **fixed** — Fix getColorAt throwing an error when colors have not been set in InstancedMesh and BatchedMesh - **fixed** — Fix geometry corruption on 2-point curves in CatmullRomCurve3 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. #3 _[Truncated at 4000 characters — full notes: https://github.com/mrdoob/three.js/releases/tag/r184]_ ### r183 - Date: 2026-02-20 - Version: r183 - Original notes: https://github.com/mrdoob/three.js/releases/tag/r183 - Permalink: https://whatsnew.fyi/product/three-js/releases/r183 - **added** — Add BezierInterpolant to Animation module - **added** — Add ReversedDepthFuncs dictionary to Core - **added** — Add support for scene.environment IBL to MeshLambertMaterial - **added** — Add support for scene.environment IBL to MeshPhongMaterial - **added** — Add clearcoat support for rect area lights in MeshPhysicalMaterial - **added** — Add maskShadowNode to NodeMaterial - **added** — Add TSL read/write support to StorageTextureNode - **added** — Add exponentialHeightFogFactor() to TSL - **added** — Introduce clipSpace to TSL - **added** — Introduce TSL.md TSL Spec - **added** — Introduce StackTrace to TSL - **added** — Add RenderPipeline for TSL Spec - **added** — Add retroPass and example - **changed** — Enable per-instance opacity in BatchedMesh - **changed** — Add support for wireframe materials in BatchedMesh - **changed** — Remove reference to Clock in AudioListener - **changed** — Exclude scale from view matrix in Camera - **changed** — Rename shadowMap.colored to shadowMap.transmitted in Renderer - **changed** — Rename useColor property to vertexColors in Line2NodeMaterial - **changed** — Support velocity in InstanceNode - **changed** — Quaternion slerp methods now support extrapolation - **changed** — Update TorusGeometry with thetaStart and thetaLength parameters - **deprecated** — Clock module is deprecated - **fixed** — Fix closest point in Line3 distanceSqToLine3() - **fixed** — Fix UBO size and attribute update in InstanceNode - **fixed** — Fix CubeDepthTexture sampler in GLSLNodeBuilder - **fixed** — Fix array texture layer support for filtered sampling in GLSLNodeBuilder - **fixed** — Fix tangent transformation in SkinningNode - **fixed** — Fix missing iorNode in MeshPhysicalNodeMaterial copy method - **fixed** — Correctly set the nextIndexStart and nextVertexStart in BatchedMesh - **fixed** — Fix ID assignment bug in RenderObject - **removed** — Remove deprecated code - **removed** — Remove bindingsReference from BindGroup - **removed** — Remove shadowPositionNode fallback in NodeMaterial to reduce CPU load - **removed** — Remove scriptable node from TSL - **removed** — Remove outdated setupUV() from Texture3DNode 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) - 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) - AudioListener - Remove reference to `Clock`. #33026 (@Mugen87) - 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) - Quaternion - Quaternion - Support extrapolation in slerp methods. #32541 (@WestLangley) - 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 _[Truncated at 4000 characters — full notes: https://github.com/mrdoob/three.js/releases/tag/r183]_ ### r182 - Date: 2025-12-10 - Version: r182 - Original notes: https://github.com/mrdoob/three.js/releases/tag/r182 - Permalink: https://whatsnew.fyi/product/three-js/releases/r182 - **changed** — Migrate to ESLint 9 with flat config - **fixed** — Fix index and attribute updates in BatchedMesh.optimize() - **changed** — Optimize BatchNode generated shader code - **added** — Add indirectOffset parameter for indirect drawing in BufferGeometry - **changed** — Improve ChainMap dynamic key size - **fixed** — Honor closed property of CatmullRomCurve3 in ExtrudeGeometry - **added** — Add support for StorageInstancedBufferAttribute in InstanceNode - **changed** — Unify Light.toJSON() implementations - **removed** — Remove LightProbe.fromJSON() - **changed** — Align Line2NodeMaterial wide lines with WebGLRenderer version - **fixed** — Fix Material.copy() to include allowOverride - **changed** — Optimize Matrix4.determinant() calculation - **fixed** — Avoid NaN values in Matrix4 when scale is zero - **fixed** — Fix iridescence energy conservation for mixed materials in MeshPhysicalMaterial - **changed** — Improve Sheen energy conservation and analytic approximation in MeshPhysicalMaterial - **fixed** — Fix furnace test energy loss for intermediate metalness values in MeshStandardMaterial - **changed** — Improve MeshStandardMaterial physical accuracy - **added** — Add basic support for normal unpacking in NormalMapNode - **changed** — Improve GGX VNDF accuracy and match Blender roughness in PMREMGenerator - **changed** — Reduce PMREMGenerator DFG LUT resolution to 16x16 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 `setEffect _[Truncated at 4000 characters — full notes: https://github.com/mrdoob/three.js/releases/tag/r182]_ ### r181 - Date: 2025-11-19 - Version: r181 - Original notes: https://github.com/mrdoob/three.js/releases/tag/r181 - Permalink: https://whatsnew.fyi/product/three-js/releases/r181 - **changed** — Use internal log, warn and error functions instead of the system ones - **changed** — Updated Earcut to latest version - **fixed** — Honor updateRanges in InstanceNode - **changed** — Lazily instantiate abort controller in LoadingManager - **added** — Support wireframe in MeshMatcapMaterial - **added** — Add hints in comments in NodeBuilder - **changed** — Simplify caching in NodeFrame - **fixed** — Fix alpha discard in NodeMaterial - **fixed** — Honor aoNode in NodeMaterial clone() - **fixed** — Ensure clear of internal render target in PassNode - **fixed** — Fix Favg assignment in PhysicalLightingModel - **changed** — Implement GGX VNDF importance sampling in PMREMGenerator - **changed** — Rewrite slerp() and slerpFlat() in Quaternion - **fixed** — Fix resize of 3D textures in RenderTarget - **fixed** — Don't set _texture to null in Sampler - **fixed** — Fix shadows in first frame in ShadowNode - **changed** — Manage y-flip as a uniform in TextureNode - **fixed** — Fix WebXR Depth Sensing in WebGLRenderer - **changed** — Use DFG LUT instead of analytical approximation in WebGLRenderer - **removed** — Remove WebGL 1.0 compatibility code in WebGLRenderer - **changed** — Add multi-scattering energy compensation for direct lighting in WebGLRenderer 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) - D _[Truncated at 4000 characters — full notes: https://github.com/mrdoob/three.js/releases/tag/r181]_ ### r180 - Date: 2025-09-03 - Version: r180 - Original notes: https://github.com/mrdoob/three.js/releases/tag/r180 - Permalink: https://whatsnew.fyi/product/three-js/releases/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 text _[Truncated at 4000 characters — full notes: https://github.com/mrdoob/three.js/releases/tag/r180]_ ### r179 - Date: 2025-08-02 - Version: r179 - Original notes: https://github.com/mrdoob/three.js/releases/tag/r179 - Permalink: https://whatsnew.fyi/product/three-js/releases/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 (@Mu _[Truncated at 4000 characters — full notes: https://github.com/mrdoob/three.js/releases/tag/r179]_ ### r178 - Date: 2025-06-30 - Version: r178 - Original notes: https://github.com/mrdoob/three.js/releases/tag/r178 - Permalink: https://whatsnew.fyi/product/three-js/releases/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, f7e8be081f4 _[Truncated at 4000 characters — full notes: https://github.com/mrdoob/three.js/releases/tag/r178]_ ### r177 - Date: 2025-05-30 - Version: r177 - Original notes: https://github.com/mrdoob/three.js/releases/tag/r177 - Permalink: https://whatsnew.fyi/product/three-js/releases/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 (@Mugen8 _[Truncated at 4000 characters — full notes: https://github.com/mrdoob/three.js/releases/tag/r177]_ ### r176 - Date: 2025-04-23 - Version: r176 - Original notes: https://github.com/mrdoob/three.js/releases/tag/r176 - Permalink: https://whatsnew.fyi/product/three-js/releases/r176 https://github.com/mrdoob/three.js/wiki/Migration-Guide#r175--r176 https://github.com/mrdoob/three.js/milestone/89?closed=1 - Global - Remove legacy code. #30821 (@Mugen87) - Remove Luminance and LuminanceAlpha format. #30934 (@gkjohnson) - ArrowHelper - Replace cylinder with cone geometry. #30867 (@shlomnissan) - Animation - Fix ReferenceError in non-broswer environment. #30835 (@chirsz-ever) - Background - Make sure background nodes can be disposed of. #30938 (@Mugen87) - BatchedMesh - Fix `toJSON()`, `ObjectLoader` integration. #30965 (@gkjohnson) - CapsuleGeometry - Add `heightSegments` parameter. #30868 (@mkeblx) - Change length param to height, fix UVs. #30915 (@mkeblx) - ExtrudeGeometry - Fix regression introduced with last release. #30822 (@mlasala45) - LightsNode - Honor spotlight maps in cache key. #30940 (@Mugen87) - NodeMaterial - Fix alpha of vertex-color. #30974 (@sunag) - NodeMaterialObserver - Force refresh when rendering velocity. #30840 (@Mugen87) - RenderTarget - Fix depth texture assignment regression. #30921 (@Spiri0) - ShadowNode - Inherit camera.layers only if shadow.camera.layers is not set. #30877 (@RenaudRohlinger) - TSL - Don't flip normals when using flat shading. #30823 (@Mugen87, @sunag) - Fix `frontFacing` when using `material.flatShading`. #30828 (@sunag) - Add `dFdx` and `dFdy` warnings. #30831 (@sunag) - Show shader stage in `debug()` message. #30833 (@sunag) - Fix `blur()` on Framebuffer. #30845 (@RenaudRohlinger) - Fix `bitangent*` when using `material.flatShading`. #30837 (@sunag) - Fix `instance()` optional parameter. #30848 (@sunag) - Introduce `varying.setInterpolation()`. #30582 (@cmhhelgeson, @sunag) - Fix optional `Fn` parameters. #30884 (@sunag) - Fix `texture()` matrix sync. #30893 (@sunag) - Fix early-z rejection. #30891 (@sunag) - Add `increment()` and `decrement()` and fix unsual `for()` expression syntax for transpiler. #30912 (@Mugen87, @sunag) - Fix `dispose()` when using `reflector()`. #30933 (@Mugen87) - Fix and improve `bvec` operators. #30922 (@sunag) - Fix `debug()` changes the compiled code. #30944 (@sunag) - Add switch/case. #30935 (@Mugen87) - Add expression support for `loop( { update: ... } )`. #30947 (@sunag) - Add `Stack()` and `.toStack()`. #30956 (@sunag) - Cache `getShadowRenderObjectFunction()`. #30969 (@sunag) - Fixes the return value of `atomic*` nodes. #30971 (@sunag) - Auto-cache `atomic*` nodes. #30972 (@sunag) - Fix `denoise()` sampler texture. #30975 (@sunag) - Improve `debug()` callback changing to `( builder, code )` signature. #30976 (@sunag) - VelocityNode - Fix initial value of previous model matrix. #30839 (@Mugen87) - WebGLRenderer - Fix binding `__webglFramebuffer` when mipmaps are used. #30746 (@haxiomic) - Support `alphaToCoverage` with shadows. #30871 (@Mugen87) - WebGPURenderer - Introduce Shadow Map Array. #30830 (@RenaudRohlinger) - Introduce compatibilityMode. #30854, #30869, #30875 (@sunag) - Disable draw call when `object.count = 0`. #30881 (@cmhhelgeson) - Make `material.transparent` behave as in WebGLRenderer. #30862 (@rkreis-v) - Add Multiview support. (@cabanier) - Introduce `renderer.highPrecision`. #30970 (@sunag) - WGSLNodeBuilder - Improve `isCustomStruct()` checking. #30525 (@Spiri0) - XRManager - Request reference space for both layers and non layers. #30902 (@danrossi) **Docs** - Clean up. #30888, #30927, #30978 (@rizzler329842, @notgod6, @arcs-) - Simplify JSDoc output directory. #30815 (@Mugen87) - Fix typos and types. #30843, #30874, #30880, #30879 (@s-rigaud) - Improve `SkinningNode`. #30852 (@Mugen87) - JSDoc: Add import section for addons. #30853, #30860 (@Mugen87) - Improve Chinese translation. #30887 (@linzhou559) **Examples** - Clean up. #30820, #30979 (@Mugen87, @Methuselah96) - Added additional Rapier physics examples. #30818 (@NikLeve _[Truncated at 4000 characters — full notes: https://github.com/mrdoob/three.js/releases/tag/r176]_