@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
@@ -0,0 +1,108 @@
1
+ import { Interpolant } from '../Interpolant.js';
2
+
3
+ /**
4
+ * A Bezier interpolant using cubic Bezier curves with 2D control points.
5
+ *
6
+ * This interpolant supports the COLLADA/Maya style of Bezier animation where
7
+ * each keyframe has explicit in/out tangent control points specified as
8
+ * 2D coordinates (time, value).
9
+ *
10
+ * The tangent data must be provided via the `settings` object:
11
+ * - `settings.inTangents`: Float32Array with [time, value] pairs per keyframe per component
12
+ * - `settings.outTangents`: Float32Array with [time, value] pairs per keyframe per component
13
+ *
14
+ * For a track with N keyframes and stride S:
15
+ * - Each tangent array has N * S * 2 values
16
+ * - Layout: [k0_c0_time, k0_c0_value, k0_c1_time, k0_c1_value, ..., k0_cS_time, k0_cS_value,
17
+ * k1_c0_time, k1_c0_value, ...]
18
+ *
19
+ * @augments Interpolant
20
+ */
21
+ class BezierInterpolant extends Interpolant {
22
+
23
+ interpolate_( i1, t0, t, t1 ) {
24
+
25
+ const result = this.resultBuffer;
26
+ const values = this.sampleValues;
27
+ const stride = this.valueSize;
28
+
29
+ const offset1 = i1 * stride;
30
+ const offset0 = offset1 - stride;
31
+
32
+ const settings = this.settings || this.DefaultSettings_;
33
+ const inTangents = settings.inTangents;
34
+ const outTangents = settings.outTangents;
35
+
36
+ // If no tangent data, fall back to linear interpolation
37
+ if ( ! inTangents || ! outTangents ) {
38
+
39
+ const weight1 = ( t - t0 ) / ( t1 - t0 );
40
+ const weight0 = 1 - weight1;
41
+
42
+ for ( let i = 0; i !== stride; ++ i ) {
43
+
44
+ result[ i ] = values[ offset0 + i ] * weight0 + values[ offset1 + i ] * weight1;
45
+
46
+ }
47
+
48
+ return result;
49
+
50
+ }
51
+
52
+ const tangentStride = stride * 2;
53
+ const i0 = i1 - 1;
54
+
55
+ for ( let i = 0; i !== stride; ++ i ) {
56
+
57
+ const v0 = values[ offset0 + i ];
58
+ const v1 = values[ offset1 + i ];
59
+
60
+ // outTangent of previous keyframe (C0)
61
+ const outTangentOffset = i0 * tangentStride + i * 2;
62
+ const c0x = outTangents[ outTangentOffset ];
63
+ const c0y = outTangents[ outTangentOffset + 1 ];
64
+
65
+ // inTangent of current keyframe (C1)
66
+ const inTangentOffset = i1 * tangentStride + i * 2;
67
+ const c1x = inTangents[ inTangentOffset ];
68
+ const c1y = inTangents[ inTangentOffset + 1 ];
69
+
70
+ // Solve for Bezier parameter s where Bx(s) = t using Newton-Raphson
71
+ let s = ( t - t0 ) / ( t1 - t0 );
72
+ let s2, s3, oneMinusS, oneMinusS2, oneMinusS3;
73
+
74
+ for ( let iter = 0; iter < 8; iter ++ ) {
75
+
76
+ s2 = s * s;
77
+ s3 = s2 * s;
78
+ oneMinusS = 1 - s;
79
+ oneMinusS2 = oneMinusS * oneMinusS;
80
+ oneMinusS3 = oneMinusS2 * oneMinusS;
81
+
82
+ // Bezier X(s) = (1-s)³·t0 + 3(1-s)²s·c0x + 3(1-s)s²·c1x + s³·t1
83
+ const bx = oneMinusS3 * t0 + 3 * oneMinusS2 * s * c0x + 3 * oneMinusS * s2 * c1x + s3 * t1;
84
+
85
+ const error = bx - t;
86
+ if ( Math.abs( error ) < 1e-10 ) break;
87
+
88
+ // Derivative dX/ds
89
+ const dbx = 3 * oneMinusS2 * ( c0x - t0 ) + 6 * oneMinusS * s * ( c1x - c0x ) + 3 * s2 * ( t1 - c1x );
90
+ if ( Math.abs( dbx ) < 1e-10 ) break;
91
+
92
+ s = s - error / dbx;
93
+ s = Math.max( 0, Math.min( 1, s ) );
94
+
95
+ }
96
+
97
+ // Evaluate Bezier Y(s)
98
+ result[ i ] = oneMinusS3 * v0 + 3 * oneMinusS2 * s * c0y + 3 * oneMinusS * s2 * c1y + s3 * v1;
99
+
100
+ }
101
+
102
+ return result;
103
+
104
+ }
105
+
106
+ }
107
+
108
+ export { BezierInterpolant };
@@ -6,143 +6,162 @@ export { default as ArrayNode } from './core/ArrayNode.js';
6
6
  export { default as AssignNode } from './core/AssignNode.js';
