@plastic-software/three 0.181.2 → 0.182.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/README.md +3 -4
  2. package/build/three.cjs +1192 -522
  3. package/build/three.core.js +345 -219
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +864 -328
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +15 -3
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +3660 -1545
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +3659 -1544
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/controls/MapControls.js +55 -1
  14. package/examples/jsm/controls/OrbitControls.js +6 -6
  15. package/examples/jsm/controls/TrackballControls.js +6 -6
  16. package/examples/jsm/csm/CSM.js +2 -1
  17. package/examples/jsm/environments/RoomEnvironment.js +2 -0
  18. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  19. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  20. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  21. package/examples/jsm/inspector/Inspector.js +53 -9
  22. package/examples/jsm/inspector/RendererInspector.js +12 -2
  23. package/examples/jsm/inspector/tabs/Console.js +2 -2
  24. package/examples/jsm/inspector/tabs/Parameters.js +2 -2
  25. package/examples/jsm/inspector/tabs/Performance.js +2 -2
  26. package/examples/jsm/inspector/tabs/Viewer.js +4 -4
  27. package/examples/jsm/inspector/ui/Profiler.js +1836 -31
  28. package/examples/jsm/inspector/ui/Style.js +948 -13
  29. package/examples/jsm/inspector/ui/Tab.js +188 -1
  30. package/examples/jsm/inspector/ui/Values.js +17 -1
  31. package/examples/jsm/loaders/3DMLoader.js +5 -4
  32. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  33. package/examples/jsm/loaders/FBXLoader.js +0 -2
  34. package/examples/jsm/loaders/HDRLoader.js +0 -1
  35. package/examples/jsm/loaders/KTX2Loader.js +16 -0
  36. package/examples/jsm/loaders/LDrawLoader.js +2 -3
  37. package/examples/jsm/loaders/PCDLoader.js +1 -0
  38. package/examples/jsm/loaders/SVGLoader.js +1 -1
  39. package/examples/jsm/loaders/TDSLoader.js +0 -2
  40. package/examples/jsm/loaders/TGALoader.js +0 -2
  41. package/examples/jsm/loaders/UltraHDRLoader.js +110 -137
  42. package/examples/jsm/loaders/VOXLoader.js +660 -117
  43. package/examples/jsm/loaders/VRMLLoader.js +2 -2
  44. package/examples/jsm/loaders/usd/USDCParser.js +1 -1
  45. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  46. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -1
  47. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  48. package/examples/jsm/math/Octree.js +131 -1
  49. package/examples/jsm/misc/Volume.js +0 -1
  50. package/examples/jsm/misc/VolumeSlice.js +0 -1
  51. package/examples/jsm/objects/SkyMesh.js +13 -3
  52. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  53. package/examples/jsm/physics/JoltPhysics.js +3 -1
  54. package/examples/jsm/physics/RapierPhysics.js +3 -1
  55. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  56. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  57. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  58. package/examples/jsm/renderers/Projector.js +268 -30
  59. package/examples/jsm/renderers/SVGRenderer.js +191 -58
  60. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  61. package/examples/jsm/transpiler/AST.js +44 -0
  62. package/examples/jsm/transpiler/GLSLDecoder.js +61 -4
  63. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  64. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  65. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  66. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  67. package/examples/jsm/tsl/display/AnaglyphPassNode.js +2 -0
  68. package/examples/jsm/tsl/display/BloomNode.js +11 -1
  69. package/examples/jsm/tsl/display/GTAONode.js +3 -2
  70. package/examples/jsm/tsl/display/PixelationPassNode.js +2 -1
  71. package/examples/jsm/tsl/display/SSGINode.js +7 -19
  72. package/examples/jsm/tsl/display/SSRNode.js +1 -1
  73. package/examples/jsm/tsl/display/SSSNode.js +4 -2
  74. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  75. package/examples/jsm/tsl/display/TRAANode.js +265 -114
  76. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  77. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  78. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  79. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  80. package/package.json +14 -12
  81. package/src/Three.Core.js +1 -0
  82. package/src/Three.TSL.js +14 -2
  83. package/src/animation/AnimationUtils.js +1 -12
  84. package/src/animation/KeyframeTrack.js +1 -1
  85. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  86. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  87. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  88. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  89. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  90. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  91. package/src/constants.js +61 -5
  92. package/src/core/BufferGeometry.js +14 -2
  93. package/src/core/Raycaster.js +2 -2
  94. package/src/extras/PMREMGenerator.js +3 -10
  95. package/src/extras/TextureUtils.js +5 -1
  96. package/src/geometries/ExtrudeGeometry.js +2 -2
  97. package/src/geometries/PolyhedronGeometry.js +1 -1
  98. package/src/helpers/PointLightHelper.js +1 -1
  99. package/src/lights/DirectionalLight.js +13 -0
  100. package/src/lights/HemisphereLight.js +10 -0
  101. package/src/lights/Light.js +1 -11
  102. package/src/lights/LightProbe.js +0 -15
  103. package/src/lights/LightShadow.js +0 -3
  104. package/src/lights/PointLight.js +15 -0
  105. package/src/lights/PointLightShadow.js +0 -86
  106. package/src/lights/SpotLight.js +22 -1
  107. package/src/loaders/MaterialLoader.js +2 -1
  108. package/src/loaders/ObjectLoader.js +3 -1
  109. package/src/loaders/nodes/NodeLoader.js +2 -2
  110. package/src/materials/Material.js +2 -0
  111. package/src/materials/ShaderMaterial.js +20 -1
  112. package/src/materials/nodes/Line2NodeMaterial.js +2 -2
  113. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -2
  114. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  115. package/src/materials/nodes/NodeMaterial.js +59 -3
  116. package/src/materials/nodes/manager/NodeMaterialObserver.js +1 -1
  117. package/src/math/Matrix4.js +40 -40
  118. package/src/math/Sphere.js +1 -1
  119. package/src/math/Vector3.js +0 -2
  120. package/src/nodes/TSL.js +4 -1
  121. package/src/nodes/accessors/BatchNode.js +10 -10
  122. package/src/nodes/accessors/BufferAttributeNode.js +98 -12
  123. package/src/nodes/accessors/BufferNode.js +29 -2
  124. package/src/nodes/accessors/ClippingNode.js +4 -4
  125. package/src/nodes/accessors/CubeTextureNode.js +20 -1
  126. package/src/nodes/accessors/InstanceNode.js +69 -29
  127. package/src/nodes/accessors/MaterialNode.js +9 -1
  128. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  129. package/src/nodes/accessors/ModelNode.js +1 -1
  130. package/src/nodes/accessors/Normal.js +2 -2
  131. package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
  132. package/src/nodes/accessors/ReferenceNode.js +4 -4
  133. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  134. package/src/nodes/accessors/SkinningNode.js +15 -2
  135. package/src/nodes/accessors/StorageBufferNode.js +4 -2
  136. package/src/nodes/accessors/Tangent.js +1 -11
  137. package/src/nodes/accessors/Texture3DNode.js +26 -1
  138. package/src/nodes/accessors/UniformArrayNode.js +2 -2
  139. package/src/nodes/accessors/UserDataNode.js +1 -2
  140. package/src/nodes/accessors/VertexColorNode.js +1 -2
  141. package/src/nodes/code/FunctionNode.js +1 -2
  142. package/src/nodes/core/ArrayNode.js +20 -1
  143. package/src/nodes/core/AssignNode.js +2 -2
  144. package/src/nodes/core/AttributeNode.js +2 -2
  145. package/src/nodes/core/ContextNode.js +103 -4
  146. package/src/nodes/core/NodeBuilder.js +56 -14
  147. package/src/nodes/core/NodeFrame.js +12 -4
  148. package/src/nodes/core/NodeUtils.js +5 -5
  149. package/src/nodes/core/ParameterNode.js +1 -2
  150. package/src/nodes/core/PropertyNode.js +19 -3
  151. package/src/nodes/core/StackNode.js +56 -8
  152. package/src/nodes/core/StructNode.js +1 -2
  153. package/src/nodes/core/StructTypeNode.js +11 -17
  154. package/src/nodes/core/UniformNode.js +19 -4
  155. package/src/nodes/core/VarNode.js +46 -21
  156. package/src/nodes/display/NormalMapNode.js +37 -2
  157. package/src/nodes/display/PassNode.js +77 -7
  158. package/src/nodes/display/ScreenNode.js +1 -0
  159. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  160. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  161. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  162. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
  163. package/src/nodes/functions/PhysicalLightingModel.js +102 -43
  164. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
  165. package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
  166. package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -3
  167. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  168. package/src/nodes/lighting/LightsNode.js +2 -2
  169. package/src/nodes/lighting/PointShadowNode.js +141 -140
  170. package/src/nodes/lighting/ShadowFilterNode.js +53 -37
  171. package/src/nodes/lighting/ShadowNode.js +53 -19
  172. package/src/nodes/math/BitcountNode.js +433 -0
  173. package/src/nodes/math/PackFloatNode.js +98 -0
  174. package/src/nodes/math/UnpackFloatNode.js +96 -0
  175. package/src/nodes/pmrem/PMREMNode.js +1 -1
  176. package/src/nodes/tsl/TSLCore.js +4 -4
  177. package/src/nodes/utils/ArrayElementNode.js +13 -0
  178. package/src/nodes/utils/EventNode.js +1 -2
  179. package/src/nodes/utils/Packing.js +13 -1
  180. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  181. package/src/nodes/utils/ReflectorNode.js +1 -1
  182. package/src/nodes/utils/SampleNode.js +1 -1
  183. package/src/nodes/utils/UVUtils.js +26 -0
  184. package/src/objects/BatchedMesh.js +5 -2
  185. package/src/objects/Line.js +1 -1
  186. package/src/objects/Mesh.js +1 -1
  187. package/src/objects/Points.js +1 -1
  188. package/src/objects/Skeleton.js +9 -0
  189. package/src/renderers/WebGLRenderer.js +145 -33
  190. package/src/renderers/common/Backend.js +8 -0
  191. package/src/renderers/common/Background.js +19 -9
  192. package/src/renderers/common/Binding.js +11 -0
  193. package/src/renderers/common/Bindings.js +7 -7
  194. package/src/renderers/common/Buffer.js +40 -0
  195. package/src/renderers/common/ChainMap.js +30 -6
  196. package/src/renderers/common/Geometries.js +12 -0
  197. package/src/renderers/common/RenderContexts.js +8 -1
  198. package/src/renderers/common/RenderObject.js +14 -1
  199. package/src/renderers/common/Renderer.js +53 -35
  200. package/src/renderers/common/Textures.js +1 -1
  201. package/src/renderers/common/UniformsGroup.js +1 -0
  202. package/src/renderers/common/XRManager.js +1 -0
  203. package/src/renderers/common/extras/PMREMGenerator.js +2 -8
  204. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  205. package/src/renderers/shaders/DFGLUTData.js +19 -34
  206. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
  207. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  208. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +90 -51
  209. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +194 -186
  210. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  211. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  212. package/src/renderers/shaders/ShaderChunk.js +3 -3
  213. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  214. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  215. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -1
  216. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  217. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  218. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  219. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  220. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +0 -1
  221. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  222. package/src/renderers/shaders/ShaderLib.js +3 -3
  223. package/src/renderers/webgl/WebGLCapabilities.js +3 -4
  224. package/src/renderers/webgl/WebGLLights.js +18 -1
  225. package/src/renderers/webgl/WebGLOutput.js +267 -0
  226. package/src/renderers/webgl/WebGLProgram.js +43 -107
  227. package/src/renderers/webgl/WebGLPrograms.js +35 -45
  228. package/src/renderers/webgl/WebGLShadowMap.js +188 -25
  229. package/src/renderers/webgl/WebGLState.js +20 -20
  230. package/src/renderers/webgl/WebGLTextures.js +89 -28
  231. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  232. package/src/renderers/webgl/WebGLUtils.js +6 -2
  233. package/src/renderers/webgl-fallback/WebGLBackend.js +79 -13
  234. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +59 -7
  235. package/src/renderers/webgl-fallback/utils/WebGLState.js +18 -3
  236. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
  237. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
  238. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  239. package/src/renderers/webgpu/WebGPUBackend.js +61 -4
  240. package/src/renderers/webgpu/WebGPURenderer.js +1 -1
  241. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +65 -23
  242. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
  243. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +354 -186
  244. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -0
  245. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +20 -7
  246. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +40 -17
  247. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  248. package/src/renderers/webgpu/utils/WebGPUUtils.js +7 -5
  249. package/src/textures/CubeDepthTexture.js +76 -0
  250. package/src/textures/Source.js +1 -1
  251. package/src/textures/Texture.js +1 -1
  252. package/src/utils.js +13 -1
  253. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
