@plastic-software/three 0.181.3 → 0.183.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 (437) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +11330 -10017
  4. package/build/three.core.js +10011 -9493
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1414 -631
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +21 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +8007 -5427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +8005 -5426
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +2 -2
  16. package/examples/jsm/controls/ArcballControls.js +3 -3
  17. package/examples/jsm/controls/MapControls.js +55 -1
  18. package/examples/jsm/controls/OrbitControls.js +109 -6
  19. package/examples/jsm/controls/TrackballControls.js +6 -6
  20. package/examples/jsm/csm/CSM.js +2 -1
  21. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  22. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  23. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  24. package/examples/jsm/exporters/EXRExporter.js +1 -1
  25. package/examples/jsm/exporters/GLTFExporter.js +131 -4
  26. package/examples/jsm/exporters/USDZExporter.js +22 -3
  27. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  28. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  29. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  30. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  31. package/examples/jsm/helpers/ViewHelper.js +67 -8
  32. package/examples/jsm/inspector/Inspector.js +74 -14
  33. package/examples/jsm/inspector/RendererInspector.js +12 -2
  34. package/examples/jsm/inspector/tabs/Console.js +41 -7
  35. package/examples/jsm/inspector/tabs/Parameters.js +18 -2
  36. package/examples/jsm/inspector/tabs/Performance.js +2 -2
  37. package/examples/jsm/inspector/tabs/Viewer.js +4 -4
  38. package/examples/jsm/inspector/ui/Profiler.js +1836 -31
  39. package/examples/jsm/inspector/ui/Style.js +973 -14
  40. package/examples/jsm/inspector/ui/Tab.js +188 -1
  41. package/examples/jsm/inspector/ui/Values.js +17 -1
  42. package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
  43. package/examples/jsm/lines/LineMaterial.js +6 -0
  44. package/examples/jsm/loaders/3DMLoader.js +5 -4
  45. package/examples/jsm/loaders/3MFLoader.js +2 -2
  46. package/examples/jsm/loaders/AMFLoader.js +2 -2
  47. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  48. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  49. package/examples/jsm/loaders/EXRLoader.js +5 -5
  50. package/examples/jsm/loaders/FBXLoader.js +2 -4
  51. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  52. package/examples/jsm/loaders/GLTFLoader.js +122 -171
  53. package/examples/jsm/loaders/HDRLoader.js +0 -1
  54. package/examples/jsm/loaders/KMZLoader.js +5 -5
  55. package/examples/jsm/loaders/KTX2Loader.js +19 -3
  56. package/examples/jsm/loaders/LDrawLoader.js +2 -3
  57. package/examples/jsm/loaders/LWOLoader.js +7 -39
  58. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  59. package/examples/jsm/loaders/PCDLoader.js +4 -2
  60. package/examples/jsm/loaders/SVGLoader.js +1 -1
  61. package/examples/jsm/loaders/TDSLoader.js +0 -2
  62. package/examples/jsm/loaders/TGALoader.js +0 -2
  63. package/examples/jsm/loaders/USDLoader.js +100 -40
  64. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  65. package/examples/jsm/loaders/VOXLoader.js +660 -117
  66. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  67. package/examples/jsm/loaders/VTKLoader.js +37 -24
  68. package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
  69. package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
  70. package/examples/jsm/loaders/usd/USDAParser.js +447 -366
  71. package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
  72. package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
  73. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  74. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  75. package/examples/jsm/math/Octree.js +131 -1
  76. package/examples/jsm/misc/Volume.js +0 -1
  77. package/examples/jsm/misc/VolumeSlice.js +0 -1
  78. package/examples/jsm/objects/LensflareMesh.js +1 -1
  79. package/examples/jsm/objects/Sky.js +76 -4
  80. package/examples/jsm/objects/SkyMesh.js +127 -10
  81. package/examples/jsm/objects/Water.js +4 -3
  82. package/examples/jsm/objects/Water2.js +5 -3
  83. package/examples/jsm/objects/WaterMesh.js +5 -7
  84. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  85. package/examples/jsm/physics/JoltPhysics.js +10 -6
  86. package/examples/jsm/physics/RapierPhysics.js +9 -5
  87. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  88. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  89. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  90. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  91. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  92. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  93. package/examples/jsm/renderers/Projector.js +268 -30
  94. package/examples/jsm/renderers/SVGRenderer.js +193 -60
  95. package/examples/jsm/shaders/GTAOShader.js +19 -6
  96. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  97. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  98. package/examples/jsm/shaders/SAOShader.js +17 -4
  99. package/examples/jsm/shaders/SSAOShader.js +11 -1
  100. package/examples/jsm/shaders/SSRShader.js +6 -5
  101. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  102. package/examples/jsm/shaders/VignetteShader.js +1 -1
  103. package/examples/jsm/transpiler/AST.js +44 -0
  104. package/examples/jsm/transpiler/GLSLDecoder.js +61 -4
  105. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  106. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  107. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  108. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  109. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  110. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  111. package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
  112. package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
  113. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  114. package/examples/jsm/tsl/display/CRT.js +150 -0
  115. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  116. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  117. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  118. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  119. package/examples/jsm/tsl/display/GTAONode.js +5 -4
  120. package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
  121. package/examples/jsm/tsl/display/GodraysNode.js +624 -0
  122. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  123. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  124. package/examples/jsm/tsl/display/OutlineNode.js +3 -3
  125. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  126. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  127. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  128. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  129. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  130. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  131. package/examples/jsm/tsl/display/SSGINode.js +8 -20
  132. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  133. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  134. package/examples/jsm/tsl/display/Shape.js +29 -0
  135. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  136. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  137. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  138. package/examples/jsm/tsl/display/TRAANode.js +273 -125
  139. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  140. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  141. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  142. package/examples/jsm/tsl/math/Bayer.js +40 -1
  143. package/examples/jsm/utils/LDrawUtils.js +1 -1
  144. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  145. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  146. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  147. package/package.json +20 -26
  148. package/src/Three.Core.js +2 -1
  149. package/src/Three.TSL.js +19 -11
  150. package/src/Three.WebGPU.Nodes.js +2 -0
  151. package/src/Three.WebGPU.js +3 -0
  152. package/src/Three.js +1 -0
  153. package/src/animation/AnimationAction.js +1 -1
  154. package/src/animation/AnimationClip.js +1 -1
  155. package/src/animation/AnimationMixer.js +6 -0
  156. package/src/animation/AnimationUtils.js +1 -12
  157. package/src/animation/KeyframeTrack.js +47 -8
  158. package/src/animation/PropertyMixer.js +4 -4
  159. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  160. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  161. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  162. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  163. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  164. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  165. package/src/audio/Audio.js +1 -1
  166. package/src/audio/AudioListener.js +5 -3
  167. package/src/cameras/Camera.js +32 -2
  168. package/src/cameras/CubeCamera.js +20 -0
  169. package/src/constants.js +90 -5
  170. package/src/core/BufferGeometry.js +14 -2
  171. package/src/core/Clock.js +7 -0
  172. package/src/core/Object3D.js +56 -4
  173. package/src/core/Raycaster.js +2 -2
  174. package/src/core/RenderTarget.js +3 -4
  175. package/src/extras/PMREMGenerator.js +7 -18
  176. package/src/extras/TextureUtils.js +5 -1
  177. package/src/geometries/ExtrudeGeometry.js +2 -2
  178. package/src/geometries/PolyhedronGeometry.js +1 -1
  179. package/src/geometries/TorusGeometry.js +8 -3
  180. package/src/helpers/CameraHelper.js +3 -0
  181. package/src/helpers/DirectionalLightHelper.js +4 -1
  182. package/src/helpers/HemisphereLightHelper.js +3 -0
  183. package/src/helpers/PointLightHelper.js +1 -25
  184. package/src/helpers/SpotLightHelper.js +3 -0
  185. package/src/lights/DirectionalLight.js +13 -0
  186. package/src/lights/HemisphereLight.js +10 -0
  187. package/src/lights/Light.js +1 -11
  188. package/src/lights/LightProbe.js +0 -15
  189. package/src/lights/LightShadow.js +15 -6
  190. package/src/lights/PointLight.js +15 -0
  191. package/src/lights/PointLightShadow.js +0 -86
  192. package/src/lights/SpotLight.js +22 -1
  193. package/src/lights/webgpu/IESSpotLight.js +2 -1
  194. package/src/loaders/Cache.js +28 -0
  195. package/src/loaders/FileLoader.js +1 -1
  196. package/src/loaders/ImageBitmapLoader.js +8 -3
  197. package/src/loaders/Loader.js +6 -0
  198. package/src/loaders/MaterialLoader.js +2 -1
  199. package/src/loaders/ObjectLoader.js +21 -2
  200. package/src/loaders/nodes/NodeLoader.js +2 -2
  201. package/src/materials/Material.js +2 -0
  202. package/src/materials/MeshLambertMaterial.js +9 -0
  203. package/src/materials/MeshPhongMaterial.js +9 -0
  204. package/src/materials/ShaderMaterial.js +20 -1
  205. package/src/materials/nodes/Line2NodeMaterial.js +7 -7
  206. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  207. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  208. package/src/materials/nodes/NodeMaterial.js +72 -25
  209. package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
  210. package/src/math/Line3.js +3 -5
  211. package/src/math/MathUtils.js +10 -10
  212. package/src/math/Matrix4.js +74 -65
  213. package/src/math/Quaternion.js +3 -29
  214. package/src/math/Sphere.js +1 -1
  215. package/src/math/Vector3.js +3 -5
  216. package/src/math/interpolants/BezierInterpolant.js +108 -0
  217. package/src/nodes/Nodes.js +87 -68
  218. package/src/nodes/TSL.js +6 -6
  219. package/src/nodes/accessors/Arrays.js +1 -1
  220. package/src/nodes/accessors/BatchNode.js +10 -10
  221. package/src/nodes/accessors/Bitangent.js +5 -5
  222. package/src/nodes/accessors/BufferAttributeNode.js +98 -12
  223. package/src/nodes/accessors/BufferNode.js +29 -2
  224. package/src/nodes/accessors/Camera.js +149 -28
  225. package/src/nodes/accessors/ClippingNode.js +4 -4
  226. package/src/nodes/accessors/CubeTextureNode.js +20 -1
  227. package/src/nodes/accessors/InstanceNode.js +148 -43
  228. package/src/nodes/accessors/MaterialNode.js +9 -1
  229. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  230. package/src/nodes/accessors/ModelNode.js +1 -1
  231. package/src/nodes/accessors/Normal.js +11 -11
  232. package/src/nodes/accessors/Position.js +34 -2
  233. package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
  234. package/src/nodes/accessors/ReferenceNode.js +4 -4
  235. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  236. package/src/nodes/accessors/SceneProperties.js +53 -0
  237. package/src/nodes/accessors/SkinningNode.js +27 -26
  238. package/src/nodes/accessors/StorageBufferNode.js +4 -21
  239. package/src/nodes/accessors/StorageTextureNode.js +37 -1
  240. package/src/nodes/accessors/Tangent.js +4 -14
  241. package/src/nodes/accessors/Texture3DNode.js +32 -35
  242. package/src/nodes/accessors/TextureNode.js +58 -22
  243. package/src/nodes/accessors/UniformArrayNode.js +4 -2
  244. package/src/nodes/accessors/UserDataNode.js +1 -2
  245. package/src/nodes/accessors/VertexColorNode.js +1 -2
  246. package/src/nodes/code/FunctionNode.js +1 -2
  247. package/src/nodes/core/ArrayNode.js +20 -1
  248. package/src/nodes/core/AssignNode.js +2 -2
  249. package/src/nodes/core/AttributeNode.js +2 -2
  250. package/src/nodes/core/ContextNode.js +103 -4
  251. package/src/nodes/core/MRTNode.js +48 -2
  252. package/src/nodes/core/Node.js +29 -3
  253. package/src/nodes/core/NodeBuilder.js +170 -53
  254. package/src/nodes/core/NodeError.js +28 -0
  255. package/src/nodes/core/NodeFrame.js +12 -4
  256. package/src/nodes/core/NodeUtils.js +10 -8
  257. package/src/nodes/core/OutputStructNode.js +12 -10
  258. package/src/nodes/core/ParameterNode.js +3 -3
  259. package/src/nodes/core/PropertyNode.js +19 -3
  260. package/src/nodes/core/StackNode.js +65 -16
  261. package/src/nodes/core/StackTrace.js +139 -0
  262. package/src/nodes/core/StructNode.js +16 -2
  263. package/src/nodes/core/StructTypeNode.js +11 -17
  264. package/src/nodes/core/SubBuildNode.js +1 -1
  265. package/src/nodes/core/UniformNode.js +21 -5
  266. package/src/nodes/core/VarNode.js +47 -22
  267. package/src/nodes/core/VaryingNode.js +1 -18
  268. package/src/nodes/display/BlendModes.js +0 -64
  269. package/src/nodes/display/ColorAdjustment.js +17 -0
  270. package/src/nodes/display/ColorSpaceNode.js +3 -3
  271. package/src/nodes/display/NormalMapNode.js +39 -4
  272. package/src/nodes/display/PassNode.js +98 -9
  273. package/src/nodes/display/RenderOutputNode.js +3 -3
  274. package/src/nodes/display/ScreenNode.js +3 -1
  275. package/src/nodes/display/ToneMappingNode.js +1 -1
  276. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  277. package/src/nodes/display/ViewportDepthNode.js +52 -4
  278. package/src/nodes/display/ViewportTextureNode.js +21 -4
  279. package/src/nodes/fog/Fog.js +18 -35
  280. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  281. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  282. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  283. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
  284. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  285. package/src/nodes/geometry/RangeNode.js +4 -2
  286. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
  287. package/src/nodes/gpgpu/ComputeNode.js +5 -4
  288. package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
  289. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  290. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  291. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  292. package/src/nodes/lighting/LightsNode.js +2 -2
  293. package/src/nodes/lighting/PointShadowNode.js +162 -149
  294. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  295. package/src/nodes/lighting/ShadowNode.js +97 -41
  296. package/src/nodes/math/BitcountNode.js +433 -0
  297. package/src/nodes/math/ConditionalNode.js +2 -2
  298. package/src/nodes/math/MathNode.js +3 -40
  299. package/src/nodes/math/OperatorNode.js +2 -1
  300. package/src/nodes/math/PackFloatNode.js +98 -0
  301. package/src/nodes/math/UnpackFloatNode.js +96 -0
  302. package/src/nodes/pmrem/PMREMNode.js +1 -1
  303. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  304. package/src/nodes/tsl/TSLCore.js +17 -14
  305. package/src/nodes/utils/ArrayElementNode.js +13 -0
  306. package/src/nodes/utils/DebugNode.js +11 -11
  307. package/src/nodes/utils/EventNode.js +1 -2
  308. package/src/nodes/utils/JoinNode.js +2 -2
  309. package/src/nodes/utils/LoopNode.js +1 -1
  310. package/src/nodes/utils/MemberNode.js +1 -1
  311. package/src/nodes/utils/Packing.js +13 -1
  312. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  313. package/src/nodes/utils/RTTNode.js +1 -1
  314. package/src/nodes/utils/ReflectorNode.js +3 -4
  315. package/src/nodes/utils/SampleNode.js +1 -1
  316. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  317. package/src/nodes/utils/UVUtils.js +28 -0
  318. package/src/objects/BatchedMesh.js +27 -14
  319. package/src/objects/InstancedMesh.js +11 -0
  320. package/src/objects/Line.js +1 -1
  321. package/src/objects/Mesh.js +1 -1
  322. package/src/objects/Points.js +1 -1
  323. package/src/objects/Skeleton.js +9 -0
  324. package/src/renderers/WebGLRenderer.js +178 -92
  325. package/src/renderers/common/Backend.js +29 -0
  326. package/src/renderers/common/Background.js +24 -11
  327. package/src/renderers/common/BindGroup.js +1 -9
  328. package/src/renderers/common/Binding.js +11 -0
  329. package/src/renderers/common/Bindings.js +27 -12
  330. package/src/renderers/common/BlendMode.js +143 -0
  331. package/src/renderers/common/Buffer.js +40 -0
  332. package/src/renderers/common/BundleGroup.js +1 -1
  333. package/src/renderers/common/ChainMap.js +30 -6
  334. package/src/renderers/common/CubeRenderTarget.js +50 -6
  335. package/src/renderers/common/Geometries.js +29 -3
  336. package/src/renderers/common/Lighting.js +5 -21
  337. package/src/renderers/common/Pipelines.js +4 -4
  338. package/src/renderers/common/PostProcessing.js +8 -206
  339. package/src/renderers/common/RenderBundles.js +2 -1
  340. package/src/renderers/common/RenderContext.js +16 -0
  341. package/src/renderers/common/RenderContexts.js +33 -49
  342. package/src/renderers/common/RenderLists.js +2 -1
  343. package/src/renderers/common/RenderObject.js +15 -3
  344. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  345. package/src/renderers/common/RenderObjects.js +18 -2
  346. package/src/renderers/common/RenderPipeline.js +203 -17
  347. package/src/renderers/common/Renderer.js +257 -72
  348. package/src/renderers/common/Sampler.js +4 -4
  349. package/src/renderers/common/StorageBuffer.js +13 -1
  350. package/src/renderers/common/Textures.js +17 -1
  351. package/src/renderers/common/TimestampQueryPool.js +5 -3
  352. package/src/renderers/common/Uniform.js +8 -0
  353. package/src/renderers/common/UniformsGroup.js +61 -0
  354. package/src/renderers/common/XRManager.js +3 -2
  355. package/src/renderers/common/extras/PMREMGenerator.js +2 -8
  356. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  357. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
  358. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  359. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  360. package/src/renderers/shaders/DFGLUTData.js +19 -34
  361. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  362. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  363. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  364. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  365. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  366. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
  367. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  369. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  370. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  371. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
  372. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  373. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  374. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  375. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  376. package/src/renderers/shaders/ShaderChunk.js +3 -3
  377. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  378. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  379. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  380. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  381. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  382. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  383. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  384. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  385. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  386. package/src/renderers/shaders/ShaderLib.js +7 -5
  387. package/src/renderers/shaders/UniformsLib.js +0 -3
  388. package/src/renderers/webgl/WebGLBackground.js +2 -2
  389. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  390. package/src/renderers/webgl/WebGLCapabilities.js +3 -4
  391. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  392. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  393. package/src/renderers/webgl/WebGLLights.js +18 -1
  394. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  395. package/src/renderers/webgl/WebGLObjects.js +3 -1
  396. package/src/renderers/webgl/WebGLOutput.js +267 -0
  397. package/src/renderers/webgl/WebGLProgram.js +45 -109
  398. package/src/renderers/webgl/WebGLPrograms.js +45 -49
  399. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  400. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  401. package/src/renderers/webgl/WebGLState.js +32 -37
  402. package/src/renderers/webgl/WebGLTextures.js +89 -28
  403. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  404. package/src/renderers/webgl/WebGLUtils.js +6 -2
  405. package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
  406. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
  407. package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
  408. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
  409. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
  410. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  411. package/src/renderers/webgpu/WebGPUBackend.js +119 -13
  412. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  413. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
  414. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
  415. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  416. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -0
  417. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  418. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  419. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +65 -42
  420. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  421. package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
  422. package/src/renderers/webxr/WebXRManager.js +2 -2
  423. package/src/textures/CubeDepthTexture.js +76 -0
  424. package/src/textures/Source.js +1 -1
  425. package/src/textures/Texture.js +3 -3
  426. package/src/utils.js +258 -3
  427. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  428. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  429. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  430. package/src/nodes/accessors/SceneNode.js +0 -145
  431. package/src/nodes/code/ScriptableNode.js +0 -726
  432. package/src/nodes/code/ScriptableValueNode.js +0 -253
  433. package/src/nodes/display/PosterizeNode.js +0 -65
  434. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  435. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  436. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  437. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -1,726 +0,0 @@
