super-three 0.181.0 → 0.185.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 (693) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +21332 -19201
  4. package/build/three.core.js +20908 -19853
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1947 -862
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +37 -16
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +33628 -25197
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +33394 -25000
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +14 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +13 -6
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +127 -86
  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 +102 -17
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMFrustum.js +31 -6
  26. package/examples/jsm/csm/CSMShadowNode.js +10 -3
  27. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  28. package/examples/jsm/effects/AsciiEffect.js +14 -1
  29. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  30. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  31. package/examples/jsm/exporters/DRACOExporter.js +27 -6
  32. package/examples/jsm/exporters/EXRExporter.js +1 -1
  33. package/examples/jsm/exporters/GLTFExporter.js +266 -21
  34. package/examples/jsm/exporters/PLYExporter.js +286 -73
  35. package/examples/jsm/exporters/USDZExporter.js +353 -99
  36. package/examples/jsm/generators/CityGenerator.js +346 -0
  37. package/examples/jsm/generators/ForestGenerator.js +347 -0
  38. package/examples/jsm/generators/TerrainGenerator.js +504 -0
  39. package/examples/jsm/generators/TreeGenerator.js +377 -0
  40. package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
  41. package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
  42. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  43. package/examples/jsm/geometries/LoftGeometry.js +355 -0
  44. package/examples/jsm/geometries/TextGeometry.js +18 -0
  45. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  46. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  47. package/examples/jsm/helpers/LightProbeHelper.js +5 -4
  48. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  49. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  50. package/examples/jsm/helpers/ViewHelper.js +83 -14
  51. package/examples/jsm/inspector/Extension.js +13 -0
  52. package/examples/jsm/inspector/Inspector.js +244 -91
  53. package/examples/jsm/inspector/RendererInspector.js +165 -39
  54. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  55. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  56. package/examples/jsm/inspector/tabs/Console.js +241 -25
  57. package/examples/jsm/inspector/tabs/Memory.js +136 -0
  58. package/examples/jsm/inspector/tabs/Parameters.js +115 -7
  59. package/examples/jsm/inspector/tabs/Performance.js +24 -9
  60. package/examples/jsm/inspector/tabs/Settings.js +306 -0
  61. package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
  62. package/examples/jsm/inspector/tabs/Viewer.js +723 -9
  63. package/examples/jsm/inspector/ui/Graph.js +162 -25
  64. package/examples/jsm/inspector/ui/Item.js +92 -13
  65. package/examples/jsm/inspector/ui/List.js +2 -2
  66. package/examples/jsm/inspector/ui/Profiler.js +1991 -44
  67. package/examples/jsm/inspector/ui/Style.js +1943 -543
  68. package/examples/jsm/inspector/ui/Tab.js +226 -5
  69. package/examples/jsm/inspector/ui/Values.js +126 -8
  70. package/examples/jsm/inspector/ui/utils.js +143 -10
  71. package/examples/jsm/interaction/InteractionManager.js +226 -0
  72. package/examples/jsm/libs/basis/README.md +0 -1
  73. package/examples/jsm/libs/demuxer_mp4.js +3 -3
  74. package/examples/jsm/libs/draco/README.md +0 -1
  75. package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
  76. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  77. package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
  78. package/examples/jsm/libs/mikktspace.module.js +34 -9
  79. package/examples/jsm/lighting/ClusteredLighting.js +55 -0
  80. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  81. package/examples/jsm/lighting/LightProbeGrid.js +681 -0
  82. package/examples/jsm/lines/LineMaterial.js +45 -16
  83. package/examples/jsm/lines/LineSegments2.js +8 -0
  84. package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
  85. package/examples/jsm/loaders/3DMLoader.js +6 -5
  86. package/examples/jsm/loaders/3MFLoader.js +2 -2
  87. package/examples/jsm/loaders/AMFLoader.js +2 -2
  88. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  89. package/examples/jsm/loaders/DRACOLoader.js +51 -18
  90. package/examples/jsm/loaders/EXRLoader.js +701 -90
  91. package/examples/jsm/loaders/FBXLoader.js +235 -37
  92. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  93. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  94. package/examples/jsm/loaders/HDRLoader.js +7 -30
  95. package/examples/jsm/loaders/KMZLoader.js +5 -5
  96. package/examples/jsm/loaders/KTX2Loader.js +58 -17
  97. package/examples/jsm/loaders/LDrawLoader.js +49 -58
  98. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  99. package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
  100. package/examples/jsm/loaders/LWOLoader.js +11 -39
  101. package/examples/jsm/loaders/LottieLoader.js +1 -1
  102. package/examples/jsm/loaders/MaterialXLoader.js +31 -9
  103. package/examples/jsm/loaders/NRRDLoader.js +5 -5
  104. package/examples/jsm/loaders/PCDLoader.js +11 -9
  105. package/examples/jsm/loaders/PLYLoader.js +218 -55
  106. package/examples/jsm/loaders/SVGLoader.js +549 -497
  107. package/examples/jsm/loaders/TDSLoader.js +0 -2
  108. package/examples/jsm/loaders/TGALoader.js +0 -2
  109. package/examples/jsm/loaders/TTFLoader.js +1 -1
  110. package/examples/jsm/loaders/USDLoader.js +127 -43
  111. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  112. package/examples/jsm/loaders/VOXLoader.js +660 -117
  113. package/examples/jsm/loaders/VRMLLoader.js +80 -3
  114. package/examples/jsm/loaders/VTKLoader.js +42 -25
  115. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  116. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  117. package/examples/jsm/loaders/usd/USDAParser.js +504 -344
  118. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  119. package/examples/jsm/loaders/usd/USDComposer.js +4627 -0
  120. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  121. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  122. package/examples/jsm/math/Octree.js +131 -1
  123. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  124. package/examples/jsm/misc/RollerCoaster.js +42 -4
  125. package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
  126. package/examples/jsm/misc/Volume.js +2 -3
  127. package/examples/jsm/misc/VolumeSlice.js +0 -1
  128. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  129. package/examples/jsm/objects/GroundedSkybox.js +1 -1
  130. package/examples/jsm/objects/LensflareMesh.js +1 -1
  131. package/examples/jsm/objects/Reflector.js +72 -25
  132. package/examples/jsm/objects/Sky.js +90 -6
  133. package/examples/jsm/objects/SkyMesh.js +150 -16
  134. package/examples/jsm/objects/Water.js +4 -3
  135. package/examples/jsm/objects/Water2.js +5 -3
  136. package/examples/jsm/objects/Water2Mesh.js +1 -1
  137. package/examples/jsm/objects/WaterMesh.js +5 -7
  138. package/examples/jsm/physics/AmmoPhysics.js +27 -15
  139. package/examples/jsm/physics/JoltPhysics.js +10 -6
  140. package/examples/jsm/physics/RapierPhysics.js +36 -7
  141. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  142. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  143. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  144. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  145. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  146. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  147. package/examples/jsm/renderers/Projector.js +246 -28
  148. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  149. package/examples/jsm/shaders/GTAOShader.js +19 -6
  150. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  151. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  152. package/examples/jsm/shaders/SAOShader.js +17 -4
  153. package/examples/jsm/shaders/SSAOShader.js +11 -1
  154. package/examples/jsm/shaders/SSRShader.js +6 -5
  155. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  156. package/examples/jsm/shaders/VignetteShader.js +1 -1
  157. package/examples/jsm/shaders/VolumeShader.js +31 -44
  158. package/examples/jsm/transpiler/AST.js +44 -0
  159. package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
  160. package/examples/jsm/transpiler/Linker.js +1 -1
  161. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  162. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  163. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  164. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  165. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  166. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  167. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  168. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  169. package/examples/jsm/tsl/display/BloomNode.js +75 -25
  170. package/examples/jsm/tsl/display/CRT.js +150 -0
  171. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  172. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  173. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  174. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  175. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  176. package/examples/jsm/tsl/display/FXAANode.js +13 -14
  177. package/examples/jsm/tsl/display/GTAONode.js +40 -17
  178. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  179. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  180. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
  181. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  182. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  183. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  184. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  185. package/examples/jsm/tsl/display/PixelationPassNode.js +9 -8
  186. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  187. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
  188. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  189. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  190. package/examples/jsm/tsl/display/SSAAPassNode.js +15 -27
  191. package/examples/jsm/tsl/display/SSGINode.js +96 -62
  192. package/examples/jsm/tsl/display/SSRNode.js +831 -134
  193. package/examples/jsm/tsl/display/SSSNode.js +8 -6
  194. package/examples/jsm/tsl/display/Shape.js +29 -0
  195. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  196. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  197. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  198. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  199. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  200. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  201. package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
  202. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  203. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  204. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  205. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
  206. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  207. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  208. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  209. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  210. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  211. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  212. package/examples/jsm/tsl/math/Bayer.js +53 -3
  213. package/examples/jsm/tsl/math/curlNoise.js +107 -0
  214. package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
  215. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
  216. package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
  217. package/examples/jsm/tsl/utils/RNoise.js +51 -0
  218. package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
  219. package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
  220. package/examples/jsm/utils/ColorUtils.js +76 -0
  221. package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
  222. package/examples/jsm/utils/LDrawUtils.js +1 -1
  223. package/examples/jsm/utils/SceneOptimizer.js +1 -1
  224. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  225. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  226. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  227. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  228. package/examples/jsm/webxr/ARButton.js +1 -1
  229. package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
  230. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
  231. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  232. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  233. package/package.json +28 -34
  234. package/src/Three.Core.js +3 -1
  235. package/src/Three.TSL.js +35 -14
  236. package/src/Three.WebGPU.Nodes.js +5 -0
  237. package/src/Three.WebGPU.js +13 -0
  238. package/src/Three.js +1 -0
  239. package/src/animation/AnimationAction.js +18 -4
  240. package/src/animation/AnimationClip.js +0 -139
  241. package/src/animation/AnimationMixer.js +6 -0
  242. package/src/animation/AnimationUtils.js +1 -12
  243. package/src/animation/KeyframeTrack.js +47 -8
  244. package/src/animation/PropertyBinding.js +2 -2
  245. package/src/animation/PropertyMixer.js +4 -4
  246. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  247. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  248. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  249. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  250. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  251. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  252. package/src/audio/Audio.js +1 -1
  253. package/src/audio/AudioContext.js +2 -2
  254. package/src/audio/AudioListener.js +5 -3
  255. package/src/cameras/Camera.js +34 -4
  256. package/src/cameras/CubeCamera.js +20 -0
  257. package/src/cameras/StereoCamera.js +5 -2
  258. package/src/constants.js +90 -5
  259. package/src/core/BufferAttribute.js +13 -1
  260. package/src/core/BufferGeometry.js +43 -9
  261. package/src/core/Clock.js +7 -0
  262. package/src/core/Object3D.js +69 -11
  263. package/src/core/Raycaster.js +3 -3
  264. package/src/core/RenderTarget.js +19 -6
  265. package/src/extras/PMREMGenerator.js +13 -22
  266. package/src/extras/TextureUtils.js +6 -2
  267. package/src/extras/core/ShapePath.js +149 -160
  268. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  269. package/src/geometries/ExtrudeGeometry.js +2 -2
  270. package/src/geometries/PolyhedronGeometry.js +1 -1
  271. package/src/geometries/SphereGeometry.js +8 -3
  272. package/src/geometries/TorusGeometry.js +8 -3
  273. package/src/helpers/CameraHelper.js +3 -0
  274. package/src/helpers/DirectionalLightHelper.js +6 -1
  275. package/src/helpers/HemisphereLightHelper.js +5 -0
  276. package/src/helpers/PointLightHelper.js +3 -25
  277. package/src/helpers/SpotLightHelper.js +4 -1
  278. package/src/lights/DirectionalLight.js +13 -0
  279. package/src/lights/HemisphereLight.js +10 -0
  280. package/src/lights/Light.js +1 -11
  281. package/src/lights/LightProbe.js +0 -15
  282. package/src/lights/LightShadow.js +15 -6
  283. package/src/lights/PointLight.js +15 -0
  284. package/src/lights/PointLightShadow.js +0 -86
  285. package/src/lights/SpotLight.js +22 -1
  286. package/src/lights/webgpu/IESSpotLight.js +2 -1
  287. package/src/loaders/AudioLoader.js +11 -1
  288. package/src/loaders/Cache.js +28 -0
  289. package/src/loaders/DataTextureLoader.js +75 -42
  290. package/src/loaders/FileLoader.js +2 -3
  291. package/src/loaders/ImageBitmapLoader.js +12 -9
  292. package/src/loaders/Loader.js +6 -0
  293. package/src/loaders/LoadingManager.js +5 -0
  294. package/src/loaders/MaterialLoader.js +37 -266
  295. package/src/loaders/ObjectLoader.js +48 -6
  296. package/src/loaders/nodes/NodeLoader.js +2 -2
  297. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  298. package/src/materials/LineBasicMaterial.js +4 -0
  299. package/src/materials/Material.js +198 -1
  300. package/src/materials/MeshBasicMaterial.js +24 -0
  301. package/src/materials/MeshDepthMaterial.js +10 -0
  302. package/src/materials/MeshDistanceMaterial.js +10 -0
  303. package/src/materials/MeshLambertMaterial.js +49 -1
  304. package/src/materials/MeshMatcapMaterial.js +25 -1
  305. package/src/materials/MeshNormalMaterial.js +9 -1
  306. package/src/materials/MeshPhongMaterial.js +49 -1
  307. package/src/materials/MeshPhysicalMaterial.js +38 -0
  308. package/src/materials/MeshStandardMaterial.js +42 -1
  309. package/src/materials/MeshToonMaterial.js +35 -2
  310. package/src/materials/PointsMaterial.js +7 -0
  311. package/src/materials/ShaderMaterial.js +106 -1
  312. package/src/materials/SpriteMaterial.js +7 -0
  313. package/src/materials/nodes/Line2NodeMaterial.js +380 -297
  314. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  315. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  316. package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
  317. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
  318. package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
  319. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
  320. package/src/materials/nodes/NodeMaterial.js +153 -89
  321. package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
  322. package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
  323. package/src/math/Box3.js +5 -0
  324. package/src/math/FrustumArray.js +103 -133
  325. package/src/math/Interpolant.js +1 -1
  326. package/src/math/Line3.js +6 -5
  327. package/src/math/MathUtils.js +12 -12
  328. package/src/math/Matrix2.js +13 -9
  329. package/src/math/Matrix3.js +24 -9
  330. package/src/math/Matrix4.js +112 -74
  331. package/src/math/Plane.js +4 -3
  332. package/src/math/Quaternion.js +3 -29
  333. package/src/math/Sphere.js +1 -1
  334. package/src/math/Triangle.js +1 -1
  335. package/src/math/Vector2.js +13 -9
  336. package/src/math/Vector3.js +17 -15
  337. package/src/math/Vector4.js +15 -11
  338. package/src/math/interpolants/BezierInterpolant.js +106 -0
  339. package/src/nodes/Nodes.js +86 -71
  340. package/src/nodes/TSL.js +15 -13
  341. package/src/nodes/accessors/Arrays.js +5 -5
  342. package/src/nodes/accessors/Batch.js +108 -0
  343. package/src/nodes/accessors/Bitangent.js +7 -7
  344. package/src/nodes/accessors/BufferAttributeNode.js +120 -17
  345. package/src/nodes/accessors/BufferNode.js +29 -2
  346. package/src/nodes/accessors/Camera.js +149 -28
  347. package/src/nodes/accessors/ClippingNode.js +5 -5
  348. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  349. package/src/nodes/accessors/Instance.js +264 -0
  350. package/src/nodes/accessors/MaterialNode.js +27 -3
  351. package/src/nodes/accessors/MaterialProperties.js +6 -8
  352. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  353. package/src/nodes/accessors/ModelNode.js +1 -1
  354. package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
  355. package/src/nodes/accessors/Normal.js +24 -24
  356. package/src/nodes/accessors/Object3DNode.js +1 -1
  357. package/src/nodes/accessors/Position.js +39 -3
  358. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  359. package/src/nodes/accessors/ReferenceNode.js +9 -8
  360. package/src/nodes/accessors/ReflectVector.js +3 -3
  361. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  362. package/src/nodes/accessors/SceneProperties.js +47 -0
  363. package/src/nodes/accessors/Skinning.js +263 -0
  364. package/src/nodes/accessors/StorageBufferNode.js +16 -27
  365. package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
  366. package/src/nodes/accessors/StorageTextureNode.js +74 -11
  367. package/src/nodes/accessors/Tangent.js +8 -18
  368. package/src/nodes/accessors/Texture3DNode.js +32 -35
  369. package/src/nodes/accessors/TextureNode.js +124 -25
  370. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  371. package/src/nodes/accessors/UserDataNode.js +1 -2
  372. package/src/nodes/accessors/VertexColorNode.js +1 -2
  373. package/src/nodes/code/FunctionCallNode.js +1 -1
  374. package/src/nodes/code/FunctionNode.js +4 -19
  375. package/src/nodes/core/ArrayNode.js +21 -2
  376. package/src/nodes/core/AssignNode.js +3 -3
  377. package/src/nodes/core/AttributeNode.js +3 -3
  378. package/src/nodes/core/BypassNode.js +1 -1
  379. package/src/nodes/core/ContextNode.js +104 -5
  380. package/src/nodes/core/IndexNode.js +2 -1
  381. package/src/nodes/core/InputNode.js +1 -1
  382. package/src/nodes/core/InspectorNode.js +1 -1
  383. package/src/nodes/core/IsolateNode.js +1 -1
  384. package/src/nodes/core/MRTNode.js +55 -4
  385. package/src/nodes/core/Node.js +151 -17
  386. package/src/nodes/core/NodeBuilder.js +479 -101
  387. package/src/nodes/core/NodeError.js +28 -0
  388. package/src/nodes/core/NodeFrame.js +12 -4
  389. package/src/nodes/core/NodeUtils.js +20 -18
  390. package/src/nodes/core/OutputStructNode.js +13 -11
  391. package/src/nodes/core/OverrideContextNode.js +153 -0
  392. package/src/nodes/core/ParameterNode.js +4 -4
  393. package/src/nodes/core/PropertyNode.js +66 -4
  394. package/src/nodes/core/StackNode.js +91 -20
  395. package/src/nodes/core/StackTrace.js +139 -0
  396. package/src/nodes/core/StructNode.js +20 -8
  397. package/src/nodes/core/StructTypeNode.js +17 -23
  398. package/src/nodes/core/SubBuildNode.js +2 -2
  399. package/src/nodes/core/UniformGroupNode.js +36 -6
  400. package/src/nodes/core/UniformNode.js +21 -5
  401. package/src/nodes/core/VarNode.js +56 -23
  402. package/src/nodes/core/VaryingNode.js +14 -21
  403. package/src/nodes/display/BlendModes.js +1 -105
  404. package/src/nodes/display/BumpMapNode.js +6 -1
  405. package/src/nodes/display/ColorAdjustment.js +27 -9
  406. package/src/nodes/display/ColorSpaceNode.js +3 -3
  407. package/src/nodes/display/FrontFacingNode.js +38 -9
  408. package/src/nodes/display/NormalMapNode.js +41 -6
  409. package/src/nodes/display/PassNode.js +157 -56
  410. package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
  411. package/src/nodes/display/RenderOutputNode.js +19 -10
  412. package/src/nodes/display/ScreenNode.js +4 -2
  413. package/src/nodes/display/ToneMappingNode.js +1 -1
  414. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  415. package/src/nodes/display/ViewportDepthNode.js +52 -4
  416. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  417. package/src/nodes/display/ViewportTextureNode.js +39 -11
  418. package/src/nodes/fog/Fog.js +18 -35
  419. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  420. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  421. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  422. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  423. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  424. package/src/nodes/functions/VolumetricLightingModel.js +40 -7
  425. package/src/nodes/geometry/RangeNode.js +5 -3
  426. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  427. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  428. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  429. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  430. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  431. package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -5
  432. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  433. package/src/nodes/lighting/EnvironmentNode.js +30 -5
  434. package/src/nodes/lighting/IESSpotLightNode.js +40 -2
  435. package/src/nodes/lighting/LightingContextNode.js +10 -2
  436. package/src/nodes/lighting/LightsNode.js +97 -65
  437. package/src/nodes/lighting/PointShadowNode.js +166 -148
  438. package/src/nodes/lighting/ShadowFilterNode.js +74 -117
  439. package/src/nodes/lighting/ShadowNode.js +149 -51
  440. package/src/nodes/materialx/lib/mx_noise.js +2 -2
  441. package/src/nodes/math/BitcastNode.js +1 -1
  442. package/src/nodes/math/BitcountNode.js +433 -0
  443. package/src/nodes/math/ConditionalNode.js +6 -6
  444. package/src/nodes/math/MathNode.js +115 -52
  445. package/src/nodes/math/OperatorNode.js +24 -23
  446. package/src/nodes/math/PackFloatNode.js +98 -0
  447. package/src/nodes/math/UnpackFloatNode.js +96 -0
  448. package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
  449. package/src/nodes/pmrem/PMREMNode.js +34 -3
  450. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  451. package/src/nodes/tsl/TSLBase.js +1 -1
  452. package/src/nodes/tsl/TSLCore.js +99 -33
  453. package/src/nodes/utils/ArrayElementNode.js +14 -1
  454. package/src/nodes/utils/ConvertNode.js +1 -1
  455. package/src/nodes/utils/DebugNode.js +12 -12
  456. package/src/nodes/utils/EquirectUV.js +30 -5
  457. package/src/nodes/utils/EventNode.js +31 -2
  458. package/src/nodes/utils/FlipNode.js +1 -1
  459. package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
  460. package/src/nodes/utils/JoinNode.js +3 -3
  461. package/src/nodes/utils/LoopNode.js +1 -1
  462. package/src/nodes/utils/MemberNode.js +2 -2
  463. package/src/nodes/utils/Packing.js +48 -5
  464. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  465. package/src/nodes/utils/RTTNode.js +41 -25
  466. package/src/nodes/utils/ReflectorNode.js +4 -4
  467. package/src/nodes/utils/Remap.js +48 -0
  468. package/src/nodes/utils/RotateNode.js +1 -1
  469. package/src/nodes/utils/SampleNode.js +1 -1
  470. package/src/nodes/utils/SetNode.js +1 -1
  471. package/src/nodes/utils/SplitNode.js +1 -1
  472. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  473. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  474. package/src/nodes/utils/UVUtils.js +28 -0
  475. package/src/objects/BatchedMesh.js +66 -30
  476. package/src/objects/InstancedMesh.js +19 -3
  477. package/src/objects/Line.js +1 -1
  478. package/src/objects/Mesh.js +1 -1
  479. package/src/objects/Points.js +1 -1
  480. package/src/objects/SkinnedMesh.js +26 -9
  481. package/src/renderers/WebGLRenderer.js +344 -156
  482. package/src/renderers/common/Animation.js +3 -3
  483. package/src/renderers/common/Attributes.js +15 -1
  484. package/src/renderers/common/Backend.js +78 -13
  485. package/src/renderers/common/Background.js +26 -13
  486. package/src/renderers/common/BindGroup.js +1 -16
  487. package/src/renderers/common/Binding.js +11 -0
  488. package/src/renderers/common/Bindings.js +141 -57
  489. package/src/renderers/common/BlendMode.js +143 -0
  490. package/src/renderers/common/Buffer.js +49 -0
  491. package/src/renderers/common/BundleGroup.js +1 -1
  492. package/src/renderers/common/ChainMap.js +30 -6
  493. package/src/renderers/common/ClippingContext.js +10 -2
  494. package/src/renderers/common/ComputePipeline.js +1 -1
  495. package/src/renderers/common/CubeRenderTarget.js +51 -7
  496. package/src/renderers/common/Geometries.js +29 -3
  497. package/src/renderers/common/Info.js +374 -4
  498. package/src/renderers/common/InspectorBase.js +6 -1
  499. package/src/renderers/common/Lighting.js +51 -19
  500. package/src/renderers/common/Pipelines.js +40 -7
  501. package/src/renderers/common/PostProcessing.js +8 -206
  502. package/src/renderers/common/ReadbackBuffer.js +78 -0
  503. package/src/renderers/common/RenderBundle.js +3 -1
  504. package/src/renderers/common/RenderBundles.js +7 -3
  505. package/src/renderers/common/RenderContext.js +16 -0
  506. package/src/renderers/common/RenderContexts.js +33 -49
  507. package/src/renderers/common/RenderList.js +41 -4
  508. package/src/renderers/common/RenderLists.js +2 -1
  509. package/src/renderers/common/RenderObject.js +88 -16
  510. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  511. package/src/renderers/common/RenderObjects.js +21 -5
  512. package/src/renderers/common/RenderPipeline.js +232 -17
  513. package/src/renderers/common/Renderer.js +700 -163
  514. package/src/renderers/common/Sampler.js +16 -48
  515. package/src/renderers/common/StorageBuffer.js +13 -1
  516. package/src/renderers/common/Textures.js +121 -9
  517. package/src/renderers/common/TimestampQueryPool.js +6 -4
  518. package/src/renderers/common/Uniform.js +8 -0
  519. package/src/renderers/common/UniformsGroup.js +84 -1
  520. package/src/renderers/common/XRManager.js +377 -51
  521. package/src/renderers/common/extras/PMREMGenerator.js +40 -61
  522. package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
  523. package/src/renderers/common/nodes/NodeLibrary.js +4 -4
  524. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
  525. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  526. package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -0
  527. package/src/renderers/shaders/DFGLUTData.js +19 -34
  528. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  529. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  530. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  531. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  532. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  533. package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
  534. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
  535. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  536. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
  537. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
  538. package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
  539. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  540. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  541. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  542. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  543. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +3 -1
  544. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  545. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  546. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
  547. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  548. package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
  549. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  550. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  551. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  552. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  553. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  554. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +2 -2
  555. package/src/renderers/shaders/ShaderChunk.js +5 -3
  556. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  557. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  558. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +2 -3
  559. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  560. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  561. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  562. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  563. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  564. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  565. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  566. package/src/renderers/shaders/ShaderLib.js +7 -6
  567. package/src/renderers/shaders/UniformsLib.js +7 -5
  568. package/src/renderers/shaders/UniformsUtils.js +27 -5
  569. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  570. package/src/renderers/webgl/WebGLBackground.js +15 -15
  571. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  572. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  573. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  574. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  575. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  576. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  577. package/src/renderers/webgl/WebGLLights.js +18 -1
  578. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  579. package/src/renderers/webgl/WebGLObjects.js +3 -1
  580. package/src/renderers/webgl/WebGLOutput.js +271 -0
  581. package/src/renderers/webgl/WebGLProgram.js +54 -113
  582. package/src/renderers/webgl/WebGLPrograms.js +74 -55
  583. package/src/renderers/webgl/WebGLRenderLists.js +24 -1
  584. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  585. package/src/renderers/webgl/WebGLShaderCache.js +5 -11
  586. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  587. package/src/renderers/webgl/WebGLState.js +75 -37
  588. package/src/renderers/webgl/WebGLTextures.js +230 -56
  589. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  590. package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
  591. package/src/renderers/webgl/WebGLUtils.js +6 -2
  592. package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
  593. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  594. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
  595. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  596. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  597. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  598. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +118 -73
  599. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  600. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
  601. package/src/renderers/webgpu/WebGPUBackend.js +733 -302
  602. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  603. package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
  604. package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
  605. package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
  606. package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
  607. package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
  608. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
  609. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
  610. package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
  611. package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
  612. package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
  613. package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
  614. package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
  615. package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
  616. package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
  617. package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
  618. package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
  619. package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
  620. package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
  621. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
  622. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
  623. package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
  624. package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
  625. package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
  626. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
  627. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
  628. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
  629. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
  630. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
  631. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  632. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  633. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +224 -91
  634. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
  635. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
  636. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
  637. package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
  638. package/src/renderers/webxr/WebXRController.js +12 -0
  639. package/src/renderers/webxr/WebXRManager.js +4 -2
  640. package/src/textures/CubeDepthTexture.js +76 -0
  641. package/src/textures/DepthTexture.js +1 -1
  642. package/src/textures/ExternalTexture.js +0 -3
  643. package/src/textures/HTMLTexture.js +74 -0
  644. package/src/textures/Source.js +2 -2
  645. package/src/textures/Texture.js +16 -5
  646. package/src/utils.js +280 -3
  647. package/examples/fonts/LICENSE +0 -13
  648. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  649. package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
  650. package/examples/fonts/README.md +0 -11
  651. package/examples/fonts/droid/NOTICE +0 -190
  652. package/examples/fonts/droid/README.txt +0 -18
  653. package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
  654. package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
  655. package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
  656. package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
  657. package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
  658. package/examples/fonts/gentilis_bold.typeface.json +0 -1
  659. package/examples/fonts/gentilis_regular.typeface.json +0 -1
  660. package/examples/fonts/helvetiker_bold.typeface.json +0 -1
  661. package/examples/fonts/helvetiker_regular.typeface.json +0 -1
  662. package/examples/fonts/optimer_bold.typeface.json +0 -1
  663. package/examples/fonts/optimer_regular.typeface.json +0 -1
  664. package/examples/fonts/ttf/README.md +0 -9
  665. package/examples/fonts/ttf/kenpixel.ttf +0 -0
  666. package/examples/jsm/libs/ammo.wasm.js +0 -822
  667. package/examples/jsm/libs/ammo.wasm.wasm +0 -0
  668. package/examples/jsm/libs/draco/draco_encoder.js +0 -33
  669. package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
  670. package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
  671. package/examples/jsm/libs/opentype.module.js +0 -14506
  672. package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
  673. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
  674. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  675. package/examples/jsm/lighting/TiledLighting.js +0 -42
  676. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  677. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  678. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  679. package/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
  680. package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
  681. package/src/nodes/accessors/BatchNode.js +0 -163
  682. package/src/nodes/accessors/InstanceNode.js +0 -244
  683. package/src/nodes/accessors/InstancedMeshNode.js +0 -50
  684. package/src/nodes/accessors/SceneNode.js +0 -145
  685. package/src/nodes/accessors/SkinningNode.js +0 -327
  686. package/src/nodes/code/ScriptableNode.js +0 -726
  687. package/src/nodes/code/ScriptableValueNode.js +0 -253
  688. package/src/nodes/display/PosterizeNode.js +0 -65
  689. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  690. package/src/nodes/utils/RemapNode.js +0 -125
  691. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  692. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  693. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -1,21 +1,64 @@