7
7
  export { default as AttributeNode } from './core/AttributeNode.js';
8
8
  export { default as BypassNode } from './core/BypassNode.js';
9
- export { default as IsolateNode } from './core/IsolateNode.js';
10
9
  export { default as ConstNode } from './core/ConstNode.js';
11
10
  export { default as ContextNode } from './core/ContextNode.js';
12
11
  export { default as IndexNode } from './core/IndexNode.js';
12
+ export { default as InputNode } from './core/InputNode.js';
13
+ export { default as InspectorNode } from './core/InspectorNode.js';
14
+ export { default as IsolateNode } from './core/IsolateNode.js';
13
15
  export { default as LightingModel } from './core/LightingModel.js';
16
+ export { default as MRTNode } from './core/MRTNode.js';
14
17
  export { default as Node } from './core/Node.js';
15
- export { default as VarNode } from './core/VarNode.js';
16
18
  export { default as NodeAttribute } from './core/NodeAttribute.js';
17
19
  export { default as NodeBuilder } from './core/NodeBuilder.js';
18
20
  export { default as NodeCache } from './core/NodeCache.js';
19
21
  export { default as NodeCode } from './core/NodeCode.js';
22
+ export { default as NodeError } from './core/NodeError.js';
20
23
  export { default as NodeFrame } from './core/NodeFrame.js';
21
24
  export { default as NodeFunctionInput } from './core/NodeFunctionInput.js';
22
25
  export { default as NodeUniform } from './core/NodeUniform.js';
23
26
  export { default as NodeVar } from './core/NodeVar.js';
24
27
  export { default as NodeVarying } from './core/NodeVarying.js';
28
+ export { default as OutputStructNode } from './core/OutputStructNode.js';
25
29
  export { default as ParameterNode } from './core/ParameterNode.js';
26
30
  export { default as PropertyNode } from './core/PropertyNode.js';
27
31
  export { default as StackNode } from './core/StackNode.js';
32
+ export { default as StackTrace } from './core/StackTrace.js';
33
+ export { default as StructNode } from './core/StructNode.js';
34
+ export { default as StructTypeNode } from './core/StructTypeNode.js';
35
+ export { default as SubBuildNode } from './core/SubBuildNode.js';
28
36
  export { default as TempNode } from './core/TempNode.js';
29
37
  export { default as UniformGroupNode } from './core/UniformGroupNode.js';
30
38
  export { default as UniformNode } from './core/UniformNode.js';
39
+ export { default as VarNode } from './core/VarNode.js';
31
40
  export { default as VaryingNode } from './core/VaryingNode.js';
32
- export { default as StructNode } from './core/StructNode.js';
33
- export { default as StructTypeNode } from './core/StructTypeNode.js';
34
- export { default as OutputStructNode } from './core/OutputStructNode.js';
35
- export { default as MRTNode } from './core/MRTNode.js';
36
- export { default as SubBuildNode } from './core/SubBuildNode.js';
37
41
 
38
42
  import * as NodeUtils from './core/NodeUtils.js';
39
43
  export { NodeUtils };
40
44
 
41
- // utils
42
- export { default as ArrayElementNode } from './utils/ArrayElementNode.js';
43
- export { default as ConvertNode } from './utils/ConvertNode.js';
44
- export { default as FunctionOverloadingNode } from './utils/FunctionOverloadingNode.js';
45
- export { default as JoinNode } from './utils/JoinNode.js';
46
- export { default as LoopNode } from './utils/LoopNode.js';
47
- export { default as MaxMipLevelNode } from './utils/MaxMipLevelNode.js';
48
- export { default as RemapNode } from './utils/RemapNode.js';
49
- export { default as RotateNode } from './utils/RotateNode.js';
50
- export { default as SetNode } from './utils/SetNode.js';
51
- export { default as SplitNode } from './utils/SplitNode.js';
52
- export { default as SpriteSheetUVNode } from './utils/SpriteSheetUVNode.js';
53
- export { default as StorageArrayElementNode } from './utils/StorageArrayElementNode.js';
54
- export { default as ReflectorNode } from './utils/ReflectorNode.js';
55
- export { default as RTTNode } from './utils/RTTNode.js';
56
- export { default as MemberNode } from './utils/MemberNode.js';
57
- export { default as DebugNode } from './utils/DebugNode.js';
58
- export { default as EventNode } from './utils/EventNode.js';
59
-
60
- // math
61
- export { default as BitcastNode } from './math/BitcastNode.js';
62
-
63
45
  // accessors
64
- export { default as UniformArrayNode } from './accessors/UniformArrayNode.js';
46
+ export { default as BatchNode } from './accessors/BatchNode.js';
65
47
  export { default as BufferAttributeNode } from './accessors/BufferAttributeNode.js';
