From 90aeab4fe7e1c352d0a35d9c57036d165dae57e8 Mon Sep 17 00:00:00 2001
From: Kodub <131988770+Kodub@users.noreply.github.com>
Date: Fri, 3 Apr 2026 15:10:14 +0700
Subject: [PATCH 1/3] Manual: Remove reference to
Matrix4.setRotationFromQuaternion() (#33320)
---
manual/en/matrix-transformations.html | 2 +-
manual/fr/matrix-transformations.html | 2 +-
manual/zh/matrix-transformations.html | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/manual/en/matrix-transformations.html b/manual/en/matrix-transformations.html
index a65c3e8c28016e..54a83d8c15c9a0 100644
--- a/manual/en/matrix-transformations.html
+++ b/manual/en/matrix-transformations.html
@@ -57,7 +57,7 @@
Convenience properties and `matrixAutoUpdate`
Modify the object's matrix directly. The `Matrix4` class has various methods for modifying the matrix:
-object.matrix.setRotationFromQuaternion( quaternion );
+object.matrix.makeRotationFromQuaternion( quaternion );
object.matrix.setPosition( start_position );
object.matrixAutoUpdate = false;
diff --git a/manual/fr/matrix-transformations.html b/manual/fr/matrix-transformations.html
index 5b79d1773b8dc1..dd964fc69a000f 100644
--- a/manual/fr/matrix-transformations.html
+++ b/manual/fr/matrix-transformations.html
@@ -56,7 +56,7 @@ Propriétés de commodité et `matrixAutoUpdate`
Modifiez la matrice de l'objet directement. La classe `Matrix4` dispose de différentes méthodes pour modifier la matrice :
-object.matrix.setRotationFromQuaternion( quaternion );
+object.matrix.makeRotationFromQuaternion( quaternion );
object.matrix.setPosition( start_position );
object.matrixAutoUpdate = false;
diff --git a/manual/zh/matrix-transformations.html b/manual/zh/matrix-transformations.html
index 5b9a443ee1efde..e4edecface076f 100644
--- a/manual/zh/matrix-transformations.html
+++ b/manual/zh/matrix-transformations.html
@@ -60,7 +60,7 @@ 便捷属性与 `matrixAutoUpdate`
直接修改对象矩阵。`Matrix4` 提供了多种矩阵修改方法:
-object.matrix.setRotationFromQuaternion( quaternion );
+object.matrix.makeRotationFromQuaternion( quaternion );
object.matrix.setPosition( start_position );
object.matrixAutoUpdate = false;
From 582a03b74d843d2c99082aa84589a228b480d262 Mon Sep 17 00:00:00 2001
From: Madison Rickert <3495636+madisonrickert@users.noreply.github.com>
Date: Fri, 3 Apr 2026 01:13:46 -0700
Subject: [PATCH 2/3] fix: dispose variable ShaderMaterials in
GPUComputationRenderer.dispose() (#33318)
Co-authored-by: Claude Opus 4.6 (1M context)
---
examples/jsm/misc/GPUComputationRenderer.js | 2 ++
1 file changed, 2 insertions(+)
diff --git a/examples/jsm/misc/GPUComputationRenderer.js b/examples/jsm/misc/GPUComputationRenderer.js
index 94ec75aca7f8c2..daaee9eb378d7a 100644
--- a/examples/jsm/misc/GPUComputationRenderer.js
+++ b/examples/jsm/misc/GPUComputationRenderer.js
@@ -339,6 +339,8 @@ class GPUComputationRenderer {
}
+ variable.material.dispose();
+
}
};
From 965f22fd423b4b5847647d3423e85872b01617d8 Mon Sep 17 00:00:00 2001
From: Michael Herzog
Date: Fri, 3 Apr 2026 11:51:57 +0200
Subject: [PATCH 3/3] FBXLoader: Fix `penumbra` computation. (#33321)
---
examples/jsm/loaders/FBXLoader.js | 23 +++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/examples/jsm/loaders/FBXLoader.js b/examples/jsm/loaders/FBXLoader.js
index 98181ddc8eb653..3e152531ed29dc 100644
--- a/examples/jsm/loaders/FBXLoader.js
+++ b/examples/jsm/loaders/FBXLoader.js
@@ -1290,21 +1290,24 @@ class FBXTreeParser {
case 2: // Spot
let angle = Math.PI / 3;
+ let penumbra = 0;
- if ( lightAttribute.InnerAngle !== undefined ) {
+ if ( lightAttribute.OuterAngle !== undefined ) {
- angle = MathUtils.degToRad( lightAttribute.InnerAngle.value );
+ angle = MathUtils.degToRad( lightAttribute.OuterAngle.value );
- }
+ if ( lightAttribute.InnerAngle !== undefined ) {
- let penumbra = 0;
- if ( lightAttribute.OuterAngle !== undefined ) {
+ penumbra = 1 - ( lightAttribute.InnerAngle.value / lightAttribute.OuterAngle.value );
+ penumbra = Math.max( 0, penumbra ); // penumbra must be in the range [0,1]
- // TODO: this is not correct - FBX calculates outer and inner angle in degrees
- // with OuterAngle > InnerAngle && OuterAngle <= Math.PI
- // while three.js uses a penumbra between (0, 1) to attenuate the inner angle
- penumbra = MathUtils.degToRad( lightAttribute.OuterAngle.value );
- penumbra = Math.max( penumbra, 1 );
+ }
+
+ } else if ( lightAttribute.InnerAngle !== undefined ) {
+
+ // fallback if only InnerAngle is defined
+
+ angle = MathUtils.degToRad( lightAttribute.InnerAngle.value );
}