super-three 0.171.0 → 0.172.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 (413) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +157 -49
  3. package/build/three.core.js +104 -42
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +53 -8
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +10 -5
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +21191 -1008
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +21189 -1008
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -5
  14. package/examples/jsm/animation/CCDIKSolver.js +3 -2
  15. package/examples/jsm/controls/ArcballControls.js +28 -19
  16. package/examples/jsm/controls/OrbitControls.js +5 -4
  17. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  18. package/examples/jsm/curves/NURBSCurve.js +1 -1
  19. package/examples/jsm/curves/NURBSUtils.js +3 -0
  20. package/examples/jsm/effects/OutlineEffect.js +1 -1
  21. package/examples/jsm/exporters/GLTFExporter.js +11 -7
  22. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  23. package/examples/jsm/exporters/PLYExporter.js +2 -2
  24. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  25. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  26. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  27. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  28. package/examples/jsm/loaders/3MFLoader.js +6 -3
  29. package/examples/jsm/loaders/BVHLoader.js +1 -1
  30. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  31. package/examples/jsm/loaders/DDSLoader.js +42 -0
  32. package/examples/jsm/loaders/GCodeLoader.js +1 -1
  33. package/examples/jsm/loaders/GLTFLoader.js +22 -2
  34. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  35. package/examples/jsm/loaders/KTXLoader.js +4 -4
  36. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  37. package/examples/jsm/loaders/LottieLoader.js +1 -1
  38. package/examples/jsm/loaders/MTLLoader.js +1 -0
  39. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  40. package/examples/jsm/loaders/PLYLoader.js +7 -7
  41. package/examples/jsm/loaders/PVRLoader.js +1 -1
  42. package/examples/jsm/loaders/SVGLoader.js +2 -2
  43. package/examples/jsm/loaders/TDSLoader.js +1 -1
  44. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  45. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  46. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  47. package/examples/jsm/math/ConvexHull.js +1 -1
  48. package/examples/jsm/math/OBB.js +17 -0
  49. package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
  50. package/examples/jsm/misc/Volume.js +20 -12
  51. package/examples/jsm/misc/VolumeSlice.js +2 -2
  52. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  53. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  54. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  55. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  56. package/examples/jsm/objects/Sky.js +2 -2
  57. package/examples/jsm/objects/SkyMesh.js +3 -3
  58. package/examples/jsm/objects/Water2.js +1 -1
  59. package/examples/jsm/objects/Water2Mesh.js +2 -2
  60. package/examples/jsm/objects/WaterMesh.js +4 -4
  61. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  62. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  63. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  64. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  65. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  66. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  67. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  68. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  69. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  70. package/examples/jsm/shaders/BokehShader2.js +1 -1
  71. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  72. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  73. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  74. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  75. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  76. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  77. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  78. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  79. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  80. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  81. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  82. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  83. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  84. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  85. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  86. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  87. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  88. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  89. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  90. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  91. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  92. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  93. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  94. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  95. package/examples/jsm/tsl/display/Sepia.js +9 -0
  96. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  97. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  98. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  99. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  100. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  101. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  102. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  103. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  104. package/examples/jsm/utils/CameraUtils.js +4 -1
  105. package/examples/jsm/utils/GeometryUtils.js +22 -19
  106. package/examples/jsm/utils/SceneUtils.js +2 -2
  107. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  108. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  109. package/package.json +8 -3
  110. package/src/Three.Core.js +2 -0
  111. package/src/Three.Legacy.js +0 -21
  112. package/src/Three.TSL.js +9 -4
  113. package/src/Three.WebGPU.Nodes.js +2 -2
  114. package/src/Three.WebGPU.js +2 -2
  115. package/src/animation/PropertyBinding.js +2 -2
  116. package/src/cameras/PerspectiveCamera.js +18 -2
  117. package/src/constants.js +1 -1
  118. package/src/core/RenderTarget.js +18 -0
  119. package/src/core/RenderTarget3D.js +22 -0
  120. package/src/core/RenderTargetArray.js +22 -0
  121. package/src/extras/Earcut.js +1 -1
  122. package/src/extras/PMREMGenerator.js +20 -0
  123. package/src/extras/TextureUtils.js +6 -0
  124. package/src/helpers/CameraHelper.js +16 -13
  125. package/src/loaders/nodes/NodeLoader.js +59 -0
  126. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  127. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  128. package/src/materials/nodes/InstancedPointsNodeMaterial.js +72 -19
  129. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  130. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  131. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  132. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  133. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  134. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  135. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  136. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  137. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  138. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  139. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  140. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  141. package/src/materials/nodes/NodeMaterial.js +474 -21
  142. package/src/materials/nodes/PointsNodeMaterial.js +22 -13
  143. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  144. package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
  145. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  146. package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
  147. package/src/nodes/Nodes.js +1 -6
  148. package/src/nodes/TSL.js +2 -3
  149. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  150. package/src/nodes/accessors/Arrays.js +24 -5
  151. package/src/nodes/accessors/BatchNode.js +39 -3
  152. package/src/nodes/accessors/Bitangent.js +37 -0
  153. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  154. package/src/nodes/accessors/BufferNode.js +63 -0
  155. package/src/nodes/accessors/BuiltinNode.js +38 -0
  156. package/src/nodes/accessors/Camera.js +49 -0
  157. package/src/nodes/accessors/ClippingNode.js +71 -2
  158. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  159. package/src/nodes/accessors/InstanceNode.js +85 -2
  160. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  161. package/src/nodes/accessors/InstancedPointsMaterialNode.js +13 -0
  162. package/src/nodes/accessors/Lights.js +50 -1
  163. package/src/nodes/accessors/MaterialNode.js +302 -8
  164. package/src/nodes/accessors/MaterialProperties.js +7 -0
  165. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  166. package/src/nodes/accessors/ModelNode.js +100 -5
  167. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  168. package/src/nodes/accessors/MorphNode.js +48 -4
  169. package/src/nodes/accessors/Normal.js +59 -3
  170. package/src/nodes/accessors/Object3DNode.js +102 -1
  171. package/src/nodes/accessors/PointUVNode.js +26 -0
  172. package/src/nodes/accessors/Position.js +53 -4
  173. package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
  174. package/src/nodes/accessors/ReferenceNode.js +202 -2
  175. package/src/nodes/accessors/ReflectVector.js +24 -0
  176. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  177. package/src/nodes/accessors/SceneNode.js +54 -0
  178. package/src/nodes/accessors/SkinningNode.js +127 -1
  179. package/src/nodes/accessors/StorageBufferNode.js +168 -4
  180. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  181. package/src/nodes/accessors/Tangent.js +36 -0
  182. package/src/nodes/accessors/Texture3DNode.js +89 -5
  183. package/src/nodes/accessors/TextureBicubic.js +12 -2
  184. package/src/nodes/accessors/TextureNode.js +309 -10
  185. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  186. package/src/nodes/accessors/UV.js +10 -1
  187. package/src/nodes/accessors/UniformArrayNode.js +223 -23
  188. package/src/nodes/accessors/UserDataNode.js +46 -0
  189. package/src/nodes/accessors/VelocityNode.js +82 -0
  190. package/src/nodes/accessors/VertexColorNode.js +39 -2
  191. package/src/nodes/code/CodeNode.js +95 -1
  192. package/src/nodes/code/ExpressionNode.js +28 -0
  193. package/src/nodes/code/FunctionCallNode.js +37 -0
  194. package/src/nodes/code/FunctionNode.js +45 -0
  195. package/src/nodes/code/ScriptableNode.js +223 -1
  196. package/src/nodes/code/ScriptableValueNode.js +85 -1
  197. package/src/nodes/core/AssignNode.js +48 -2
  198. package/src/nodes/core/AttributeNode.js +43 -0
  199. package/src/nodes/core/BypassNode.js +47 -2
  200. package/src/nodes/core/CacheNode.js +53 -2
  201. package/src/nodes/core/ConstNode.js +24 -0
  202. package/src/nodes/core/ContextNode.js +65 -0
  203. package/src/nodes/core/IndexNode.js +68 -7
  204. package/src/nodes/core/InputNode.js +48 -0
  205. package/src/nodes/core/LightingModel.js +60 -0
  206. package/src/nodes/core/MRTNode.js +66 -0
  207. package/src/nodes/core/Node.js +337 -12
  208. package/src/nodes/core/NodeAttribute.js +38 -0
  209. package/src/nodes/core/NodeBuilder.js +945 -15
  210. package/src/nodes/core/NodeCache.js +41 -2
  211. package/src/nodes/core/NodeCode.js +31 -0
  212. package/src/nodes/core/NodeFrame.js +123 -2
  213. package/src/nodes/core/NodeFunction.js +46 -0
  214. package/src/nodes/core/NodeFunctionInput.js +44 -0
  215. package/src/nodes/core/NodeParser.js +11 -0
  216. package/src/nodes/core/NodeUniform.js +52 -0
  217. package/src/nodes/core/NodeUtils.js +141 -0
  218. package/src/nodes/core/NodeVar.js +30 -0
  219. package/src/nodes/core/NodeVarying.js +28 -0
  220. package/src/nodes/core/OutputStructNode.js +33 -2
  221. package/src/nodes/core/ParameterNode.js +28 -0
  222. package/src/nodes/core/PropertyNode.js +232 -0
  223. package/src/nodes/core/StackNode.js +78 -0
  224. package/src/nodes/core/StructTypeNode.js +39 -1
  225. package/src/nodes/core/TempNode.js +30 -4
  226. package/src/nodes/core/UniformGroupNode.js +82 -7
  227. package/src/nodes/core/UniformNode.js +66 -0
  228. package/src/nodes/core/VarNode.js +52 -0
  229. package/src/nodes/core/VaryingNode.js +83 -2
  230. package/src/nodes/core/constants.js +36 -0
  231. package/src/nodes/display/BumpMapNode.js +37 -0
  232. package/src/nodes/display/ColorAdjustment.js +53 -11
  233. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  234. package/src/nodes/display/ColorSpaceNode.js +82 -0
  235. package/src/nodes/display/FrontFacingNode.js +29 -0
  236. package/src/nodes/display/NormalMapNode.js +43 -0
  237. package/src/nodes/display/PassNode.js +298 -7
  238. package/src/nodes/display/PosterizeNode.js +33 -0
  239. package/src/nodes/display/RenderOutputNode.js +66 -1
  240. package/src/nodes/display/ScreenNode.js +87 -0
  241. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  242. package/src/nodes/display/ToneMappingNode.js +55 -2
  243. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  244. package/src/nodes/display/ViewportDepthNode.js +122 -8
  245. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  246. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  247. package/src/nodes/display/ViewportTextureNode.js +57 -0
  248. package/src/nodes/fog/Fog.js +93 -0
  249. package/src/nodes/functions/BasicLightingModel.js +24 -0
  250. package/src/nodes/functions/PhongLightingModel.js +34 -2
  251. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  252. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  253. package/src/nodes/functions/ToonLightingModel.js +20 -0
  254. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  255. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  256. package/src/nodes/geometry/RangeNode.js +54 -2
  257. package/src/nodes/gpgpu/AtomicFunctionNode.js +157 -1
  258. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  259. package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -0
  260. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  261. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  262. package/src/nodes/lighting/AONode.js +18 -0
  263. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  264. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  265. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  266. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  267. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  268. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  269. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  270. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  271. package/src/nodes/lighting/IrradianceNode.js +17 -0
  272. package/src/nodes/lighting/LightProbeNode.js +20 -0
  273. package/src/nodes/lighting/LightUtils.js +12 -0
  274. package/src/nodes/lighting/LightingContextNode.js +48 -0
  275. package/src/nodes/lighting/LightingNode.js +15 -6
  276. package/src/nodes/lighting/LightsNode.js +132 -1
  277. package/src/nodes/lighting/PointLightNode.js +32 -1
  278. package/src/nodes/lighting/PointShadowNode.js +54 -1
  279. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  280. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  281. package/src/nodes/lighting/ShadowNode.js +240 -34
  282. package/src/nodes/lighting/SpotLightNode.js +43 -0
  283. package/src/nodes/math/ConditionalNode.js +70 -3
  284. package/src/nodes/math/Hash.js +9 -0
  285. package/src/nodes/math/MathNode.js +614 -11
  286. package/src/nodes/math/MathUtils.js +45 -1
  287. package/src/nodes/math/OperatorNode.js +233 -0
  288. package/src/nodes/math/TriNoise3D.js +18 -7
  289. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  290. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  291. package/src/nodes/pmrem/PMREMNode.js +133 -0
  292. package/src/nodes/pmrem/PMREMUtils.js +1 -1
  293. package/src/nodes/procedural/Checker.js +9 -0
  294. package/src/nodes/tsl/TSLBase.js +2 -2
  295. package/src/nodes/utils/ArrayElementNode.js +38 -2
  296. package/src/nodes/utils/ConvertNode.js +31 -0
  297. package/src/nodes/utils/CubeMapNode.js +78 -0
  298. package/src/nodes/utils/Discard.js +16 -0
  299. package/src/nodes/utils/EquirectUVNode.js +31 -1
  300. package/src/nodes/utils/FlipNode.js +38 -0
  301. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  302. package/src/nodes/utils/JoinNode.js +25 -0
  303. package/src/nodes/utils/LoopNode.js +74 -1
  304. package/src/nodes/utils/MatcapUVNode.js +17 -0
  305. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  306. package/src/nodes/utils/Oscillators.js +33 -0
  307. package/src/nodes/utils/Packing.js +17 -0
  308. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  309. package/src/nodes/utils/RTTNode.js +123 -2
  310. package/src/nodes/utils/ReflectorNode.js +174 -4
  311. package/src/nodes/utils/RemapNode.js +79 -0
  312. package/src/nodes/utils/RotateNode.js +41 -0
  313. package/src/nodes/utils/SetNode.js +44 -1
  314. package/src/nodes/utils/SplitNode.js +55 -3
  315. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  316. package/src/nodes/utils/SpriteUtils.js +17 -0
  317. package/src/nodes/utils/StorageArrayElementNode.js +40 -0
  318. package/src/nodes/utils/Timer.js +19 -0
  319. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  320. package/src/nodes/utils/UVUtils.js +20 -0
  321. package/src/nodes/utils/ViewportUtils.js +13 -0
  322. package/src/objects/BatchedMesh.js +1 -2
  323. package/src/objects/ClippingGroup.js +49 -0
  324. package/src/renderers/WebGLRenderer.js +23 -4
  325. package/src/renderers/common/Animation.js +63 -0
  326. package/src/renderers/common/Attributes.js +36 -0
  327. package/src/renderers/common/Backend.js +467 -52
  328. package/src/renderers/common/Background.js +34 -1
  329. package/src/renderers/common/BindGroup.js +43 -0
  330. package/src/renderers/common/Binding.js +35 -0
  331. package/src/renderers/common/Bindings.js +93 -1
  332. package/src/renderers/common/Buffer.js +49 -0
  333. package/src/renderers/common/BufferUtils.js +27 -0
  334. package/src/renderers/common/BundleGroup.js +57 -0
  335. package/src/renderers/common/ChainMap.js +38 -1
  336. package/src/renderers/common/ClippingContext.js +107 -14
  337. package/src/renderers/common/Color4.js +36 -0
  338. package/src/renderers/common/ComputePipeline.js +24 -0
  339. package/src/renderers/common/CubeRenderTarget.js +13 -0
  340. package/src/renderers/common/DataMap.js +37 -1
  341. package/src/renderers/common/Geometries.js +98 -0
  342. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  343. package/src/renderers/common/Info.js +87 -0
  344. package/src/renderers/common/Lighting.js +26 -0
  345. package/src/renderers/common/Pipeline.js +22 -0
  346. package/src/renderers/common/Pipelines.js +148 -5
  347. package/src/renderers/common/PostProcessing.js +75 -3
  348. package/src/renderers/common/ProgrammableStage.js +60 -2
  349. package/src/renderers/common/QuadMesh.js +54 -5
  350. package/src/renderers/common/RenderBundle.js +14 -8
  351. package/src/renderers/common/RenderBundles.js +33 -10
  352. package/src/renderers/common/RenderContext.js +169 -4
  353. package/src/renderers/common/RenderContexts.js +42 -2
  354. package/src/renderers/common/RenderList.js +178 -0
  355. package/src/renderers/common/RenderLists.js +31 -0
  356. package/src/renderers/common/RenderObject.js +328 -4
  357. package/src/renderers/common/RenderObjects.js +101 -7
  358. package/src/renderers/common/RenderPipeline.js +24 -0
  359. package/src/renderers/common/Renderer.js +1096 -31
  360. package/src/renderers/common/RendererUtils.js +193 -0
  361. package/src/renderers/common/SampledTexture.js +121 -0
  362. package/src/renderers/common/Sampler.js +30 -0
  363. package/src/renderers/common/StorageBuffer.js +24 -0
  364. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  365. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  366. package/src/renderers/common/StorageTexture.js +38 -0
  367. package/src/renderers/common/Textures.js +83 -0
  368. package/src/renderers/common/Uniform.js +188 -2
  369. package/src/renderers/common/UniformBuffer.js +19 -0
  370. package/src/renderers/common/UniformsGroup.js +139 -2
  371. package/src/renderers/common/extras/PMREMGenerator.js +24 -3
  372. package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
  373. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  374. package/src/renderers/common/nodes/NodeSampledTexture.js +91 -2
  375. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  376. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  377. package/src/renderers/common/nodes/NodeUniform.js +189 -0
  378. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  379. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  380. package/src/renderers/common/nodes/Nodes.js +327 -60
  381. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  382. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  383. package/src/renderers/webgl-fallback/WebGLBackend.js +547 -29
  384. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
  385. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
  386. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
  387. package/src/renderers/webgpu/WebGPUBackend.js +480 -49
  388. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
  389. package/src/renderers/webgpu/WebGPURenderer.js +35 -0
  390. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  391. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  392. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +59 -11
  393. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  394. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  395. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +10 -8
  396. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
  397. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
  398. package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
  399. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  400. package/src/renderers/webxr/WebXRManager.js +7 -1
  401. package/src/textures/Data3DTexture.js +2 -2
  402. package/src/textures/Texture.js +4 -0
  403. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  404. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  405. package/examples/jsm/exporters/MMDExporter.js +0 -223
  406. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  407. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  408. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  409. package/src/nodes/core/UniformGroup.js +0 -13
  410. package/src/nodes/fog/FogExp2Node.js +0 -35
  411. package/src/nodes/fog/FogNode.js +0 -50
  412. package/src/nodes/fog/FogRangeNode.js +0 -36
  413. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -1,14 +1,57 @@