@@ -1,7 +1,12 @@
1
- import { MOUSE, TOUCH } from 'three';
1
+ import { MOUSE, TOUCH, Plane, Raycaster, Vector2, Vector3 } from 'three';
2
2
 
3
3
  import { OrbitControls } from './OrbitControls.js';
4
4
 
5
+ const _plane = new Plane();
6
+ const _raycaster = new Raycaster();
7
+ const _mouse = new Vector2();
8
+ const _panCurrent = new Vector3();
9
+
5
10
  /**
6
11
  * This class is intended for transforming a camera over a map from bird's eye perspective.
7
12
  * The class shares its implementation with {@link OrbitControls} but uses a specific preset
@@ -55,6 +60,55 @@ class MapControls extends OrbitControls {
55
60
  */
56
61
  this.touches = { ONE: TOUCH.PAN, TWO: TOUCH.DOLLY_ROTATE };
57
62
 
63
+ this._panWorldStart = new Vector3();
64
+
65
+ }
66
+
67
+ _handleMouseDownPan( event ) {
68
+
69
+ super._handleMouseDownPan( event );
70
+
71
+ this._panOffset.set( 0, 0, 0 );
72
+
73
+ if ( this.screenSpacePanning === true ) return;
74
+
75
+ _plane.setFromNormalAndCoplanarPoint( this.object.up, this.target );
76
+
77
+ const element = this.domElement;
78
+ const rect = element.getBoundingClientRect();
79
+ _mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;
80
+ _mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1;
81
+
82
+ _raycaster.setFromCamera( _mouse, this.object );
83
+ _raycaster.ray.intersectPlane( _plane, this._panWorldStart );
84
+
85
+ }
86
+
87
+ _handleMouseMovePan( event ) {
88
+
89
+ if ( this.screenSpacePanning === true ) {
90
+
91
+ super._handleMouseMovePan( event );
92
+ return;
93
+
94
+ }
95
+
96
+ const element = this.domElement;
97
+ const rect = element.getBoundingClientRect();
98
+ _mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;
99
+ _mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1;
100
+
101
+ _raycaster.setFromCamera( _mouse, this.object );
102
+
103
+ if ( _raycaster.ray.intersectPlane( _plane, _panCurrent ) ) {
104
+
105
+ _panCurrent.sub( this._panWorldStart );
106
+ this._panOffset.copy( _panCurrent ).negate();
107
+
108
+ this.update();
109
+
110
+ }
111
+
58
112
  }
