super-three 0.170.1 → 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
@@ -4,41 +4,110 @@ import { Vector4 } from '../../math/Vector4.js';
4
4
 
5
5
  const _plane = /*@__PURE__*/ new Plane();
6
6
 
7
+ /**
8
+ * Represents the state that is used to perform clipping via clipping planes.
9
+ * There is a default clipping context for each render context. When the
10
+ * scene holds instances of `ClippingGroup`, there will be a context for each
11
+ * group.
12
+ *
13
+ * @private
14
+ */
7
15
  class ClippingContext {
8
16
 
17
+ /**
18
+ * Constructs a new clipping context.
19
+ *
20
+ * @param {ClippingContext?} [parentContext=null] - A reference to the parent clipping context.
21
+ */
9
22
  constructor( parentContext = null ) {
10
23
 
24
+ /**
25
+ * The clipping context's version.
26
+ *
27
+ * @type {Number}
28
+ * @readonly
29
+ */
11
30
  this.version = 0;
12
31
 
32
+ /**
33
+ * Whether the intersection of the clipping planes is used to clip objects, rather than their union.
34
+ *
35
+ * @type {Boolean?}
36
+ * @default null
37
+ */
13
38
  this.clipIntersection = null;
14
- this.cacheKey = '';
15
-
16
-
17
- if ( parentContext === null ) {
18
39
 
19
- this.intersectionPlanes = [];
20
- this.unionPlanes = [];
21
-
22
- this.viewNormalMatrix = new Matrix3();
23
- this.clippingGroupContexts = new WeakMap();
40
+ /**
41
+ * The clipping context's cache key.
42
+ *
43
+ * @type {String}
44
+ */
45
+ this.cacheKey = '';
24
46
 
25
- this.shadowPass = false;
47
+ /**
48
+ * Whether the shadow pass is active or not.
49
+ *
50
+ * @type {Boolean}
51
+ * @default false
52
+ */
53
+ this.shadowPass = false;
54
+
55
+ /**
56
+ * The view normal matrix.
57
+ *
58
+ * @type {Matrix3}
59
+ */
60
+ this.viewNormalMatrix = new Matrix3();
61
+
62
+ /**
63
+ * Internal cache for maintaining clipping contexts.
64
+ *
65
+ * @type {WeakMap<ClippingGroup,ClippingContext>}
66
+ */
67
+ this.clippingGroupContexts = new WeakMap();
68
+
69
+ /**
70
+ * The intersection planes.
71
+ *
72
+ * @type {Array<Vector4>}
73
+ */
74
+ this.intersectionPlanes = [];
75
+
76
+ /**
77
+ * The intersection planes.
78
+ *
79
+ * @type {Array<Vector4>}
80
+ */
81
+ this.unionPlanes = [];
82
+
83
+ /**
84
+ * The version of the clipping context's parent context.
85
+ *
86
+ * @type {Number?}
87
+ * @readonly
88
+ */
89
+ this.parentVersion = null;
26
90
 
27
- } else {
91
+ if ( parentContext !== null ) {
28
92
 
29
93
  this.viewNormalMatrix = parentContext.viewNormalMatrix;
30
94
  this.clippingGroupContexts = parentContext.clippingGroupContexts;
31
95
 
32
96
  this.shadowPass = parentContext.shadowPass;
33
-
34
97
  this.viewMatrix = parentContext.viewMatrix;
35
98
 
36
99
  }
37
100
 
38
- this.parentVersion = null;
39
-
40
101
  }
41
102
 
103
+ /**
104
+ * Projects the given source clipping planes and writes the result into the
105
+ * destination array.
106
+ *
107
+ * @param {Array<Plane>} source - The source clipping planes.
108
+ * @param {Array<Vector4>} destination - The destination.
109
+ * @param {Number} offset - The offset.
110
+ */
42
111
  projectPlanes( source, destination, offset ) {
43
112
 
44
113
  const l = source.length;
@@ -59,6 +128,12 @@ class ClippingContext {
59
128
 
60
129
  }
61
130
 
131
+ /**
132
+ * Updates the root clipping context of a scene.
133
+ *
134
+ * @param {Scene} scene - The scene.
135
+ * @param {Camera} camera - The camera that is used to render the scene.
136
+ */
62
137
  updateGlobal( scene, camera ) {
63
138
 
64
139
  this.shadowPass = ( scene.overrideMaterial !== null && scene.overrideMaterial.isShadowNodeMaterial );
@@ -68,6 +143,12 @@ class ClippingContext {
68
143
 
69
144
  }
70
145
 
146
+ /**
147
+ * Updates the clipping context.
148
+ *
149
+ * @param {ClippingContext} parentContext - The parent context.
150
+ * @param {ClippingGroup} clippingGroup - The clipping group this context belongs to.
151
+ */
71
152
  update( parentContext, clippingGroup ) {
72
153
 
73
154
  let update = false;
@@ -139,6 +220,12 @@ class ClippingContext {
139
220
 
140
221
  }
141
222
 
223
+ /**
224
+ * Returns a clipping context for the given clipping group.
225
+ *
226
+ * @param {ClippingGroup} clippingGroup - The clipping group.
227
+ * @return {ClippingContext} The clipping context.
228
+ */
142
229
  getGroupContext( clippingGroup ) {
143
230
 
144
231
  if ( this.shadowPass && ! clippingGroup.clipShadows ) return this;
@@ -158,6 +245,12 @@ class ClippingContext {
158
245
 
159
246
  }
160
247
 
248
+ /**
249
+ * The count of union clipping planes.
250
+ *
251
+ * @type {Number}
252
+ * @readonly
253
+ */
161
254
  get unionClippingCount() {
162
255
 
163
256
  return this.unionPlanes.length;
@@ -1,7 +1,23 @@
1
1
  import { Color } from '../../math/Color.js';
2
2
 
3
+ /**
4
+ * A four-component version of {@link Color} which is internally
5
+ * used by the renderer to represents clear color with alpha as
6
+ * one object.
7
+ *
8
+ * @private
9
+ * @augments Color
10
+ */
3
11
  class Color4 extends Color {
4
12
 
13
+ /**
14
+ * Constructs a new four-component color.
15
+ *
16
+ * @param {Number|String} r - The red value.
17
+ * @param {Number} g - The green value.
18
+ * @param {Number} b - The blue value.
19
+ * @param {Number} [a=1] - The alpha value.
20
+ */
5
21
  constructor( r, g, b, a = 1 ) {
6
22
 
7
23
  super( r, g, b );
@@ -10,6 +26,15 @@ class Color4 extends Color {
10
26
 
11
27
  }
12
28
 
29
+ /**
30
+ * Overwrites the default to honor alpha.
31
+ *
32
+ * @param {Number|String} r - The red value.
33
+ * @param {Number} g - The green value.
34
+ * @param {Number} b - The blue value.
35
+ * @param {Number} [a=1] - The alpha value.
36
+ * @return {Color4} A reference to this object.
37
+ */
13
38
  set( r, g, b, a = 1 ) {
14
39
 
15
40
  this.a = a;
@@ -18,6 +43,12 @@ class Color4 extends Color {
18
43
 
19
44
  }
20
45
 
46
+ /**
47
+ * Overwrites the default to honor alpha.
48
+ *
49
+ * @param {Color4} color - The color to copy.
50
+ * @return {Color4} A reference to this object.
51
+ */
21
52
  copy( color ) {
22
53
 
23
54
  if ( color.a !== undefined ) this.a = color.a;
@@ -26,6 +57,11 @@ class Color4 extends Color {
26
57
 
27
58
  }
28
59
 
60
+ /**
61
+ * Overwrites the default to honor alpha.
62
+ *
63
+ * @return {Color4} The cloned color.
64
+ */
29
65
  clone() {
30
66
 
31
67
  return new this.constructor( this.r, this.g, this.b, this.a );
@@ -1,13 +1,37 @@
1
1
  import Pipeline from './Pipeline.js';
2
2
 
3
+ /**
4
+ * Class for representing compute pipelines.
5
+ *
6
+ * @private
7
+ * @augments Pipeline
8
+ */
3
9
  class ComputePipeline extends Pipeline {
4
10
 
11
+ /**
12
+ * Constructs a new render pipeline.
13
+ *
14
+ * @param {String} cacheKey - The pipeline's cache key.
15
+ * @param {ProgrammableStage} computeProgram - The pipeline's compute shader.
16
+ */
5
17
  constructor( cacheKey, computeProgram ) {
6
18
 
7
19
  super( cacheKey );
8
20
 
21
+ /**
22
+ * The pipeline's compute shader.
23
+ *
24
+ * @type {ProgrammableStage}
25
+ */
9
26
  this.computeProgram = computeProgram;
10
27
 
28
+ /**
29
+ * This flag can be used for type testing.
30
+ *
31
+ * @type {Boolean}
32
+ * @readonly
33
+ * @default true
34
+ */
11
35
  this.isComputePipeline = true;
12
36
 
13
37
  }
@@ -12,6 +12,12 @@ import { BackSide, NoBlending, LinearFilter, LinearMipmapLinearFilter } from '..
12
12
 
13
13
  // @TODO: Consider rename WebGLCubeRenderTarget to just CubeRenderTarget
14
14
 
15
+ /**
16
+ * This class represents a cube render target. It is a special version
17
+ * of `WebGLCubeRenderTarget` which is compatible with `WebGPURenderer`.
18
+ *
19
+ * @augments WebGLCubeRenderTarget
20
+ */
15
21
  class CubeRenderTarget extends WebGLCubeRenderTarget {
16
22
 
17
23
  constructor( size = 1, options = {} ) {
@@ -22,6 +28,13 @@ class CubeRenderTarget extends WebGLCubeRenderTarget {
22
28
 
23
29
  }
24
30
 
31
+ /**
32
+ * Converts the given equirectangular texture to a cube map.
33
+ *
34
+ * @param {Renderer} renderer - The renderer.
35
+ * @param {Texture} texture - The equirectangular texture.
36
+ * @return {CubeRenderTarget} A reference to this cube render target.
37
+ */
25
38
  fromEquirectangularTexture( renderer, texture ) {
26
39
 
27
40
  const currentMinFilter = texture.minFilter;
@@ -1,11 +1,32 @@
1
+ /**
2
+ * Data structure for the renderer. It is intended to manage
3
+ * data of objects in dictionaries.
4
+ *
5
+ * @private
6
+ */
1
7
  class DataMap {
2
8
 
9
+ /**
10
+ * Constructs a new data map.
11
+ */
3
12
  constructor() {
4
13
 
14
+ /**
15
+ * `DataMap` internally uses a weak map
16
+ * to manage its data.
17
+ *
18
+ * @type {WeakMap}
19
+ */
5
20
  this.data = new WeakMap();
6
21
 
7
22
  }
8
23
 
24
+ /**
25
+ * Returns the dictionary for the given object.
26
+ *
27
+ * @param {Object} object - The object.
28
+ * @return {Object} The dictionary.
29
+ */
9
30
  get( object ) {
10
31
 
11
32
  let map = this.data.get( object );
@@ -21,9 +42,15 @@ class DataMap {
21
42
 
22
43
  }
23
44
 
45
+ /**
46
+ * Deletes the dictionary for the given object.
47
+ *
48
+ * @param {Object} object - The object.
49
+ * @return {Object?} The deleted dictionary.
50
+ */
24
51
  delete( object ) {
25
52
 
26
- let map;
53
+ let map = null;
27
54
 
28
55
  if ( this.data.has( object ) ) {
29
56
 
@@ -37,12 +64,21 @@ class DataMap {
37
64
 
38
65
  }
39
66
 
67
+ /**
68
+ * Returns `true` if the given object has a dictionary defined.
69
+ *
70
+ * @param {Object} object - The object to test.
71
+ * @return {Boolean} Whether a dictionary is defined or not.
72
+ */
40
73
  has( object ) {
41
74
 
42
75
  return this.data.has( object );
43
76
 
44
77
  }
45
78
 
79
+ /**
80
+ * Frees internal resources.
81
+ */
46
82
  dispose() {
47
83
 
48
84
  this.data = new WeakMap();
@@ -3,6 +3,14 @@ import { AttributeType } from './Constants.js';
3
3
 
4
4
  import { Uint16BufferAttribute, Uint32BufferAttribute } from '../../core/BufferAttribute.js';
5
5
 
6
+ /**
7
+ * Returns `true` if the given array has values that require an Uint32 array type.
8
+ *
9
+ * @private
10
+ * @function
11
+ * @param {Array<Number>} array - The array to test.
12
+ * @return {Booolean} Whether the given array has values that require an Uint32 array type or not.
13
+ */
6
14
  function arrayNeedsUint32( array ) {
7
15
 
8
16
  // assumes larger values usually on last
@@ -17,12 +25,28 @@ function arrayNeedsUint32( array ) {
17
25
 
18
26
  }
19
27
 
28
+ /**
29
+ * Returns the wireframe version for the given geometry.
30
+ *
31
+ * @private
32
+ * @function
33
+ * @param {BufferGeometry} geometry - The geometry.
34
+ * @return {Number} The versio.
35
+ */
20
36
  function getWireframeVersion( geometry ) {
21
37
 
22
38
  return ( geometry.index !== null ) ? geometry.index.version : geometry.attributes.position.version;
23
39
 
24
40
  }
25
41
 
42
+ /**
43
+ * Returns a wireframe index attribute for the given geometry.
44
+ *
45
+ * @private
46
+ * @function
47
+ * @param {BufferGeometry} geometry - The geometry.
48
+ * @return {BufferAttribute} The wireframe index attribute.
49
+ */
26
50
  function getWireframeIndex( geometry ) {
27
51
 
28
52
  const indices = [];
@@ -67,21 +91,61 @@ function getWireframeIndex( geometry ) {
67
91
 
68
92
  }
69
93
 
94
+ /**
95
+ * This renderer module manages geometries.
96
+ *
97
+ * @private
98
+ * @augments DataMap
99
+ */
70
100
  class Geometries extends DataMap {
71
101
 
102
+ /**
103
+ * Constructs a new geometry management component.
104
+ *
105
+ * @param {Attributes} attributes - Renderer component for managing attributes.
106
+ * @param {Info} info - Renderer component for managing metrics and monitoring data.
107
+ */
72
108
  constructor( attributes, info ) {
73
109
 
74
110
  super();
75
111
 
112
+ /**
113
+ * Renderer component for managing attributes.
114
+ *
115
+ * @type {Attributes}
116
+ */
76
117
  this.attributes = attributes;
118
+
119
+ /**
120
+ * Renderer component for managing metrics and monitoring data.
121
+ *
122
+ * @type {Info}
123
+ */
77
124
  this.info = info;
78
125
 
126
+ /**
127
+ * Weak Map for managing attributes for wireframe rendering.
128
+ *
129
+ * @type {WeakMap<BufferGeometry,BufferAttribute>}
130
+ */
79
131
  this.wireframes = new WeakMap();
80
132
 
133
+ /**
134
+ * This Weak Map is used to make sure buffer attributes are
135
+ * updated only once per render call.
136
+ *
137
+ * @type {WeakMap<BufferAttribute,Number>}
138
+ */
81
139
  this.attributeCall = new WeakMap();
82
140
 
83
141
  }
84
142
 
143
+ /**
144
+ * Returns `true` if the given render object has an initialized geometry.
145
+ *
146
+ * @param {RenderObject} renderObject - The render object.
147
+ * @return {Boolean} Whether if the given render object has an initialized geometry or not.
148
+ */
85
149
  has( renderObject ) {
86
150
 
87
151
  const geometry = renderObject.geometry;
@@ -90,6 +154,11 @@ class Geometries extends DataMap {
90
154
 
91
155
  }
92
156
 
157
+ /**
158
+ * Prepares the geometry of the given render object for rendering.
159
+ *
160
+ * @param {RenderObject} renderObject - The render object.
161
+ */
93
162
  updateForRender( renderObject ) {
94
163
 
95
164
  if ( this.has( renderObject ) === false ) this.initGeometry( renderObject );
@@ -98,6 +167,11 @@ class Geometries extends DataMap {
98
167
 
99
168
  }
100
169
 
170
+ /**
171
+ * Initializes the geometry of the given render object.
172
+ *
173
+ * @param {RenderObject} renderObject - The render object.
174
+ */
101
175
  initGeometry( renderObject ) {
102
176
 
103
177
  const geometry = renderObject.geometry;
@@ -142,6 +216,11 @@ class Geometries extends DataMap {
142
216
 
143
217
  }
144
218
 
219
+ /**
220
+ * Updates the geometry attributes of the given render object.
221
+ *
222
+ * @param {RenderObject} renderObject - The render object.
223
+ */
145
224
  updateAttributes( renderObject ) {
146
225
 
147
226
  // attributes
@@ -184,6 +263,12 @@ class Geometries extends DataMap {
184
263
 
185
264
  }
186
265
 
266
+ /**
267
+ * Updates the given attribute.
268
+ *
269
+ * @param {BufferAttribute} attribute - The attribute to update.
270
+ * @param {Number} type - The attribute type.
271
+ */
187
272
  updateAttribute( attribute, type ) {
188
273
 
189
274
  const callId = this.info.render.calls;
@@ -220,12 +305,25 @@ class Geometries extends DataMap {
220
305
 
221
306
  }
222
307
 
308
+ /**
309
+ * Returns the indirect buffer attribute of the given render object.
310
+ *
311
+ * @param {RenderObject} renderObject - The render object.
312
+ * @return {BufferAttribute?} The indirect attribute. `null` if no indirect drawing is used.
313
+ */
223
314
  getIndirect( renderObject ) {
224
315
 
225
316
  return renderObject.geometry.indirect;
226
317
 
227
318
  }
228
319
 
320
+ /**
321
+ * Returns the index of the given render object's geometry. This is implemented
322
+ * in a method to return a wireframe index if necessary.
323
+ *
324
+ * @param {RenderObject} renderObject - The render object.
325
+ * @return {BufferAttribute?} The index. Returns `null` for non-indexed geometries.
326
+ */
229
327
  getIndex( renderObject ) {
230
328
 
231
329
  const { geometry, material } = renderObject;
@@ -1,11 +1,34 @@
1
1
  import StorageBufferAttribute from './StorageBufferAttribute.js';
2
2
 
3
+ /**
4
+ * This special type of buffer attribute is intended for compute shaders.
5
+ * It can be used to encode draw parameters for indirect draw calls.
6
+ *
7
+ * Note: This type of buffer attribute can only be used with `WebGPURenderer`
8
+ * and a WebGPU backend.
9
+ *
10
+ * @augments StorageBufferAttribute
11
+ */
3
12
  class IndirectStorageBufferAttribute extends StorageBufferAttribute {
4
13
 
5
- constructor( array, itemSize ) {
14
+ /**
15
+ * Constructs a new storage buffer attribute.
16
+ *
17
+ * @param {Number|Uint32Array} count - The item count. It is also valid to pass a `Uint32Array` as an argument.
18
+ * The subsequent parameter is then obsolete.
19
+ * @param {Number} itemSize - The item size.
20
+ */
21
+ constructor( count, itemSize ) {
6
22
 
7
- super( array, itemSize, Uint32Array );
23
+ super( count, itemSize, Uint32Array );
8
24
 
25
+ /**
26
+ * This flag can be used for type testing.
27
+ *
28
+ * @type {Boolean}
29
+ * @readonly
30
+ * @default true
31
+ */
9
32
  this.isIndirectStorageBufferAttribute = true;
10
33
 
11
34
  }