1
1
  let _id = 0;
2
2
 
3
+ /**
4
+ * A bind group represents a collection of bindings and thus a collection
5
+ * or resources. Bind groups are assigned to pipelines to provide them
6
+ * with the required resources (like uniform buffers or textures).
7
+ *
8
+ * @private
9
+ */
3
10
  class BindGroup {
4
11
 
12
+ /**
13
+ * Constructs a new bind group.
14
+ *
15
+ * @param {String} name - The bind group's name.
16
+ * @param {Array<Binding>} bindings - An array of bindings.
17
+ * @param {Number} index - The group index.
18
+ * @param {Array<Binding>} bindingsReference - An array of reference bindings.
19
+ */
5
20
  constructor( name = '', bindings = [], index = 0, bindingsReference = [] ) {
6
21
 
22
+ /**
23
+ * The bind group's name.
24
+ *
25
+ * @type {String}
26
+ */
7
27
  this.name = name;
28
+
29
+ /**
30
+ * An array of bindings.
31
+ *
32
+ * @type {Array<Binding>}
33
+ */
8
34
  this.bindings = bindings;
35
+
36
+ /**
37
+ * The group index.
38
+ *
39
+ * @type {Number}
40
+ */
9
41
  this.index = index;
42
+
43
+ /**
44
+ * An array of reference bindings.
45
+ *
46
+ * @type {Array<Binding>}
47
+ */
10
48
  this.bindingsReference = bindingsReference;
11
49
 
50
+ /**
51
+ * The group's ID.
52
+ *
53
+ * @type {Number}
54
+ */
12
55
  this.id = _id ++;
13
56
 
14
57
  }
@@ -1,19 +1,54 @@
1
+ /**
2
+ * A binding represents the connection between a resource (like a texture, sampler
3
+ * or uniform buffer) and the resource definition in a shader stage.
4
+ *
5
+ * This module is an abstract base class for all concrete bindings types.
6
+ *
7
+ * @abstract
8
+ * @private
9
+ */
1
10
  class Binding {
2
11
 
12
+ /**
13
+ * Constructs a new binding.
14
+ *
15
+ * @param {String} [name=''] - The binding's name.
16
+ */
3
17
  constructor( name = '' ) {
4
18
 
19
+ /**
20
+ * The binding's name.
21
+ *
22
+ * @type {String}
23
+ */
5
24
  this.name = name;
6
25
 
26
+ /**
27
+ * A bitmask that defines in what shader stages the
28
+ * binding's resource is accessible.
29
+ *
30
+ * @type {String}
31
+ */
7
32
  this.visibility = 0;
8
33
 
9
34
  }
10
35
 
36
+ /**
37
+ * Makes sure binding's resource is visible for the given shader stage.
38
+ *
39
+ * @param {Number} visibility - The shader stage.
40
+ */
11
41
  setVisibility( visibility ) {
12
42
 
13
43
  this.visibility |= visibility;
14
44
 
15
45
  }
16
46
 
47
+ /**
48
+ * Clones the binding.
49
+ *
50
+ * @return {Binding} The cloned binding.
51
+ */
17
52
  clone() {
18
53
 
19
54
  return Object.assign( new this.constructor(), this );
@@ -1,23 +1,80 @@
1
1
  import DataMap from './DataMap.js';
2
2
  import { AttributeType } from './Constants.js';
3
3
 
4
+ /**
5
+ * This renderer module manages the bindings of the renderer.
6
+ *
7
+ * @private
8
+ * @augments DataMap
9
+ */
4
10
  class Bindings extends DataMap {
5
11
 
12
+ /**
13
+ * Constructs a new bindings management component.
14
+ *
15
+ * @param {Backend} backend - The renderer's backend.
16
+ * @param {Nodes} nodes - Renderer component for managing nodes related logic.
17
+ * @param {Textures} textures - Renderer component for managing textures.
18
+ * @param {Attributes} attributes - Renderer component for managing attributes.
19
+ * @param {Pipelines} pipelines - Renderer component for managing pipelines.
20
+ * @param {Info} info - Renderer component for managing metrics and monitoring data.
21
+ */
6
22
  constructor( backend, nodes, textures, attributes, pipelines, info ) {
7
23
 
8
24
  super();
9
25
 
26
+ /**
27
+ * The renderer's backend.
28
+ *
29
+ * @type {Backend}
30
+ */
10
31
  this.backend = backend;
32
+
33
+ /**
34
+ * Renderer component for managing textures.
35
+ *
36
+ * @type {Textures}
37
+ */
11
38
  this.textures = textures;
39
+
40
+ /**
41
+ * Renderer component for managing pipelines.
42
+ *
43
+ * @type {Pipelines}
44
+ */
12
45
  this.pipelines = pipelines;
46
+
47
+ /**
48
+ * Renderer component for managing attributes.
49
+ *
50
+ * @type {Attributes}
51
+ */
13
52
  this.attributes = attributes;
53
+
54
+ /**
55
+ * Renderer component for managing nodes related logic.
56
+ *
57
+ * @type {Nodes}
58
+ */
14
59
  this.nodes = nodes;
60
+
61
+ /**
62
+ * Renderer component for managing metrics and monitoring data.
63
+ *
64
+ * @type {Info}
65
+ */
15
66
  this.info = info;
16
67
 
17
68
  this.pipelines.bindings = this; // assign bindings to pipelines
18
69
 
19
70
  }
20
71
 
72
+ /**
73
+ * Returns the bind groups for the given render object.
74
+ *
75
+ * @param {RenderObject} renderObject - The render object.
76
+ * @return {Array<BindGroup>} The bind groups.
77
+ */
21
78
  getForRender( renderObject ) {
22
79
 
23
80
  const bindings = renderObject.getBindings();
@@ -44,6 +101,12 @@ class Bindings extends DataMap {
44
101
 
45
102
  }
46
103
 
104
+ /**
105
+ * Returns the bind groups for the given compute node.
106
+ *
107
+ * @param {Node} computeNode - The compute node.
108
+ * @return {Array<BindGroup>} The bind groups.
109
+ */
47
110
  getForCompute( computeNode ) {
48
111
 
49
112
  const bindings = this.nodes.getForCompute( computeNode ).bindings;
@@ -68,18 +131,33 @@ class Bindings extends DataMap {
68
131
 
69
132
  }
70
133
 
134
+ /**
135
+ * Updates the bindings for the given compute node.
136
+ *
137
+ * @param {Node} computeNode - The compute node.
138
+ */
71
139
  updateForCompute( computeNode ) {
72
140
 
73
141
  this._updateBindings( this.getForCompute( computeNode ) );
74
142
 
75
143
  }
76
144
 
145
+ /**
146
+ * Updates the bindings for the given render object.
147
+ *
148
+ * @param {RenderObject} renderObject - The render object.
149
+ */
77
150
  updateForRender( renderObject ) {
78
151
 
79
152
  this._updateBindings( this.getForRender( renderObject ) );
80
153
 
81
154
  }
82
155
 
156
+ /**
157
+ * Updates the given array of bindings.
158
+ *
159
+ * @param {Array<BindGroup>} bindings - The bind groups.
160
+ */
83
161
  _updateBindings( bindings ) {
84
162
 
85
163
  for ( const bindGroup of bindings ) {
@@ -90,6 +168,11 @@ class Bindings extends DataMap {
90
168
 
91
169
  }
92
170
 
171
+ /**
172
+ * Initializes the given bind group.
173
+ *
174
+ * @param {BindGroup} bindGroup - The bind group to initialize.
175
+ */
93
176
  _init( bindGroup ) {
94
177
 
95
178
  for ( const binding of bindGroup.bindings ) {
@@ -111,6 +194,12 @@ class Bindings extends DataMap {
111
194
 
112
195
  }
113
196
 
197
+ /**
198
+ * Updates the given bind group.
199
+ *
200
+ * @param {BindGroup} bindGroup - The bind group to update.
201
+ * @param {Array<BindGroup>} bindings - The bind groups.
202
+ */
114
203
  _update( bindGroup, bindings ) {
115
204
 
116
205
  const { backend } = this;
@@ -128,7 +217,10 @@ class Bindings extends DataMap {
128
217
 
129
218
  const updated = this.nodes.updateGroup( binding );
130
219
 
131
- if ( ! updated ) continue;
220
+ // every uniforms group is a uniform buffer. So if no update is required,
221
+ // we move one with the next binding. Otherwise the next if block will update the group.
222
+
223
+ if ( updated === false ) continue;
132
224
 
133
225
  }
134
226
 
@@ -1,32 +1,81 @@
1
1
  import Binding from './Binding.js';
2
2
  import { getFloatLength } from './BufferUtils.js';
3
3
 
4
+ /**
5
+ * Represents a buffer binding type.
6
+ *
7
+ * @private
8
+ * @abstract
9
+ * @augments Binding
10
+ */
4
11
  class Buffer extends Binding {
5
12
 
13
+ /**
14
+ * Constructs a new buffer.
15
+ *
16
+ * @param {String} name - The buffer's name.
17
+ * @param {TypedArray} [buffer=null] - The buffer.
18
+ */
6
19
  constructor( name, buffer = null ) {
7
20
 
8
21
  super( name );
9
22
 
23
+ /**
24
+ * This flag can be used for type testing.
25
+ *
26
+ * @type {Boolean}
27
+ * @readonly
28
+ * @default true
29
+ */
10
30
  this.isBuffer = true;
11
31
 
32
+ /**
33
+ * The bytes per element.
34
+ *
35
+ * @type {Number}
36
+ */
12
37
  this.bytesPerElement = Float32Array.BYTES_PER_ELEMENT;
13
38
 
39
+ /**
40
+ * A reference to the internal buffer.
41
+ *
42
+ * @private
43
+ * @type {TypedArray}
44
+ */
14
45
  this._buffer = buffer;
15
46
 
16
47
  }
17
48
 
49
+ /**
50
+ * The buffer's byte length.
51
+ *
52
+ * @type {Number}
53
+ * @readonly
54
+ */
18
55
  get byteLength() {
19
56
 
20
57
  return getFloatLength( this._buffer.byteLength );
21
58
 
22
59
  }
23
60
 
61
+ /**
62
+ * A reference to the internal buffer.
63
+ *
64
+ * @type {Float32Array}
65
+ * @readonly
66
+ */
24
67
  get buffer() {
25
68
 
26
69
  return this._buffer;
27
70
 
28
71
  }
29
72
 
73
+ /**
74
+ * Updates the binding.
75
+ *
76
+ * @return {Boolean} Whether the buffer has been updated and must be
77
+ * uploaded to the GPU.
78
+ */
30
79
  update() {
31
80
 
32
81
  return true;
@@ -1,5 +1,15 @@
1
1
  import { GPU_CHUNK_BYTES } from './Constants.js';
2
2
 
3
+ /** @module BufferUtils **/
4
+
5
+ /**
6
+ * This function is usually called with the length in bytes of an array buffer.
7
+ * It returns an padded value whic ensure chunk size alignment according to STD140 layout.
8
+ *
9
+ * @function
10
+ * @param {Number} floatLength - The buffer length.
11
+ * @return {Number} The padded length.
12
+ */
3
13
  function getFloatLength( floatLength ) {
4
14
 
5
15
  // ensure chunk size alignment (STD140 layout)
@@ -8,6 +18,15 @@ function getFloatLength( floatLength ) {
8
18
 
9
19
  }
10
20
 
21
+ /**
22
+ * Given the count of vectors and their vector length, this function computes
23
+ * a total length in bytes with buffer alignment according to STD140 layout.
24
+ *
25
+ * @function
26
+ * @param {Number} count - The number of vectors.
27
+ * @param {Number} [vectorLength=4] - The vector length.
28
+ * @return {Number} The padded length.
29
+ */
11
30
  function getVectorLength( count, vectorLength = 4 ) {
12
31
 
13
32
  const strideLength = getStrideLength( vectorLength );
@@ -18,6 +37,14 @@ function getVectorLength( count, vectorLength = 4 ) {
18
37
 
19
38
  }
20
39
 
40
+ /**
41
+ * This function is called with a vector length and ensure the computed length
42
+ * matches a predefined stride (in this case `4`).
43
+ *
44
+ * @function
45
+ * @param {Number} vectorLength - The vector length.
46
+ * @return {Number} The padded length.
47
+ */
21
48
  function getStrideLength( vectorLength ) {
22
49
 
23
50
  const strideLength = 4;
@@ -1,20 +1,77 @@
1
1
  import { Group } from '../../objects/Group.js';
2
2
 
3
+ /**
4
+ * A specialized group which eanbles applications access to the
5
+ * Render Bundle API of WebGPU. The group with all its descendant nodes
6
+ * are considered as one render bundle and processed as such by
7
+ * the renderer.
8
+ *
9
+ * This module is only fully supported by `WebGPURenderer` with a WebGPU backend.
10
+ * With a WebGL backend, the group can technically be rendered but without
11
+ * any performance improvements.
12
+ *
13
+ * @augments Group
14
+ */
3
15
  class BundleGroup extends Group {
4
16
 
17
+ /**
18
+ * Constructs a new bundle group.
19
+ */
5
20
  constructor() {
6
21
 
7
22
  super();
8
23
 
24
+ /**
25
+ * This flag can be used for type testing.
26
+ *
27
+ * @type {Boolean}
28
+ * @readonly
29
+ * @default true
30
+ */
9
31
  this.isBundleGroup = true;
10
32
 
33
+ /**
34
+ * This property is only relevant for detecting types
35
+ * during serialization/deserialization. It should always
36
+ * match the class name.
37
+ *
38
+ * @type {String}
39
+ * @readonly
40
+ * @default 'BundleGroup'
41
+ */
11
42
  this.type = 'BundleGroup';
12
43
 
44
+ /**
45
+ * Whether the bundle is static or not. When set to `true`, the structure
46
+ * is assumed to be static and does not change. E.g. no new objects are
47
+ * added to the group
48
+ *
49
+ * If a change is required, an update can still be forced by setting the
50
+ * `needsUpdate` flag to `true`.
51
+ *
52
+ * @type {Boolean}
53
+ * @default true
54
+ */
13
55
  this.static = true;
56
+
57
+ /**
58
+ * The bundle group's version.
59
+ *
60
+ * @type {Number}
61
+ * @readonly
62
+ * @default 0
63
+ */
14
64
  this.version = 0;
15
65
 
16
66
  }
17
67
 
68
+ /**
69
+ * Set this property to `true` when the bundle group has changed.
70
+ *
71
+ * @type {Boolean}
72
+ * @default false
73
+ * @param {Boolean} value
74
+ */
18
75
  set needsUpdate( value ) {
19
76
 
20
77
  if ( value === true ) this.version ++;
@@ -1,11 +1,33 @@
1
+ /**
2
+ * Data structure for the renderer. It allows defining values
3
+ * with chained, hierarchical keys. Keys are meant to be
4
+ * objects since the module internally works with Weak Maps
5
+ * for perforamnce reasons.
6
+ *
7
+ * @private
8
+ */
1
9
  export default class ChainMap {
2
10
 
11
+ /**
12
+ * Constructs a new chained map.
13
+ */
3
14
  constructor() {
4
15
 
16
+ /**
17
+ * The root Weak Map.
18
+ *
19
+ * @type {WeakMap}
20
+ */
5
21
  this.weakMap = new WeakMap();
6
22
 
7
23
  }
8
24
 
25
+ /**
26
+ * Returns the value for the given array of keys.
27
+ *
28
+ * @param {Array<Object>} keys - List of keys.
29
+ * @return {Any} The value. Returns `undefined` if no value was found.
30
+ */
9
31
  get( keys ) {
10
32
 
11
33
  let map = this.weakMap;
@@ -22,6 +44,13 @@ export default class ChainMap {
22
44
 
23
45
  }
24
46
 
47
+ /**
48
+ * Sets the value for the given keys.
49
+ *
50
+ * @param {Array<Object>} keys - List of keys.
51
+ * @param {Any} value - The value to set.
52
+ * @return {ChainMap} A reference to this chain map.
53
+ */
25
54
  set( keys, value ) {
26
55
 
27
56
  let map = this.weakMap;
@@ -36,10 +65,18 @@ export default class ChainMap {
36
65
 
37
66
  }
38
67
 
39
- return map.set( keys[ keys.length - 1 ], value );
68
+ map.set( keys[ keys.length - 1 ], value );
69
+
70
+ return this;
40
71
 
41
72
  }
42
73
 
74
+ /**
75
+ * Deletes a value for the given keys.
76
+ *
77
+ * @param {Array<Object>} keys - The keys.
78
+ * @return {Boolean} Returns `true` if the value has been removed successfully and `false` if the value has not be found.
79
+ */
43
80
  delete( keys ) {
44
81
 
45
82
  let map = this.weakMap;