66
48
  export { default as BufferNode } from './accessors/BufferNode.js';
67
- export { default as VertexColorNode } from './accessors/VertexColorNode.js';
49
+ export { default as BuiltinNode } from './accessors/BuiltinNode.js';
50
+ export { default as ClippingNode } from './accessors/ClippingNode.js';
68
51
  export { default as CubeTextureNode } from './accessors/CubeTextureNode.js';
69
52
  export { default as InstanceNode } from './accessors/InstanceNode.js';
70
53
  export { default as InstancedMeshNode } from './accessors/InstancedMeshNode.js';
71
- export { default as BatchNode } from './accessors/BatchNode.js';
72
54
  export { default as MaterialNode } from './accessors/MaterialNode.js';
73
55
  export { default as MaterialReferenceNode } from './accessors/MaterialReferenceNode.js';
74
- export { default as RendererReferenceNode } from './accessors/RendererReferenceNode.js';
75
- export { default as MorphNode } from './accessors/MorphNode.js';
76
56
  export { default as ModelNode } from './accessors/ModelNode.js';
57
+ export { default as MorphNode } from './accessors/MorphNode.js';
77
58
  export { default as Object3DNode } from './accessors/Object3DNode.js';
78
59
  export { default as PointUVNode } from './accessors/PointUVNode.js';
60
+ export { default as ReferenceBaseNode } from './accessors/ReferenceBaseNode.js';
79
61
  export { default as ReferenceNode } from './accessors/ReferenceNode.js';
62
+ export { default as RendererReferenceNode } from './accessors/RendererReferenceNode.js';
80
63
  export { default as SkinningNode } from './accessors/SkinningNode.js';
81
- export { default as SceneNode } from './accessors/SceneNode.js';
82
64
  export { default as StorageBufferNode } from './accessors/StorageBufferNode.js';
83
- export { default as TextureNode } from './accessors/TextureNode.js';
84
- export { default as TextureSizeNode } from './accessors/TextureSizeNode.js';
85
65
  export { default as StorageTextureNode } from './accessors/StorageTextureNode.js';
86
66
  export { default as Texture3DNode } from './accessors/Texture3DNode.js';
67
+ export { default as TextureNode } from './accessors/TextureNode.js';
68
+ export { default as TextureSizeNode } from './accessors/TextureSizeNode.js';
69
+ export { default as UniformArrayNode } from './accessors/UniformArrayNode.js';
87
70
  export { default as UserDataNode } from './accessors/UserDataNode.js';
71
+ export { default as VelocityNode } from './accessors/VelocityNode.js';
72
+ export { default as VertexColorNode } from './accessors/VertexColorNode.js';
73
+
74
+ // code
75
+ export { default as CodeNode } from './code/CodeNode.js';
76
+ export { default as ExpressionNode } from './code/ExpressionNode.js';
77
+ export { default as FunctionCallNode } from './code/FunctionCallNode.js';
78
+ export { default as FunctionNode } from './code/FunctionNode.js';
88
79
 
89
80
  // display
90
81
  export { default as BumpMapNode } from './display/BumpMapNode.js';
91
82
  export { default as ColorSpaceNode } from './display/ColorSpaceNode.js';
92
83
  export { default as FrontFacingNode } from './display/FrontFacingNode.js';
93
84
  export { default as NormalMapNode } from './display/NormalMapNode.js';
94
- export { default as PosterizeNode } from './display/PosterizeNode.js';
95
- export { default as ToneMappingNode } from './display/ToneMappingNode.js';
96
- export { default as ScreenNode } from './display/ScreenNode.js';
97
- export { default as ViewportTextureNode } from './display/ViewportTextureNode.js';
98
- export { default as ViewportSharedTextureNode } from './display/ViewportSharedTextureNode.js';
99
- export { default as ViewportDepthTextureNode } from './display/ViewportDepthTextureNode.js';
100
- export { default as ViewportDepthNode } from './display/ViewportDepthNode.js';
101
- export { default as RenderOutputNode } from './display/RenderOutputNode.js';
102
85
  export { default as PassNode } from './display/PassNode.js';
86
+ export { default as RenderOutputNode } from './display/RenderOutputNode.js';
87
+ export { default as ScreenNode } from './display/ScreenNode.js';
88
+ export { default as ToneMappingNode } from './display/ToneMappingNode.js';
103
89
  export { default as ToonOutlinePassNode } from './display/ToonOutlinePassNode.js';
