super-three 0.179.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 (696) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +14522 -12207
  4. package/build/three.core.js +12005 -10954
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +2270 -1005
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +63 -18
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +16573 -7890
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +16533 -7888
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  15. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  16. package/examples/jsm/Addons.js +12 -4
  17. package/examples/jsm/animation/CCDIKSolver.js +8 -4
  18. package/examples/jsm/controls/ArcballControls.js +15 -12
  19. package/examples/jsm/controls/DragControls.js +9 -59
  20. package/examples/jsm/controls/FirstPersonControls.js +61 -57
  21. package/examples/jsm/controls/FlyControls.js +5 -1
  22. package/examples/jsm/controls/MapControls.js +55 -1
  23. package/examples/jsm/controls/OrbitControls.js +113 -10
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +9 -9
  26. package/examples/jsm/controls/TransformControls.js +35 -3
  27. package/examples/jsm/csm/CSM.js +2 -1
  28. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  29. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  30. package/examples/jsm/effects/AsciiEffect.js +8 -8
  31. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  32. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  33. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  34. package/examples/jsm/exporters/EXRExporter.js +2 -2
  35. package/examples/jsm/exporters/GLTFExporter.js +185 -34
  36. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  37. package/examples/jsm/exporters/PLYExporter.js +1 -1
  38. package/examples/jsm/exporters/USDZExporter.js +31 -5
  39. package/examples/jsm/geometries/DecalGeometry.js +3 -3
  40. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  41. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  42. package/examples/jsm/geometries/TextGeometry.js +21 -2
  43. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  44. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  45. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  46. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  47. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  48. package/examples/jsm/helpers/ViewHelper.js +110 -13
  49. package/examples/jsm/inspector/Extension.js +13 -0
  50. package/examples/jsm/inspector/Inspector.js +542 -0
  51. package/examples/jsm/inspector/RendererInspector.js +425 -0
  52. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  53. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  54. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  55. package/examples/jsm/inspector/tabs/Console.js +238 -0
  56. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  57. package/examples/jsm/inspector/tabs/Parameters.js +380 -0
  58. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  59. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  60. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  61. package/examples/jsm/inspector/tabs/Viewer.js +268 -0
  62. package/examples/jsm/inspector/ui/Graph.js +95 -0
  63. package/examples/jsm/inspector/ui/Item.js +170 -0
  64. package/examples/jsm/inspector/ui/List.js +75 -0
  65. package/examples/jsm/inspector/ui/Profiler.js +2072 -0
  66. package/examples/jsm/inspector/ui/Style.js +1667 -0
  67. package/examples/jsm/inspector/ui/Tab.js +265 -0
  68. package/examples/jsm/inspector/ui/Values.js +476 -0
  69. package/examples/jsm/inspector/ui/utils.js +69 -0
  70. package/examples/jsm/interaction/InteractionManager.js +226 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +6 -10
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  73. package/examples/jsm/interactive/SelectionBox.js +30 -0
  74. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  75. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  76. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  77. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  79. package/examples/jsm/lines/Line2.js +3 -3
  80. package/examples/jsm/lines/LineGeometry.js +1 -1
  81. package/examples/jsm/lines/LineMaterial.js +7 -1
  82. package/examples/jsm/lines/LineSegments2.js +2 -2
  83. package/examples/jsm/lines/Wireframe.js +2 -2
  84. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  85. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  86. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  87. package/examples/jsm/loaders/3DMLoader.js +5 -4
  88. package/examples/jsm/loaders/3MFLoader.js +3 -3
  89. package/examples/jsm/loaders/AMFLoader.js +2 -2
  90. package/examples/jsm/loaders/ColladaLoader.js +27 -4029
  91. package/examples/jsm/loaders/DDSLoader.js +1 -1
  92. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  93. package/examples/jsm/loaders/EXRLoader.js +692 -53
  94. package/examples/jsm/loaders/FBXLoader.js +237 -39
  95. package/examples/jsm/loaders/FontLoader.js +23 -5
  96. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  97. package/examples/jsm/loaders/GLTFLoader.js +159 -185
  98. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  99. package/examples/jsm/loaders/HDRLoader.js +485 -0
  100. package/examples/jsm/loaders/KMZLoader.js +5 -5
  101. package/examples/jsm/loaders/KTX2Loader.js +162 -53
  102. package/examples/jsm/loaders/KTXLoader.js +2 -2
  103. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  104. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  105. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  106. package/examples/jsm/loaders/LWOLoader.js +9 -41
  107. package/examples/jsm/loaders/MaterialXLoader.js +22 -5
  108. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  109. package/examples/jsm/loaders/OBJLoader.js +1 -1
  110. package/examples/jsm/loaders/PCDLoader.js +4 -2
  111. package/examples/jsm/loaders/PDBLoader.js +1 -1
  112. package/examples/jsm/loaders/RGBELoader.js +7 -473
  113. package/examples/jsm/loaders/SVGLoader.js +4 -4
  114. package/examples/jsm/loaders/TDSLoader.js +0 -2
  115. package/examples/jsm/loaders/TGALoader.js +0 -2
  116. package/examples/jsm/loaders/TTFLoader.js +4 -4
  117. package/examples/jsm/loaders/USDLoader.js +100 -40
  118. package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
  119. package/examples/jsm/loaders/VOXLoader.js +660 -117
  120. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  121. package/examples/jsm/loaders/VTKLoader.js +42 -25
  122. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  123. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  124. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  125. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  126. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  127. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  128. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  129. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  130. package/examples/jsm/math/ColorSpaces.js +19 -1
  131. package/examples/jsm/math/ConvexHull.js +3 -3
  132. package/examples/jsm/math/ImprovedNoise.js +1 -1
  133. package/examples/jsm/math/Lut.js +2 -2
  134. package/examples/jsm/math/Octree.js +131 -1
  135. package/examples/jsm/math/SimplexNoise.js +1 -1
  136. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  137. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  138. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  139. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  140. package/examples/jsm/misc/RollerCoaster.js +42 -4
  141. package/examples/jsm/misc/TubePainter.js +383 -40
  142. package/examples/jsm/misc/Volume.js +1 -2
  143. package/examples/jsm/misc/VolumeSlice.js +0 -1
  144. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  145. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  146. package/examples/jsm/objects/LensflareMesh.js +1 -1
  147. package/examples/jsm/objects/Reflector.js +73 -25
  148. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  149. package/examples/jsm/objects/Sky.js +91 -7
  150. package/examples/jsm/objects/SkyMesh.js +151 -17
  151. package/examples/jsm/objects/Water.js +7 -6
  152. package/examples/jsm/objects/Water2.js +5 -3
  153. package/examples/jsm/objects/WaterMesh.js +11 -13
  154. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  155. package/examples/jsm/physics/JoltPhysics.js +10 -6
  156. package/examples/jsm/physics/RapierPhysics.js +9 -5
  157. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  158. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  159. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  160. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  161. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  162. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  163. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  164. package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
  165. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  166. package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
  167. package/examples/jsm/renderers/Projector.js +246 -28
  168. package/examples/jsm/renderers/SVGRenderer.js +175 -61
  169. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  170. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  171. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  172. package/examples/jsm/shaders/BokehShader.js +1 -1
  173. package/examples/jsm/shaders/BokehShader2.js +1 -1
  174. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  175. package/examples/jsm/shaders/FocusShader.js +1 -1
  176. package/examples/jsm/shaders/GTAOShader.js +21 -8
  177. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  178. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  179. package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
  180. package/examples/jsm/shaders/SAOShader.js +17 -4
  181. package/examples/jsm/shaders/SSAOShader.js +11 -1
  182. package/examples/jsm/shaders/SSRShader.js +7 -6
  183. package/examples/jsm/shaders/SepiaShader.js +1 -1
  184. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  185. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  186. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
  187. package/examples/jsm/shaders/VignetteShader.js +1 -1
  188. package/examples/jsm/transpiler/AST.js +44 -0
  189. package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
  190. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  191. package/examples/jsm/transpiler/TSLEncoder.js +52 -10
  192. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  193. package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
  194. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  195. package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
  196. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  197. package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
  198. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  199. package/examples/jsm/tsl/display/BloomNode.js +23 -9
  200. package/examples/jsm/tsl/display/CRT.js +150 -0
  201. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
  202. package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
  203. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  204. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  205. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  206. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  207. package/examples/jsm/tsl/display/GTAONode.js +59 -9
  208. package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
  209. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  210. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  211. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  212. package/examples/jsm/tsl/display/OutlineNode.js +81 -20
  213. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  214. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  215. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  216. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  217. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  218. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  219. package/examples/jsm/tsl/display/SSGINode.js +638 -0
  220. package/examples/jsm/tsl/display/SSRNode.js +186 -69
  221. package/examples/jsm/tsl/display/SSSNode.js +490 -0
  222. package/examples/jsm/tsl/display/Shape.js +29 -0
  223. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  224. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  225. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  226. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  227. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  228. package/examples/jsm/tsl/display/TRAANode.js +381 -75
  229. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  230. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  231. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  232. package/examples/jsm/tsl/display/hashBlur.js +16 -18
  233. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  234. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  235. package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
  236. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  237. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  238. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  239. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  240. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  241. package/examples/jsm/tsl/math/Bayer.js +53 -3
  242. package/examples/jsm/utils/BufferGeometryUtils.js +3 -4
  243. package/examples/jsm/utils/ColorUtils.js +76 -0
  244. package/examples/jsm/utils/LDrawUtils.js +1 -1
  245. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  246. package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
  247. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  248. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  249. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  250. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  251. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  252. package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
  253. package/package.json +27 -38
  254. package/src/Three.Core.js +7 -3
  255. package/src/Three.TSL.js +61 -16
  256. package/src/Three.WebGPU.Nodes.js +7 -0
  257. package/src/Three.WebGPU.js +11 -0
  258. package/src/Three.js +1 -0
  259. package/src/animation/AnimationAction.js +12 -2
  260. package/src/animation/AnimationClip.js +21 -5
  261. package/src/animation/AnimationMixer.js +9 -3
  262. package/src/animation/AnimationObjectGroup.js +2 -1
  263. package/src/animation/AnimationUtils.js +1 -12
  264. package/src/animation/KeyframeTrack.js +54 -14
  265. package/src/animation/PropertyBinding.js +12 -11
  266. package/src/animation/PropertyMixer.js +4 -4
  267. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  268. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  269. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  270. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  271. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  272. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  273. package/src/audio/Audio.js +11 -10
  274. package/src/audio/AudioContext.js +2 -2
  275. package/src/audio/AudioListener.js +5 -3
  276. package/src/audio/PositionalAudio.js +1 -1
  277. package/src/cameras/Camera.js +32 -2
  278. package/src/cameras/CubeCamera.js +20 -0
  279. package/src/cameras/OrthographicCamera.js +1 -1
  280. package/src/cameras/PerspectiveCamera.js +1 -1
  281. package/src/cameras/StereoCamera.js +2 -2
  282. package/src/constants.js +100 -7
  283. package/src/core/BufferAttribute.js +13 -1
  284. package/src/core/BufferGeometry.js +24 -12
  285. package/src/core/Clock.js +7 -0
  286. package/src/core/EventDispatcher.js +1 -1
  287. package/src/core/InterleavedBuffer.js +1 -1
  288. package/src/core/InterleavedBufferAttribute.js +3 -2
  289. package/src/core/Object3D.js +55 -6
  290. package/src/core/Raycaster.js +4 -3
  291. package/src/core/RenderTarget.js +14 -5
  292. package/src/extras/Controls.js +5 -4
  293. package/src/extras/DataUtils.js +2 -1
  294. package/src/extras/Earcut.js +6 -0
  295. package/src/extras/ImageUtils.js +2 -2
  296. package/src/extras/PMREMGenerator.js +259 -57
  297. package/src/extras/TextureUtils.js +6 -1
  298. package/src/extras/core/Curve.js +2 -1
  299. package/src/extras/core/Interpolations.js +7 -1
  300. package/src/extras/core/ShapePath.js +4 -4
  301. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  302. package/src/extras/lib/earcut.js +8 -8
  303. package/src/geometries/BoxGeometry.js +1 -0
  304. package/src/geometries/CapsuleGeometry.js +1 -0
  305. package/src/geometries/CircleGeometry.js +1 -0
  306. package/src/geometries/ConeGeometry.js +1 -0
  307. package/src/geometries/CylinderGeometry.js +1 -0
  308. package/src/geometries/DodecahedronGeometry.js +1 -0
  309. package/src/geometries/ExtrudeGeometry.js +10 -8
  310. package/src/geometries/IcosahedronGeometry.js +1 -0
  311. package/src/geometries/LatheGeometry.js +1 -0
  312. package/src/geometries/OctahedronGeometry.js +1 -0
  313. package/src/geometries/PlaneGeometry.js +1 -0
  314. package/src/geometries/PolyhedronGeometry.js +1 -1
  315. package/src/geometries/RingGeometry.js +1 -0
  316. package/src/geometries/ShapeGeometry.js +1 -0
  317. package/src/geometries/SphereGeometry.js +1 -0
  318. package/src/geometries/TetrahedronGeometry.js +1 -0
  319. package/src/geometries/TorusGeometry.js +9 -3
  320. package/src/geometries/TorusKnotGeometry.js +1 -0
  321. package/src/geometries/TubeGeometry.js +1 -0
  322. package/src/helpers/CameraHelper.js +4 -1
  323. package/src/helpers/DirectionalLightHelper.js +4 -1
  324. package/src/helpers/HemisphereLightHelper.js +3 -0
  325. package/src/helpers/PointLightHelper.js +1 -25
  326. package/src/helpers/SpotLightHelper.js +3 -0
  327. package/src/lights/DirectionalLight.js +13 -0
  328. package/src/lights/HemisphereLight.js +10 -0
  329. package/src/lights/Light.js +1 -11
  330. package/src/lights/LightProbe.js +0 -15
  331. package/src/lights/LightShadow.js +15 -6
  332. package/src/lights/PointLight.js +15 -0
  333. package/src/lights/PointLightShadow.js +0 -86
  334. package/src/lights/SpotLight.js +22 -1
  335. package/src/lights/webgpu/IESSpotLight.js +2 -1
  336. package/src/lights/webgpu/ProjectorLight.js +1 -1
  337. package/src/loaders/AnimationLoader.js +2 -1
  338. package/src/loaders/AudioLoader.js +13 -2
  339. package/src/loaders/BufferGeometryLoader.js +2 -2
  340. package/src/loaders/Cache.js +30 -2
  341. package/src/loaders/DataTextureLoader.js +6 -4
  342. package/src/loaders/FileLoader.js +4 -4
  343. package/src/loaders/ImageBitmapLoader.js +17 -13
  344. package/src/loaders/ImageLoader.js +1 -1
  345. package/src/loaders/Loader.js +9 -3
  346. package/src/loaders/LoadingManager.js +25 -3
  347. package/src/loaders/MaterialLoader.js +6 -4
  348. package/src/loaders/ObjectLoader.js +57 -17
  349. package/src/loaders/TextureLoader.js +1 -1
  350. package/src/loaders/nodes/NodeLoader.js +5 -4
  351. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  352. package/src/materials/Material.js +18 -3
  353. package/src/materials/MeshBasicMaterial.js +1 -0
  354. package/src/materials/MeshDepthMaterial.js +1 -0
  355. package/src/materials/MeshDistanceMaterial.js +1 -1
  356. package/src/materials/MeshLambertMaterial.js +11 -1
  357. package/src/materials/MeshMatcapMaterial.js +22 -0
  358. package/src/materials/MeshNormalMaterial.js +1 -0
  359. package/src/materials/MeshPhongMaterial.js +11 -1
  360. package/src/materials/MeshPhysicalMaterial.js +2 -1
  361. package/src/materials/MeshStandardMaterial.js +8 -7
  362. package/src/materials/MeshToonMaterial.js +2 -1
  363. package/src/materials/PointsMaterial.js +1 -1
  364. package/src/materials/ShaderMaterial.js +22 -3
  365. package/src/materials/nodes/Line2NodeMaterial.js +36 -9
  366. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  367. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  368. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  369. package/src/materials/nodes/NodeMaterial.js +95 -35
  370. package/src/materials/nodes/PointsNodeMaterial.js +81 -28
  371. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  372. package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
  373. package/src/math/Color.js +6 -5
  374. package/src/math/ColorManagement.js +9 -3
  375. package/src/math/Cylindrical.js +1 -1
  376. package/src/math/Euler.js +2 -1
  377. package/src/math/Line3.js +6 -5
  378. package/src/math/MathUtils.js +23 -21
  379. package/src/math/Matrix2.js +14 -10
  380. package/src/math/Matrix3.js +15 -11
  381. package/src/math/Matrix4.js +94 -81
  382. package/src/math/Plane.js +5 -4
  383. package/src/math/Quaternion.js +60 -84
  384. package/src/math/Sphere.js +1 -1
  385. package/src/math/Spherical.js +1 -1
  386. package/src/math/Triangle.js +1 -1
  387. package/src/math/Vector2.js +11 -7
  388. package/src/math/Vector3.js +15 -13
  389. package/src/math/Vector4.js +13 -9
  390. package/src/math/interpolants/BezierInterpolant.js +108 -0
  391. package/src/nodes/Nodes.js +86 -65
  392. package/src/nodes/TSL.js +11 -8
  393. package/src/nodes/accessors/Arrays.js +1 -1
  394. package/src/nodes/accessors/BatchNode.js +10 -10
  395. package/src/nodes/accessors/Bitangent.js +5 -5
  396. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  397. package/src/nodes/accessors/BufferNode.js +30 -3
  398. package/src/nodes/accessors/Camera.js +260 -13
  399. package/src/nodes/accessors/ClippingNode.js +10 -9
  400. package/src/nodes/accessors/CubeTextureNode.js +32 -6
  401. package/src/nodes/accessors/InstanceNode.js +164 -39
  402. package/src/nodes/accessors/Lights.js +10 -0
  403. package/src/nodes/accessors/MaterialNode.js +9 -1
  404. package/src/nodes/accessors/MaterialProperties.js +2 -5
  405. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  406. package/src/nodes/accessors/ModelNode.js +1 -1
  407. package/src/nodes/accessors/Normal.js +16 -15
  408. package/src/nodes/accessors/Object3DNode.js +2 -2
  409. package/src/nodes/accessors/Position.js +51 -3
  410. package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
  411. package/src/nodes/accessors/ReferenceNode.js +11 -10
  412. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  413. package/src/nodes/accessors/SceneProperties.js +47 -0
  414. package/src/nodes/accessors/SkinningNode.js +27 -26
  415. package/src/nodes/accessors/StorageBufferNode.js +14 -24
  416. package/src/nodes/accessors/StorageTextureNode.js +62 -9
  417. package/src/nodes/accessors/Tangent.js +4 -14
  418. package/src/nodes/accessors/Texture3DNode.js +41 -31
  419. package/src/nodes/accessors/TextureNode.js +193 -63
  420. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  421. package/src/nodes/accessors/UserDataNode.js +1 -2
  422. package/src/nodes/accessors/VertexColorNode.js +1 -2
  423. package/src/nodes/code/FunctionCallNode.js +25 -5
  424. package/src/nodes/code/FunctionNode.js +25 -3
  425. package/src/nodes/core/ArrayNode.js +22 -2
  426. package/src/nodes/core/AssignNode.js +6 -5
  427. package/src/nodes/core/AttributeNode.js +5 -4
  428. package/src/nodes/core/BypassNode.js +1 -1
  429. package/src/nodes/core/ContextNode.js +133 -15
  430. package/src/nodes/core/IndexNode.js +4 -3
  431. package/src/nodes/core/InputNode.js +3 -2
  432. package/src/nodes/core/InspectorNode.js +128 -0
  433. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
  434. package/src/nodes/core/MRTNode.js +48 -2
  435. package/src/nodes/core/Node.js +264 -46
  436. package/src/nodes/core/NodeBuilder.js +453 -87
  437. package/src/nodes/core/NodeError.js +28 -0
  438. package/src/nodes/core/NodeFrame.js +31 -23
  439. package/src/nodes/core/NodeFunction.js +2 -1
  440. package/src/nodes/core/NodeParser.js +2 -1
  441. package/src/nodes/core/NodeUniform.js +1 -1
  442. package/src/nodes/core/NodeUtils.js +25 -97
  443. package/src/nodes/core/OutputStructNode.js +12 -10
  444. package/src/nodes/core/ParameterNode.js +34 -3
  445. package/src/nodes/core/PropertyNode.js +26 -3
  446. package/src/nodes/core/StackNode.js +99 -23
  447. package/src/nodes/core/StackTrace.js +139 -0
  448. package/src/nodes/core/StructNode.js +22 -8
  449. package/src/nodes/core/StructTypeNode.js +13 -18
  450. package/src/nodes/core/SubBuildNode.js +4 -4
  451. package/src/nodes/core/UniformGroupNode.js +36 -6
  452. package/src/nodes/core/UniformNode.js +37 -13
  453. package/src/nodes/core/VarNode.js +96 -34
  454. package/src/nodes/core/VaryingNode.js +2 -18
  455. package/src/nodes/display/BlendModes.js +0 -63
  456. package/src/nodes/display/BumpMapNode.js +1 -1
  457. package/src/nodes/display/ColorAdjustment.js +18 -1
  458. package/src/nodes/display/ColorSpaceNode.js +3 -3
  459. package/src/nodes/display/FrontFacingNode.js +4 -8
  460. package/src/nodes/display/NormalMapNode.js +41 -5
  461. package/src/nodes/display/PassNode.js +175 -25
  462. package/src/nodes/display/RenderOutputNode.js +35 -9
  463. package/src/nodes/display/ScreenNode.js +47 -15
  464. package/src/nodes/display/ToneMappingNode.js +32 -5
  465. package/src/nodes/display/ToonOutlinePassNode.js +10 -2
  466. package/src/nodes/display/ViewportDepthNode.js +52 -4
  467. package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
  468. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  469. package/src/nodes/display/ViewportTextureNode.js +72 -14
  470. package/src/nodes/fog/Fog.js +18 -34
  471. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  472. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  473. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  474. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  475. package/src/nodes/functions/BasicLightingModel.js +2 -1
  476. package/src/nodes/functions/PhysicalLightingModel.js +128 -46
  477. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  478. package/src/nodes/geometry/RangeNode.js +44 -6
  479. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  480. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  481. package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
  482. package/src/nodes/gpgpu/ComputeNode.js +76 -38
  483. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  484. package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
  485. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  486. package/src/nodes/lighting/EnvironmentNode.js +34 -9
  487. package/src/nodes/lighting/LightsNode.js +10 -32
  488. package/src/nodes/lighting/PointShadowNode.js +167 -148
  489. package/src/nodes/lighting/ShadowFilterNode.js +55 -65
  490. package/src/nodes/lighting/ShadowNode.js +189 -44
  491. package/src/nodes/math/BitcastNode.js +156 -0
  492. package/src/nodes/math/BitcountNode.js +433 -0
  493. package/src/nodes/math/ConditionalNode.js +25 -8
  494. package/src/nodes/math/MathNode.js +98 -57
  495. package/src/nodes/math/OperatorNode.js +8 -5
  496. package/src/nodes/math/PackFloatNode.js +98 -0
  497. package/src/nodes/math/UnpackFloatNode.js +96 -0
  498. package/src/nodes/pmrem/PMREMNode.js +1 -1
  499. package/src/nodes/pmrem/PMREMUtils.js +111 -2
  500. package/src/nodes/shapes/Shapes.js +1 -1
  501. package/src/nodes/tsl/TSLBase.js +6 -3
  502. package/src/nodes/tsl/TSLCore.js +488 -166
  503. package/src/nodes/utils/ArrayElementNode.js +14 -1
  504. package/src/nodes/utils/ConvertNode.js +1 -1
  505. package/src/nodes/utils/DebugNode.js +14 -13
  506. package/src/nodes/utils/EventNode.js +67 -2
  507. package/src/nodes/utils/FlipNode.js +1 -1
  508. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  509. package/src/nodes/utils/JoinNode.js +7 -4
  510. package/src/nodes/utils/LoopNode.js +20 -24
  511. package/src/nodes/utils/MemberNode.js +60 -8
  512. package/src/nodes/utils/Packing.js +13 -1
  513. package/src/nodes/utils/PostProcessingUtils.js +60 -1
  514. package/src/nodes/utils/RTTNode.js +14 -4
  515. package/src/nodes/utils/ReflectorNode.js +61 -11
  516. package/src/nodes/utils/Remap.js +48 -0
  517. package/src/nodes/utils/RotateNode.js +1 -1
  518. package/src/nodes/utils/SampleNode.js +12 -2
  519. package/src/nodes/utils/SetNode.js +1 -1
  520. package/src/nodes/utils/SplitNode.js +12 -1
  521. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  522. package/src/nodes/utils/Timer.js +0 -47
  523. package/src/nodes/utils/UVUtils.js +28 -0
  524. package/src/objects/BatchedMesh.js +46 -18
  525. package/src/objects/InstancedMesh.js +30 -3
  526. package/src/objects/LOD.js +1 -1
  527. package/src/objects/Line.js +3 -2
  528. package/src/objects/LineSegments.js +2 -1
  529. package/src/objects/Mesh.js +1 -1
  530. package/src/objects/Points.js +1 -1
  531. package/src/objects/Skeleton.js +12 -2
  532. package/src/objects/SkinnedMesh.js +29 -10
  533. package/src/objects/Sprite.js +4 -3
  534. package/src/renderers/WebGLRenderer.js +372 -179
  535. package/src/renderers/common/Animation.js +16 -4
  536. package/src/renderers/common/Attributes.js +16 -2
  537. package/src/renderers/common/Backend.js +137 -35
  538. package/src/renderers/common/Background.js +28 -14
  539. package/src/renderers/common/BindGroup.js +1 -16
  540. package/src/renderers/common/Binding.js +11 -0
  541. package/src/renderers/common/Bindings.js +83 -12
  542. package/src/renderers/common/BlendMode.js +143 -0
  543. package/src/renderers/common/Buffer.js +40 -0
  544. package/src/renderers/common/BundleGroup.js +1 -1
  545. package/src/renderers/common/CanvasTarget.js +341 -0
  546. package/src/renderers/common/ChainMap.js +30 -6
  547. package/src/renderers/common/ComputePipeline.js +1 -1
  548. package/src/renderers/common/CubeRenderTarget.js +51 -7
  549. package/src/renderers/common/DataMap.js +1 -1
  550. package/src/renderers/common/Geometries.js +55 -3
  551. package/src/renderers/common/Info.js +337 -6
  552. package/src/renderers/common/InspectorBase.js +151 -0
  553. package/src/renderers/common/Lighting.js +5 -21
  554. package/src/renderers/common/Pipelines.js +41 -8
  555. package/src/renderers/common/PostProcessing.js +9 -226
  556. package/src/renderers/common/QuadMesh.js +7 -1
  557. package/src/renderers/common/ReadbackBuffer.js +78 -0
  558. package/src/renderers/common/RenderBundle.js +3 -1
  559. package/src/renderers/common/RenderBundles.js +7 -3
  560. package/src/renderers/common/RenderContext.js +18 -2
  561. package/src/renderers/common/RenderContexts.js +33 -49
  562. package/src/renderers/common/RenderList.js +7 -3
  563. package/src/renderers/common/RenderLists.js +2 -1
  564. package/src/renderers/common/RenderObject.js +32 -6
  565. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  566. package/src/renderers/common/RenderObjects.js +22 -6
  567. package/src/renderers/common/RenderPipeline.js +232 -17
  568. package/src/renderers/common/Renderer.js +927 -335
  569. package/src/renderers/common/RendererUtils.js +9 -0
  570. package/src/renderers/common/SampledTexture.js +9 -1
  571. package/src/renderers/common/Sampler.js +52 -14
  572. package/src/renderers/common/StorageBuffer.js +13 -1
  573. package/src/renderers/common/StorageTexture.js +9 -1
  574. package/src/renderers/common/Textures.js +208 -47
  575. package/src/renderers/common/TimestampQueryPool.js +70 -6
  576. package/src/renderers/common/Uniform.js +8 -0
  577. package/src/renderers/common/UniformsGroup.js +64 -2
  578. package/src/renderers/common/XRManager.js +79 -51
  579. package/src/renderers/common/extras/PMREMGenerator.js +176 -79
  580. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  581. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  582. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
  583. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  584. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  585. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  586. package/src/renderers/shaders/DFGLUTData.js +49 -0
  587. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  588. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  589. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  590. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  591. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  592. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  593. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
  594. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  595. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  596. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  597. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  598. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  599. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  600. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  601. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  602. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -59
  603. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  604. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  605. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  606. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  607. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  608. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  609. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  610. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +221 -190
  611. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  612. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  613. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  614. package/src/renderers/shaders/ShaderChunk.js +5 -3
  615. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  616. package/src/renderers/shaders/ShaderLib/depth.glsl.js +4 -1
  617. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  618. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  619. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  620. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  621. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  622. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  623. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  624. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  625. package/src/renderers/shaders/ShaderLib.js +7 -6
  626. package/src/renderers/shaders/UniformsLib.js +8 -5
  627. package/src/renderers/shaders/UniformsUtils.js +52 -9
  628. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  629. package/src/renderers/webgl/WebGLBackground.js +15 -15
  630. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  631. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  632. package/src/renderers/webgl/WebGLCapabilities.js +11 -5
  633. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  634. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  635. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  636. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  637. package/src/renderers/webgl/WebGLInfo.js +3 -1
  638. package/src/renderers/webgl/WebGLLights.js +18 -1
  639. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  640. package/src/renderers/webgl/WebGLObjects.js +3 -1
  641. package/src/renderers/webgl/WebGLOutput.js +270 -0
  642. package/src/renderers/webgl/WebGLProgram.js +63 -122
  643. package/src/renderers/webgl/WebGLPrograms.js +65 -52
  644. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  645. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  646. package/src/renderers/webgl/WebGLShadowMap.js +191 -26
  647. package/src/renderers/webgl/WebGLState.js +79 -40
  648. package/src/renderers/webgl/WebGLTextures.js +234 -68
  649. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  650. package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
  651. package/src/renderers/webgl/WebGLUtils.js +8 -3
  652. package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
  653. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  654. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
  655. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  656. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  657. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  658. package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
  659. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
  660. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
  661. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
  662. package/src/renderers/webgpu/WebGPUBackend.js +403 -253
  663. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  664. package/src/renderers/webgpu/WebGPURenderer.js +5 -3
  665. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
  666. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
  667. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
  668. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  669. package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
  670. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
  671. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
  672. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
  673. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
  674. package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
  675. package/src/renderers/webxr/WebXRController.js +12 -0
  676. package/src/renderers/webxr/WebXRManager.js +45 -29
  677. package/src/textures/CubeDepthTexture.js +76 -0
  678. package/src/textures/ExternalTexture.js +15 -4
  679. package/src/textures/HTMLTexture.js +74 -0
  680. package/src/textures/Source.js +5 -4
  681. package/src/textures/Texture.js +19 -7
  682. package/src/textures/VideoTexture.js +2 -3
  683. package/src/utils.js +344 -3
  684. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  685. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  686. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  687. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  688. package/src/nodes/accessors/SceneNode.js +0 -144
  689. package/src/nodes/code/ScriptableNode.js +0 -726
  690. package/src/nodes/code/ScriptableValueNode.js +0 -253
  691. package/src/nodes/display/PosterizeNode.js +0 -65
  692. package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
  693. package/src/nodes/utils/RemapNode.js +0 -125
  694. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  695. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  696. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -202,8 +202,8 @@ class RTTNode extends TextureNode {
202
202
  const pixelRatio = renderer.getPixelRatio();
203
203
  const size = renderer.getSize( _size );
204
204
 
205
- const effectiveWidth = size.width * pixelRatio;
206
- const effectiveHeight = size.height * pixelRatio;
205
+ const effectiveWidth = Math.floor( size.width * pixelRatio );
206
+ const effectiveHeight = Math.floor( size.height * pixelRatio );
207
207
 
208
208
  if ( effectiveWidth !== this.renderTarget.width || effectiveHeight !== this.renderTarget.height ) {
209
209
 
@@ -217,7 +217,17 @@ class RTTNode extends TextureNode {
217
217
 
218
218
  //
219
219
 
220
+ let name = 'RTT';
221
+
222
+ if ( this.node.name ) {
223
+
224
+ name = this.node.name + ' [ ' + name + ' ]';
225
+
226
+ }
227
+
228
+
220
229
  this._quadMesh.material.fragmentNode = this._rttNode;
230
+ this._quadMesh.name = name;
221
231
 
222
232
  //
223
233
 
@@ -256,7 +266,7 @@ export default RTTNode;
256
266
  * @param {Object} [options={type:HalfFloatType}] - The options for the internal render target.
257
267
  * @returns {RTTNode}
258
268
  */
259
- export const rtt = ( node, ...params ) => nodeObject( new RTTNode( nodeObject( node ), ...params ) );
269
+ export const rtt = ( node, ...params ) => new RTTNode( nodeObject( node ), ...params );
260
270
 
261
271
  /**
262
272
  * TSL function for converting nodes to textures nodes.
@@ -271,7 +281,7 @@ export const rtt = ( node, ...params ) => nodeObject( new RTTNode( nodeObject( n
271
281
  */
272
282
  export const convertToTexture = ( node, ...params ) => {
273
283
 
274
- if ( node.isTextureNode ) return node;
284
+ if ( node.isSampleNode || node.isTextureNode ) return node;
275
285
  if ( node.isPassNode ) return node.getTextureNode();
276
286
 
277
287
  return rtt( node, ...params );
@@ -1,6 +1,5 @@
1
1
  import Node from '../core/Node.js';
2
2
  import TextureNode from '../accessors/TextureNode.js';
3
- import { nodeObject } from '../tsl/TSLBase.js';
4
3
  import { NodeUpdateType } from '../core/constants.js';
5
4
  import { screenUV } from '../display/ScreenNode.js';
6
5
 
@@ -13,6 +12,7 @@ import { Vector4 } from '../../math/Vector4.js';
13
12
  import { Matrix4 } from '../../math/Matrix4.js';
14
13
  import { RenderTarget } from '../../core/RenderTarget.js';
15
14
  import { DepthTexture } from '../../textures/DepthTexture.js';
15
+ import { warnOnce } from '../../utils.js';
16
16
 
17
17
  const _reflectorPlane = new Plane();
18
18
  const _normal = new Vector3();
@@ -61,10 +61,11 @@ class ReflectorNode extends TextureNode {
61
61
  *
62
62
  * @param {Object} [parameters={}] - An object holding configuration parameters.
63
63
  * @param {Object3D} [parameters.target=new Object3D()] - The 3D object the reflector is linked to.
64
- * @param {number} [parameters.resolution=1] - The resolution scale.
64
+ * @param {number} [parameters.resolutionScale=1] - The resolution scale.
65
65
  * @param {boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.
66
66
  * @param {boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.
67
67
  * @param {boolean} [parameters.depth=false] - Whether depth data should be generated or not.
68
+ * @param {number} [parameters.samples] - Anti-Aliasing samples of the internal render-target.
68
69
  * @param {TextureNode} [parameters.defaultTexture] - The default texture node.
69
70
  * @param {ReflectorBaseNode} [parameters.reflector] - The reflector base node.
70
71
  */
@@ -132,10 +133,10 @@ class ReflectorNode extends TextureNode {
132
133
 
133
134
  }
134
135
 
135
- this._depthNode = nodeObject( new ReflectorNode( {
136
+ this._depthNode = new ReflectorNode( {
136
137
  defaultTexture: _defaultRT.depthTexture,
137
138
  reflector: this._reflectorBaseNode
138
- } ) );
139
+ } );
139
140
 
140
141
  }
141
142
 
@@ -162,6 +163,7 @@ class ReflectorNode extends TextureNode {
162
163
  newNode.depthNode = this.depthNode;
163
164
  newNode.compareNode = this.compareNode;
164
165
  newNode.gradNode = this.gradNode;
166
+ newNode.offsetNode = this.offsetNode;
165
167
  newNode._reflectorBaseNode = this._reflectorBaseNode;
166
168
 
167
169
  return newNode;
@@ -204,10 +206,11 @@ class ReflectorBaseNode extends Node {
204
206
  * @param {TextureNode} textureNode - Represents the rendered reflections as a texture node.
205
207
  * @param {Object} [parameters={}] - An object holding configuration parameters.
206
208
  * @param {Object3D} [parameters.target=new Object3D()] - The 3D object the reflector is linked to.
207
- * @param {number} [parameters.resolution=1] - The resolution scale.
209
+ * @param {number} [parameters.resolutionScale=1] - The resolution scale.
208
210
  * @param {boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.
209
211
  * @param {boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.
210
212
  * @param {boolean} [parameters.depth=false] - Whether depth data should be generated or not.
213
+ * @param {number} [parameters.samples] - Anti-Aliasing samples of the internal render-target.
211
214
  */
212
215
  constructor( textureNode, parameters = {} ) {
213
216
 
@@ -215,10 +218,11 @@ class ReflectorBaseNode extends Node {
215
218
 
216
219
  const {
217
220
  target = new Object3D(),
218
- resolution = 1,
221
+ resolutionScale = 1,
219
222
  generateMipmaps = false,
220
223
  bounces = true,
221
- depth = false
224
+ depth = false,
225
+ samples = 0
222
226
  } = parameters;
223
227
 
224
228
  /**
@@ -242,7 +246,15 @@ class ReflectorBaseNode extends Node {
242
246
  * @type {number}
243
247
  * @default {1}
244
248
  */
245
- this.resolution = resolution;
249
+ this.resolutionScale = resolutionScale;
250
+
251
+ if ( parameters.resolution !== undefined ) {
252
+
253
+ warnOnce( 'ReflectorNode: The "resolution" parameter has been renamed to "resolutionScale".' ); // @deprecated r180
254
+
255
+ this.resolutionScale = parameters.resolution;
256
+
257
+ }
246
258
 
247
259
  /**
248
260
  * Whether mipmaps should be generated or not.
@@ -268,6 +280,14 @@ class ReflectorBaseNode extends Node {
268
280
  */
269
281
  this.depth = depth;
270
282
 
283
+ /**
284
+ * The number of anti-aliasing samples for the render-target
285
+ *
286
+ * @type {number}
287
+ * @default {0}
288
+ */
289
+ this.samples = samples;
290
+
271
291
  /**
272
292
  * The `updateBeforeType` is set to `NodeUpdateType.RENDER` when {@link ReflectorBaseNode#bounces}
273
293
  * is `true`. Otherwise it's `NodeUpdateType.FRAME`.
@@ -321,7 +341,7 @@ class ReflectorBaseNode extends Node {
321
341
  */
322
342
  _updateResolution( renderTarget, renderer ) {
323
343
 
324
- const resolution = this.resolution;
344
+ const resolution = this.resolutionScale;
325
345
 
326
346
  renderer.getDrawingBufferSize( _size );
327
347
 
@@ -388,7 +408,7 @@ class ReflectorBaseNode extends Node {
388
408
 
389
409
  if ( renderTarget === undefined ) {
390
410
 
391
- renderTarget = new RenderTarget( 0, 0, { type: HalfFloatType } );
411
+ renderTarget = new RenderTarget( 0, 0, { type: HalfFloatType, samples: this.samples } );
392
412
 
393
413
  if ( this.generateMipmaps === true ) {
394
414
 
@@ -531,6 +551,10 @@ class ReflectorBaseNode extends Node {
531
551
  renderer.setRenderTarget( renderTarget );
532
552
  renderer.autoClear = true;
533
553
 
554
+ const previousName = scene.name;
555
+
556
+ scene.name = ( scene.name || 'Scene' ) + ' [ Reflector ]'; // TODO: Add bounce index
557
+
534
558
  if ( needsClear ) {
535
559
 
536
560
  renderer.clear();
@@ -545,6 +569,8 @@ class ReflectorBaseNode extends Node {
545
569
 
546
570
  }
547
571
 
572
+ scene.name = previousName;
573
+
548
574
  renderer.setMRT( currentMRT );
549
575
  renderer.setRenderTarget( currentRenderTarget );
550
576
  renderer.autoClear = currentAutoClear;
@@ -557,6 +583,29 @@ class ReflectorBaseNode extends Node {
557
583
 
558
584
  }
559
585
 
586
+ /**
587
+ * The resolution scale.
588
+ *
589
+ * @deprecated
590
+ * @type {number}
591
+ * @default {1}
592
+ */
593
+ get resolution() {
594
+
595
+ warnOnce( 'ReflectorNode: The "resolution" property has been renamed to "resolutionScale".' ); // @deprecated r180
596
+
597
+ return this.resolutionScale;
598
+
599
+ }
600
+
601
+ set resolution( value ) {
602
+
603
+ warnOnce( 'ReflectorNode: The "resolution" property has been renamed to "resolutionScale".' ); // @deprecated r180
604
+
605
+ this.resolutionScale = value;
606
+
607
+ }
608
+
560
609
  }
561
610
 
562
611
  /**
@@ -570,10 +619,11 @@ class ReflectorBaseNode extends Node {
570
619
  * @param {boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.
571
620
  * @param {boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.
572
621
  * @param {boolean} [parameters.depth=false] - Whether depth data should be generated or not.
622
+ * @param {number} [parameters.samples] - Anti-Aliasing samples of the internal render-target.
573
623
  * @param {TextureNode} [parameters.defaultTexture] - The default texture node.
574
624
  * @param {ReflectorBaseNode} [parameters.reflector] - The reflector base node.
575
625
  * @returns {ReflectorNode}
576
626
  */
577
- export const reflector = ( parameters ) => nodeObject( new ReflectorNode( parameters ) );
627
+ export const reflector = ( parameters ) => new ReflectorNode( parameters );
578
628
 
579
629
  export default ReflectorNode;
@@ -0,0 +1,48 @@
1
+ import { float, addMethodChaining, Fn, bool, defined } from '../tsl/TSLCore.js';
2
+
3
+ /**
4
+ * This node allows to remap a node value from one range into another. E.g a value of
5
+ * `0.4` in the range `[ 0.3, 0.5 ]` should be remapped into the normalized range `[ 0, 1 ]`.
6
+ * `remap` takes care of that and converts the original value of `0.4` to `0.5`.
7
+ *
8
+ * @tsl
9
+ * @function
10
+ * @param {Node} node - The node that should be remapped.
11
+ * @param {Node} inLowNode - The source or current lower bound of the range.
12
+ * @param {Node} inHighNode - The source or current upper bound of the range.
13
+ * @param {?Node} [outLowNode=float(0)] - The target lower bound of the range.
14
+ * @param {?Node} [outHighNode=float(1)] - The target upper bound of the range.
15
+ * @returns {Node}
16
+ */
17
+ export const remap = /*@__PURE__*/ Fn( ( [ node, inLowNode, inHighNode, outLowNode = float( 0 ), outHighNode = float( 1 ), doClamp = bool( false ) ] ) => {
18
+
19
+ let t = node.sub( inLowNode ).div( inHighNode.sub( inLowNode ) );
20
+
21
+ if ( defined( doClamp ) ) t = t.clamp();
22
+
23
+ return t.mul( outHighNode.sub( outLowNode ) ).add( outLowNode );
24
+
25
+ } );
26
+
27
+ /**
28
+ * This node allows to remap a node value from one range into another but with enabled clamping. E.g a value of
29
+ * `0.4` in the range `[ 0.3, 0.5 ]` should be remapped into the normalized range `[ 0, 1 ]`.
30
+ * `remapClamp` takes care of that and converts the original value of `0.4` to `0.5`.
31
+ *
32
+ * @tsl
33
+ * @function
34
+ * @param {Node} node - The node that should be remapped.
35
+ * @param {Node} inLowNode - The source or current lower bound of the range.
36
+ * @param {Node} inHighNode - The source or current upper bound of the range.
37
+ * @param {?Node} [outLowNode=float(0)] - The target lower bound of the range.
38
+ * @param {?Node} [outHighNode=float(1)] - The target upper bound of the range.
39
+ * @returns {Node}
40
+ */
41
+ export function remapClamp( node, inLowNode, inHighNode, outLowNode = float( 0 ), outHighNode = float( 1 ) ) {
42
+
43
+ return remap( node, inLowNode, inHighNode, outLowNode, outHighNode, true );
44
+
45
+ }
46
+
47
+ addMethodChaining( 'remap', remap );
48
+ addMethodChaining( 'remapClamp', remapClamp );
@@ -49,7 +49,7 @@ class RotateNode extends TempNode {
49
49
  * @param {NodeBuilder} builder - The current node builder.
50
50
  * @return {string} The node's type.
51
51
  */
52
- getNodeType( builder ) {
52
+ generateNodeType( builder ) {
53
53
 
54
54
  return this.positionNode.getNodeType( builder );
55
55
 
@@ -26,13 +26,22 @@ class SampleNode extends Node {
26
26
  * Creates an instance of SampleNode.
27
27
  *
28
28
  * @param {Function} callback - The function to be called when sampling. Should accept a UV node and return a value.
29
+ * @param {?Node<vec2>} [uvNode=null] - The UV node to be used in the texture sampling.
29
30
  */
30
- constructor( callback ) {
31
+ constructor( callback, uvNode = null ) {
31
32
 
32
33
  super();
33
34
 
34
35
  this.callback = callback;
35
36
 
37
+ /**
38
+ * Represents the texture coordinates.
39
+ *
40
+ * @type {?Node<vec2|vec3>}
41
+ * @default null
42
+ */
43
+ this.uvNode = uvNode;
44
+
36
45
  /**
37
46
  * This flag can be used for type testing.
38
47
  *
@@ -76,6 +85,7 @@ export default SampleNode;
76
85
  *
77
86
  * @function
78
87
  * @param {Function} callback - The function to be called when sampling. Should accept a UV node and return a value.
88
+ * @param {?Node<vec2>} [uv=null] - The UV node to be used in the texture sampling.
79
89
  * @returns {SampleNode} The created SampleNode instance wrapped as a node object.
80
90
  */
81
- export const sample = ( callback ) => nodeObject( new SampleNode( callback ) );
91
+ export const sample = ( callback, uv = null ) => new SampleNode( callback, nodeObject( uv ) );
@@ -60,7 +60,7 @@ class SetNode extends TempNode {
60
60
  * @param {NodeBuilder} builder - The current node builder.
61
61
  * @return {string} The node type.
62
62
  */
63
- getNodeType( builder ) {
63
+ generateNodeType( builder ) {
64
64
 
65
65
  return this.sourceNode.getNodeType( builder );
66
66
 
@@ -94,12 +94,23 @@ class SplitNode extends Node {
94
94
  * @param {NodeBuilder} builder - The current node builder.
95
95
  * @return {string} The node type.
96
96
  */
97
- getNodeType( builder ) {
97
+ generateNodeType( builder ) {
98
98
 
99
99
  return builder.getTypeFromLength( this.components.length, this.getComponentType( builder ) );
100
100
 
101
101
  }
102
102
 
103
+ /**
104
+ * Returns the scope of the node.
105
+ *
106
+ * @return {Node} The scope of the node.
107
+ */
108
+ getScope() {
109
+
110
+ return this.node.getScope();
111
+
112
+ }
113
+
103
114
  generate( builder, output ) {
104
115
 
105
116
  const node = this.node;
@@ -0,0 +1,35 @@
1
+ import { uv } from '../accessors/UV.js';
2
+ import { Fn, float, vec2 } from '../tsl/TSLBase.js';
3
+
4
+ /**
5
+ * TSL function for computing texture coordinates for animated sprite sheets.
6
+ *
7
+ * ```js
8
+ * const uvNode = spritesheetUV( vec2( 6, 6 ), uv(), time.mul( animationSpeed ) );
9
+ *
10
+ * material.colorNode = texture( spriteSheet, uvNode );
11
+ * ```
12
+ *
13
+ * @tsl
14
+ * @function
15
+ * @param {Node<vec2>} countNode - The node that defines the number of sprites in the x and y direction (e.g 6x6).
16
+ * @param {?Node<vec2>} [uvNode=uv()] - The uv node.
17
+ * @param {?Node<float>} [frameNode=float(0)] - The node that defines the current frame/sprite.
18
+ * @returns {Node<vec2>}
19
+ */
20
+ export const spritesheetUV = /*@__PURE__*/ Fn( ( [ countNode, uvNode = uv(), frameNode = float( 0 ) ] ) => {
21
+
22
+ const width = countNode.x;
23
+ const height = countNode.y;
24
+
25
+ const frameNum = frameNode.mod( width.mul( height ) ).floor();
26
+
27
+ const column = frameNum.mod( width );
28
+ const row = height.sub( frameNum.add( 1 ).div( width ).ceil() );
29
+
30
+ const scale = countNode.reciprocal();
31
+ const uvFrameOffset = vec2( column, row );
32
+
33
+ return uvNode.add( uvFrameOffset ).mul( scale );
34
+
35
+ } );
@@ -24,50 +24,3 @@ export const deltaTime = /*@__PURE__*/ uniform( 0 ).setGroup( renderGroup ).onRe
24
24
  * @type {UniformNode<uint>}
25
25
  */
26
26
  export const frameId = /*@__PURE__*/ uniform( 0, 'uint' ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => frame.frameId );
27
-
28
- // Deprecated
29
-
30
- /**
31
- * @tsl
32
- * @function
33
- * @deprecated since r170. Use {@link time} instead.
34
- *
35
- * @param {number} [timeScale=1] - The time scale.
36
- * @returns {UniformNode<float>}
37
- */
38
- export const timerLocal = ( timeScale = 1 ) => { // @deprecated, r170
39
-
40
- console.warn( 'TSL: timerLocal() is deprecated. Use "time" instead.' );
41
- return time.mul( timeScale );
42
-
43
- };
44
-
45
- /**
46
- * @tsl
47
- * @function
48
- * @deprecated since r170. Use {@link time} instead.
49
- *
50
- * @param {number} [timeScale=1] - The time scale.
51
- * @returns {UniformNode<float>}
52
- */
53
- export const timerGlobal = ( timeScale = 1 ) => { // @deprecated, r170
54
-
55
- console.warn( 'TSL: timerGlobal() is deprecated. Use "time" instead.' );
56
- return time.mul( timeScale );
57
-
58
- };
59
-
60
- /**
61
- * @tsl
62
- * @function
63
- * @deprecated since r170. Use {@link deltaTime} instead.
64
- *
65
- * @param {number} [timeScale=1] - The time scale.
66
- * @returns {UniformNode<float>}
67
- */
68
- export const timerDelta = ( timeScale = 1 ) => { // @deprecated, r170
69
-
70
- console.warn( 'TSL: timerDelta() is deprecated. Use "deltaTime" instead.' );
71
- return deltaTime.mul( timeScale );
72
-
73
- };
@@ -1,5 +1,33 @@
1
1
  import { Fn, vec2 } from '../tsl/TSLBase.js';
2
2
  import { rotate } from './RotateNode.js';
3
+ import { context } from '../core/ContextNode.js';
4
+
5
+ /**
6
+ * Replaces the default UV coordinates used in texture lookups.
7
+ *
8
+ * ```js
9
+ *material.contextNode = replaceDefaultUV( ( textureNode ) => {
10
+ *
11
+ * // ...
12
+ * return customUVCoordinates;
13
+ *
14
+ *} );
15
+ *```
16
+ *
17
+ * @tsl
18
+ * @function
19
+ * @param {function(Node):Node<vec2>|Node<vec2>} callback - A callback that receives the texture node
20
+ * and must return the new uv coordinates.
21
+ * @param {Node} [node=null] - An optional node to which the context will be applied.
22
+ * @return {ContextNode} A context node that replaces the default UV coordinates.
23
+ */
24
+ export function replaceDefaultUV( callback, node = null ) {
25
+
26
+ const getUV = typeof callback === 'function' ? callback : () => callback;
27
+
28
+ return context( node, { getUV } );
29
+
30
+ }
3
31
 
4
32
  /**
5
33
  * Rotates the given uv coordinates around a center point
@@ -272,7 +272,6 @@ class BatchedMesh extends Mesh {
272
272
  this._multiDrawCounts = new Int32Array( maxInstanceCount );
273
273
  this._multiDrawStarts = new Int32Array( maxInstanceCount );
274
274
  this._multiDrawCount = 0;
275
- this._multiDrawInstances = null;
276
275
 
277
276
  // Local matrix per geometry by using data texture
278
277
  this._matricesTexture = null;
@@ -871,10 +870,9 @@ class BatchedMesh extends Mesh {
871
870
  }
872
871
 
873
872
  /**
874
- * Repacks the sub geometries in [name] to remove any unused space remaining from
873
+ * Repacks the sub geometries in BatchedMesh to remove any unused space remaining from
875
874
  * previously deleted geometry, freeing up space to add new geometry.
876
875
  *
877
- * @param {number} instanceId - The ID of the instance to remove from the batch.
878
876
  * @return {BatchedMesh} A reference to this batched mesh.
879
877
  */
880
878
  optimize() {
@@ -926,6 +924,7 @@ class BatchedMesh extends Mesh {
926
924
 
927
925
  index.array.copyWithin( nextIndexStart, indexStart, indexStart + reservedIndexCount );
928
926
  index.addUpdateRange( nextIndexStart, reservedIndexCount );
927
+ index.needsUpdate = true;
929
928
 
930
929
  geometryInfo.indexStart = nextIndexStart;
931
930
 
@@ -946,6 +945,7 @@ class BatchedMesh extends Mesh {
946
945
  const { array, itemSize } = attribute;
947
946
  array.copyWithin( nextVertexStart * itemSize, vertexStart * itemSize, ( vertexStart + reservedVertexCount ) * itemSize );
948
947
  attribute.addUpdateRange( nextVertexStart * itemSize, reservedVertexCount * itemSize );
948
+ attribute.needsUpdate = true;
949
949
 
950
950
  }
951
951
 
@@ -956,12 +956,12 @@ class BatchedMesh extends Mesh {
956
956
  nextVertexStart += geometryInfo.reservedVertexCount;
957
957
  geometryInfo.start = geometry.index ? geometryInfo.indexStart : geometryInfo.vertexStart;
958
958
 
959
- // step the next geometry points to the shifted position
960
- this._nextIndexStart = geometry.index ? geometryInfo.indexStart + geometryInfo.reservedIndexCount : 0;
961
- this._nextVertexStart = geometryInfo.vertexStart + geometryInfo.reservedVertexCount;
962
-
963
959
  }
964
960
 
961
+ this._nextIndexStart = nextIndexStart;
962
+ this._nextVertexStart = nextVertexStart;
963
+ this._visibilityChanged = true;
964
+
965
965
  return this;
966
966
 
967
967
  }
@@ -971,7 +971,7 @@ class BatchedMesh extends Mesh {
971
971
  *
972
972
  * @param {number} geometryId - The ID of the geometry to return the bounding box for.
973
973
  * @param {Box3} target - The target object that is used to store the method's result.
974
- * @return {Box3|null} The geometry's bounding box. Returns `null` if no geometry has been found for the given ID.
974
+ * @return {?Box3} The geometry's bounding box. Returns `null` if no geometry has been found for the given ID.
975
975
  */
976
976
  getBoundingBoxAt( geometryId, target ) {
977
977
 
@@ -1016,7 +1016,7 @@ class BatchedMesh extends Mesh {
1016
1016
  *
1017
1017
  * @param {number} geometryId - The ID of the geometry to return the bounding sphere for.
1018
1018
  * @param {Sphere} target - The target object that is used to store the method's result.
1019
- * @return {Sphere|null} The geometry's bounding sphere. Returns `null` if no geometry has been found for the given ID.
1019
+ * @return {?Sphere} The geometry's bounding sphere. Returns `null` if no geometry has been found for the given ID.
1020
1020
  */
1021
1021
  getBoundingSphereAt( geometryId, target ) {
1022
1022
 
@@ -1102,7 +1102,7 @@ class BatchedMesh extends Mesh {
1102
1102
  * Sets the given color to the defined instance.
1103
1103
  *
1104
1104
  * @param {number} instanceId - The ID of an instance to set the color of.
1105
- * @param {Color} color - The color to set the instance to.
1105
+ * @param {Color|Vector4} color - The color to set the instance to. Use a `Vector4` to also define alpha.
1106
1106
  * @return {BatchedMesh} A reference to this batched mesh.
1107
1107
  */
1108
1108
  setColorAt( instanceId, color ) {
@@ -1126,13 +1126,29 @@ class BatchedMesh extends Mesh {
1126
1126
  * Returns the color of the defined instance.
1127
1127
  *
1128
1128
  * @param {number} instanceId - The ID of an instance to get the color of.
1129
- * @param {Color} color - The target object that is used to store the method's result.
1130
- * @return {Color} The instance's color.
1129
+ * @param {Color|Vector4} color - The target object that is used to store the method's result.
1130
+ * @return {Color|Vector4} The instance's color. Use a `Vector4` to also retrieve alpha.
1131
1131
  */
1132
1132
  getColorAt( instanceId, color ) {
1133
1133
 
1134
1134
  this.validateInstanceId( instanceId );
1135
- return color.fromArray( this._colorsTexture.image.data, instanceId * 4 );
1135
+ if ( this._colorsTexture === null ) {
1136
+
1137
+ if ( color.isVector4 ) {
1138
+
1139
+ return color.set( 1, 1, 1, 1 );
1140
+
1141
+ } else {
1142
+
1143
+ return color.setRGB( 1, 1, 1 );
1144
+
1145
+ }
1146
+
1147
+ } else {
1148
+
1149
+ return color.fromArray( this._colorsTexture.image.data, instanceId * 4 );
1150
+
1151
+ }
1136
1152
 
1137
1153
  }
1138
1154
 
@@ -1512,7 +1528,19 @@ class BatchedMesh extends Mesh {
1512
1528
  // the indexed version of the multi draw function requires specifying the start
1513
1529
  // offset in bytes.
1514
1530
  const index = geometry.getIndex();
1515
- const bytesPerElement = index === null ? 1 : index.array.BYTES_PER_ELEMENT;
1531
+ let bytesPerElement = index === null ? 1 : index.array.BYTES_PER_ELEMENT;
1532
+
1533
+
1534
+ // the "wireframe" attribute implicitly creates a line attribute in the renderer, which is double
1535
+ // the vertices to draw (3 lines per triangle) so we multiply the draw counts / starts and make
1536
+ // assumptions about the index buffer byte size.
1537
+ let multiDrawMultiplier = 1;
1538
+ if ( material.wireframe ) {
1539
+
1540
+ multiDrawMultiplier = 2;
1541
+ bytesPerElement = geometry.attributes.position.count > 65535 ? 4 : 2;
1542
+
1543
+ }
1516
1544
 
1517
1545
  const instanceInfo = this._instanceInfo;
1518
1546
  const multiDrawStarts = this._multiDrawStarts;
@@ -1593,8 +1621,8 @@ class BatchedMesh extends Mesh {
1593
1621
  for ( let i = 0, l = list.length; i < l; i ++ ) {
1594
1622
 
1595
1623
  const item = list[ i ];
1596
- multiDrawStarts[ multiDrawCount ] = item.start * bytesPerElement;
1597
- multiDrawCounts[ multiDrawCount ] = item.count;
1624
+ multiDrawStarts[ multiDrawCount ] = item.start * bytesPerElement * multiDrawMultiplier;
1625
+ multiDrawCounts[ multiDrawCount ] = item.count * multiDrawMultiplier;
1598
1626
  indirectArray[ multiDrawCount ] = item.index;
1599
1627
  multiDrawCount ++;
1600
1628
 
@@ -1624,8 +1652,8 @@ class BatchedMesh extends Mesh {
1624
1652
  if ( ! culled ) {
1625
1653
 
1626
1654
  const geometryInfo = geometryInfoList[ geometryId ];
1627
- multiDrawStarts[ multiDrawCount ] = geometryInfo.start * bytesPerElement;
1628
- multiDrawCounts[ multiDrawCount ] = geometryInfo.count;
1655
+ multiDrawStarts[ multiDrawCount ] = geometryInfo.start * bytesPerElement * multiDrawMultiplier;
1656
+ multiDrawCounts[ multiDrawCount ] = geometryInfo.count * multiDrawMultiplier;
1629
1657
  indirectArray[ multiDrawCount ] = i;
1630
1658
  multiDrawCount ++;
1631
1659