super-three 0.181.0 → 0.184.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 (539) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +13152 -11354
  4. package/build/three.core.js +12319 -11539
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1808 -781
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +27 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +10523 -6263
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +10484 -6262
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +11 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +7 -4
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +58 -54
  19. package/examples/jsm/controls/FlyControls.js +4 -0
  20. package/examples/jsm/controls/MapControls.js +55 -1
  21. package/examples/jsm/controls/OrbitControls.js +111 -8
  22. package/examples/jsm/controls/TrackballControls.js +8 -8
  23. package/examples/jsm/controls/TransformControls.js +34 -2
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  26. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  27. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  28. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  29. package/examples/jsm/exporters/EXRExporter.js +1 -1
  30. package/examples/jsm/exporters/GLTFExporter.js +152 -9
  31. package/examples/jsm/exporters/USDZExporter.js +22 -3
  32. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  33. package/examples/jsm/geometries/TextGeometry.js +18 -0
  34. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  36. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  37. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  38. package/examples/jsm/helpers/ViewHelper.js +67 -8
  39. package/examples/jsm/inspector/Extension.js +13 -0
  40. package/examples/jsm/inspector/Inspector.js +203 -88
  41. package/examples/jsm/inspector/RendererInspector.js +14 -4
  42. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  43. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  44. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  45. package/examples/jsm/inspector/tabs/Console.js +41 -7
  46. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  47. package/examples/jsm/inspector/tabs/Parameters.js +51 -3
  48. package/examples/jsm/inspector/tabs/Performance.js +4 -4
  49. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  50. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  51. package/examples/jsm/inspector/tabs/Viewer.js +107 -5
  52. package/examples/jsm/inspector/ui/Graph.js +2 -2
  53. package/examples/jsm/inspector/ui/List.js +1 -1
  54. package/examples/jsm/inspector/ui/Profiler.js +1936 -34
  55. package/examples/jsm/inspector/ui/Style.js +1044 -31
  56. package/examples/jsm/inspector/ui/Tab.js +222 -3
  57. package/examples/jsm/inspector/ui/Values.js +55 -2
  58. package/examples/jsm/inspector/ui/utils.js +13 -0
  59. package/examples/jsm/interaction/InteractionManager.js +226 -0
  60. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  61. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  62. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  63. package/examples/jsm/lines/LineMaterial.js +7 -1
  64. package/examples/jsm/loaders/3DMLoader.js +5 -4
  65. package/examples/jsm/loaders/3MFLoader.js +2 -2
  66. package/examples/jsm/loaders/AMFLoader.js +2 -2
  67. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  68. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  69. package/examples/jsm/loaders/EXRLoader.js +687 -48
  70. package/examples/jsm/loaders/FBXLoader.js +235 -37
  71. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  72. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  73. package/examples/jsm/loaders/HDRLoader.js +1 -2
  74. package/examples/jsm/loaders/KMZLoader.js +5 -5
  75. package/examples/jsm/loaders/KTX2Loader.js +27 -5
  76. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  77. package/examples/jsm/loaders/LWOLoader.js +7 -39
  78. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  79. package/examples/jsm/loaders/PCDLoader.js +4 -2
  80. package/examples/jsm/loaders/SVGLoader.js +2 -2
  81. package/examples/jsm/loaders/TDSLoader.js +0 -2
  82. package/examples/jsm/loaders/TGALoader.js +0 -2
  83. package/examples/jsm/loaders/USDLoader.js +100 -40
  84. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  85. package/examples/jsm/loaders/VOXLoader.js +660 -117
  86. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  87. package/examples/jsm/loaders/VTKLoader.js +42 -25
  88. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  89. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  90. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  91. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  92. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  93. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  94. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  95. package/examples/jsm/math/Octree.js +131 -1
  96. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  97. package/examples/jsm/misc/RollerCoaster.js +42 -4
  98. package/examples/jsm/misc/Volume.js +0 -1
  99. package/examples/jsm/misc/VolumeSlice.js +0 -1
  100. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  101. package/examples/jsm/objects/LensflareMesh.js +1 -1
  102. package/examples/jsm/objects/Reflector.js +73 -25
  103. package/examples/jsm/objects/Sky.js +90 -6
  104. package/examples/jsm/objects/SkyMesh.js +150 -16
  105. package/examples/jsm/objects/Water.js +4 -3
  106. package/examples/jsm/objects/Water2.js +5 -3
  107. package/examples/jsm/objects/WaterMesh.js +5 -7
  108. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  109. package/examples/jsm/physics/JoltPhysics.js +10 -6
  110. package/examples/jsm/physics/RapierPhysics.js +9 -5
  111. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  112. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  113. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  114. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  115. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  116. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  117. package/examples/jsm/renderers/Projector.js +246 -28
  118. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  119. package/examples/jsm/shaders/GTAOShader.js +19 -6
  120. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  122. package/examples/jsm/shaders/SAOShader.js +17 -4
  123. package/examples/jsm/shaders/SSAOShader.js +11 -1
  124. package/examples/jsm/shaders/SSRShader.js +6 -5
  125. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  126. package/examples/jsm/shaders/VignetteShader.js +1 -1
  127. package/examples/jsm/transpiler/AST.js +44 -0
  128. package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  130. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  131. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  132. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  133. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  134. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  135. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  136. package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
  137. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  138. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  139. package/examples/jsm/tsl/display/CRT.js +150 -0
  140. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  141. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  142. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  143. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  144. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  145. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  146. package/examples/jsm/tsl/display/GTAONode.js +6 -4
  147. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  148. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  149. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  150. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  151. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  152. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  153. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  154. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  155. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  156. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  157. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  158. package/examples/jsm/tsl/display/SSGINode.js +8 -24
  159. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  160. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  161. package/examples/jsm/tsl/display/Shape.js +29 -0
  162. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  163. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  164. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  165. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  166. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  167. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  168. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  169. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  170. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  171. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  172. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  173. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  174. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  175. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  176. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  177. package/examples/jsm/tsl/math/Bayer.js +53 -3
  178. package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
  179. package/examples/jsm/utils/ColorUtils.js +76 -0
  180. package/examples/jsm/utils/LDrawUtils.js +1 -1
  181. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  182. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  183. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  186. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  187. package/package.json +24 -30
  188. package/src/Three.Core.js +3 -1
  189. package/src/Three.TSL.js +25 -11
  190. package/src/Three.WebGPU.Nodes.js +5 -0
  191. package/src/Three.WebGPU.js +9 -0
  192. package/src/Three.js +1 -0
  193. package/src/animation/AnimationAction.js +12 -2
  194. package/src/animation/AnimationClip.js +1 -1
  195. package/src/animation/AnimationMixer.js +6 -0
  196. package/src/animation/AnimationUtils.js +1 -12
  197. package/src/animation/KeyframeTrack.js +47 -8
  198. package/src/animation/PropertyMixer.js +4 -4
  199. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  200. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  201. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  202. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  203. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  204. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  205. package/src/audio/Audio.js +1 -1
  206. package/src/audio/AudioContext.js +2 -2
  207. package/src/audio/AudioListener.js +5 -3
  208. package/src/cameras/Camera.js +32 -2
  209. package/src/cameras/CubeCamera.js +20 -0
  210. package/src/constants.js +90 -5
  211. package/src/core/BufferAttribute.js +13 -1
  212. package/src/core/BufferGeometry.js +14 -2
  213. package/src/core/Clock.js +7 -0
  214. package/src/core/Object3D.js +52 -4
  215. package/src/core/Raycaster.js +2 -2
  216. package/src/core/RenderTarget.js +4 -4
  217. package/src/extras/PMREMGenerator.js +7 -18
  218. package/src/extras/TextureUtils.js +5 -1
  219. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  220. package/src/geometries/ExtrudeGeometry.js +2 -2
  221. package/src/geometries/PolyhedronGeometry.js +1 -1
  222. package/src/geometries/TorusGeometry.js +8 -3
  223. package/src/helpers/CameraHelper.js +3 -0
  224. package/src/helpers/DirectionalLightHelper.js +4 -1
  225. package/src/helpers/HemisphereLightHelper.js +3 -0
  226. package/src/helpers/PointLightHelper.js +1 -25
  227. package/src/helpers/SpotLightHelper.js +3 -0
  228. package/src/lights/DirectionalLight.js +13 -0
  229. package/src/lights/HemisphereLight.js +10 -0
  230. package/src/lights/Light.js +1 -11
  231. package/src/lights/LightProbe.js +0 -15
  232. package/src/lights/LightShadow.js +15 -6
  233. package/src/lights/PointLight.js +15 -0
  234. package/src/lights/PointLightShadow.js +0 -86
  235. package/src/lights/SpotLight.js +22 -1
  236. package/src/lights/webgpu/IESSpotLight.js +2 -1
  237. package/src/loaders/AudioLoader.js +11 -1
  238. package/src/loaders/Cache.js +28 -0
  239. package/src/loaders/DataTextureLoader.js +6 -4
  240. package/src/loaders/FileLoader.js +2 -3
  241. package/src/loaders/ImageBitmapLoader.js +12 -9
  242. package/src/loaders/Loader.js +6 -0
  243. package/src/loaders/MaterialLoader.js +3 -2
  244. package/src/loaders/ObjectLoader.js +46 -6
  245. package/src/loaders/nodes/NodeLoader.js +2 -2
  246. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  247. package/src/materials/Material.js +2 -0
  248. package/src/materials/MeshLambertMaterial.js +9 -0
  249. package/src/materials/MeshPhongMaterial.js +9 -0
  250. package/src/materials/MeshToonMaterial.js +1 -1
  251. package/src/materials/ShaderMaterial.js +20 -1
  252. package/src/materials/nodes/Line2NodeMaterial.js +34 -7
  253. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  254. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  255. package/src/materials/nodes/NodeMaterial.js +45 -25
  256. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
  257. package/src/math/Line3.js +6 -5
  258. package/src/math/MathUtils.js +10 -10
  259. package/src/math/Matrix2.js +13 -9
  260. package/src/math/Matrix3.js +13 -9
  261. package/src/math/Matrix4.js +87 -74
  262. package/src/math/Plane.js +4 -3
  263. package/src/math/Quaternion.js +3 -29
  264. package/src/math/Sphere.js +1 -1
  265. package/src/math/Triangle.js +1 -1
  266. package/src/math/Vector2.js +11 -7
  267. package/src/math/Vector3.js +15 -13
  268. package/src/math/Vector4.js +13 -9
  269. package/src/math/interpolants/BezierInterpolant.js +108 -0
  270. package/src/nodes/Nodes.js +86 -68
  271. package/src/nodes/TSL.js +7 -7
  272. package/src/nodes/accessors/Arrays.js +1 -1
  273. package/src/nodes/accessors/BatchNode.js +10 -10
  274. package/src/nodes/accessors/Bitangent.js +5 -5
  275. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  276. package/src/nodes/accessors/BufferNode.js +29 -2
  277. package/src/nodes/accessors/Camera.js +149 -28
  278. package/src/nodes/accessors/ClippingNode.js +4 -4
  279. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  280. package/src/nodes/accessors/InstanceNode.js +148 -43
  281. package/src/nodes/accessors/MaterialNode.js +9 -1
  282. package/src/nodes/accessors/MaterialProperties.js +2 -5
  283. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  284. package/src/nodes/accessors/ModelNode.js +1 -1
  285. package/src/nodes/accessors/Normal.js +11 -11
  286. package/src/nodes/accessors/Object3DNode.js +1 -1
  287. package/src/nodes/accessors/Position.js +34 -2
  288. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  289. package/src/nodes/accessors/ReferenceNode.js +8 -8
  290. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  291. package/src/nodes/accessors/SceneProperties.js +47 -0
  292. package/src/nodes/accessors/SkinningNode.js +27 -26
  293. package/src/nodes/accessors/StorageBufferNode.js +14 -25
  294. package/src/nodes/accessors/StorageTextureNode.js +40 -9
  295. package/src/nodes/accessors/Tangent.js +4 -14
  296. package/src/nodes/accessors/Texture3DNode.js +32 -35
  297. package/src/nodes/accessors/TextureNode.js +67 -23
  298. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  299. package/src/nodes/accessors/UserDataNode.js +1 -2
  300. package/src/nodes/accessors/VertexColorNode.js +1 -2
  301. package/src/nodes/code/FunctionCallNode.js +1 -1
  302. package/src/nodes/code/FunctionNode.js +2 -3
  303. package/src/nodes/core/ArrayNode.js +21 -2
  304. package/src/nodes/core/AssignNode.js +3 -3
  305. package/src/nodes/core/AttributeNode.js +3 -3
  306. package/src/nodes/core/BypassNode.js +1 -1
  307. package/src/nodes/core/ContextNode.js +104 -5
  308. package/src/nodes/core/IndexNode.js +2 -1
  309. package/src/nodes/core/InputNode.js +1 -1
  310. package/src/nodes/core/InspectorNode.js +1 -1
  311. package/src/nodes/core/IsolateNode.js +1 -1
  312. package/src/nodes/core/MRTNode.js +48 -2
  313. package/src/nodes/core/Node.js +112 -15
  314. package/src/nodes/core/NodeBuilder.js +284 -66
  315. package/src/nodes/core/NodeError.js +28 -0
  316. package/src/nodes/core/NodeFrame.js +12 -4
  317. package/src/nodes/core/NodeUtils.js +11 -9
  318. package/src/nodes/core/OutputStructNode.js +12 -10
  319. package/src/nodes/core/ParameterNode.js +4 -4
  320. package/src/nodes/core/PropertyNode.js +19 -3
  321. package/src/nodes/core/StackNode.js +66 -17
  322. package/src/nodes/core/StackTrace.js +139 -0
  323. package/src/nodes/core/StructNode.js +17 -3
  324. package/src/nodes/core/StructTypeNode.js +12 -18
  325. package/src/nodes/core/SubBuildNode.js +2 -2
  326. package/src/nodes/core/UniformGroupNode.js +36 -6
  327. package/src/nodes/core/UniformNode.js +21 -5
  328. package/src/nodes/core/VarNode.js +48 -23
  329. package/src/nodes/core/VaryingNode.js +2 -19
  330. package/src/nodes/display/BlendModes.js +0 -64
  331. package/src/nodes/display/ColorAdjustment.js +17 -0
  332. package/src/nodes/display/ColorSpaceNode.js +3 -3
  333. package/src/nodes/display/NormalMapNode.js +39 -4
  334. package/src/nodes/display/PassNode.js +125 -16
  335. package/src/nodes/display/RenderOutputNode.js +7 -7
  336. package/src/nodes/display/ScreenNode.js +4 -2
  337. package/src/nodes/display/ToneMappingNode.js +1 -1
  338. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  339. package/src/nodes/display/ViewportDepthNode.js +52 -4
  340. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  341. package/src/nodes/display/ViewportTextureNode.js +39 -11
  342. package/src/nodes/fog/Fog.js +18 -35
  343. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  344. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  345. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  346. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  347. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  348. package/src/nodes/geometry/RangeNode.js +5 -3
  349. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  350. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  351. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  352. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  353. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  354. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  355. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  356. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  357. package/src/nodes/lighting/LightsNode.js +7 -28
  358. package/src/nodes/lighting/PointShadowNode.js +162 -149
  359. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  360. package/src/nodes/lighting/ShadowNode.js +120 -42
  361. package/src/nodes/math/BitcastNode.js +1 -1
  362. package/src/nodes/math/BitcountNode.js +433 -0
  363. package/src/nodes/math/ConditionalNode.js +3 -3
  364. package/src/nodes/math/MathNode.js +76 -41
  365. package/src/nodes/math/OperatorNode.js +3 -2
  366. package/src/nodes/math/PackFloatNode.js +98 -0
  367. package/src/nodes/math/UnpackFloatNode.js +96 -0
  368. package/src/nodes/pmrem/PMREMNode.js +1 -1
  369. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  370. package/src/nodes/tsl/TSLBase.js +1 -1
  371. package/src/nodes/tsl/TSLCore.js +38 -17
  372. package/src/nodes/utils/ArrayElementNode.js +14 -1
  373. package/src/nodes/utils/ConvertNode.js +1 -1
  374. package/src/nodes/utils/DebugNode.js +12 -12
  375. package/src/nodes/utils/EventNode.js +31 -2
  376. package/src/nodes/utils/FlipNode.js +1 -1
  377. package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
  378. package/src/nodes/utils/JoinNode.js +3 -3
  379. package/src/nodes/utils/LoopNode.js +1 -1
  380. package/src/nodes/utils/MemberNode.js +2 -2
  381. package/src/nodes/utils/Packing.js +13 -1
  382. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  383. package/src/nodes/utils/RTTNode.js +1 -1
  384. package/src/nodes/utils/ReflectorNode.js +3 -4
  385. package/src/nodes/utils/Remap.js +48 -0
  386. package/src/nodes/utils/RotateNode.js +1 -1
  387. package/src/nodes/utils/SampleNode.js +1 -1
  388. package/src/nodes/utils/SetNode.js +1 -1
  389. package/src/nodes/utils/SplitNode.js +1 -1
  390. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  391. package/src/nodes/utils/UVUtils.js +28 -0
  392. package/src/objects/BatchedMesh.js +44 -16
  393. package/src/objects/InstancedMesh.js +30 -3
  394. package/src/objects/Line.js +1 -1
  395. package/src/objects/Mesh.js +1 -1
  396. package/src/objects/Points.js +1 -1
  397. package/src/objects/Skeleton.js +9 -0
  398. package/src/objects/SkinnedMesh.js +26 -9
  399. package/src/renderers/WebGLRenderer.js +329 -145
  400. package/src/renderers/common/Animation.js +3 -3
  401. package/src/renderers/common/Attributes.js +15 -1
  402. package/src/renderers/common/Backend.js +29 -8
  403. package/src/renderers/common/Background.js +26 -13
  404. package/src/renderers/common/BindGroup.js +1 -16
  405. package/src/renderers/common/Binding.js +11 -0
  406. package/src/renderers/common/Bindings.js +29 -14
  407. package/src/renderers/common/BlendMode.js +143 -0
  408. package/src/renderers/common/Buffer.js +40 -0
  409. package/src/renderers/common/BundleGroup.js +1 -1
  410. package/src/renderers/common/ChainMap.js +30 -6
  411. package/src/renderers/common/ComputePipeline.js +1 -1
  412. package/src/renderers/common/CubeRenderTarget.js +51 -7
  413. package/src/renderers/common/Geometries.js +29 -3
  414. package/src/renderers/common/Info.js +333 -4
  415. package/src/renderers/common/InspectorBase.js +6 -1
  416. package/src/renderers/common/Lighting.js +5 -21
  417. package/src/renderers/common/Pipelines.js +40 -7
  418. package/src/renderers/common/PostProcessing.js +8 -206
  419. package/src/renderers/common/ReadbackBuffer.js +78 -0
  420. package/src/renderers/common/RenderBundle.js +3 -1
  421. package/src/renderers/common/RenderBundles.js +7 -3
  422. package/src/renderers/common/RenderContext.js +16 -0
  423. package/src/renderers/common/RenderContexts.js +33 -49
  424. package/src/renderers/common/RenderLists.js +2 -1
  425. package/src/renderers/common/RenderObject.js +17 -5
  426. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  427. package/src/renderers/common/RenderObjects.js +21 -5
  428. package/src/renderers/common/RenderPipeline.js +232 -17
  429. package/src/renderers/common/Renderer.js +481 -117
  430. package/src/renderers/common/Sampler.js +4 -4
  431. package/src/renderers/common/StorageBuffer.js +13 -1
  432. package/src/renderers/common/Textures.js +89 -4
  433. package/src/renderers/common/TimestampQueryPool.js +5 -3
  434. package/src/renderers/common/Uniform.js +8 -0
  435. package/src/renderers/common/UniformsGroup.js +62 -1
  436. package/src/renderers/common/XRManager.js +37 -29
  437. package/src/renderers/common/extras/PMREMGenerator.js +25 -23
  438. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  439. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
  440. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  441. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  442. package/src/renderers/shaders/DFGLUTData.js +19 -34
  443. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  444. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  445. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  446. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  447. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  448. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  449. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  450. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  451. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  452. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  453. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  454. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  455. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  456. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  457. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  458. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  459. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  461. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  462. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  463. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  464. package/src/renderers/shaders/ShaderChunk.js +5 -3
  465. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  466. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  467. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  468. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  469. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  470. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  471. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  472. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  473. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  474. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  475. package/src/renderers/shaders/ShaderLib.js +7 -6
  476. package/src/renderers/shaders/UniformsLib.js +7 -5
  477. package/src/renderers/shaders/UniformsUtils.js +27 -5
  478. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  479. package/src/renderers/webgl/WebGLBackground.js +15 -15
  480. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  481. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  482. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  483. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  484. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  485. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  486. package/src/renderers/webgl/WebGLLights.js +18 -1
  487. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  488. package/src/renderers/webgl/WebGLObjects.js +3 -1
  489. package/src/renderers/webgl/WebGLOutput.js +270 -0
  490. package/src/renderers/webgl/WebGLProgram.js +49 -109
  491. package/src/renderers/webgl/WebGLPrograms.js +63 -51
  492. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  493. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  494. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  495. package/src/renderers/webgl/WebGLState.js +75 -37
  496. package/src/renderers/webgl/WebGLTextures.js +215 -54
  497. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  498. package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
  499. package/src/renderers/webgl/WebGLUtils.js +6 -2
  500. package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
  501. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  504. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
  507. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  508. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  509. package/src/renderers/webgpu/WebGPUBackend.js +260 -140
  510. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  511. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
  512. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
  513. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  514. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  515. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  516. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  517. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
  519. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  520. package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
  521. package/src/renderers/webxr/WebXRController.js +12 -0
  522. package/src/renderers/webxr/WebXRManager.js +4 -2
  523. package/src/textures/CubeDepthTexture.js +76 -0
  524. package/src/textures/HTMLTexture.js +74 -0
  525. package/src/textures/Source.js +2 -2
  526. package/src/textures/Texture.js +16 -5
  527. package/src/utils.js +280 -3
  528. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  529. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  530. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  531. package/src/nodes/accessors/SceneNode.js +0 -145
  532. package/src/nodes/code/ScriptableNode.js +0 -726
  533. package/src/nodes/code/ScriptableValueNode.js +0 -253
  534. package/src/nodes/display/PosterizeNode.js +0 -65
  535. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  536. package/src/nodes/utils/RemapNode.js +0 -125
  537. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  538. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  539. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -0,0 +1,302 @@