104
-
105
- // code
106
- export { default as ExpressionNode } from './code/ExpressionNode.js';
107
- export { default as CodeNode } from './code/CodeNode.js';
108
- export { default as FunctionCallNode } from './code/FunctionCallNode.js';
109
- export { default as FunctionNode } from './code/FunctionNode.js';
110
- export { default as ScriptableNode } from './code/ScriptableNode.js';
111
- export { default as ScriptableValueNode } from './code/ScriptableValueNode.js';
90
+ export { default as ViewportDepthNode } from './display/ViewportDepthNode.js';
91
+ export { default as ViewportDepthTextureNode } from './display/ViewportDepthTextureNode.js';
92
+ export { default as ViewportSharedTextureNode } from './display/ViewportSharedTextureNode.js';
93
+ export { default as ViewportTextureNode } from './display/ViewportTextureNode.js';
112
94
 
113
95
  // geometry
114
96
  export { default as RangeNode } from './geometry/RangeNode.js';
115
97
 
116
98
  // gpgpu
99
+ export { default as AtomicFunctionNode } from './gpgpu/AtomicFunctionNode.js';
100
+ export { default as BarrierNode } from './gpgpu/BarrierNode.js';
101
+ export { default as ComputeBuiltinNode } from './gpgpu/ComputeBuiltinNode.js';
117
102
  export { default as ComputeNode } from './gpgpu/ComputeNode.js';
103
+ export { default as SubgroupFunctionNode } from './gpgpu/SubgroupFunctionNode.js';
104
+ export { default as WorkgroupInfoNode } from './gpgpu/WorkgroupInfoNode.js';
118
105
 
119
106
  // lighting
120
- export { default as PointLightNode } from './lighting/PointLightNode.js';
107
+ export { default as AmbientLightNode } from './lighting/AmbientLightNode.js';
108
+ export { default as AnalyticLightNode } from './lighting/AnalyticLightNode.js';
109
+ export { default as AONode } from './lighting/AONode.js';
110
+ export { default as BasicEnvironmentNode } from './lighting/BasicEnvironmentNode.js';
111
+ export { default as BasicLightMapNode } from './lighting/BasicLightMapNode.js';
121
112
  export { default as DirectionalLightNode } from './lighting/DirectionalLightNode.js';
122
- export { default as RectAreaLightNode } from './lighting/RectAreaLightNode.js';
123
- export { default as SpotLightNode } from './lighting/SpotLightNode.js';
113
+ export { default as EnvironmentNode } from './lighting/EnvironmentNode.js';
114
+ export { default as HemisphereLightNode } from './lighting/HemisphereLightNode.js';
124
115
  export { default as IESSpotLightNode } from './lighting/IESSpotLightNode.js';
125
- export { default as ProjectorLightNode } from './lighting/ProjectorLightNode.js';
126
- export { default as AmbientLightNode } from './lighting/AmbientLightNode.js';
127
- export { default as LightsNode } from './lighting/LightsNode.js';
128
- export { default as LightingNode } from './lighting/LightingNode.js';
116
+ export { default as IrradianceNode } from './lighting/IrradianceNode.js';
129
117
  export { default as LightingContextNode } from './lighting/LightingContextNode.js';
130
- export { default as HemisphereLightNode } from './lighting/HemisphereLightNode.js';
118
+ export { default as LightingNode } from './lighting/LightingNode.js';
131
119
  export { default as LightProbeNode } from './lighting/LightProbeNode.js';
132
- export { default as EnvironmentNode } from './lighting/EnvironmentNode.js';
133
- export { default as BasicEnvironmentNode } from './lighting/BasicEnvironmentNode.js';
134
- export { default as IrradianceNode } from './lighting/IrradianceNode.js';
135
- export { default as AONode } from './lighting/AONode.js';
136
- export { default as AnalyticLightNode } from './lighting/AnalyticLightNode.js';
120
+ export { default as LightsNode } from './lighting/LightsNode.js';
121
+ export { default as PointLightNode } from './lighting/PointLightNode.js';
122
+ export { default as PointShadowNode } from './lighting/PointShadowNode.js';
123
+ export { default as ProjectorLightNode } from './lighting/ProjectorLightNode.js';
124
+ export { default as RectAreaLightNode } from './lighting/RectAreaLightNode.js';
137
125
  export { default as ShadowBaseNode } from './lighting/ShadowBaseNode.js';
138
126
  export { default as ShadowNode } from './lighting/ShadowNode.js';
127
+ export { default as SpotLightNode } from './lighting/SpotLightNode.js';
139
128
 
140
- // pmrem
141
- export { default as PMREMNode } from './pmrem/PMREMNode.js';
129
+ // math
130
+ export { default as BitcastNode } from './math/BitcastNode.js';
131
+ export { default as BitcountNode } from './math/BitcountNode.js';
132
+ export { default as ConditionalNode } from './math/ConditionalNode.js';
133
+ export { default as MathNode } from './math/MathNode.js';
134
+ export { default as OperatorNode } from './math/OperatorNode.js';
135
+ export { default as PackFloatNode } from './math/PackFloatNode.js';
136
+ export { default as UnpackFloatNode } from './math/UnpackFloatNode.js';
142
137
 
143
138
  // parsers