1
- import { nodeObject } from '../tsl/TSLBase.js';
1
+ import { nodeObject, vec3, float } from '../tsl/TSLBase.js';
2
+ import { dot, sqrt, saturate } from '../math/MathNode.js';
3
+ import { warnOnce } from '../../utils.js';
2
4
 
3
5
  /**
4
- * Packs a direction vector into a color value.
6
+ * Packs a normal vector into a color value.
5
7
  *
6
8
  * @tsl
7
9
  * @function
8
10
  * @param {Node<vec3>} node - The direction to pack.
9
11
  * @return {Node<vec3>} The color.
10
12
  */
11
- export const directionToColor = ( node ) => nodeObject( node ).mul( 0.5 ).add( 0.5 );
13
+ export const packNormalToRGB = ( node ) => nodeObject( node ).mul( 0.5 ).add( 0.5 );
12
14
 
13
15
  /**
14
- * Unpacks a color value into a direction vector.
16
+ * Unpacks a color value into a normal vector.
15
17
  *
16
18
  * @tsl
17
19
  * @function
18
20
  * @param {Node<vec3>} node - The color to unpack.
19
21
  * @return {Node<vec3>} The direction.
20
22
  */
21
- export const colorToDirection = ( node ) => nodeObject( node ).mul( 2.0 ).sub( 1 );
23
+ export const unpackRGBToNormal = ( node ) => nodeObject( node ).mul( 2.0 ).sub( 1 );
24
+
25
+ /**
26
+ * Unpacks a tangent space normal, reconstructing the Z component by projecting the X,Y coordinates onto the hemisphere.
27
+ * The X,Y coordinates are expected to be in the [-1, 1] range.
28
+ *
29
+ * @tsl
30
+ * @function
31
+ * @param {Node<vec2>} xy - The X,Y coordinates of the normal.
32
+ * @return {Node<vec3>} The resulting normal.
33
+ */
34
+ export const unpackNormal = ( xy ) => vec3( xy, sqrt( saturate( float( 1.0 ).sub( dot( xy, xy ) ) ) ) );
35
+
36
+ /**
37
+ * @tsl
38
+ * @function
39
+ * @deprecated since r185. Use {@link packNormalToRGB} instead.
40
+ * @param {Node<vec3>} node - The direction to pack.
41
+ * @returns {Node<vec3>}
42
+ */
43
+ export const directionToColor = ( node ) => {
44
+
45
+ warnOnce( 'TSL: "directionToColor()" has been renamed to "packNormalToRGB()".' ); // @deprecated r185
46
+
47
+ return packNormalToRGB( node );
48
+
49
+ };
50
+
51
+ /**
52
+ * @tsl
53
+ * @function
54
+ * @deprecated since r185. Use {@link unpackRGBToNormal} instead.
55
+ * @param {Node<vec3>} node - The color to unpack.
56
+ * @returns {Node<vec3>}
57
+ */
58
+ export const colorToDirection = ( node ) => {
59
+
60
+ warnOnce( 'TSL: "colorToDirection()" has been renamed to "unpackRGBToNormal()".' ); // @deprecated r185
61
+
62
+ return unpackRGBToNormal( node );
63
+
64
+ };
@@ -1,4 +1,5 @@
1
- import { abs, cross, float, Fn, normalize, ivec2, sub, vec2, vec3, vec4, fract, dot } from '../tsl/TSLBase.js';
1
+ import { abs, cross, float, Fn, normalize, ivec2, sub, vec2, vec3, vec4, fract, dot, cos, sin } from '../tsl/TSLBase.js';
2
+ import { sqrt } from '../math/MathNode.js';
2
3
  import { textureSize } from '../accessors/TextureSizeNode.js';