1
+ import {
2
+ BufferGeometry,
3
+ Float32BufferAttribute,
4
+ Line,
5
+ LineBasicMaterial,
6
+ Object3D,
7
+ Points,
8
+ PointsMaterial
9
+ } from 'three';
10
+
11
+ /**
12
+ * Visualizes the motion path of an animated object based on position keyframes
13
+ * from an AnimationClip.
14
+ *
15
+ * ```js
16
+ * const clip = model.animations[ 0 ];
17
+ * const helper = new AnimationPathHelper( model, clip, object );
18
+ * scene.add( helper );
19
+ * ```
20
+ *
21
+ * @augments Object3D
22
+ * @three_import import { AnimationPathHelper } from 'three/addons/helpers/AnimationPathHelper.js';
23
+ */
24
+ class AnimationPathHelper extends Object3D {
25
+
26
+ /**
27
+ * Constructs a new animation path helper.
28
+ *
29
+ * @param {Object3D} root - The root object containing the animation clips.
30
+ * @param {AnimationClip} clip - The animation clip containing position keyframes.
31
+ * @param {Object3D} object - The specific object to show the path for.
32
+ * @param {Object} [options={}] - Configuration options.
33
+ * @param {number|Color|string} [options.color=0x00ff00] - The path line color.
34
+ * @param {number|Color|string} [options.markerColor=0xff0000] - The keyframe marker color.
35
+ * @param {number} [options.divisions=100] - Number of samples for smooth path interpolation.
36
+ * @param {boolean} [options.showMarkers=true] - Whether to show markers at keyframe positions.
37
+ * @param {number} [options.markerSize=5] - Size of keyframe markers in pixels.
38
+ */
39
+ constructor( root, clip, object, options = {} ) {
40
+
41
+ super();
42
+
43
+ const {
44
+ color = 0x00ff00,
45
+ markerColor = 0xff0000,
46
+ divisions = 100,
47
+ showMarkers = true,
48
+ markerSize = 5
49
+ } = options;
50
+
51
+ /**
52
+ * This flag can be used for type testing.
53
+ *
54
+ * @type {boolean}
55
+ * @readonly
56
+ * @default true
57
+ */
58
+ this.isAnimationPathHelper = true;
59
+
60
+ this.type = 'AnimationPathHelper';
61
+
62
+ /**
63
+ * The root object containing the animation clips.
64
+ *
65
+ * @type {Object3D}
66
+ */
67
+ this.root = root;
68
+
69
+ /**
70
+ * The animation clip containing position keyframes.
71
+ *
72
+ * @type {AnimationClip}
73
+ */
74
+ this.clip = clip;
75
+
76
+ /**
77
+ * The object whose path is being visualized.
78
+ *
79
+ * @type {Object3D}
80
+ */
81
+ this.object = object;
82
+
83
+ /**
84
+ * Number of samples for smooth path interpolation.
85
+ *
86
+ * @type {number}
87
+ * @default 100
88
+ */
89
+ this.divisions = divisions;
90
+
91
+ /**
92
+ * The position track for the object.
93
+ *
94
+ * @type {KeyframeTrack|null}
95
+ * @private
96
+ */
97
+ this._track = this._findTrackForObject( object );
98
+
99
+ if ( this._track === null ) {
100
+
101
+ console.warn( 'AnimationPathHelper: No position track found for object', object.name );
102
+ return;
103
+
104
+ }
105
+
106
+ // Create line for path
107
+ const lineGeometry = new BufferGeometry();
108
+ const lineMaterial = new LineBasicMaterial( {
109
+ color: color,
110
+ toneMapped: false
111
+ } );
112
+
113
+ /**
114
+ * The line representing the animation path.
115
+ *
116
+ * @type {Line}
117
+ */
118
+ this.line = new Line( lineGeometry, lineMaterial );
119
+ this.add( this.line );
120
+
121
+ // Create points for keyframe markers
122
+ if ( showMarkers ) {
123
+
124
+ const pointsGeometry = new BufferGeometry();
125
+ const pointsMaterial = new PointsMaterial( {
126
+ color: markerColor,
127
+ size: markerSize,
128
+ sizeAttenuation: false,
129
+ toneMapped: false
130
+ } );
131
+
132
+ /**
133
+ * Points marking keyframe positions.
134
+ *
135
+ * @type {Points|null}
136
+ */
137
+ this.points = new Points( pointsGeometry, pointsMaterial );
138
+ this.add( this.points );
139
+
140
+ } else {
141
+
142
+ this.points = null;
143
+
144
+ }
145
+
146
+ // Sync matrix with object's parent
147
+ this.matrixAutoUpdate = false;
148
+
149
+ this._updateGeometry();
150
+
151
+ }
152
+
153
+ /**
154
+ * Finds the position track for the given object.
155
+ *
156
+ * @private
157
+ * @param {Object3D} object - The object to find the track for.
158
+ * @returns {KeyframeTrack|null} The position track, or null if not found.
159
+ */
160
+ _findTrackForObject( object ) {
161
+
162
+ const targetName = object.uuid + '.position';
163
+
164
+ for ( const track of this.clip.tracks ) {
165
+
166
+ if ( track.name === targetName && track.getValueSize() === 3 ) {
167
+
168
+ return track;
169
+
170
+ }
171
+
172
+ }
173
+
174
+ return null;
175
+
176
+ }
177
+
178
+ /**
179
+ * Samples the track at regular intervals.
180
+ *
181
+ * @private
182
+ * @returns {Float32Array} Array of sampled positions.
183
+ */
184
+ _sampleTrack() {
185
+
186
+ const track = this._track;
187
+ const interpolant = track.createInterpolant();
188
+ const duration = this.clip.duration;
189
+ const positions = [];
190
+
191
+ for ( let i = 0; i <= this.divisions; i ++ ) {
192
+
193
+ const t = ( i / this.divisions ) * duration;
194
+ const result = interpolant.evaluate( t );
195
+ positions.push( result[ 0 ], result[ 1 ], result[ 2 ] );
196
+
197
+ }
198
+
199
+ return new Float32Array( positions );
200
+
201
+ }
202
+
203
+ /**
204
+ * Updates the geometry with sampled path data.
205
+ *
206
+ * @private
207
+ */
208
+ _updateGeometry() {
209
+
210
+ if ( this._track === null ) return;
211
+
212
+ // Update line geometry
213
+ const sampledPositions = this._sampleTrack();
214
+ this.line.geometry.setAttribute( 'position', new Float32BufferAttribute( sampledPositions, 3 ) );
215
+ this.line.geometry.computeBoundingSphere();
216
+
217
+ // Update keyframe markers
218
+ if ( this.points !== null ) {
219
+
220
+ this.points.geometry.setAttribute( 'position', new Float32BufferAttribute( new Float32Array( this._track.values ), 3 ) );
221
+ this.points.geometry.computeBoundingSphere();
222
+
223
+ }
224
+
225
+ }
226
+
227
+ /**
228
+ * Updates the helper's transform to match the object's parent.
229
+ *
230
+ * @param {boolean} force - Force matrix update.
231
+ */
232
+ updateMatrixWorld( force ) {
233
+
234
+ // Position the helper at the object's parent so the path appears in correct local space
235
+ if ( this.object && this.object.parent ) {
236
+
237
+ this.object.parent.updateWorldMatrix( true, false );
238
+ this.matrix.copy( this.object.parent.matrixWorld );
239
+
240
+ } else {
241
+
242
+ this.matrix.identity();
243
+
244
+ }
245
+
246
+ this.matrixWorld.copy( this.matrix );
247
+
248
+ // Update children
249
+ for ( let i = 0; i < this.children.length; i ++ ) {
250
+
251
+ this.children[ i ].updateMatrixWorld( force );
252
+
253
+ }
254
+
255
+ }
256
+
257
+ /**
258
+ * Sets the path line color.
259
+ *
260
+ * @param {number|Color|string} color - The new color.
261
+ */
262
+ setColor( color ) {
263
+
264
+ if ( this.line ) this.line.material.color.set( color );
265
+
266
+ }
267
+
268
+ /**
269
+ * Sets the keyframe marker color.
270
+ *
271
+ * @param {number|Color|string} color - The new color.
272
+ */
273
+ setMarkerColor( color ) {
274
+
275
+ if ( this.points ) this.points.material.color.set( color );
276
+
277
+ }
278
+
279
+ /**
280
+ * Frees the GPU-related resources allocated by this instance.
281
+ */
282
+ dispose() {
283
+
284
+ if ( this.line ) {
285
+
286
+ this.line.geometry.dispose();
287
+ this.line.material.dispose();
288
+
289
+ }
290
+
291
+ if ( this.points ) {
292
+
293
+ this.points.geometry.dispose();
294
+ this.points.material.dispose();
295
+
296
+ }
297
+
298
+ }
299
+
300
+ }
301
+
302
+ export { AnimationPathHelper };
@@ -0,0 +1,221 @@
1
+ import {
2
+ InstancedBufferAttribute,
3
+ InstancedMesh,
4
+ Matrix4,
5
+ ShaderMaterial,
6
+ SphereGeometry,
7
+ Vector3
8
+ } from 'three';
9
+
10
+ /**
11
+ * Visualizes an {@link LightProbeGrid} by rendering a sphere at each
12
+ * probe position, shaded with the probe's L1 spherical harmonics.
13
+ *
14
+ * Uses a single `InstancedMesh` draw call for all probes.
15
+ *
16
+ * ```js
17
+ * const helper = new LightProbeGridHelper( probes );
18
+ * scene.add( helper );
19
+ * ```
20
+ *
21
+ * @augments InstancedMesh
22
+ * @three_import import { LightProbeGridHelper } from 'three/addons/helpers/LightProbeGridHelper.js';
23
+ */
24
+ class LightProbeGridHelper extends InstancedMesh {
25
+
26
+ /**
27
+ * Constructs a new irradiance probe grid helper.
28
+ *
29
+ * @param {LightProbeGrid} probes - The probe grid to visualize.
30
+ * @param {number} [sphereSize=0.12] - The radius of each probe sphere.
31
+ */
32
+ constructor( probes, sphereSize = 0.12 ) {
33
+
34
+ const geometry = new SphereGeometry( sphereSize, 16, 16 );
35
+
36
+ const material = new ShaderMaterial( {
37
+
38
+ uniforms: {
39
+
40
+ probesSH: { value: null },
41
+ probesResolution: { value: new Vector3() },
42
+
43
+ },
44
+
45
+ vertexShader: /* glsl */`
46
+
47
+ attribute vec3 instanceUVW;
48
+
49
+ varying vec3 vWorldNormal;
50
+ varying vec3 vUVW;
51
+
52
+ void main() {
53
+
54
+ vUVW = instanceUVW;
55
+ vWorldNormal = normalize( mat3( modelMatrix ) * normal );
56
+ gl_Position = projectionMatrix * modelViewMatrix * instanceMatrix * vec4( position, 1.0 );
57
+
58
+ }
59
+
60
+ `,
61
+
62
+ fragmentShader: /* glsl */`
63
+
64
+ precision highp sampler3D;
65
+
66
+ uniform sampler3D probesSH;
67
+ uniform vec3 probesResolution;
68
+
69
+ varying vec3 vWorldNormal;
70
+ varying vec3 vUVW;
71
+
72
+ void main() {
73
+
74
+ // Atlas UV mapping — must match lightprobes_pars_fragment.glsl.js
75
+ float nz = probesResolution.z;
76
+ float paddedSlices = nz + 2.0;
77
+ float atlasDepth = 7.0 * paddedSlices;
78
+ float uvZBase = vUVW.z * nz + 1.0;
79
+
80
+ vec4 s0 = texture( probesSH, vec3( vUVW.xy, ( uvZBase ) / atlasDepth ) );
81
+ vec4 s1 = texture( probesSH, vec3( vUVW.xy, ( uvZBase + paddedSlices ) / atlasDepth ) );
82
+ vec4 s2 = texture( probesSH, vec3( vUVW.xy, ( uvZBase + 2.0 * paddedSlices ) / atlasDepth ) );
83
+ vec4 s3 = texture( probesSH, vec3( vUVW.xy, ( uvZBase + 3.0 * paddedSlices ) / atlasDepth ) );
84
+ vec4 s4 = texture( probesSH, vec3( vUVW.xy, ( uvZBase + 4.0 * paddedSlices ) / atlasDepth ) );
85
+ vec4 s5 = texture( probesSH, vec3( vUVW.xy, ( uvZBase + 5.0 * paddedSlices ) / atlasDepth ) );
86
+ vec4 s6 = texture( probesSH, vec3( vUVW.xy, ( uvZBase + 6.0 * paddedSlices ) / atlasDepth ) );
87
+
88
+ // Unpack 9 vec3 SH L2 coefficients
89
+
90
+ vec3 c0 = s0.xyz;
91
+ vec3 c1 = vec3( s0.w, s1.xy );
92
+ vec3 c2 = vec3( s1.zw, s2.x );
93
+ vec3 c3 = s2.yzw;
94
+ vec3 c4 = s3.xyz;
95
+ vec3 c5 = vec3( s3.w, s4.xy );
96
+ vec3 c6 = vec3( s4.zw, s5.x );
97
+ vec3 c7 = s5.yzw;
98
+ vec3 c8 = s6.xyz;
99
+
100
+ vec3 n = normalize( vWorldNormal );
101
+
102
+ float x = n.x, y = n.y, z = n.z;
103
+
104
+ // band 0
105
+ vec3 result = c0 * 0.886227;
106
+
107
+ // band 1,
108
+ result += c1 * 2.0 * 0.511664 * y;
109
+ result += c2 * 2.0 * 0.511664 * z;
110
+ result += c3 * 2.0 * 0.511664 * x;
111
+
112
+ // band 2,
113
+ result += c4 * 2.0 * 0.429043 * x * y;
114
+ result += c5 * 2.0 * 0.429043 * y * z;
115
+ result += c6 * ( 0.743125 * z * z - 0.247708 );
116
+ result += c7 * 2.0 * 0.429043 * x * z;
117
+ result += c8 * 0.429043 * ( x * x - y * y );
118
+
119
+ gl_FragColor = vec4( max( result, vec3( 0.0 ) ), 1.0 );
120
+
121
+ #include <tonemapping_fragment>
122
+ #include <colorspace_fragment>
123
+
124
+ }
125
+
126
+ `
127
+
128
+ } );
129
+
130
+ const res = probes.resolution;
131
+ const count = res.x * res.y * res.z;
132
+
133
+ super( geometry, material, count );
134
+
135
+ /**
136
+ * The probe grid to visualize.
137
+ *
138
+ * @type {LightProbeGrid}
139
+ */
140
+ this.probes = probes;
141
+
142
+ this.type = 'LightProbeGridHelper';
143
+
144
+ this.update();
145
+
146
+ }
147
+
148
+ /**
149
+ * Rebuilds instance matrices and UVW attributes from the current probe grid.
150
+ * Call this after changing `probes` or after re-baking.
151
+ */
152
+ update() {
153
+
154
+ const probes = this.probes;
155
+ const res = probes.resolution;
156
+ const count = res.x * res.y * res.z;
157
+
158
+ // Resize instance matrix buffer if needed
159
+
160
+ if ( this.instanceMatrix.count !== count ) {
161
+
162
+ this.instanceMatrix = new InstancedBufferAttribute( new Float32Array( count * 16 ), 16 );
163
+
164
+ }
165
+
166
+ this.count = count;
167
+
168
+ const uvwArray = new Float32Array( count * 3 );
169
+ const matrix = new Matrix4();
170
+ const probePos = new Vector3();
171
+
172
+ let i = 0;
173
+
174
+ for ( let iz = 0; iz < res.z; iz ++ ) {
175
+
176
+ for ( let iy = 0; iy < res.y; iy ++ ) {
177
+
178
+ for ( let ix = 0; ix < res.x; ix ++ ) {
179
+
180
+ // Remap to texel centers (must match lightprobes_pars_fragment.glsl.js)
181
+ uvwArray[ i * 3 ] = ( ix + 0.5 ) / res.x;
182
+ uvwArray[ i * 3 + 1 ] = ( iy + 0.5 ) / res.y;
183
+ uvwArray[ i * 3 + 2 ] = ( iz + 0.5 ) / res.z;
184
+
185
+ probes.getProbePosition( ix, iy, iz, probePos );
186
+ matrix.makeTranslation( probePos.x, probePos.y, probePos.z );
187
+ this.setMatrixAt( i, matrix );
188
+
189
+ i ++;
190
+
191
+ }
192
+
193
+ }
194
+
195
+ }
196
+
197
+ this.instanceMatrix.needsUpdate = true;
198
+
199
+ this.geometry.setAttribute( 'instanceUVW', new InstancedBufferAttribute( uvwArray, 3 ) );
200
+
201
+ // Update texture uniforms
202
+
203
+ this.material.uniforms.probesSH.value = probes.texture;
204
+ this.material.uniforms.probesResolution.value.copy( probes.resolution );
205
+
206
+ }
207
+
208
+ /**
209
+ * Frees the GPU-related resources allocated by this instance. Call this
210
+ * method whenever this instance is no longer used in your app.
211
+ */
212
+ dispose() {
213
+
214
+ this.geometry.dispose();
215
+ this.material.dispose();
216
+
217
+ }
218
+
219
+ }
220
+
221
+ export { LightProbeGridHelper };
@@ -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
 