144
139
  export { default as GLSLNodeParser } from './parsers/GLSLNodeParser.js'; // @TODO: Move to jsm/renderers/webgl.
145
140
 
141
+ // pmrem
142
+ export { default as PMREMNode } from './pmrem/PMREMNode.js';
143
+
144
+ // utils
145
+ export { default as ArrayElementNode } from './utils/ArrayElementNode.js';
146
+ export { default as ConvertNode } from './utils/ConvertNode.js';
147
+ export { default as CubeMapNode } from './utils/CubeMapNode.js';
148
+ export { default as DebugNode } from './utils/DebugNode.js';
149
+ export { default as EventNode } from './utils/EventNode.js';
150
+ export { default as FlipNode } from './utils/FlipNode.js';
151
+ export { default as FunctionOverloadingNode } from './utils/FunctionOverloadingNode.js';
152
+ export { default as JoinNode } from './utils/JoinNode.js';
153
+ export { default as LoopNode } from './utils/LoopNode.js';
154
+ export { default as MaxMipLevelNode } from './utils/MaxMipLevelNode.js';
155
+ export { default as MemberNode } from './utils/MemberNode.js';
156
+ export { default as ReflectorNode } from './utils/ReflectorNode.js';
157
+ export { default as RemapNode } from './utils/RemapNode.js';
158
+ export { default as RotateNode } from './utils/RotateNode.js';
159
+ export { default as RTTNode } from './utils/RTTNode.js';
160
+ export { default as SampleNode } from './utils/SampleNode.js';
161
+ export { default as SetNode } from './utils/SetNode.js';
162
+ export { default as SplitNode } from './utils/SplitNode.js';
163
+ export { default as StorageArrayElementNode } from './utils/StorageArrayElementNode.js';
164
+
146
165
  // lighting models
147
166
  export { default as PhongLightingModel } from './functions/PhongLightingModel.js';
148
167
  export { default as PhysicalLightingModel } from './functions/PhysicalLightingModel.js';
package/src/nodes/TSL.js CHANGED
@@ -20,8 +20,11 @@ export * from './core/MRTNode.js';
20
20
 
21
21
  // math
22
22
  export * from './math/BitcastNode.js';
23
+ export * from './math/BitcountNode.js';
23
24
  export * from './math/Hash.js';
24
25
  export * from './math/MathUtils.js';
26
+ export * from './math/PackFloatNode.js';
27
+ export * from './math/UnpackFloatNode.js';
25
28
  export * from './math/TriNoise3D.js';
26
29
 
27
30
  // utils
@@ -37,7 +40,7 @@ export * from './utils/UVUtils.js';
37
40
  export * from './utils/SpriteUtils.js';
38
41
  export * from './utils/ViewportUtils.js';
39
42
  export * from './utils/RotateNode.js';
40
- export * from './utils/SpriteSheetUVNode.js';
43
+ export * from './utils/SpriteSheetUV.js';
41
44
  export * from './utils/Timer.js';
42
45
  export * from './utils/TriplanarTextures.js';
43
46
  export * from './utils/ReflectorNode.js';
@@ -78,7 +81,7 @@ export * from './accessors/Position.js';
78
81
  export * from './accessors/ReferenceNode.js';
79
82
  export * from './accessors/ReflectVector.js';
80
83
  export * from './accessors/SkinningNode.js';
81
- export * from './accessors/SceneNode.js';
84
+ export * from './accessors/SceneProperties.js';
82
85
  export * from './accessors/StorageBufferNode.js';
83
86
  export * from './accessors/Tangent.js';
84
87
  export * from './accessors/TextureNode.js';
@@ -96,7 +99,6 @@ export * from './display/ColorAdjustment.js';
96
99
  export * from './display/ColorSpaceNode.js';
97
100
  export * from './display/FrontFacingNode.js';
98
101
  export * from './display/NormalMapNode.js';
99
- export * from './display/PosterizeNode.js';
100
102
  export * from './display/ToneMappingNode.js';
101
103
  export * from './display/ScreenNode.js';
102
104
  export * from './display/ViewportTextureNode.js';
@@ -116,8 +118,6 @@ export * from './code/ExpressionNode.js';
116
118
  export * from './code/CodeNode.js';
117
119
  export * from './code/FunctionCallNode.js';
118
120
  export * from './code/FunctionNode.js';
119
- export * from './code/ScriptableNode.js';
120
- export * from './code/ScriptableValueNode.js';
121
121
 
122
122
  // fog
123
123
  export * from './fog/Fog.js';
@@ -160,7 +160,7 @@ export * from './materialx/MaterialXNodes.js';
160
160
  export { default as BRDF_GGX } from './functions/BSDF/BRDF_GGX.js';
161
161
  export { default as BRDF_Lambert } from './functions/BSDF/BRDF_Lambert.js';
162
162
  export { default as D_GGX } from './functions/BSDF/D_GGX.js';