3
4
  import { textureLoad } from '../accessors/TextureNode.js';
4
5
  import { WebGPUCoordinateSystem } from '../../constants.js';
@@ -120,3 +121,34 @@ export const interleavedGradientNoise = Fn( ( [ position ] ) => {
120
121
  { name: 'position', type: 'vec2' }
121
122
  ]
122
123
  } );
124
+
125
+ /**
126
+ * Vogel disk sampling for uniform circular distribution.
127
+ *
128
+ * This function generates sample points distributed uniformly on a disk using the golden angle,
129
+ * resulting in an efficient low-discrepancy sequence for sampling. The rotation parameter (phi)
130
+ * allows randomizing the pattern per-pixel when combined with IGN.
131
+ *
132
+ * @tsl
133
+ * @function
134
+ * @param {Node<int>} sampleIndex - The index of the current sample (0-based).
135
+ * @param {Node<int>} samplesCount - The total number of samples.
136
+ * @param {Node<float>} phi - Rotation angle in radians (typically from IGN * 2π).
137
+ * @return {Node<vec2>} A 2D point on the unit disk.
138
+ */
139
+ export const vogelDiskSample = Fn( ( [ sampleIndex, samplesCount, phi ] ) => {
140
+
141
+ const goldenAngle = float( 2.399963229728653 ); // 2π * (2 - φ) where φ is golden ratio
142
+ const r = sqrt( float( sampleIndex ).add( 0.5 ).div( float( samplesCount ) ) );
143
+ const theta = float( sampleIndex ).mul( goldenAngle ).add( phi );
144
+ return vec2( cos( theta ), sin( theta ) ).mul( r );
145
+
146
+ } ).setLayout( {
147
+ name: 'vogelDiskSample',
148
+ type: 'vec2',
149
+ inputs: [
150
+ { name: 'sampleIndex', type: 'int' },
151
+ { name: 'samplesCount', type: 'int' },
152
+ { name: 'phi', type: 'float' }
153
+ ]
154
+ } );
@@ -74,14 +74,6 @@ class RTTNode extends TextureNode {
74
74
  */
75
75
  this.height = height;
76
76
 
77
- /**
78
- * The pixel ratio
79
- *
80
- * @type {number}
81
- * @default 1
82
- */
83
- this.pixelRatio = 1;
84
-
85
77
  /**
86
78
  * The render target
87
79
  *
@@ -105,6 +97,15 @@ class RTTNode extends TextureNode {
105
97
  */
106
98
  this.autoUpdate = true;
107
99
 
100
+ /**
101
+ * The resolution scale
102
+ *
103
+ * @private
104
+ * @type {number}
105
+ * @default 1
106
+ */
107
+ this._resolutionScale = 1;
108
+
108
109
  /**
109
110
  * The node which is used with the quad mesh for RTT.
110
111
  *
@@ -164,11 +165,8 @@ class RTTNode extends TextureNode {
164
165
  */
165
166
  setSize( width, height ) {
166
167
 
167
- this.width = width;
168
- this.height = height;
169
-
170
- const effectiveWidth = width * this.pixelRatio;
171
- const effectiveHeight = height * this.pixelRatio;
168
+ const effectiveWidth = Math.floor( width * this._resolutionScale );
169
+ const effectiveHeight = Math.floor( height * this._resolutionScale );
172
170
 
173
171
  this.renderTarget.setSize( effectiveWidth, effectiveHeight );
174
172
 
@@ -177,15 +175,34 @@ class RTTNode extends TextureNode {
177
175
  }
178
176
 
179
177
  /**
180
- * Sets the pixel ratio. This will also resize the render target.
178
+ * Sets the resolution scale.
179
+ * The resolution scale is a factor that is multiplied with the renderer's width and height.
181
180
  *
182
- * @param {number} pixelRatio - The pixel ratio to set.
181
+ * @param {number} resolutionScale - The resolution scale to set. A value of `1` means full resolution.
182
+ * @returns {RTTNode} A reference to this node.
183
183
  */
184
- setPixelRatio( pixelRatio ) {
184
+ setResolutionScale( resolutionScale ) {
185
185
 
186
- this.pixelRatio = pixelRatio;
186
+ this._resolutionScale = resolutionScale;
187
187
 
188
- this.setSize( this.width, this.height );
188
+ if ( this.autoResize === false ) {
189
+
190
+ this.setSize( this.width, this.height );
191
+
192
+ }
193
+
194
+ return this;
195
+
196
+ }
197
+
198
+ /**
199
+ * Gets the resolution scale.
200
+ *
201
+ * @returns {number} The resolution scale.
202
+ */
203
+ getResolutionScale() {
204
+
205
+ return this._resolutionScale;
189
206
 
190
207
  }
191
208
 
@@ -197,13 +214,14 @@ class RTTNode extends TextureNode {
197
214
 
198
215
  //
199
216
 
217
+ const currentRenderTarget = renderer.getRenderTarget();
218
+
200
219
  if ( this.autoResize === true ) {
201
220
 
202
- const pixelRatio = renderer.getPixelRatio();
203
- const size = renderer.getSize( _size );
221
+ const size = renderer.getDrawingBufferSize( _size );
204
222
 
205
- const effectiveWidth = Math.floor( size.width * pixelRatio );
206
- const effectiveHeight = Math.floor( size.height * pixelRatio );
223
+ const effectiveWidth = Math.floor( size.width * this._resolutionScale );
224
+ const effectiveHeight = Math.floor( size.height * this._resolutionScale );
207
225
 
208
226
  if ( effectiveWidth !== this.renderTarget.width || effectiveHeight !== this.renderTarget.height ) {
209
227
 
@@ -231,8 +249,6 @@ class RTTNode extends TextureNode {
231
249
 
232
250
  //
233
251
 
234
- const currentRenderTarget = renderer.getRenderTarget();
235
-
236
252
  renderer.setRenderTarget( this.renderTarget );
237
253
 
238
254
  this._quadMesh.render( renderer );
@@ -266,7 +282,7 @@ export default RTTNode;
266
282
  * @param {Object} [options={type:HalfFloatType}] - The options for the internal render target.
267
283
  * @returns {RTTNode}
268
284
  */
269
- export const rtt = ( node, ...params ) => nodeObject( new RTTNode( nodeObject( node ), ...params ) );
285
+ export const rtt = ( node, ...params ) => new RTTNode( nodeObject( node ), ...params );
270
286
 
271
287
  /**
272
288
  * TSL function for converting nodes to textures nodes.
@@ -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
 
@@ -134,10 +133,10 @@ class ReflectorNode extends TextureNode {
134
133
 
135
134
  }
136
135
 
137
- this._depthNode = nodeObject( new ReflectorNode( {
136
+ this._depthNode = new ReflectorNode( {
138
137
  defaultTexture: _defaultRT.depthTexture,
139
138
  reflector: this._reflectorBaseNode
140
- } ) );
139
+ } );
141
140
 
142
141
  }
143
142
 
@@ -164,6 +163,7 @@ class ReflectorNode extends TextureNode {
164
163
  newNode.depthNode = this.depthNode;
165
164
  newNode.compareNode = this.compareNode;
166
165
  newNode.gradNode = this.gradNode;
166
+ newNode.gatherNode = this.gatherNode;
167
167
  newNode.offsetNode = this.offsetNode;
168
168
  newNode._reflectorBaseNode = this._reflectorBaseNode;
169
169
 
@@ -625,6 +625,6 @@ class ReflectorBaseNode extends Node {
625
625
  * @param {ReflectorBaseNode} [parameters.reflector] - The reflector base node.
626
626
  * @returns {ReflectorNode}
627
627
  */
628
- export const reflector = ( parameters ) => nodeObject( new ReflectorNode( parameters ) );
628
+ export const reflector = ( parameters ) => new ReflectorNode( parameters );
629
629
 
630
630
  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
 
@@ -88,4 +88,4 @@ export default SampleNode;
88
88
  * @param {?Node<vec2>} [uv=null] - The UV node to be used in the texture sampling.
89
89
  * @returns {SampleNode} The created SampleNode instance wrapped as a node object.
90
90
  */
91
- export const sample = ( callback, uv = null ) => nodeObject( new SampleNode( callback, nodeObject( uv ) ) );
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,7 +94,7 @@ 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
 
@@ -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
+ } );
@@ -93,7 +93,7 @@ class StorageArrayElementNode extends ArrayElementNode {
93
93
 
94
94
  let snippet;
95
95
 
96
- const isAssignContext = builder.context.assign;
96
+ const isAssignContext = builder.isContextAssign();
97
97
 
98
98
  //
99
99
 
@@ -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
  }
@@ -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
 
@@ -1261,7 +1277,7 @@ class BatchedMesh extends Mesh {
1261
1277
  // throw an error if it can't be shrunk to the desired size
1262
1278
  if ( maxInstanceCount < instanceInfo.length ) {
1263
1279
 
1264
- throw new Error( `BatchedMesh: Instance ids outside the range ${ maxInstanceCount } are being used. Cannot shrink instance count.` );
1280
+ throw new Error( `THREE.BatchedMesh: Instance ids outside the range ${ maxInstanceCount } are being used. Cannot shrink instance count.` );
1265
1281
 
1266
1282
  }
1267
1283
 
@@ -1313,7 +1329,7 @@ class BatchedMesh extends Mesh {
1313
1329
  const requiredVertexLength = Math.max( ...validRanges.map( range => range.vertexStart + range.reservedVertexCount ) );
1314
1330
  if ( requiredVertexLength > maxVertexCount ) {
1315
1331
 
1316
- throw new Error( `BatchedMesh: Geometry vertex values are being used outside the range ${ maxIndexCount }. Cannot shrink further.` );
1332
+ throw new Error( `THREE.BatchedMesh: Geometry vertex values are being used outside the range ${ maxIndexCount }. Cannot shrink further.` );
1317
1333
 
1318
1334
  }
1319
1335
 
@@ -1323,7 +1339,7 @@ class BatchedMesh extends Mesh {
1323
1339
  const requiredIndexLength = Math.max( ...validRanges.map( range => range.indexStart + range.reservedIndexCount ) );
1324
1340
  if ( requiredIndexLength > maxIndexCount ) {
1325
1341
 
1326
- throw new Error( `BatchedMesh: Geometry index values are being used outside the range ${ maxIndexCount }. Cannot shrink further.` );
1342
+ throw new Error( `THREE.BatchedMesh: Geometry index values are being used outside the range ${ maxIndexCount }. Cannot shrink further.` );
1327
1343
 
1328
1344
  }
1329
1345
 
@@ -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;
@@ -1524,17 +1552,25 @@ class BatchedMesh extends Mesh {
1524
1552
 
1525
1553
  const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
1526
1554
  // prepare the frustum in the local frame
1527
- if ( perObjectFrustumCulled && ! camera.isArrayCamera ) {
1555
+ if ( perObjectFrustumCulled ) {
1556
+
1557
+ if ( camera.isArrayCamera ) {
1528
1558
 
1529
- _matrix
1530
- .multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse )
1531
- .multiply( this.matrixWorld );
1559
+ frustum.setFromArrayCamera( camera );
1560
+
1561
+ } else {
1532
1562
 
1533
- _frustum.setFromProjectionMatrix(
1534
- _matrix,
1535
- camera.coordinateSystem,
1536
- camera.reversedDepth
1537
- );
1563
+ _matrix
1564
+ .multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse )
1565
+ .multiply( this.matrixWorld );
1566
+
1567
+ frustum.setFromProjectionMatrix(
1568
+ _matrix,
1569
+ camera.coordinateSystem,
1570
+ camera.reversedDepth
1571
+ );
1572
+
1573
+ }
1538
1574
 
1539
1575
  }
1540
1576
 
@@ -1560,7 +1596,7 @@ class BatchedMesh extends Mesh {
1560
1596
  let culled = false;
1561
1597
  if ( perObjectFrustumCulled ) {
1562
1598
 
1563
- culled = ! frustum.intersectsSphere( _sphere, camera );
1599
+ culled = ! frustum.intersectsSphere( _sphere );
1564
1600
 
1565
1601
  }
1566
1602
 
@@ -1593,8 +1629,8 @@ class BatchedMesh extends Mesh {
1593
1629
  for ( let i = 0, l = list.length; i < l; i ++ ) {
1594
1630
 
1595
1631
  const item = list[ i ];
1596
- multiDrawStarts[ multiDrawCount ] = item.start * bytesPerElement;
1597
- multiDrawCounts[ multiDrawCount ] = item.count;
1632
+ multiDrawStarts[ multiDrawCount ] = item.start * bytesPerElement * multiDrawMultiplier;
1633
+ multiDrawCounts[ multiDrawCount ] = item.count * multiDrawMultiplier;
1598
1634
  indirectArray[ multiDrawCount ] = item.index;
1599
1635
  multiDrawCount ++;
1600
1636
 
@@ -1617,15 +1653,15 @@ class BatchedMesh extends Mesh {
1617
1653
  // get the bounds in world space
1618
1654
  this.getMatrixAt( i, _matrix );
1619
1655
  this.getBoundingSphereAt( geometryId, _sphere ).applyMatrix4( _matrix );
1620
- culled = ! frustum.intersectsSphere( _sphere, camera );
1656
+ culled = ! frustum.intersectsSphere( _sphere );
1621
1657
 
1622
1658
  }
1623
1659
 
1624
1660
  if ( ! culled ) {
1625
1661
 
1626
1662
  const geometryInfo = geometryInfoList[ geometryId ];
1627
- multiDrawStarts[ multiDrawCount ] = geometryInfo.start * bytesPerElement;
1628
- multiDrawCounts[ multiDrawCount ] = geometryInfo.count;
1663
+ multiDrawStarts[ multiDrawCount ] = geometryInfo.start * bytesPerElement * multiDrawMultiplier;
1664
+ multiDrawCounts[ multiDrawCount ] = geometryInfo.count * multiDrawMultiplier;
1629
1665
  indirectArray[ multiDrawCount ] = i;
1630
1666
  multiDrawCount ++;
1631
1667