1
- import Node from '../core/Node.js';
2
- import { scriptableValue } from './ScriptableValueNode.js';
3
- import { nodeProxy, float } from '../tsl/TSLBase.js';
4
- import { hashArray, hashString } from '../core/NodeUtils.js';
5
-
6
- /**
7
- * A Map-like data structure for managing resources of scriptable nodes.
8
- *
9
- * @augments Map
10
- */
11
- class Resources extends Map {
12
-
13
- get( key, callback = null, ...params ) {
14
-
15
- if ( this.has( key ) ) return super.get( key );
16
-
17
- if ( callback !== null ) {
18
-
19
- const value = callback( ...params );
20
- this.set( key, value );
21
- return value;
22
-
23
- }
24
-
25
- }
26
-
27
- }
28
-
29
- class Parameters {
30
-
31
- constructor( scriptableNode ) {
32
-
33
- this.scriptableNode = scriptableNode;
34
-
35
- }
36
-
37
- get parameters() {
38
-
39
- return this.scriptableNode.parameters;
40
-
41
- }
42
-
43
- get layout() {
44
-
45
- return this.scriptableNode.getLayout();
46
-
47
- }
48
-
49
- getInputLayout( id ) {
50
-
51
- return this.scriptableNode.getInputLayout( id );
52
-
53
- }
54
-
55
- get( name ) {
56
-
57
- const param = this.parameters[ name ];
58
- const value = param ? param.getValue() : null;
59
-
60
- return value;
61
-
62
- }
63
-
64
- }
65
-
66
- /**
67
- * Defines the resources (e.g. namespaces) of scriptable nodes.
68
- *
69
- * @type {Resources}
70
- */
71
- export const ScriptableNodeResources = new Resources();
72
-
73
- /**
74
- * This type of node allows to implement nodes with custom scripts. The script
75
- * section is represented as an instance of `CodeNode` written with JavaScript.
76
- * The script itself must adhere to a specific structure.
77
- *
78
- * - main(): Executed once by default and every time `node.needsUpdate` is set.
79
- * - layout: The layout object defines the script's interface (inputs and outputs).
80
- *
81
- * ```js
82
- * ScriptableNodeResources.set( 'TSL', TSL );
83
- *
84
- * const scriptableNode = scriptable( js( `
85
- * layout = {
86
- * outputType: 'node',
87
- * elements: [
88
- * { name: 'source', inputType: 'node' },
89
- * ]
90
- * };
91
- *
92
- * const { mul, oscSine } = TSL;
93
- *
94
- * function main() {
95
- * const source = parameters.get( 'source' ) || float();
96
- * return mul( source, oscSine() ) );
97
- * }
98
- *
99
- * ` ) );
100
- *
101
- * scriptableNode.setParameter( 'source', color( 1, 0, 0 ) );
102
- *
103
- * const material = new THREE.MeshBasicNodeMaterial();
104
- * material.colorNode = scriptableNode;
105
- * ```
106
- *
107
- * @augments Node
108
- */
109
- class ScriptableNode extends Node {
110
-
111
- static get type() {
112
-
113
- return 'ScriptableNode';
114
-
115
- }
116
-
117
- /**
118
- * Constructs a new scriptable node.
119
- *
120
- * @param {?CodeNode} [codeNode=null] - The code node.
121
- * @param {Object} [parameters={}] - The parameters definition.
122
- */
123
- constructor( codeNode = null, parameters = {} ) {
124
-
125
- super();
126
-
127
- /**
128
- * The code node.
129
- *
130
- * @type {?CodeNode}
131
- * @default null
132
- */
133
- this.codeNode = codeNode;
134
-
135
- /**
136
- * The parameters definition.
137
- *
138
- * @type {Object}
139
- * @default {}
140
- */
141
- this.parameters = parameters;
142
-
143
- this._local = new Resources();
144
- this._output = scriptableValue( null );
145
- this._outputs = {};
146
- this._source = this.source;
147
- this._method = null;
148
- this._object = null;
149
- this._value = null;
150
- this._needsOutputUpdate = true;
151
-
152
- this.onRefresh = this.onRefresh.bind( this );
153
-
154
- /**
155
- * This flag can be used for type testing.
156
- *
157
- * @type {boolean}
158
- * @readonly
159
- * @default true
160
- */
161
- this.isScriptableNode = true;
162
-
163
- }
164
-
165
- /**
166
- * The source code of the scriptable node.
167
- *
168
- * @type {string}
169
- */
170
- get source() {
171
-
172
- return this.codeNode ? this.codeNode.code : '';
173
-
174
- }
175
-
176
- /**
177
- * Sets the reference of a local script variable.
178
- *
179
- * @param {string} name - The variable name.
180
- * @param {Object} value - The reference to set.
181
- * @return {Resources} The resource map
182
- */
183
- setLocal( name, value ) {
184
-
185
- return this._local.set( name, value );
186
-
187
- }
188
-
189
- /**
190
- * Gets the value of a local script variable.
191
- *
192
- * @param {string} name - The variable name.
193
- * @return {Object} The value.
194
- */
195
- getLocal( name ) {
196
-
197
- return this._local.get( name );
198
-
199
- }
200
-
201
- /**
202
- * Event listener for the `refresh` event.
203
- */
204
- onRefresh() {
205
-
206
- this._refresh();
207
-
208
- }
209
-
210
- /**
211
- * Returns an input from the layout with the given id/name.
212
- *
213
- * @param {string} id - The id/name of the input.
214
- * @return {Object} The element entry.
215
- */
216
- getInputLayout( id ) {
217
-
218
- for ( const element of this.getLayout() ) {
219
-
220
- if ( element.inputType && ( element.id === id || element.name === id ) ) {
221
-
222
- return element;
223
-
224
- }
225
-
226
- }
227
-
228
- }
229
-
230
- /**
231
- * Returns an output from the layout with the given id/name.
232
- *
233
- * @param {string} id - The id/name of the output.
234
- * @return {Object} The element entry.
235
- */
236
- getOutputLayout( id ) {
237
-
238
- for ( const element of this.getLayout() ) {
239
-
240
- if ( element.outputType && ( element.id === id || element.name === id ) ) {
241
-
242
- return element;
243
-
244
- }
245
-
246
- }
247
-
248
- }
249
-
250
- /**
251
- * Defines a script output for the given name and value.
252
- *
253
- * @param {string} name - The name of the output.
254
- * @param {Node} value - The node value.
255
- * @return {ScriptableNode} A reference to this node.
256
- */
257
- setOutput( name, value ) {
258
-
259
- const outputs = this._outputs;
260
-
261
- if ( outputs[ name ] === undefined ) {
262
-
263
- outputs[ name ] = scriptableValue( value );
264
-
265
- } else {
266
-
267
- outputs[ name ].value = value;
268
-
269
- }
270
-
271
- return this;
272
-
273
- }
274
-
275
- /**
276
- * Returns a script output for the given name.
277
- *
278
- * @param {string} name - The name of the output.
279
- * @return {ScriptableValueNode} The node value.
280
- */
281
- getOutput( name ) {
282
-
283
- return this._outputs[ name ];
284
-
285
- }
286
-
287
- /**
288
- * Returns a parameter for the given name
289
- *
290
- * @param {string} name - The name of the parameter.
291
- * @return {ScriptableValueNode} The node value.
292
- */
293
- getParameter( name ) {
294
-
295
- return this.parameters[ name ];
296
-
297
- }
298
-
299
- /**
300
- * Sets a value for the given parameter name.
301
- *
302
- * @param {string} name - The parameter name.
303
- * @param {any} value - The parameter value.
304
- * @return {ScriptableNode} A reference to this node.
305
- */
306
- setParameter( name, value ) {
307
-
308
- const parameters = this.parameters;
309
-
310
- if ( value && value.isScriptableNode ) {
311
-
312
- this.deleteParameter( name );
313
-
314
- parameters[ name ] = value;
315
- parameters[ name ].getDefaultOutput().events.addEventListener( 'refresh', this.onRefresh );
316
-
317
- } else if ( value && value.isScriptableValueNode ) {
318
-
319
- this.deleteParameter( name );
320
-
321
- parameters[ name ] = value;
322
- parameters[ name ].events.addEventListener( 'refresh', this.onRefresh );
323
-
324
- } else if ( parameters[ name ] === undefined ) {
325
-
326
- parameters[ name ] = scriptableValue( value );
327
- parameters[ name ].events.addEventListener( 'refresh', this.onRefresh );
328
-
329
- } else {
330
-
331
- parameters[ name ].value = value;
332
-
333
- }
334
-
335
- return this;
336
-
337
- }
338
-
339
- /**
340
- * Returns the value of this node which is the value of
341
- * the default output.
342
- *
343
- * @return {Node} The value.
344
- */
345
- getValue() {
346
-
347
- return this.getDefaultOutput().getValue();
348
-
349
- }
350
-
351
- /**
352
- * Deletes a parameter from the script.
353
- *
354
- * @param {string} name - The parameter to remove.
355
- * @return {ScriptableNode} A reference to this node.
356
- */
357
- deleteParameter( name ) {
358
-
359
- let valueNode = this.parameters[ name ];
360
-
361
- if ( valueNode ) {
362
-
363
- if ( valueNode.isScriptableNode ) valueNode = valueNode.getDefaultOutput();
364
-
365
- valueNode.events.removeEventListener( 'refresh', this.onRefresh );
366
-
367
- }
368
-
369
- return this;
370
-
371
- }
372
-
373
- /**
374
- * Deletes all parameters from the script.
375
- *
376
- * @return {ScriptableNode} A reference to this node.
377
- */
378
- clearParameters() {
379
-
380
- for ( const name of Object.keys( this.parameters ) ) {
381
-
382
- this.deleteParameter( name );
383
-
384
- }
385
-
386
- this.needsUpdate = true;
387
-
388
- return this;
389
-
390
- }
391
-
392
- /**
393
- * Calls a function from the script.
394
- *
395
- * @param {string} name - The function name.
396
- * @param {...any} params - A list of parameters.
397
- * @return {any} The result of the function call.
398
- */
399
- call( name, ...params ) {
400
-
401
- const object = this.getObject();
402
- const method = object[ name ];
403
-
404
- if ( typeof method === 'function' ) {
405
-
406
- return method( ...params );
407
-
408
- }
409
-
410
- }
411
-
412
- /**
413
- * Asynchronously calls a function from the script.
414
- *
415
- * @param {string} name - The function name.
416
- * @param {...any} params - A list of parameters.
417
- * @return {Promise<any>} The result of the function call.
418
- */
419
- async callAsync( name, ...params ) {
420
-
421
- const object = this.getObject();
422
- const method = object[ name ];
423
-
424
- if ( typeof method === 'function' ) {
425
-
426
- return method.constructor.name === 'AsyncFunction' ? await method( ...params ) : method( ...params );
427
-
428
- }
429
-
430
- }
431
-
432
- /**
433
- * Overwritten since the node types is inferred from the script's output.
434
- *
435
- * @param {NodeBuilder} builder - The current node builder
436
- * @return {string} The node type.
437
- */
438
- getNodeType( builder ) {
439
-
440
- return this.getDefaultOutputNode().getNodeType( builder );
441
-
442
- }
443
-
444
- /**
445
- * Refreshes the script node.
446
- *
447
- * @param {?string} [output=null] - An optional output.
448
- */
449
- refresh( output = null ) {
450
-
451
- if ( output !== null ) {
452
-
453
- this.getOutput( output ).refresh();
454
-
455
- } else {
456
-
457
- this._refresh();
458
-
459
- }
460
-
461
- }
462
-
463
- /**
464
- * Returns an object representation of the script.
465
- *
466
- * @return {Object} The result object.
467
- */
468
- getObject() {
469
-
470
- if ( this.needsUpdate ) this.dispose();
471
- if ( this._object !== null ) return this._object;
472
-
473
- //
474
-
475
- const refresh = () => this.refresh();
476
- const setOutput = ( id, value ) => this.setOutput( id, value );
477
-
478
- const parameters = new Parameters( this );
479
-
480
- const THREE = ScriptableNodeResources.get( 'THREE' );
481
- const TSL = ScriptableNodeResources.get( 'TSL' );
482
-
483
- const method = this.getMethod();
484
- const params = [ parameters, this._local, ScriptableNodeResources, refresh, setOutput, THREE, TSL ];
485
-
486
- this._object = method( ...params );
487
-
488
- const layout = this._object.layout;
489
-
490
- if ( layout ) {
491
-
492
- if ( layout.cache === false ) {
493
-
494
- this._local.clear();
495
-
496
- }
497
-
498
- // default output
499
- this._output.outputType = layout.outputType || null;
500
-
501
- if ( Array.isArray( layout.elements ) ) {
502
-
503
- for ( const element of layout.elements ) {
504
-
505
- const id = element.id || element.name;
506
-
507
- if ( element.inputType ) {
508
-
509
- if ( this.getParameter( id ) === undefined ) this.setParameter( id, null );
510
-
511
- this.getParameter( id ).inputType = element.inputType;
512
-
513
- }
514
-
515
- if ( element.outputType ) {
516
-
517
- if ( this.getOutput( id ) === undefined ) this.setOutput( id, null );
518
-
519
- this.getOutput( id ).outputType = element.outputType;
520
-
521
- }
522
-
523
- }
524
-
525
- }
526
-
527
- }
528
-
529
- return this._object;
530
-
531
- }
532
-
533
- deserialize( data ) {
534
-
535
- super.deserialize( data );
536
-
537
- for ( const name in this.parameters ) {
538
-
539
- let valueNode = this.parameters[ name ];
540
-
541
- if ( valueNode.isScriptableNode ) valueNode = valueNode.getDefaultOutput();
542
-
543
- valueNode.events.addEventListener( 'refresh', this.onRefresh );
544
-
545
- }
546
-
547
- }
548
-
549
- /**
550
- * Returns the layout of the script.
551
- *
552
- * @return {Object} The script's layout.
553
- */
554
- getLayout() {
555
-
556
- return this.getObject().layout;
557
-
558
- }
559
-
560
- /**
561
- * Returns default node output of the script.
562
- *
563
- * @return {Node} The default node output.
564
- */
565
- getDefaultOutputNode() {
566
-
567
- const output = this.getDefaultOutput().value;
568
-
569
- if ( output && output.isNode ) {
570
-
571
- return output;
572
-
573
- }
574
-
575
- return float();
576
-
577
- }
578
-
579
- /**
580
- * Returns default output of the script.
581
- *
582
- * @return {ScriptableValueNode} The default output.
583
- */
584
- getDefaultOutput() {
585
-
586
- return this._exec()._output;
587
-
588
- }
589
-
590
- /**
591
- * Returns a function created from the node's script.
592
- *
593
- * @return {Function} The function representing the node's code.
594
- */
595
- getMethod() {
596
-
597
- if ( this.needsUpdate ) this.dispose();
598
- if ( this._method !== null ) return this._method;
599
-
600
- //
601
-
602
- const parametersProps = [ 'parameters', 'local', 'global', 'refresh', 'setOutput', 'THREE', 'TSL' ];
603
- const interfaceProps = [ 'layout', 'init', 'main', 'dispose' ];
604
-
605
- const properties = interfaceProps.join( ', ' );
606
- const declarations = 'var ' + properties + '; var output = {};\n';
607
- const returns = '\nreturn { ...output, ' + properties + ' };';
608
-
609
- const code = declarations + this.codeNode.code + returns;
610
-
611
- //
612
-
613
- this._method = new Function( ...parametersProps, code );
614
-
615
- return this._method;
616
-
617
- }
618
-
619
- /**
620
- * Frees all internal resources.
621
- */
622
- dispose() {
623
-
624
- if ( this._method === null ) return;
625
-
626
- if ( this._object && typeof this._object.dispose === 'function' ) {
627
-
628
- this._object.dispose();
629
-
630
- }
631
-
632
- this._method = null;
633
- this._object = null;
634
- this._source = null;
635
- this._value = null;
636
- this._needsOutputUpdate = true;
637
- this._output.value = null;
638
- this._outputs = {};
639
-
640
- }
641
-
642
- setup() {
643
-
644
- return this.getDefaultOutputNode();
645
-
646
- }
647
-
648
- getCacheKey( force ) {
649
-
650
- const values = [ hashString( this.source ), this.getDefaultOutputNode().getCacheKey( force ) ];
651
-
652
- for ( const param in this.parameters ) {
653
-
654
- values.push( this.parameters[ param ].getCacheKey( force ) );
655
-
656
- }
657
-
658
- return hashArray( values );
659
-
660
- }
661
-
662
- set needsUpdate( value ) {
663
-
664
- if ( value === true ) this.dispose();
665
-
666
- }
667
-
668
- get needsUpdate() {
669
-
670
- return this.source !== this._source;
671
-
672
- }
673
-
674
- /**
675
- * Executes the `main` function of the script.
676
- *
677
- * @private
678
- * @return {ScriptableNode} A reference to this node.
679
- */
680
- _exec() {
681
-
682
- if ( this.codeNode === null ) return this;
683
-
684
- if ( this._needsOutputUpdate === true ) {
685
-
686
- this._value = this.call( 'main' );
687
-
688
- this._needsOutputUpdate = false;
689
-
690
- }
691
-
692
- this._output.value = this._value;
693
-
694
- return this;
695
-
696
- }
697
-
698
- /**
699
- * Executes the refresh.
700
- *
701
- * @private
702
- */
703
- _refresh() {
704
-
705
- this.needsUpdate = true;
706
-
707
- this._exec();
708
-
709
- this._output.refresh();
710
-
711
- }
712
-
713
- }
714
-
715
- export default ScriptableNode;
716
-
717
- /**
718
- * TSL function for creating a scriptable node.
719
- *
720
- * @tsl
721
- * @function
722
- * @param {CodeNode} [codeNode] - The code node.
723
- * @param {?Object} [parameters={}] - The parameters definition.
724
- * @returns {ScriptableNode}
725
- */
726
- export const scriptable = /*@__PURE__*/ nodeProxy( ScriptableNode ).setParameterLength( 1, 2 );