163
- export { default as DFGApprox } from './functions/BSDF/DFGApprox.js';
163
+ export { default as DFGLUT } from './functions/BSDF/DFGLUT.js';
164
164
  export { default as F_Schlick } from './functions/BSDF/F_Schlick.js';
165
165
  export { default as Schlick_to_F0 } from './functions/BSDF/Schlick_to_F0.js';
166
166
  export { default as V_GGX_SmithCorrelated } from './functions/BSDF/V_GGX_SmithCorrelated.js';
@@ -61,7 +61,7 @@ export const instancedArray = ( count, type = 'float' ) => {
61
61
  }
62
62
 
63
63
  const buffer = new StorageInstancedBufferAttribute( count, itemSize, typedArray );
64
- const node = storage( buffer, type, count );
64
+ const node = storage( buffer, type, buffer.count );
65
65
 
66
66
  return node;
67
67
 
@@ -74,9 +74,9 @@ class BatchNode extends Node {
74
74
 
75
75
  const getIndirectIndex = Fn( ( [ id ] ) => {
76
76
 
77
- const size = int( textureSize( textureLoad( this.batchMesh._indirectTexture ), 0 ).x );
78
- const x = int( id ).mod( size );
79
- const y = int( id ).div( size );
77
+ const size = int( textureSize( textureLoad( this.batchMesh._indirectTexture ), 0 ).x ).toConst();
78
+ const x = int( id ).mod( size ).toConst();
79
+ const y = int( id ).div( size ).toConst();
80
80
  return textureLoad( this.batchMesh._indirectTexture, ivec2( x, y ) ).x;
81
81
 
82
82
  } ).setLayout( {
@@ -91,11 +91,11 @@ class BatchNode extends Node {
91
91
 
92
92
  const matricesTexture = this.batchMesh._matricesTexture;
93
93
 
94
- const size = int( textureSize( textureLoad( matricesTexture ), 0 ).x );
95
- const j = float( indirectId ).mul( 4 ).toInt().toVar();
94
+ const size = int( textureSize( textureLoad( matricesTexture ), 0 ).x ).toConst();
95
+ const j = float( indirectId ).mul( 4 ).toInt().toConst();
96
96
 
97
- const x = j.mod( size );
98
- const y = j.div( size );
97
+ const x = j.mod( size ).toConst();
98
+ const y = j.div( size ).toConst();
99
99
  const batchingMatrix = mat4(
100
100
  textureLoad( matricesTexture, ivec2( x, y ) ),
101
101
  textureLoad( matricesTexture, ivec2( x.add( 1 ), y ) ),
@@ -110,10 +110,10 @@ class BatchNode extends Node {
110
110
 
111
111
  const getBatchingColor = Fn( ( [ id ] ) => {
112
112
 
113
- const size = int( textureSize( textureLoad( colorsTexture ), 0 ).x );
113
+ const size = int( textureSize( textureLoad( colorsTexture ), 0 ).x ).toConst();
114
114
  const j = id;
115
- const x = j.mod( size );
116
- const y = j.div( size );
115
+ const x = j.mod( size ).toConst();
116
+ const y = j.div( size ).toConst();
117
117
  return textureLoad( colorsTexture, ivec2( x, y ) ).rgb;
118
118
 
119
119
  } ).setLayout( {
@@ -13,11 +13,11 @@ import { directionToFaceDirection } from '../display/FrontFacingNode.js';
13
13
  * @param {string} varyingName - The name of the varying to assign the bitangent to.
14
14
  * @returns {Node<vec3>} The bitangent node.
15
15
  */
16
- const getBitangent = /*@__PURE__*/ Fn( ( [ crossNormalTangent, varyingName ], { subBuildFn, material } ) => {
16
+ const getBitangent = /*@__PURE__*/ Fn( ( [ crossNormalTangent, varyingName ], builder ) => {
17
17
 
18
18
  let bitangent = crossNormalTangent.mul( tangentGeometry.w ).xyz;
19
19
 
20
- if ( subBuildFn === 'NORMAL' && material.flatShading !== true ) {
20
+ if ( builder.subBuildFn === 'NORMAL' && builder.isFlatShading() !== true ) {
21
21
 
22
22
  bitangent = bitangent.toVarying( varyingName );
23
23
 
@@ -49,11 +49,11 @@ export const bitangentLocal = /*@__PURE__*/ getBitangent( normalLocal.cross( tan
49
49
  * @tsl
50
50
  * @type {Node<vec3>}
51
51
  */
52
- export const bitangentView = /*@__PURE__*/ ( Fn( ( { subBuildFn, geometry, material } ) => {
52
+ export const bitangentView = /*@__PURE__*/ ( Fn( ( builder ) => {
53
53
 
54
54
  let node;
55
55
 
56
- if ( subBuildFn === 'VERTEX' || geometry.hasAttribute( 'tangent' ) ) {
56
+ if ( builder.subBuildFn === 'VERTEX' || builder.geometry.hasAttribute( 'tangent' ) ) {
57
57
 
58
58
  node = getBitangent( normalView.cross( tangentView ), 'v_bitangentView' ).normalize();
59
59
 
@@ -63,7 +63,7 @@ export const bitangentView = /*@__PURE__*/ ( Fn( ( { subBuildFn, geometry, mater
63
63
 
64
64
  }
65
65
 
66
- if ( material.flatShading !== true ) {
66
+ if ( builder.isFlatShading() !== true ) {
67
67
 
68
68
  node = directionToFaceDirection( node );
69
69
 
@@ -1,11 +1,43 @@
1
1
  import InputNode from '../core/InputNode.js';
2
- import { nodeObject, addMethodChaining } from '../tsl/TSLCore.js';
2
+ import { addMethodChaining, mat3, mat4 } from '../tsl/TSLCore.js';
3
3
  import { varying } from '../core/VaryingNode.js';
4
4
 
5
5
  import { InterleavedBufferAttribute } from '../../core/InterleavedBufferAttribute.js';
6
6
  import { InterleavedBuffer } from '../../core/InterleavedBuffer.js';
7
7
  import { StaticDrawUsage, DynamicDrawUsage } from '../../constants.js';
8
8
 
9
+ /**
10
+ * Internal buffer attribute library.
11
+ *
12
+ * @private
13
+ * @type {WeakMap<TypedArray, InterleavedBuffer>}
14
+ */
15
+ const _bufferLib = new WeakMap();
16
+
17
+ /**
18
+ * Internal method for retrieving or creating interleaved buffers.
19
+ *
20
+ * @private
21
+ * @param {TypedArray} value - The attribute data.
22
+ * @param {number} itemSize - The attribute item size.
23
+ * @returns {InterleavedBuffer} The interleaved buffer.
24
+ */
25
+ function _getBufferAttribute( value, itemSize ) {
26
+
27
+ let buffer = _bufferLib.get( value );
28
+
29
+ if ( buffer === undefined ) {
30
+
31
+ buffer = new InterleavedBuffer( value, itemSize );
32
+
33
+ _bufferLib.set( value, buffer );
34
+
35
+ }
36
+
37
+ return buffer;
38
+
39
+ }
40
+
9
41
  /**
10
42
  * In earlier `three.js` versions it was only possible to define attribute data
11
43
  * on geometry level. With `BufferAttributeNode`, it is also possible to do this
@@ -114,7 +146,7 @@ class BufferAttributeNode extends InputNode {
114
146
  */
115
147
  this.global = true;
116
148
 
117
- if ( value && value.isBufferAttribute === true ) {
149
+ if ( value && value.isBufferAttribute === true && value.itemSize <= 4 ) {
118
150
 
119
151
  this.attribute = value;
120
152
  this.usage = value.usage;
@@ -185,13 +217,30 @@ class BufferAttributeNode extends InputNode {
185
217
 
186
218
  if ( this.attribute !== null ) return;
187
219
 
220
+ //
221
+
188
222
  const type = this.getNodeType( builder );
189
- const array = this.value;
190
223
  const itemSize = builder.getTypeLength( type );
224
+ const value = this.value;
191
225
  const stride = this.bufferStride || itemSize;
192
226
  const offset = this.bufferOffset;
193
227
 
194
- const buffer = array.isInterleavedBuffer === true ? array : new InterleavedBuffer( array, stride );
228
+ let buffer;
229
+
230
+ if ( value.isInterleavedBuffer === true ) {
231
+
232
+ buffer = value;
233
+
234
+ } else if ( value.isBufferAttribute === true ) {
235
+
236
+ buffer = _getBufferAttribute( value.array, stride );
237
+
238
+ } else {
239
+
240
+ buffer = _getBufferAttribute( value, stride );
241
+
242
+ }
243
+
195
244
  const bufferAttribute = new InterleavedBufferAttribute( buffer, itemSize, offset );
196
245
 
197
246
  buffer.setUsage( this.usage );
@@ -284,6 +333,43 @@ class BufferAttributeNode extends InputNode {
284
333
 
285
334
  export default BufferAttributeNode;
286
335
 
336
+ /**
337
+ * Internal method for creating buffer attribute nodes.
338
+ *
339
+ * @private
340
+ * @param {BufferAttribute|InterleavedBuffer|TypedArray} array - The attribute data.
341
+ * @param {?string} [type=null] - The buffer type (e.g. `'vec3'`).
342
+ * @param {number} [stride=0] - The buffer stride.
343
+ * @param {number} [offset=0] - The buffer offset.
344
+ * @param {number} [usage=StaticDrawUsage] - The buffer usage.
345
+ * @param {boolean} [instanced=false] - Whether the buffer is instanced.
346
+ * @returns {BufferAttributeNode|Node} The buffer attribute node.
347
+ */
348
+ function createBufferAttribute( array, type = null, stride = 0, offset = 0, usage = StaticDrawUsage, instanced = false ) {
349
+
350
+ if ( type === 'mat3' || ( type === null && array.itemSize === 9 ) ) {
351
+
352
+ return mat3(
353
+ new BufferAttributeNode( array, 'vec3', 9, 0 ).setUsage( usage ).setInstanced( instanced ),
354
+ new BufferAttributeNode( array, 'vec3', 9, 3 ).setUsage( usage ).setInstanced( instanced ),
355
+ new BufferAttributeNode( array, 'vec3', 9, 6 ).setUsage( usage ).setInstanced( instanced )
356
+ );
357
+
358
+ } else if ( type === 'mat4' || ( type === null && array.itemSize === 16 ) ) {
359
+
360
+ return mat4(
361
+ new BufferAttributeNode( array, 'vec4', 16, 0 ).setUsage( usage ).setInstanced( instanced ),
362
+ new BufferAttributeNode( array, 'vec4', 16, 4 ).setUsage( usage ).setInstanced( instanced ),
363
+ new BufferAttributeNode( array, 'vec4', 16, 8 ).setUsage( usage ).setInstanced( instanced ),
364
+ new BufferAttributeNode( array, 'vec4', 16, 12 ).setUsage( usage ).setInstanced( instanced )
365
+ );
366
+
367
+ }
368
+
369
+ return new BufferAttributeNode( array, type, stride, offset ).setUsage( usage );
370
+
371
+ }
372
+
287
373
  /**
288
374
  * TSL function for creating a buffer attribute node.
289
375
  *
@@ -293,9 +379,9 @@ export default BufferAttributeNode;
293
379
  * @param {?string} [type=null] - The buffer type (e.g. `'vec3'`).
294
380
  * @param {number} [stride=0] - The buffer stride.
295
381
  * @param {number} [offset=0] - The buffer offset.
296
- * @returns {BufferAttributeNode}
382
+ * @returns {BufferAttributeNode|Node}
297
383
  */
298
- export const bufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => nodeObject( new BufferAttributeNode( array, type, stride, offset ) );
384
+ export const bufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => createBufferAttribute( array, type, stride, offset );
299
385
 
300
386
  /**
301
387
  * TSL function for creating a buffer attribute node but with dynamic draw usage.
@@ -307,9 +393,9 @@ export const bufferAttribute = ( array, type = null, stride = 0, offset = 0 ) =>
307
393
  * @param {?string} [type=null] - The buffer type (e.g. `'vec3'`).
308
394
  * @param {number} [stride=0] - The buffer stride.
309
395
  * @param {number} [offset=0] - The buffer offset.
310
- * @returns {BufferAttributeNode}
396
+ * @returns {BufferAttributeNode|Node}
311
397
  */
312
- export const dynamicBufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => bufferAttribute( array, type, stride, offset ).setUsage( DynamicDrawUsage );
398
+ export const dynamicBufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => createBufferAttribute( array, type, stride, offset, DynamicDrawUsage );
313
399
 
314
400
  /**
315
401
  * TSL function for creating a buffer attribute node but with enabled instancing
@@ -320,9 +406,9 @@ export const dynamicBufferAttribute = ( array, type = null, stride = 0, offset =
320
406
  * @param {?string} [type=null] - The buffer type (e.g. `'vec3'`).
321
407
  * @param {number} [stride=0] - The buffer stride.
322
408
  * @param {number} [offset=0] - The buffer offset.
323
- * @returns {BufferAttributeNode}
409
+ * @returns {BufferAttributeNode|Node}
324
410
  */
325
- export const instancedBufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => bufferAttribute( array, type, stride, offset ).setInstanced( true );
411
+ export const instancedBufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => createBufferAttribute( array, type, stride, offset, StaticDrawUsage, true );
326
412
 
327
413
  /**
328
414
  * TSL function for creating a buffer attribute node but with dynamic draw usage and enabled instancing
@@ -333,8 +419,8 @@ export const instancedBufferAttribute = ( array, type = null, stride = 0, offset
333
419
  * @param {?string} [type=null] - The buffer type (e.g. `'vec3'`).
334
420
  * @param {number} [stride=0] - The buffer stride.
335
421
  * @param {number} [offset=0] - The buffer offset.
336
- * @returns {BufferAttributeNode}
422
+ * @returns {BufferAttributeNode|Node}
337
423
  */
338
- export const instancedDynamicBufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => dynamicBufferAttribute( array, type, stride, offset ).setInstanced( true );
424
+ export const instancedDynamicBufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => createBufferAttribute( array, type, stride, offset, DynamicDrawUsage, true );
339
425
 
340
426
  addMethodChaining( 'toAttribute', ( bufferNode ) => bufferAttribute( bufferNode.value ) );