59
113
 
60
114
  }
@@ -482,8 +482,8 @@ class OrbitControls extends Controls {
482
482
  disconnect() {
483
483
 
484
484
  this.domElement.removeEventListener( 'pointerdown', this._onPointerDown );
485
- this.domElement.removeEventListener( 'pointermove', this._onPointerMove );
486
- this.domElement.removeEventListener( 'pointerup', this._onPointerUp );
485
+ this.domElement.ownerDocument.removeEventListener( 'pointermove', this._onPointerMove );
486
+ this.domElement.ownerDocument.removeEventListener( 'pointerup', this._onPointerUp );
487
487
  this.domElement.removeEventListener( 'pointercancel', this._onPointerUp );
488
488
 
489
489
  this.domElement.removeEventListener( 'wheel', this._onMouseWheel );
@@ -1458,8 +1458,8 @@ function onPointerDown( event ) {
1458
1458
 
1459
1459
  this.domElement.setPointerCapture( event.pointerId );
1460
1460
 
1461
- this.domElement.addEventListener( 'pointermove', this._onPointerMove );
1462
- this.domElement.addEventListener( 'pointerup', this._onPointerUp );
1461
+ this.domElement.ownerDocument.addEventListener( 'pointermove', this._onPointerMove );
1462
+ this.domElement.ownerDocument.addEventListener( 'pointerup', this._onPointerUp );
1463
1463
 
1464
1464
  }
1465
1465
 
@@ -1509,8 +1509,8 @@ function onPointerUp( event ) {
1509
1509
 
1510
1510
  this.domElement.releasePointerCapture( event.pointerId );
1511
1511
 
1512
- this.domElement.removeEventListener( 'pointermove', this._onPointerMove );
1513
- this.domElement.removeEventListener( 'pointerup', this._onPointerUp );
1512
+ this.domElement.ownerDocument.removeEventListener( 'pointermove', this._onPointerMove );
1513
+ this.domElement.ownerDocument.removeEventListener( 'pointerup', this._onPointerUp );
1514
1514
 
1515
1515
  this.dispatchEvent( _endEvent );
1516
1516
 
@@ -291,8 +291,8 @@ class TrackballControls extends Controls {
291
291
  window.removeEventListener( 'keyup', this._onKeyUp );
292
292
 
293
293
  this.domElement.removeEventListener( 'pointerdown', this._onPointerDown );
294
- this.domElement.removeEventListener( 'pointermove', this._onPointerMove );
295
- this.domElement.removeEventListener( 'pointerup', this._onPointerUp );
294
+ this.domElement.ownerDocument.removeEventListener( 'pointermove', this._onPointerMove );
295
+ this.domElement.ownerDocument.removeEventListener( 'pointerup', this._onPointerUp );
296
296
  this.domElement.removeEventListener( 'pointercancel', this._onPointerCancel );
297
297
  this.domElement.removeEventListener( 'wheel', this._onMouseWheel );
298
298
  this.domElement.removeEventListener( 'contextmenu', this._onContextMenu );
@@ -660,8 +660,8 @@ function onPointerDown( event ) {
660
660
 
661
661
  this.domElement.setPointerCapture( event.pointerId );
662
662
 
663
- this.domElement.addEventListener( 'pointermove', this._onPointerMove );
664
- this.domElement.addEventListener( 'pointerup', this._onPointerUp );
663
+ this.domElement.ownerDocument.addEventListener( 'pointermove', this._onPointerMove );
664
+ this.domElement.ownerDocument.addEventListener( 'pointerup', this._onPointerUp );
665
665
 
666
666
  }
667
667
 
@@ -719,8 +719,8 @@ function onPointerUp( event ) {
719
719
 
720
720
  this.domElement.releasePointerCapture( event.pointerId );
721
721
 
722
- this.domElement.removeEventListener( 'pointermove', this._onPointerMove );
723
- this.domElement.removeEventListener( 'pointerup', this._onPointerUp );
722
+ this.domElement.ownerDocument.removeEventListener( 'pointermove', this._onPointerMove );
723
+ this.domElement.ownerDocument.removeEventListener( 'pointerup', this._onPointerUp );
724
724
 
725
725
  }
726
726
 
@@ -13,6 +13,7 @@ import { CSMShader } from './CSMShader.js';
13
13
  const _cameraToLightMatrix = new Matrix4();
14
14
  const _lightSpaceFrustum = new CSMFrustum( { webGL: true } );
15
15
  const _center = new Vector3();
16
+ const _origin = new Vector3();
16
17
  const _bbox = new Box3();
17
18
  const _uniformArray = [];
18
19
  const _logArray = [];
@@ -367,7 +368,7 @@ export class CSM {
367
368
 
368
369
  // for each frustum we need to find its min-max box aligned with the light orientation
369
370
  // the position in _lightOrientationMatrix does not matter, as we transform there and back
370
- _lightOrientationMatrix.lookAt( new Vector3(), this.lightDirection, _up );
371
+ _lightOrientationMatrix.lookAt( _origin, this.lightDirection, _up );
371
372
  _lightOrientationMatrixInverse.copy( _lightOrientationMatrix ).invert();
372
373
 
373
374
  for ( let i = 0; i < frustums.length; i ++ ) {
@@ -36,6 +36,8 @@ class RoomEnvironment extends Scene {
36
36
 
37
37
  super();
38
38
 
39
+ this.name = 'RoomEnvironment';
40
+
39
41
  const geometry = new BoxGeometry();
40
42
  geometry.deleteAttribute( 'uv' );
41
43
 
@@ -35,7 +35,7 @@ class DecalGeometry extends BufferGeometry {
35
35
  * @param {Mesh} [mesh] - The base mesh the decal should be projected on.
36
36
  * @param {Vector3} [position] - The position of the decal projector.
37
37
  * @param {Euler} [orientation] - The orientation of the decal projector.
38
- * @param {Vector3} [size] - Tje scale of the decal projector.
38
+ * @param {Vector3} [size] - The scale of the decal projector.
39
39
  */
40
40
  constructor( mesh = new Mesh(), position = new Vector3(), orientation = new Euler(), size = new Vector3( 1, 1, 1 ) ) {
41
41
 
@@ -2,7 +2,7 @@ import {
2
2
  Mesh,
3
3
  NodeMaterial,
4
4
  SphereGeometry
5
- } from 'three';
5
+ } from 'three/webgpu';
6
6
  import { float, Fn, getShIrradianceAt, normalWorld, uniformArray, uniform, vec4 } from 'three/tsl';
7
7
 
8
8
  /**
@@ -6,7 +6,7 @@ import {
6
6
  PlaneGeometry,
7
7
  DoubleSide,
8
8
  Vector3,
9
- } from 'three';
9
+ } from 'three/webgpu';
10
10
  import { texture as textureNode, cubeTexture, texture3D, float, vec4, attribute } from 'three/tsl';
11
11
  import { mergeGeometries } from '../utils/BufferGeometryUtils.js';
12
12
 
@@ -8,7 +8,29 @@ import { Viewer } from './tabs/Viewer.js';
8
8
  import { setText, splitPath, splitCamelCase } from './ui/utils.js';
9
9
 
10
10
  import { QuadMesh, NodeMaterial, CanvasTarget, setConsoleFunction, REVISION, NoToneMapping } from 'three/webgpu';
11
- import { renderOutput, vec3, vec4 } from 'three/tsl';
11
+ import { renderOutput, vec2, vec3, vec4, Fn, screenUV, step, OnMaterialUpdate, uniform } from 'three/tsl';
12
+
13
+ const aspectRatioUV = /*@__PURE__*/ Fn( ( [ uv, textureNode ] ) => {
14
+
15
+ const aspect = uniform( 0 );
16
+
17
+ OnMaterialUpdate( () => {
18
+
19
+ const { width, height } = textureNode.value;
20
+
21
+ aspect.value = width / height;
22
+
23
+ } );
24
+
25
+ const centered = uv.sub( 0.5 );
26
+ const corrected = vec2( centered.x.div( aspect ), centered.y );
27
+ const finalUV = corrected.add( 0.5 );
28
+
29
+ const inBounds = step( 0.0, finalUV.x ).mul( step( finalUV.x, 1.0 ) ).mul( step( 0.0, finalUV.y ) ).mul( step( finalUV.y, 1.0 ) );
30
+
31
+ return vec3( finalUV, inBounds );
32
+
33
+ } );
12
34
 
13
35
  class Inspector extends RendererInspector {
14
36
 
@@ -20,7 +42,10 @@ class Inspector extends RendererInspector {
20
42
 
21
43
  const profiler = new Profiler();
22
44
 
23
- const parameters = new Parameters();
45
+ const parameters = new Parameters( {
46
+ builtin: true,
47
+ icon: '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M14 6m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /><path d="M4 6l8 0" /><path d="M16 6l4 0" /><path d="M8 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /><path d="M4 12l2 0" /><path d="M10 12l10 0" /><path d="M17 18m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /><path d="M4 18l11 0" /><path d="M19 18l1 0" /></svg>'
48
+ } );
24
49
  parameters.hide();
25
50
  profiler.addTab( parameters );
26
51
 
@@ -31,18 +56,22 @@ class Inspector extends RendererInspector {
31
56
  const performance = new Performance();
32
57
  profiler.addTab( performance );
33
58
 
34
- const console = new Console();
35
- profiler.addTab( console );
59
+ const consoleTab = new Console();
60
+ profiler.addTab( consoleTab );
36
61
 
37
- profiler.setActiveTab( performance.id );
62
+ profiler.loadLayout();
38
63
 
39
- //
64
+ if ( ! profiler.activeTabId ) {
65
+
66
+ profiler.setActiveTab( performance.id );
67
+
68
+ }
40
69
 
41
70
  this.statsData = new Map();
42
71
  this.canvasNodes = new Map();
43
72
  this.profiler = profiler;
44
73
  this.performance = performance;
45
- this.console = console;
74
+ this.console = consoleTab;
46
75
  this.parameters = parameters;
47
76
  this.viewer = viewer;
48
77
  this.once = {};
@@ -178,7 +207,12 @@ class Inspector extends RendererInspector {
178
207
  if ( this.parameters.isVisible === false ) {
179
208
 
180
209
  this.parameters.show();
181
- this.profiler.setActiveTab( this.parameters.id );
210
+
211
+ if ( this.parameters.isDetached === false ) {
212
+
213
+ this.profiler.setActiveTab( this.parameters.id );
214
+
215
+ }
182
216
 
183
217
  }
184
218
 
@@ -266,7 +300,17 @@ class Inspector extends RendererInspector {
266
300
 
267
301
  const { path, name } = splitPath( splitCamelCase( node.getName() || '(unnamed)' ) );
268
302
 
269
- let output = vec4( vec3( node ), 1 );
303
+ const target = node.context( { getUV: ( textureNode ) => {
304
+
305
+ const uvData = aspectRatioUV( screenUV, textureNode );
306
+ const correctedUV = uvData.xy;
307
+ const mask = uvData.z;
308
+
309
+ return correctedUV.mul( mask );
310
+
311
+ } } );
312
+
313
+ let output = vec4( vec3( target ), 1 );
270
314
  output = renderOutput( output, NoToneMapping, renderer.outputColorSpace );
271
315
  output = output.context( { inspector: true } );
272
316
 
@@ -1,5 +1,5 @@
1
1
 
2
- import { InspectorBase, TimestampQuery } from 'three/webgpu';
2
+ import { InspectorBase, TimestampQuery, warnOnce } from 'three/webgpu';
3
3
 
4
4
  class ObjectStats {
5
5
 
@@ -330,7 +330,17 @@ export class RendererInspector extends InspectorBase {
330
330
 
331
331
  inspect( node ) {
332
332
 
333
- this.currentNodes.push( node );
333
+ const currentNodes = this.currentNodes;
334
+
335
+ if ( currentNodes !== null ) {
336
+
337
+ currentNodes.push( node );
338
+
339
+ } else {
340
+
341
+ warnOnce( 'RendererInspector: Unable to inspect node outside of frame scope. Use "renderer.setAnimationLoop()".' );
342
+
343
+ }
334
344
 
335
345
  }
336
346
 
@@ -2,9 +2,9 @@ import { Tab } from '../ui/Tab.js';
2
2
 
3
3
  class Console extends Tab {
4
4
 
5
- constructor() {
5
+ constructor( options = {} ) {
6
6
 
7
- super( 'Console' );
7
+ super( 'Console', options );
8
8
 
9
9
  this.filters = { info: true, warn: true, error: true };
10
10
  this.filterText = '';
@@ -299,9 +299,9 @@ class ParametersGroup {
299
299
 
300
300
  class Parameters extends Tab {
301
301
 
302
- constructor() {
302
+ constructor( options = {} ) {
303
303
 
304
- super( 'Parameters' );
304
+ super( 'Parameters', options );
305
305
 
306
306
  const paramList = new List( 'Property', 'Value' );
307
307
  paramList.domElement.classList.add( 'parameters' );
@@ -6,9 +6,9 @@ import { createValueSpan, setText } from '../ui/utils.js';
6
6
 
7
7
  class Performance extends Tab {
8
8
 
9
- constructor() {
9
+ constructor( options = {} ) {
10
10
 
11
- super( 'Performance' );
11
+ super( 'Performance', options );
12
12
 
13
13
  const perfList = new List( 'Name', 'CPU', 'GPU', 'Total' );
14
14
  perfList.setGridStyle( 'minmax(200px, 2fr) 80px 80px 80px' );
@@ -6,13 +6,13 @@ import { RendererUtils, NoToneMapping, LinearSRGBColorSpace } from 'three/webgpu
6
6
 
7
7
  class Viewer extends Tab {
8
8
 
9
- constructor() {
9
+ constructor( options = {} ) {
10
10
 
11
- super( 'Viewer' );
11
+ super( 'Viewer', options );
12
12
 
13
13
  const nodeList = new List( 'Viewer', 'Name' );
14
14
  nodeList.setGridStyle( '150px minmax(200px, 2fr)' );
15
- nodeList.domElement.style.minWidth = '600px';
15
+ nodeList.domElement.style.minWidth = '400px';
16
16
 
17
17
  const scrollWrapper = document.createElement( 'div' );
18
18
  scrollWrapper.className = 'list-scroll-wrapper';
@@ -70,7 +70,7 @@ class Viewer extends Tab {
70
70
 
71
71
  update( renderer, canvasDataList ) {
72
72
 
73
- if ( ! this.isActive ) return;
73
+ if ( ! this.isActive && ! this.isDetached ) return;
74
74
 
75
75
  //
76
76