@@ -65,6 +65,20 @@ class ViewHelper extends Object3D {
65
65
  */
66
66
  this.center = new Vector3();
67
67
 
68
+ /**
69
+ * Controls the position of the helper in the viewport.
70
+ * Use `top`/`bottom` for vertical positioning and `left`/`right` for horizontal.
71
+ * If `left` is `null`, `right` is used. If `top` is `null`, `bottom` is used.
72
+ *
73
+ * @type {{top: number|null, right: number, bottom: number, left: number|null}}
74
+ */
75
+ this.location = {
76
+ top: null,
77
+ right: 0,
78
+ bottom: 0,
79
+ left: null
80
+ };
81
+
68
82
  const color1 = new Color( '#ff4466' );
69
83
  const color2 = new Color( '#88ff44' );
70
84
  const color3 = new Color( '#4488ff' );
@@ -142,8 +156,8 @@ class ViewHelper extends Object3D {
142
156
  const turnRate = 2 * Math.PI; // turn rate in angles per second
143
157
 
144
158
  /**
145
- * Renders the helper in a separate view in the bottom-right corner
146
- * of the viewport.
159
+ * Renders the helper in a separate view in the viewport.
160
+ * Position is controlled by the `location` property.
147
161
  *
148
162
  * @param {WebGLRenderer|WebGPURenderer} renderer - The renderer.
149
163
  */
@@ -157,8 +171,31 @@ class ViewHelper extends Object3D {
157
171
 
158
172
  //
159
173
 
160
- const x = domElement.offsetWidth - dim;
161
- const y = renderer.isWebGPURenderer ? domElement.offsetHeight - dim : 0;
174
+ const location = this.location;
175
+
176
+ let x, y;
177
+
178
+ if ( location.left !== null ) {
179
+
180
+ x = location.left;
181
+
182
+ } else {
183
+
184
+ x = domElement.offsetWidth - dim - location.right;
185
+
186
+ }
187
+
188
+ if ( location.top !== null ) {
189
+
190
+ // Position from top
191
+ y = renderer.isWebGPURenderer ? location.top : domElement.offsetHeight - dim - location.top;
192
+
193
+ } else {
194
+
195
+ // Position from bottom
196
+ y = renderer.isWebGPURenderer ? domElement.offsetHeight - dim - location.bottom : location.bottom;
197
+
198
+ }
162
199
 
163
200
  renderer.clearDepth();
164
201
 
@@ -191,10 +228,32 @@ class ViewHelper extends Object3D {
191
228
  if ( this.animating === true ) return false;
192
229
 
193
230
  const rect = domElement.getBoundingClientRect();
194
- const offsetX = rect.left + ( domElement.offsetWidth - dim );
195
- const offsetY = rect.top + ( domElement.offsetHeight - dim );
196
- mouse.x = ( ( event.clientX - offsetX ) / ( rect.right - offsetX ) ) * 2 - 1;
197
- mouse.y = - ( ( event.clientY - offsetY ) / ( rect.bottom - offsetY ) ) * 2 + 1;
231
+ const location = this.location;
232
+
233
+ let offsetX, offsetY;
234
+
235
+ if ( location.left !== null ) {
236
+
237
+ offsetX = rect.left + location.left;
238
+
239
+ } else {
240
+
241
+ offsetX = rect.left + domElement.offsetWidth - dim - location.right;
242
+
243
+ }
244
+
245
+ if ( location.top !== null ) {
246
+
247
+ offsetY = rect.top + location.top;
248
+
249
+ } else {
250
+
251
+ offsetY = rect.top + domElement.offsetHeight - dim - location.bottom;
252
+
253
+ }
254
+
255
+ mouse.x = ( ( event.clientX - offsetX ) / dim ) * 2 - 1;
256
+ mouse.y = - ( ( event.clientY - offsetY ) / dim ) * 2 + 1;
198
257
 
199
258
  raycaster.setFromCamera( mouse, orthoCamera );
200
259
 
@@ -0,0 +1,13 @@
1
+ import { Tab } from 'three/addons/inspector/ui/Tab.js';
2
+
3
+ export class Extension extends Tab {
4
+
5
+ constructor( name, options = {} ) {
6
+
7
+ super( name, options );
8
+
9
+ this.isExtension = true;
10
+
11
+ }
12
+
13
+ }