super-three 0.181.0 → 0.184.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +13152 -11354
  4. package/build/three.core.js +12319 -11539
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1808 -781
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +27 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +10523 -6263
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +10484 -6262
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +11 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +7 -4
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +58 -54
  19. package/examples/jsm/controls/FlyControls.js +4 -0
  20. package/examples/jsm/controls/MapControls.js +55 -1
  21. package/examples/jsm/controls/OrbitControls.js +111 -8
  22. package/examples/jsm/controls/TrackballControls.js +8 -8
  23. package/examples/jsm/controls/TransformControls.js +34 -2
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  26. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  27. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  28. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  29. package/examples/jsm/exporters/EXRExporter.js +1 -1
  30. package/examples/jsm/exporters/GLTFExporter.js +152 -9
  31. package/examples/jsm/exporters/USDZExporter.js +22 -3
  32. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  33. package/examples/jsm/geometries/TextGeometry.js +18 -0
  34. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  36. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  37. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  38. package/examples/jsm/helpers/ViewHelper.js +67 -8
  39. package/examples/jsm/inspector/Extension.js +13 -0
  40. package/examples/jsm/inspector/Inspector.js +203 -88
  41. package/examples/jsm/inspector/RendererInspector.js +14 -4
  42. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  43. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  44. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  45. package/examples/jsm/inspector/tabs/Console.js +41 -7
  46. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  47. package/examples/jsm/inspector/tabs/Parameters.js +51 -3
  48. package/examples/jsm/inspector/tabs/Performance.js +4 -4
  49. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  50. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  51. package/examples/jsm/inspector/tabs/Viewer.js +107 -5
  52. package/examples/jsm/inspector/ui/Graph.js +2 -2
  53. package/examples/jsm/inspector/ui/List.js +1 -1
  54. package/examples/jsm/inspector/ui/Profiler.js +1936 -34
  55. package/examples/jsm/inspector/ui/Style.js +1044 -31
  56. package/examples/jsm/inspector/ui/Tab.js +222 -3
  57. package/examples/jsm/inspector/ui/Values.js +55 -2
  58. package/examples/jsm/inspector/ui/utils.js +13 -0
  59. package/examples/jsm/interaction/InteractionManager.js +226 -0
  60. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  61. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  62. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  63. package/examples/jsm/lines/LineMaterial.js +7 -1
  64. package/examples/jsm/loaders/3DMLoader.js +5 -4
  65. package/examples/jsm/loaders/3MFLoader.js +2 -2
  66. package/examples/jsm/loaders/AMFLoader.js +2 -2
  67. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  68. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  69. package/examples/jsm/loaders/EXRLoader.js +687 -48
  70. package/examples/jsm/loaders/FBXLoader.js +235 -37
  71. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  72. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  73. package/examples/jsm/loaders/HDRLoader.js +1 -2
  74. package/examples/jsm/loaders/KMZLoader.js +5 -5
  75. package/examples/jsm/loaders/KTX2Loader.js +27 -5
  76. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  77. package/examples/jsm/loaders/LWOLoader.js +7 -39
  78. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  79. package/examples/jsm/loaders/PCDLoader.js +4 -2
  80. package/examples/jsm/loaders/SVGLoader.js +2 -2
  81. package/examples/jsm/loaders/TDSLoader.js +0 -2
  82. package/examples/jsm/loaders/TGALoader.js +0 -2
  83. package/examples/jsm/loaders/USDLoader.js +100 -40
  84. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  85. package/examples/jsm/loaders/VOXLoader.js +660 -117
  86. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  87. package/examples/jsm/loaders/VTKLoader.js +42 -25
  88. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  89. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  90. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  91. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  92. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  93. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  94. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  95. package/examples/jsm/math/Octree.js +131 -1
  96. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  97. package/examples/jsm/misc/RollerCoaster.js +42 -4
  98. package/examples/jsm/misc/Volume.js +0 -1
  99. package/examples/jsm/misc/VolumeSlice.js +0 -1
  100. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  101. package/examples/jsm/objects/LensflareMesh.js +1 -1
  102. package/examples/jsm/objects/Reflector.js +73 -25
  103. package/examples/jsm/objects/Sky.js +90 -6
  104. package/examples/jsm/objects/SkyMesh.js +150 -16
  105. package/examples/jsm/objects/Water.js +4 -3
  106. package/examples/jsm/objects/Water2.js +5 -3
  107. package/examples/jsm/objects/WaterMesh.js +5 -7
  108. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  109. package/examples/jsm/physics/JoltPhysics.js +10 -6
  110. package/examples/jsm/physics/RapierPhysics.js +9 -5
  111. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  112. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  113. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  114. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  115. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  116. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  117. package/examples/jsm/renderers/Projector.js +246 -28
  118. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  119. package/examples/jsm/shaders/GTAOShader.js +19 -6
  120. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  122. package/examples/jsm/shaders/SAOShader.js +17 -4
  123. package/examples/jsm/shaders/SSAOShader.js +11 -1
  124. package/examples/jsm/shaders/SSRShader.js +6 -5
  125. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  126. package/examples/jsm/shaders/VignetteShader.js +1 -1
  127. package/examples/jsm/transpiler/AST.js +44 -0
  128. package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  130. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  131. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  132. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  133. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  134. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  135. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  136. package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
  137. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  138. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  139. package/examples/jsm/tsl/display/CRT.js +150 -0
  140. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  141. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  142. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  143. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  144. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  145. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  146. package/examples/jsm/tsl/display/GTAONode.js +6 -4
  147. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  148. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  149. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  150. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  151. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  152. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  153. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  154. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  155. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  156. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  157. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  158. package/examples/jsm/tsl/display/SSGINode.js +8 -24
  159. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  160. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  161. package/examples/jsm/tsl/display/Shape.js +29 -0
  162. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  163. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  164. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  165. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  166. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  167. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  168. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  169. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  170. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  171. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  172. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  173. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  174. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  175. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  176. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  177. package/examples/jsm/tsl/math/Bayer.js +53 -3
  178. package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
  179. package/examples/jsm/utils/ColorUtils.js +76 -0
  180. package/examples/jsm/utils/LDrawUtils.js +1 -1
  181. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  182. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  183. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  186. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  187. package/package.json +24 -30
  188. package/src/Three.Core.js +3 -1
  189. package/src/Three.TSL.js +25 -11
  190. package/src/Three.WebGPU.Nodes.js +5 -0
  191. package/src/Three.WebGPU.js +9 -0
  192. package/src/Three.js +1 -0
  193. package/src/animation/AnimationAction.js +12 -2
  194. package/src/animation/AnimationClip.js +1 -1
  195. package/src/animation/AnimationMixer.js +6 -0
  196. package/src/animation/AnimationUtils.js +1 -12
  197. package/src/animation/KeyframeTrack.js +47 -8
  198. package/src/animation/PropertyMixer.js +4 -4
  199. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  200. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  201. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  202. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  203. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  204. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  205. package/src/audio/Audio.js +1 -1
  206. package/src/audio/AudioContext.js +2 -2
  207. package/src/audio/AudioListener.js +5 -3
  208. package/src/cameras/Camera.js +32 -2
  209. package/src/cameras/CubeCamera.js +20 -0
  210. package/src/constants.js +90 -5
  211. package/src/core/BufferAttribute.js +13 -1
  212. package/src/core/BufferGeometry.js +14 -2
  213. package/src/core/Clock.js +7 -0
  214. package/src/core/Object3D.js +52 -4
  215. package/src/core/Raycaster.js +2 -2
  216. package/src/core/RenderTarget.js +4 -4
  217. package/src/extras/PMREMGenerator.js +7 -18
  218. package/src/extras/TextureUtils.js +5 -1
  219. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  220. package/src/geometries/ExtrudeGeometry.js +2 -2
  221. package/src/geometries/PolyhedronGeometry.js +1 -1
  222. package/src/geometries/TorusGeometry.js +8 -3
  223. package/src/helpers/CameraHelper.js +3 -0
  224. package/src/helpers/DirectionalLightHelper.js +4 -1
  225. package/src/helpers/HemisphereLightHelper.js +3 -0
  226. package/src/helpers/PointLightHelper.js +1 -25
  227. package/src/helpers/SpotLightHelper.js +3 -0
  228. package/src/lights/DirectionalLight.js +13 -0
  229. package/src/lights/HemisphereLight.js +10 -0
  230. package/src/lights/Light.js +1 -11
  231. package/src/lights/LightProbe.js +0 -15
  232. package/src/lights/LightShadow.js +15 -6
  233. package/src/lights/PointLight.js +15 -0
  234. package/src/lights/PointLightShadow.js +0 -86
  235. package/src/lights/SpotLight.js +22 -1
  236. package/src/lights/webgpu/IESSpotLight.js +2 -1
  237. package/src/loaders/AudioLoader.js +11 -1
  238. package/src/loaders/Cache.js +28 -0
  239. package/src/loaders/DataTextureLoader.js +6 -4
  240. package/src/loaders/FileLoader.js +2 -3
  241. package/src/loaders/ImageBitmapLoader.js +12 -9
  242. package/src/loaders/Loader.js +6 -0
  243. package/src/loaders/MaterialLoader.js +3 -2
  244. package/src/loaders/ObjectLoader.js +46 -6
  245. package/src/loaders/nodes/NodeLoader.js +2 -2
  246. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  247. package/src/materials/Material.js +2 -0
  248. package/src/materials/MeshLambertMaterial.js +9 -0
  249. package/src/materials/MeshPhongMaterial.js +9 -0
  250. package/src/materials/MeshToonMaterial.js +1 -1
  251. package/src/materials/ShaderMaterial.js +20 -1
  252. package/src/materials/nodes/Line2NodeMaterial.js +34 -7
  253. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  254. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  255. package/src/materials/nodes/NodeMaterial.js +45 -25
  256. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
  257. package/src/math/Line3.js +6 -5
  258. package/src/math/MathUtils.js +10 -10
  259. package/src/math/Matrix2.js +13 -9
  260. package/src/math/Matrix3.js +13 -9
  261. package/src/math/Matrix4.js +87 -74
  262. package/src/math/Plane.js +4 -3
  263. package/src/math/Quaternion.js +3 -29
  264. package/src/math/Sphere.js +1 -1
  265. package/src/math/Triangle.js +1 -1
  266. package/src/math/Vector2.js +11 -7
  267. package/src/math/Vector3.js +15 -13
  268. package/src/math/Vector4.js +13 -9
  269. package/src/math/interpolants/BezierInterpolant.js +108 -0
  270. package/src/nodes/Nodes.js +86 -68
  271. package/src/nodes/TSL.js +7 -7
  272. package/src/nodes/accessors/Arrays.js +1 -1
  273. package/src/nodes/accessors/BatchNode.js +10 -10
  274. package/src/nodes/accessors/Bitangent.js +5 -5
  275. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  276. package/src/nodes/accessors/BufferNode.js +29 -2
  277. package/src/nodes/accessors/Camera.js +149 -28
  278. package/src/nodes/accessors/ClippingNode.js +4 -4
  279. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  280. package/src/nodes/accessors/InstanceNode.js +148 -43
  281. package/src/nodes/accessors/MaterialNode.js +9 -1
  282. package/src/nodes/accessors/MaterialProperties.js +2 -5
  283. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  284. package/src/nodes/accessors/ModelNode.js +1 -1
  285. package/src/nodes/accessors/Normal.js +11 -11
  286. package/src/nodes/accessors/Object3DNode.js +1 -1
  287. package/src/nodes/accessors/Position.js +34 -2
  288. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  289. package/src/nodes/accessors/ReferenceNode.js +8 -8
  290. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  291. package/src/nodes/accessors/SceneProperties.js +47 -0
  292. package/src/nodes/accessors/SkinningNode.js +27 -26
  293. package/src/nodes/accessors/StorageBufferNode.js +14 -25
  294. package/src/nodes/accessors/StorageTextureNode.js +40 -9
  295. package/src/nodes/accessors/Tangent.js +4 -14
  296. package/src/nodes/accessors/Texture3DNode.js +32 -35
  297. package/src/nodes/accessors/TextureNode.js +67 -23
  298. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  299. package/src/nodes/accessors/UserDataNode.js +1 -2
  300. package/src/nodes/accessors/VertexColorNode.js +1 -2
  301. package/src/nodes/code/FunctionCallNode.js +1 -1
  302. package/src/nodes/code/FunctionNode.js +2 -3
  303. package/src/nodes/core/ArrayNode.js +21 -2
  304. package/src/nodes/core/AssignNode.js +3 -3
  305. package/src/nodes/core/AttributeNode.js +3 -3
  306. package/src/nodes/core/BypassNode.js +1 -1
  307. package/src/nodes/core/ContextNode.js +104 -5
  308. package/src/nodes/core/IndexNode.js +2 -1
  309. package/src/nodes/core/InputNode.js +1 -1
  310. package/src/nodes/core/InspectorNode.js +1 -1
  311. package/src/nodes/core/IsolateNode.js +1 -1
  312. package/src/nodes/core/MRTNode.js +48 -2
  313. package/src/nodes/core/Node.js +112 -15
  314. package/src/nodes/core/NodeBuilder.js +284 -66
  315. package/src/nodes/core/NodeError.js +28 -0
  316. package/src/nodes/core/NodeFrame.js +12 -4
  317. package/src/nodes/core/NodeUtils.js +11 -9
  318. package/src/nodes/core/OutputStructNode.js +12 -10
  319. package/src/nodes/core/ParameterNode.js +4 -4
  320. package/src/nodes/core/PropertyNode.js +19 -3
  321. package/src/nodes/core/StackNode.js +66 -17
  322. package/src/nodes/core/StackTrace.js +139 -0
  323. package/src/nodes/core/StructNode.js +17 -3
  324. package/src/nodes/core/StructTypeNode.js +12 -18
  325. package/src/nodes/core/SubBuildNode.js +2 -2
  326. package/src/nodes/core/UniformGroupNode.js +36 -6
  327. package/src/nodes/core/UniformNode.js +21 -5
  328. package/src/nodes/core/VarNode.js +48 -23
  329. package/src/nodes/core/VaryingNode.js +2 -19
  330. package/src/nodes/display/BlendModes.js +0 -64
  331. package/src/nodes/display/ColorAdjustment.js +17 -0
  332. package/src/nodes/display/ColorSpaceNode.js +3 -3
  333. package/src/nodes/display/NormalMapNode.js +39 -4
  334. package/src/nodes/display/PassNode.js +125 -16
  335. package/src/nodes/display/RenderOutputNode.js +7 -7
  336. package/src/nodes/display/ScreenNode.js +4 -2
  337. package/src/nodes/display/ToneMappingNode.js +1 -1
  338. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  339. package/src/nodes/display/ViewportDepthNode.js +52 -4
  340. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  341. package/src/nodes/display/ViewportTextureNode.js +39 -11
  342. package/src/nodes/fog/Fog.js +18 -35
  343. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  344. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  345. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  346. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  347. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  348. package/src/nodes/geometry/RangeNode.js +5 -3
  349. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  350. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  351. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  352. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  353. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  354. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  355. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  356. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  357. package/src/nodes/lighting/LightsNode.js +7 -28
  358. package/src/nodes/lighting/PointShadowNode.js +162 -149
  359. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  360. package/src/nodes/lighting/ShadowNode.js +120 -42
  361. package/src/nodes/math/BitcastNode.js +1 -1
  362. package/src/nodes/math/BitcountNode.js +433 -0
  363. package/src/nodes/math/ConditionalNode.js +3 -3
  364. package/src/nodes/math/MathNode.js +76 -41
  365. package/src/nodes/math/OperatorNode.js +3 -2
  366. package/src/nodes/math/PackFloatNode.js +98 -0
  367. package/src/nodes/math/UnpackFloatNode.js +96 -0
  368. package/src/nodes/pmrem/PMREMNode.js +1 -1
  369. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  370. package/src/nodes/tsl/TSLBase.js +1 -1
  371. package/src/nodes/tsl/TSLCore.js +38 -17
  372. package/src/nodes/utils/ArrayElementNode.js +14 -1
  373. package/src/nodes/utils/ConvertNode.js +1 -1
  374. package/src/nodes/utils/DebugNode.js +12 -12
  375. package/src/nodes/utils/EventNode.js +31 -2
  376. package/src/nodes/utils/FlipNode.js +1 -1
  377. package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
  378. package/src/nodes/utils/JoinNode.js +3 -3
  379. package/src/nodes/utils/LoopNode.js +1 -1
  380. package/src/nodes/utils/MemberNode.js +2 -2
  381. package/src/nodes/utils/Packing.js +13 -1
  382. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  383. package/src/nodes/utils/RTTNode.js +1 -1
  384. package/src/nodes/utils/ReflectorNode.js +3 -4
  385. package/src/nodes/utils/Remap.js +48 -0
  386. package/src/nodes/utils/RotateNode.js +1 -1
  387. package/src/nodes/utils/SampleNode.js +1 -1
  388. package/src/nodes/utils/SetNode.js +1 -1
  389. package/src/nodes/utils/SplitNode.js +1 -1
  390. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  391. package/src/nodes/utils/UVUtils.js +28 -0
  392. package/src/objects/BatchedMesh.js +44 -16
  393. package/src/objects/InstancedMesh.js +30 -3
  394. package/src/objects/Line.js +1 -1
  395. package/src/objects/Mesh.js +1 -1
  396. package/src/objects/Points.js +1 -1
  397. package/src/objects/Skeleton.js +9 -0
  398. package/src/objects/SkinnedMesh.js +26 -9
  399. package/src/renderers/WebGLRenderer.js +329 -145
  400. package/src/renderers/common/Animation.js +3 -3
  401. package/src/renderers/common/Attributes.js +15 -1
  402. package/src/renderers/common/Backend.js +29 -8
  403. package/src/renderers/common/Background.js +26 -13
  404. package/src/renderers/common/BindGroup.js +1 -16
  405. package/src/renderers/common/Binding.js +11 -0
  406. package/src/renderers/common/Bindings.js +29 -14
  407. package/src/renderers/common/BlendMode.js +143 -0
  408. package/src/renderers/common/Buffer.js +40 -0
  409. package/src/renderers/common/BundleGroup.js +1 -1
  410. package/src/renderers/common/ChainMap.js +30 -6
  411. package/src/renderers/common/ComputePipeline.js +1 -1
  412. package/src/renderers/common/CubeRenderTarget.js +51 -7
  413. package/src/renderers/common/Geometries.js +29 -3
  414. package/src/renderers/common/Info.js +333 -4
  415. package/src/renderers/common/InspectorBase.js +6 -1
  416. package/src/renderers/common/Lighting.js +5 -21
  417. package/src/renderers/common/Pipelines.js +40 -7
  418. package/src/renderers/common/PostProcessing.js +8 -206
  419. package/src/renderers/common/ReadbackBuffer.js +78 -0
  420. package/src/renderers/common/RenderBundle.js +3 -1
  421. package/src/renderers/common/RenderBundles.js +7 -3
  422. package/src/renderers/common/RenderContext.js +16 -0
  423. package/src/renderers/common/RenderContexts.js +33 -49
  424. package/src/renderers/common/RenderLists.js +2 -1
  425. package/src/renderers/common/RenderObject.js +17 -5
  426. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  427. package/src/renderers/common/RenderObjects.js +21 -5
  428. package/src/renderers/common/RenderPipeline.js +232 -17
  429. package/src/renderers/common/Renderer.js +481 -117
  430. package/src/renderers/common/Sampler.js +4 -4
  431. package/src/renderers/common/StorageBuffer.js +13 -1
  432. package/src/renderers/common/Textures.js +89 -4
  433. package/src/renderers/common/TimestampQueryPool.js +5 -3
  434. package/src/renderers/common/Uniform.js +8 -0
  435. package/src/renderers/common/UniformsGroup.js +62 -1
  436. package/src/renderers/common/XRManager.js +37 -29
  437. package/src/renderers/common/extras/PMREMGenerator.js +25 -23
  438. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  439. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
  440. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  441. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  442. package/src/renderers/shaders/DFGLUTData.js +19 -34
  443. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  444. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  445. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  446. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  447. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  448. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  449. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  450. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  451. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  452. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  453. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  454. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  455. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  456. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  457. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  458. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  459. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  461. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  462. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  463. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  464. package/src/renderers/shaders/ShaderChunk.js +5 -3
  465. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  466. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  467. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  468. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  469. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  470. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  471. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  472. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  473. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  474. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  475. package/src/renderers/shaders/ShaderLib.js +7 -6
  476. package/src/renderers/shaders/UniformsLib.js +7 -5
  477. package/src/renderers/shaders/UniformsUtils.js +27 -5
  478. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  479. package/src/renderers/webgl/WebGLBackground.js +15 -15
  480. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  481. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  482. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  483. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  484. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  485. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  486. package/src/renderers/webgl/WebGLLights.js +18 -1
  487. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  488. package/src/renderers/webgl/WebGLObjects.js +3 -1
  489. package/src/renderers/webgl/WebGLOutput.js +270 -0
  490. package/src/renderers/webgl/WebGLProgram.js +49 -109
  491. package/src/renderers/webgl/WebGLPrograms.js +63 -51
  492. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  493. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  494. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  495. package/src/renderers/webgl/WebGLState.js +75 -37
  496. package/src/renderers/webgl/WebGLTextures.js +215 -54
  497. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  498. package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
  499. package/src/renderers/webgl/WebGLUtils.js +6 -2
  500. package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
  501. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  504. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
  507. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  508. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  509. package/src/renderers/webgpu/WebGPUBackend.js +260 -140
  510. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  511. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
  512. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
  513. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  514. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  515. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  516. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  517. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
  519. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  520. package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
  521. package/src/renderers/webxr/WebXRController.js +12 -0
  522. package/src/renderers/webxr/WebXRManager.js +4 -2
  523. package/src/textures/CubeDepthTexture.js +76 -0
  524. package/src/textures/HTMLTexture.js +74 -0
  525. package/src/textures/Source.js +2 -2
  526. package/src/textures/Texture.js +16 -5
  527. package/src/utils.js +280 -3
  528. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  529. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  530. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  531. package/src/nodes/accessors/SceneNode.js +0 -145
  532. package/src/nodes/code/ScriptableNode.js +0 -726
  533. package/src/nodes/code/ScriptableValueNode.js +0 -253
  534. package/src/nodes/display/PosterizeNode.js +0 -65
  535. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  536. package/src/nodes/utils/RemapNode.js +0 -125
  537. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  538. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  539. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -35,6 +35,8 @@ const Cache = {
35
35
 
36
36
  if ( this.enabled === false ) return;
37
37
 
38
+ if ( isBlobURL( key ) ) return;
39
+
38
40
  // log( 'Cache', 'Adding key:', key );
39
41
 
40
42
  this.files[ key ] = file;
@@ -52,6 +54,8 @@ const Cache = {
52
54
 
53
55
  if ( this.enabled === false ) return;
54
56
 
57
+ if ( isBlobURL( key ) ) return;
58
+
55
59
  // log( 'Cache', 'Checking key:', key );
56
60
 
57
61
  return this.files[ key ];
@@ -83,5 +87,29 @@ const Cache = {
83
87
 
84
88
  };
85
89
 
90
+ /**
91
+ * Returns true if the given cache key contains the blob: scheme.
92
+ *
93
+ * @private
94
+ * @param {string} key - The cache key.
95
+ * @return {boolean} Whether the given cache key contains the blob: scheme or not.
96
+ */
97
+ function isBlobURL( key ) {
98
+
99
+ try {
100
+
101
+ const urlString = key.slice( key.indexOf( ':' ) + 1 ); // remove type identifier
102
+
103
+ const url = new URL( urlString );
104
+ return url.protocol === 'blob:';
105
+
106
+ } catch ( e ) {
107
+
108
+ // If the string is not a valid URL, it throws an error
109
+ return false;
110
+
111
+ }
112
+
113
+ }
86
114
 
87
115
  export { Cache };
@@ -2,6 +2,7 @@ import { LinearFilter, LinearMipmapLinearFilter, ClampToEdgeWrapping } from '../
2
2
  import { FileLoader } from './FileLoader.js';
3
3
  import { DataTexture } from '../textures/DataTexture.js';
4
4
  import { Loader } from './Loader.js';
5
+ import { error } from '../utils.js';
5
6
 
6
7
  /**
7
8
  * Abstract base class for loading binary texture formats RGBE, EXR or TGA.
@@ -57,19 +58,20 @@ class DataTextureLoader extends Loader {
57
58
 
58
59
  texData = scope.parse( buffer );
59
60
 
60
- } catch ( error ) {
61
+ } catch ( e ) {
61
62
 
62
63
  if ( onError !== undefined ) {
63
64
 
64
- onError( error );
65
+ onError( e );
65
66
 
66
67
  } else {
67
68
 
68
- error( error );
69
- return;
69
+ error( e );
70
70
 
71
71
  }
72
72
 
73
+ return;
74
+
73
75
  }
74
76
 
75
77
  if ( texData.image !== undefined ) {
@@ -43,7 +43,7 @@ class FileLoader extends Loader {
43
43
 
44
44
  /**
45
45
  * The expected mime type. Valid values can be found
46
- * [here](hhttps://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#mimetype)
46
+ * [here](https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#mimetype)
47
47
  *
48
48
  * @type {string}
49
49
  */
@@ -74,7 +74,6 @@ class FileLoader extends Loader {
74
74
  * @param {function(any)} onLoad - Executed when the loading process has been finished.
75
75
  * @param {onProgressCallback} [onProgress] - Executed while the loading is in progress.
76
76
  * @param {onErrorCallback} [onError] - Executed when errors occur.
77
- * @return {any|undefined} The cached resource if available.
78
77
  */
79
78
  load( url, onLoad, onProgress, onError ) {
80
79
 
@@ -98,7 +97,7 @@ class FileLoader extends Loader {
98
97
 
99
98
  }, 0 );
100
99
 
101
- return cached;
100
+ return;
102
101
 
103
102
  }
104
103
 
@@ -10,11 +10,16 @@ const _errorMap = new WeakMap();
10
10
  * textures for rendering.
11
11
  *
12
12
  * Note that {@link Texture#flipY} and {@link Texture#premultiplyAlpha} are ignored with image bitmaps.
13
- * They needs these configuration on bitmap creation unlike regular images need them on uploading to GPU.
13
+ * These options need to be configured via {@link ImageBitmapLoader#setOptions} prior to loading,
14
+ * unlike regular images which can be configured on the Texture to set these options on GPU upload instead.
14
15
  *
15
- * You need to set the equivalent options via {@link ImageBitmapLoader#setOptions} instead.
16
+ * To match the default behaviour of {@link Texture}, the following options are needed:
16
17
  *
17
- * Also note that unlike {@link FileLoader}, this loader avoids multiple concurrent requests to the same URL only if `Cache` is enabled.
18
+ * ```js
19
+ * { imageOrientation: 'flipY', premultiplyAlpha: 'none' }
20
+ * ```
21
+ *
22
+ * Also note that unlike {@link FileLoader}, this loader will only avoid multiple concurrent requests to the same URL if {@link Cache} is enabled.
18
23
  *
19
24
  * ```js
20
25
  * const loader = new THREE.ImageBitmapLoader();
@@ -81,6 +86,9 @@ class ImageBitmapLoader extends Loader {
81
86
  * Sets the given loader options. The structure of the object must match the `options` parameter of
82
87
  * [createImageBitmap](https://developer.mozilla.org/en-US/docs/Web/API/Window/createImageBitmap).
83
88
  *
89
+ * Note: When caching is enabled, the cache key is based on the URL only. Loading the same URL with
90
+ * different options will return the cached result of the first request.
91
+ *
84
92
  * @param {Object} options - The loader options to set.
85
93
  * @return {ImageBitmapLoader} A reference to this image bitmap loader.
86
94
  */
@@ -99,7 +107,6 @@ class ImageBitmapLoader extends Loader {
99
107
  * @param {function(ImageBitmap)} onLoad - Executed when the loading process has been finished.
100
108
  * @param {onProgressCallback} onProgress - Unsupported in this loader.
101
109
  * @param {onErrorCallback} onError - Executed when errors occur.
102
- * @return {ImageBitmap|undefined} The image bitmap.
103
110
  */
104
111
  load( url, onLoad, onProgress, onError ) {
105
112
 
@@ -137,8 +144,6 @@ class ImageBitmapLoader extends Loader {
137
144
 
138
145
  scope.manager.itemEnd( url );
139
146
 
140
- return imageBitmap;
141
-
142
147
  }
143
148
 
144
149
  } );
@@ -156,7 +161,7 @@ class ImageBitmapLoader extends Loader {
156
161
 
157
162
  }, 0 );
158
163
 
159
- return cached;
164
+ return;
160
165
 
161
166
  }
162
167
 
@@ -181,8 +186,6 @@ class ImageBitmapLoader extends Loader {
181
186
 
182
187
  scope.manager.itemEnd( url );
183
188
 
184
- return imageBitmap;
185
-
186
189
  } ).catch( function ( e ) {
187
190
 
188
191
  if ( onError ) onError( e );
@@ -61,6 +61,12 @@ class Loader {
61
61
  */
62
62
  this.requestHeader = {};
63
63
 
64
+ if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {
65
+
66
+ __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );
67
+
68
+ }
69
+
64
70
  }
65
71
 
66
72
  /**
@@ -29,7 +29,7 @@ import {
29
29
  import { error, warn } from '../utils.js';
30
30
 
31
31
  /**
32
- * Class for loading geometries. The files are internally
32
+ * Class for loading materials. The files are internally
33
33
  * loaded via {@link FileLoader}.
34
34
  *
35
35
  * ```js
@@ -203,6 +203,7 @@ class MaterialLoader extends Loader {
203
203
  if ( json.alphaToCoverage !== undefined ) material.alphaToCoverage = json.alphaToCoverage;
204
204
  if ( json.premultipliedAlpha !== undefined ) material.premultipliedAlpha = json.premultipliedAlpha;
205
205
  if ( json.forceSinglePass !== undefined ) material.forceSinglePass = json.forceSinglePass;
206
+ if ( json.allowOverride !== undefined ) material.allowOverride = json.allowOverride;
206
207
 
207
208
  if ( json.visible !== undefined ) material.visible = json.visible;
208
209
 
@@ -214,7 +215,7 @@ class MaterialLoader extends Loader {
214
215
 
215
216
  if ( typeof json.vertexColors === 'number' ) {
216
217
 
217
- material.vertexColors = ( json.vertexColors > 0 ) ? true : false;
218
+ material.vertexColors = json.vertexColors > 0;
218
219
 
219
220
  } else {
220
221
 
@@ -19,6 +19,7 @@ import {
19
19
  } from '../constants.js';
20
20
  import { InstancedBufferAttribute } from '../core/InstancedBufferAttribute.js';
21
21
  import { Color } from '../math/Color.js';
22
+ import { Vector3 } from '../math/Vector3.js';
22
23
  import { Object3D } from '../core/Object3D.js';
23
24
  import { Group } from '../objects/Group.js';
24
25
  import { InstancedMesh } from '../objects/InstancedMesh.js';
@@ -62,6 +63,9 @@ import * as Geometries from '../geometries/Geometries.js';
62
63
  import { getTypedArray, error, warn } from '../utils.js';
63
64
  import { Box3 } from '../math/Box3.js';
64
65
  import { Sphere } from '../math/Sphere.js';
66
+ import { SphericalHarmonics3 } from '../math/SphericalHarmonics3.js';
67
+
68
+ const _customGeometries = {};
65
69
 
66
70
  /**
67
71
  * A loader for loading a JSON resource in the [JSON Object/Scene format](https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4).
@@ -119,11 +123,11 @@ class ObjectLoader extends Loader {
119
123
 
120
124
  json = JSON.parse( text );
121
125
 
122
- } catch ( error ) {
126
+ } catch ( e ) {
123
127
 
124
- if ( onError !== undefined ) onError( error );
128
+ if ( onError !== undefined ) onError( e );
125
129
 
126
- error( 'ObjectLoader: Can\'t parse ' + url + '.', error.message );
130
+ error( 'ObjectLoader: Can\'t parse ' + url + '.', e.message );
127
131
 
128
132
  return;
129
133
 
@@ -168,7 +172,17 @@ class ObjectLoader extends Loader {
168
172
 
169
173
  const text = await loader.loadAsync( url, onProgress );
170
174
 
171
- const json = JSON.parse( text );
175
+ let json;
176
+
177
+ try {
178
+
179
+ json = JSON.parse( text );
180
+
181
+ } catch ( e ) {
182
+
183
+ throw new Error( 'ObjectLoader: Can\'t parse ' + url + '. ' + e.message );
184
+
185
+ }
172
186
 
173
187
  const metadata = json.metadata;
174
188
 
@@ -263,6 +277,20 @@ class ObjectLoader extends Loader {
263
277
 
264
278
  }
265
279
 
280
+ /**
281
+ * Registers the given geometry at the internal
282
+ * geometry library.
283
+ *
284
+ * @static
285
+ * @param {string} type - The geometry type.
286
+ * @param {BufferGeometry.constructor} geometryClass - The geometry class.
287
+ */
288
+ static registerGeometry( type, geometryClass ) {
289
+
290
+ _customGeometries[ type ] = geometryClass;
291
+
292
+ }
293
+
266
294
  // internals
267
295
 
268
296
  parseShapes( json ) {
@@ -358,9 +386,13 @@ class ObjectLoader extends Loader {
358
386
 
359
387
  geometry = Geometries[ data.type ].fromJSON( data, shapes );
360
388
 
389
+ } else if ( data.type in _customGeometries ) {
390
+
391
+ geometry = _customGeometries[ data.type ].fromJSON( data, shapes );
392
+
361
393
  } else {
362
394
 
363
- warn( `ObjectLoader: Unsupported geometry type "${ data.type }"` );
395
+ warn( `ObjectLoader: Unknown geometry type "${ data.type }". Use .registerGeometry() before starting the deserialization process.` );
364
396
 
365
397
  }
366
398
 
@@ -740,6 +772,7 @@ class ObjectLoader extends Loader {
740
772
  if ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;
741
773
  if ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;
742
774
  if ( data.compareFunction !== undefined ) texture.compareFunction = data.compareFunction;
775
+ if ( data.normalized !== undefined ) texture.normalized = data.normalized;
743
776
 
744
777
  if ( data.userData !== undefined ) texture.userData = data.userData;
745
778
 
@@ -935,7 +968,8 @@ class ObjectLoader extends Loader {
935
968
 
936
969
  case 'LightProbe':
937
970
 
938
- object = new LightProbe().fromJSON( data );
971
+ const sh = new SphericalHarmonics3().fromArray( data.sh );
972
+ object = new LightProbe( sh, data.intensity );
939
973
 
940
974
  break;
941
975
 
@@ -1127,6 +1161,11 @@ class ObjectLoader extends Loader {
1127
1161
 
1128
1162
  if ( data.up !== undefined ) object.up.fromArray( data.up );
1129
1163
 
1164
+ if ( data.pivot !== undefined ) object.pivot = new Vector3().fromArray( data.pivot );
1165
+
1166
+ if ( data.morphTargetDictionary !== undefined ) object.morphTargetDictionary = Object.assign( {}, data.morphTargetDictionary );
1167
+ if ( data.morphTargetInfluences !== undefined ) object.morphTargetInfluences = data.morphTargetInfluences.slice();
1168
+
1130
1169
  if ( data.castShadow !== undefined ) object.castShadow = data.castShadow;
1131
1170
  if ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;
1132
1171
 
@@ -1144,6 +1183,7 @@ class ObjectLoader extends Loader {
1144
1183
  if ( data.visible !== undefined ) object.visible = data.visible;
1145
1184
  if ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;
1146
1185
  if ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;
1186
+ if ( data.static !== undefined ) object.static = data.static;
1147
1187
  if ( data.userData !== undefined ) object.userData = data.userData;
1148
1188
  if ( data.layers !== undefined ) object.layers.mask = data.layers;
1149
1189
 
@@ -1,4 +1,4 @@
1
- import { nodeObject, float } from '../../nodes/tsl/TSLBase.js';
1
+ import { float } from '../../nodes/tsl/TSLBase.js';
2
2
 
3
3
  import { Loader } from '../Loader.js';
4
4
  import { FileLoader } from '../../loaders/FileLoader.js';
@@ -185,7 +185,7 @@ class NodeLoader extends Loader {
185
185
 
186
186
  }
187
187
 
188
- return nodeObject( new this.nodes[ type ]() );
188
+ return new this.nodes[ type ]();
189
189
 
190
190
  }
191
191
 
@@ -89,6 +89,24 @@ class NodeObjectLoader extends ObjectLoader {
89
89
 
90
90
  }
91
91
 
92
+ /**
93
+ * Async version of {@link NodeObjectLoader#parse}.
94
+ *
95
+ * @param {Object} json - The JSON definition
96
+ * @return {Promise<Object3D>} A Promise that resolves with the parsed 3D object.
97
+ */
98
+ async parseAsync( json ) {
99
+
100
+ this._nodesJSON = json.nodes;
101
+
102
+ const data = await super.parseAsync( json );
103
+
104
+ this._nodesJSON = null; // dispose
105
+
106
+ return data;
107
+
108
+ }
109
+
92
110
  /**
93
111
  * Parses the node objects from the given JSON and textures.
94
112
  *
@@ -832,6 +832,7 @@ class Material extends EventDispatcher {
832
832
  if ( this.alphaToCoverage === true ) data.alphaToCoverage = true;
833
833
  if ( this.premultipliedAlpha === true ) data.premultipliedAlpha = true;
834
834
  if ( this.forceSinglePass === true ) data.forceSinglePass = true;
835
+ if ( this.allowOverride === false ) data.allowOverride = false;
835
836
 
836
837
  if ( this.wireframe === true ) data.wireframe = true;
837
838
  if ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;
@@ -967,6 +968,7 @@ class Material extends EventDispatcher {
967
968
  this.alphaToCoverage = source.alphaToCoverage;
968
969
  this.premultipliedAlpha = source.premultipliedAlpha;
969
970
  this.forceSinglePass = source.forceSinglePass;
971
+ this.allowOverride = source.allowOverride;
970
972
 
971
973
  this.visible = source.visible;
972
974
 
@@ -267,6 +267,14 @@ class MeshLambertMaterial extends Material {
267
267
  */
268
268
  this.reflectivity = 1;
269
269
 
270
+ /**
271
+ * Scales the effect of the environment map by multiplying its color.
272
+ *
273
+ * @type {number}
274
+ * @default 1
275
+ */
276
+ this.envMapIntensity = 1.0;
277
+
270
278
  /**
271
279
  * The index of refraction (IOR) of air (approximately 1) divided by the
272
280
  * index of refraction of the material. It is used with environment mapping
@@ -373,6 +381,7 @@ class MeshLambertMaterial extends Material {
373
381
  this.envMapRotation.copy( source.envMapRotation );
374
382
  this.combine = source.combine;
375
383
  this.reflectivity = source.reflectivity;
384
+ this.envMapIntensity = source.envMapIntensity;
376
385
  this.refractionRatio = source.refractionRatio;
377
386
 
378
387
  this.wireframe = source.wireframe;
@@ -284,6 +284,14 @@ class MeshPhongMaterial extends Material {
284
284
  */
285
285
  this.reflectivity = 1;
286
286
 
287
+ /**
288
+ * Scales the effect of the environment map by multiplying its color.
289
+ *
290
+ * @type {number}
291
+ * @default 1
292
+ */
293
+ this.envMapIntensity = 1.0;
294
+
287
295
  /**
288
296
  * The index of refraction (IOR) of air (approximately 1) divided by the
289
297
  * index of refraction of the material. It is used with environment mapping
@@ -392,6 +400,7 @@ class MeshPhongMaterial extends Material {
392
400
  this.envMapRotation.copy( source.envMapRotation );
393
401
  this.combine = source.combine;
394
402
  this.reflectivity = source.reflectivity;
403
+ this.envMapIntensity = source.envMapIntensity;
395
404
  this.refractionRatio = source.refractionRatio;
396
405
 
397
406
  this.wireframe = source.wireframe;
@@ -57,7 +57,7 @@ class MeshToonMaterial extends Material {
57
57
 
58
58
  /**
59
59
  * Gradient map for toon shading. It's required to set
60
- * {@link Texture#minFilter} and {@link Texture#magFilter} to {@linkNearestFilter}
60
+ * {@link Texture#minFilter} and {@link Texture#magFilter} to {@link NearestFilter}
61
61
  * when using this type of texture.
62
62
  *
63
63
  * @type {?Texture}
@@ -158,9 +158,22 @@ class ShaderMaterial extends Material {
158
158
  this.wireframeLinewidth = 1;
159
159
 
160
160
  /**
161
- * Define whether the material color is affected by global fog settings; `true`
161
+ * Defines whether the material color is affected by global fog settings; `true`
162
162
  * to pass fog uniforms to the shader.
163
163
  *
164
+ * Setting this property to `true` requires the definition of fog uniforms. It is
165
+ * recommended to use `UniformsUtils.merge()` to combine the custom shader uniforms
166
+ * with predefined fog uniforms.
167
+ *
168
+ * ```js
169
+ * const material = new ShaderMaterial( {
170
+ * uniforms: UniformsUtils.merge( [ UniformsLib[ 'fog' ], shaderUniforms ] );
171
+ * vertexShader: vertexShader,
172
+ * fragmentShader: fragmentShader,
173
+ * fog: true
174
+ * } );
175
+ * ```
176
+ *
164
177
  * @type {boolean}
165
178
  * @default false
166
179
  */
@@ -279,6 +292,12 @@ class ShaderMaterial extends Material {
279
292
 
280
293
  this.glslVersion = source.glslVersion;
281
294
 
295
+ this.defaultAttributeValues = Object.assign( {}, source.defaultAttributeValues );
296
+
297
+ this.index0AttributeName = source.index0AttributeName;
298
+
299
+ this.uniformsNeedUpdate = source.uniformsNeedUpdate;
300
+
282
301
  return this;
283
302
 
284
303
  }
@@ -8,8 +8,8 @@ import { positionGeometry } from '../../nodes/accessors/Position.js';
8
8
  import { mix, smoothstep } from '../../nodes/math/MathNode.js';
9
9
  import { Fn, float, vec2, vec3, vec4, If } from '../../nodes/tsl/TSLBase.js';
10
10
  import { uv } from '../../nodes/accessors/UV.js';
11
- import { viewport } from '../../nodes/display/ScreenNode.js';
12
- import { viewportSharedTexture } from '../../nodes/display/ViewportSharedTextureNode.js';
11
+ import { screenDPR, viewport } from '../../nodes/display/ScreenNode.js';
12
+ import { viewportOpaqueMipTexture } from '../../nodes/display/ViewportTextureNode.js';
13
13
 
14
14
  import { LineDashedMaterial } from '../LineDashedMaterial.js';
15
15
  import { NoBlending } from '../../constants.js';
@@ -56,7 +56,7 @@ class Line2NodeMaterial extends NodeMaterial {
56
56
  * @type {boolean}
57
57
  * @default false
58
58
  */
59
- this.useColor = parameters.vertexColors;
59
+ this.vertexColors = parameters.vertexColors;
60
60
 
61
61
  /**
62
62
  * The dash offset.
@@ -133,7 +133,7 @@ class Line2NodeMaterial extends NodeMaterial {
133
133
  const { renderer } = builder;
134
134
 
135
135
  const useAlphaToCoverage = this._useAlphaToCoverage;
136
- const useColor = this.useColor;
136
+ const vertexColors = this.vertexColors;
137
137
  const useDash = this._useDash;
138
138
  const useWorldUnits = this._useWorldUnits;
139
139
 
@@ -300,7 +300,7 @@ class Line2NodeMaterial extends NodeMaterial {
300
300
  offset.assign( offset.mul( materialLineWidth ) );
301
301
 
302
302
  // adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...
303
- offset.assign( offset.div( viewport.w ) );
303
+ offset.assign( offset.div( viewport.w.div( screenDPR ) ) );
304
304
 
305
305
  // select end
306
306
  clip.assign( positionGeometry.y.lessThan( 0.5 ).select( clipStart, clipEnd ) );
@@ -434,7 +434,7 @@ class Line2NodeMaterial extends NodeMaterial {
434
434
 
435
435
  } else {
436
436
 
437
- if ( useColor ) {
437
+ if ( vertexColors ) {
438
438
 
439
439
  const instanceColorStart = attribute( 'instanceColorStart' );
440
440
  const instanceColorEnd = attribute( 'instanceColorEnd' );
@@ -459,7 +459,7 @@ class Line2NodeMaterial extends NodeMaterial {
459
459
 
460
460
  const opacityNode = this.opacityNode ? float( this.opacityNode ) : materialOpacity;
461
461
 
462
- this.outputNode = vec4( this.colorNode.rgb.mul( opacityNode ).add( viewportSharedTexture().rgb.mul( opacityNode.oneMinus() ) ), this.colorNode.a );
462
+ this.outputNode = vec4( this.colorNode.rgb.mul( opacityNode ).add( viewportOpaqueMipTexture().rgb.mul( opacityNode.oneMinus() ) ), this.colorNode.a );
463
463
 
464
464
  }
465
465
 
@@ -537,6 +537,33 @@ class Line2NodeMaterial extends NodeMaterial {
537
537
 
538
538
  }
539
539
 
540
+ /**
541
+ * Copies the properties of the given material to this instance.
542
+ *
543
+ * @param {Line2NodeMaterial} source - The material to copy.
544
+ * @return {Line2NodeMaterial} A reference to this material.
545
+ */
546
+ copy( source ) {
547
+
548
+ super.copy( source );
549
+
550
+ this.vertexColors = source.vertexColors;
551
+ this.dashOffset = source.dashOffset;
552
+
553
+ this.lineColorNode = source.lineColorNode;
554
+ this.offsetNode = source.offsetNode;
555
+ this.dashScaleNode = source.dashScaleNode;
556
+ this.dashSizeNode = source.dashSizeNode;
557
+ this.gapSizeNode = source.gapSizeNode;
558
+
559
+ this._useDash = source._useDash;
560
+ this._useAlphaToCoverage = source._useAlphaToCoverage;
561
+ this._useWorldUnits = source._useWorldUnits;
562
+
563
+ return this;
564
+
565
+ }
566
+
540
567
  }
541
568
 
542
569
  export default Line2NodeMaterial;
@@ -1,4 +1,4 @@
1
- import { clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, specularColor, specularF90, diffuseColor, metalness, roughness, anisotropy, alphaT, anisotropyT, anisotropyB, ior, transmission, thickness, attenuationDistance, attenuationColor, dispersion } from '../../nodes/core/PropertyNode.js';
1
+ import { clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, specularColor, specularColorBlended, specularF90, diffuseColor, metalness, roughness, anisotropy, alphaT, anisotropyT, anisotropyB, ior, transmission, thickness, attenuationDistance, attenuationColor, dispersion } from '../../nodes/core/PropertyNode.js';
2
2
  import { materialClearcoat, materialClearcoatRoughness, materialClearcoatNormal, materialSheen, materialSheenRoughness, materialIridescence, materialIridescenceIOR, materialIridescenceThickness, materialSpecularIntensity, materialSpecularColor, materialAnisotropy, materialIOR, materialTransmission, materialThickness, materialAttenuationDistance, materialAttenuationColor, materialDispersion } from '../../nodes/accessors/MaterialNode.js';
3
3
  import { float, vec2, vec3, If } from '../../nodes/tsl/TSLBase.js';
4
4
  import getRoughness from '../../nodes/functions/material/getRoughness.js';
@@ -350,7 +350,8 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
350
350
  const iorNode = this.iorNode ? float( this.iorNode ) : materialIOR;
351
351
 
352
352
  ior.assign( iorNode );
353
- specularColor.assign( mix( min( pow2( ior.sub( 1.0 ).div( ior.add( 1.0 ) ) ).mul( materialSpecularColor ), vec3( 1.0 ) ).mul( materialSpecularIntensity ), diffuseColor.rgb, metalness ) );
353
+ specularColor.assign( min( pow2( ior.sub( 1.0 ).div( ior.add( 1.0 ) ) ).mul( materialSpecularColor ), vec3( 1.0 ) ).mul( materialSpecularIntensity ) );
354
+ specularColorBlended.assign( mix( specularColor, diffuseColor.rgb, metalness ) );
354
355
  specularF90.assign( mix( materialSpecularIntensity, 1.0, metalness ) );
355
356
 
356
357
  }
@@ -501,6 +502,8 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
501
502
  this.specularIntensityNode = source.specularIntensityNode;
502
503
  this.specularColorNode = source.specularColorNode;
503
504
 
505
+ this.iorNode = source.iorNode;
506
+
504
507
  this.transmissionNode = source.transmissionNode;
505
508
  this.thicknessNode = source.thicknessNode;
506
509
  this.attenuationDistanceNode = source.attenuationDistanceNode;
@@ -1,11 +1,11 @@
1
1
  import NodeMaterial from './NodeMaterial.js';
2
- import { diffuseColor, metalness, roughness, specularColor, specularF90 } from '../../nodes/core/PropertyNode.js';
2
+ import { diffuseColor, diffuseContribution, metalness, roughness, specularColor, specularColorBlended, specularF90 } from '../../nodes/core/PropertyNode.js';
3
3
  import { mix } from '../../nodes/math/MathNode.js';
4
4
  import { materialRoughness, materialMetalness } from '../../nodes/accessors/MaterialNode.js';
5
5
  import getRoughness from '../../nodes/functions/material/getRoughness.js';
6
6
  import PhysicalLightingModel from '../../nodes/functions/PhysicalLightingModel.js';
7
7
  import EnvironmentNode from '../../nodes/lighting/EnvironmentNode.js';
8
- import { float, vec3, vec4 } from '../../nodes/tsl/TSLBase.js';
8
+ import { float, vec3 } from '../../nodes/tsl/TSLBase.js';
9
9
 
10
10
  import { MeshStandardMaterial } from '../MeshStandardMaterial.js';
11
11
 
@@ -135,7 +135,8 @@ class MeshStandardNodeMaterial extends NodeMaterial {
135
135
 
136
136
  const specularColorNode = mix( vec3( 0.04 ), diffuseColor.rgb, metalness );
137
137
 
138
- specularColor.assign( specularColorNode );
138
+ specularColor.assign( vec3( 0.04 ) );
139
+ specularColorBlended.assign( specularColorNode );
139
140
  specularF90.assign( 1.0 );
140
141
 
141
142
  }
@@ -166,7 +167,7 @@ class MeshStandardNodeMaterial extends NodeMaterial {
166
167
 
167
168
  // DIFFUSE COLOR
168
169
 
169
- diffuseColor.assign( vec4( diffuseColor.rgb.mul( metalnessNode.oneMinus() ), diffuseColor.a ) );
170
+ diffuseContribution.assign( diffuseColor.rgb.mul( metalnessNode.oneMinus() ) );
170
171
 
171
172
  }
172
173