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
@@ -2,6 +2,39 @@ import TextureNode from './TextureNode.js';
2
2
  import { nodeProxy } from '../tsl/TSLBase.js';
3
3
  import { NodeAccess } from '../core/constants.js';
4
4
 
5
+ /** @module StorageTextureNode **/
6
+
7
+ /**
8
+ * This special version of a texture node can be used to
9
+ * write data into a storage texture with a compute shader.
10
+ *
11
+ * ```js
12
+ * const storageTexture = new THREE.StorageTexture( width, height );
13
+ *
14
+ * const computeTexture = Fn( ( { storageTexture } ) => {
15
+ *
16
+ * const posX = instanceIndex.modInt( width );
17
+ * const posY = instanceIndex.div( width );
18
+ * const indexUV = uvec2( posX, posY );
19
+ *
20
+ * // generate RGB values
21
+ *
22
+ * const r = 1;
23
+ * const g = 1;
24
+ * const b = 1;
25
+ *
26
+ * textureStore( storageTexture, indexUV, vec4( r, g, b, 1 ) ).toWriteOnly();
27
+ *
28
+ * } );
29
+ *
30
+ * const computeNode = computeTexture( { storageTexture } ).compute( width * height );
31
+ * renderer.computeAsync( computeNode );
32
+ * ```
33
+ *
34
+ * This node can only be used with a WebGPU backend.
35
+ *
36
+ * @augments module:TextureNode~TextureNode
37
+ */
5
38
  class StorageTextureNode extends TextureNode {
6
39
 
7
40
  static get type() {
@@ -10,18 +43,50 @@ class StorageTextureNode extends TextureNode {
10
43
 
11
44
  }
12
45
 
46
+ /**
47
+ * Constructs a new storage texture node.
48
+ *
49
+ * @param {StorageTexture} value - The storage texture.
50
+ * @param {Node<vec2|vec3>} uvNode - The uv node.
51
+ * @param {Node?} [storeNode=null] - The value node that should be stored in the texture.
52
+ */
13
53
  constructor( value, uvNode, storeNode = null ) {
14
54
 
15
55
  super( value, uvNode );
16
56
 
57
+ /**
58
+ * The value node that should be stored in the texture.
59
+ *
60
+ * @type {Node?}
61
+ * @default null
62
+ */
17
63
  this.storeNode = storeNode;
18
64
 
65
+ /**
66
+ * This flag can be used for type testing.
67
+ *
68
+ * @type {Boolean}
69
+ * @readonly
70
+ * @default true
71
+ */
19
72
  this.isStorageTextureNode = true;
20
73
 
74
+ /**
75
+ * The access type of the texture node.
76
+ *
77
+ * @type {String}
78
+ * @default 'writeOnly'
79
+ */
21
80
  this.access = NodeAccess.WRITE_ONLY;
22
81
 
23
82
  }
24
83
 
84
+ /**
85
+ * Overwrites the default implementation to return a fixed value `'storageTexture'`.
86
+ *
87
+ * @param {NodeBuilder} builder - The current node builder.
88
+ * @return {String} The input type.
89
+ */
25
90
  getInputType( /*builder*/ ) {
26
91
 
27
92
  return 'storageTexture';
@@ -37,6 +102,12 @@ class StorageTextureNode extends TextureNode {
37
102
 
38
103
  }
39
104
 
105
+ /**
106
+ * Defines the node access.
107
+ *
108
+ * @param {String} value - The node access.
109
+ * @return {StorageTextureNode} A reference to this node.
110
+ */
40
111
  setAccess( value ) {
41
112
 
42
113
  this.access = value;
@@ -44,6 +115,14 @@ class StorageTextureNode extends TextureNode {
44
115
 
45
116
  }
46
117
 
118
+ /**
119
+ * Generates the code snippet of the stroge node. If no `storeNode`
120
+ * is defined, the texture node is generated as normal texture.
121
+ *
122
+ * @param {NodeBuilder} builder - The current node builder.
123
+ * @param {String} output - The current output.
124
+ * @return {String} The generated code snippet.
125
+ */
47
126
  generate( builder, output ) {
48
127
 
49
128
  let snippet;
@@ -62,24 +141,44 @@ class StorageTextureNode extends TextureNode {
62
141
 
63
142
  }
64
143
 
144
+ /**
145
+ * Convenience method for configuring a read/write node access.
146
+ *
147
+ * @return {StorageTextureNode} A reference to this node.
148
+ */
65
149
  toReadWrite() {
66
150
 
67
151
  return this.setAccess( NodeAccess.READ_WRITE );
68
152
 
69
153
  }
70
154
 
155
+ /**
156
+ * Convenience method for configuring a read-only node access.
157
+ *
158
+ * @return {StorageTextureNode} A reference to this node.
159
+ */
71
160
  toReadOnly() {
72
161
 
73
162
  return this.setAccess( NodeAccess.READ_ONLY );
74
163
 
75
164
  }
76
165
 
166
+ /**
167
+ * Convenience method for configuring a write-only node access.
168
+ *
169
+ * @return {StorageTextureNode} A reference to this node.
170
+ */
77
171
  toWriteOnly() {
78
172
 
79
173
  return this.setAccess( NodeAccess.WRITE_ONLY );
80
174
 
81
175
  }
82
176
 
177
+ /**
178
+ * Generates the code snippet of the storage texture node.
179
+ *
180
+ * @param {NodeBuilder} builder - The current node builder.
181
+ */
83
182
  generateStore( builder ) {
84
183
 
85
184
  const properties = builder.getNodeProperties( this );
@@ -100,8 +199,27 @@ class StorageTextureNode extends TextureNode {
100
199
 
101
200
  export default StorageTextureNode;
102
201
 
202
+ /**
203
+ * TSL function for creating a storage texture node.
204
+ *
205
+ * @function
206
+ * @param {StorageTexture} value - The storage texture.
207
+ * @param {Node<vec2|vec3>} uvNode - The uv node.
208
+ * @param {Node?} [storeNode=null] - The value node that should be stored in the texture.
209
+ * @returns {StorageTextureNode}
210
+ */
103
211
  export const storageTexture = /*@__PURE__*/ nodeProxy( StorageTextureNode );
104
212
 
213
+
214
+ /**
215
+ * TODO: Explain difference to `storageTexture()`.
216
+ *
217
+ * @function
218
+ * @param {StorageTexture} value - The storage texture.
219
+ * @param {Node<vec2|vec3>} uvNode - The uv node.
220
+ * @param {Node?} [storeNode=null] - The value node that should be stored in the texture.
221
+ * @returns {StorageTextureNode}
222
+ */
105
223
  export const textureStore = ( value, uvNode, storeNode ) => {
106
224
 
107
225
  const node = storageTexture( value, uvNode, storeNode );
@@ -3,6 +3,13 @@ import { cameraViewMatrix } from './Camera.js';
3
3
  import { modelViewMatrix } from './ModelNode.js';
4
4
  import { Fn, vec4 } from '../tsl/TSLBase.js';
5
5
 
6
+ /** @module Tangent **/
7
+
8
+ /**
9
+ * TSL object that represents the tangent attribute of the current rendered object.
10
+ *
11
+ * @type {Node<vec4>}
12
+ */
6
13
  export const tangentGeometry = /*@__PURE__*/ Fn( ( builder ) => {
7
14
 
8
15
  if ( builder.geometry.hasAttribute( 'tangent' ) === false ) {
@@ -15,8 +22,37 @@ export const tangentGeometry = /*@__PURE__*/ Fn( ( builder ) => {
15
22
 
16
23
  } )();
17
24
 
25
+ /**
26
+ * TSL object that represents the vertex tangent in local space of the current rendered object.
27
+ *
28
+ * @type {Node<vec3>}
29
+ */
18
30
  export const tangentLocal = /*@__PURE__*/ tangentGeometry.xyz.toVar( 'tangentLocal' );
31
+
32
+ /**
33
+ * TSL object that represents the vertex tangent in view space of the current rendered object.
34
+ *
35
+ * @type {Node<vec3>}
36
+ */
19
37
  export const tangentView = /*@__PURE__*/ modelViewMatrix.mul( vec4( tangentLocal, 0 ) ).xyz.varying( 'v_tangentView' ).normalize().toVar( 'tangentView' );
38
+
39
+ /**
40
+ * TSL object that represents the vertex tangent in world space of the current rendered object.
41
+ *
42
+ * @type {Node<vec3>}
43
+ */
20
44
  export const tangentWorld = /*@__PURE__*/ tangentView.transformDirection( cameraViewMatrix ).varying( 'v_tangentWorld' ).normalize().toVar( 'tangentWorld' );
45
+
46
+ /**
47
+ * TSL object that represents the transformed vertex tangent in view space of the current rendered object.
48
+ *
49
+ * @type {Node<vec3>}
50
+ */
21
51
  export const transformedTangentView = /*@__PURE__*/ tangentView.toVar( 'transformedTangentView' );
52
+
53
+ /**
54
+ * TSL object that represents the transformed vertex tangent in world space of the current rendered object.
55
+ *
56
+ * @type {Node<vec3>}
57
+ */
22
58
  export const transformedTangentWorld = /*@__PURE__*/ transformedTangentView.transformDirection( cameraViewMatrix ).normalize().toVar( 'transformedTangentWorld' );
@@ -1,5 +1,8 @@
1
1
  import TextureNode from './TextureNode.js';
2
- import { nodeProxy, vec3, Fn, If } from '../tsl/TSLBase.js';
2
+ import { nodeProxy, vec3, Fn, If, int } from '../tsl/TSLBase.js';
3
+ import { textureSize } from './TextureSizeNode.js';
4
+
5
+ /** @module Texture3DNode **/
3
6
 
4
7
  const normal = Fn( ( { texture, uv } ) => {
5
8
 
@@ -35,9 +38,9 @@ const normal = Fn( ( { texture, uv } ) => {
35
38
 
36
39
  const step = 0.01;
37
40
 
38
- const x = texture.uv( uv.add( vec3( - step, 0.0, 0.0 ) ) ).r.sub( texture.uv( uv.add( vec3( step, 0.0, 0.0 ) ) ).r );
39
- const y = texture.uv( uv.add( vec3( 0.0, - step, 0.0 ) ) ).r.sub( texture.uv( uv.add( vec3( 0.0, step, 0.0 ) ) ).r );
40
- const z = texture.uv( uv.add( vec3( 0.0, 0.0, - step ) ) ).r.sub( texture.uv( uv.add( vec3( 0.0, 0.0, step ) ) ).r );
41
+ const x = texture.sample( uv.add( vec3( - step, 0.0, 0.0 ) ) ).r.sub( texture.sample( uv.add( vec3( step, 0.0, 0.0 ) ) ).r );
42
+ const y = texture.sample( uv.add( vec3( 0.0, - step, 0.0 ) ) ).r.sub( texture.sample( uv.add( vec3( 0.0, step, 0.0 ) ) ).r );
43
+ const z = texture.sample( uv.add( vec3( 0.0, 0.0, - step ) ) ).r.sub( texture.sample( uv.add( vec3( 0.0, 0.0, step ) ) ).r );
41
44
 
42
45
  ret.assign( vec3( x, y, z ) );
43
46
 
@@ -47,7 +50,11 @@ const normal = Fn( ( { texture, uv } ) => {
47
50
 
48
51
  } );
49
52
 
50
-
53
+ /**
54
+ * This type of uniform node represents a 3D texture.
55
+ *
56
+ * @augments module:TextureNode~TextureNode
57
+ */
51
58
  class Texture3DNode extends TextureNode {
52
59
 
53
60
  static get type() {
@@ -56,40 +63,108 @@ class Texture3DNode extends TextureNode {
56
63
 
57
64
  }
58
65
 
66
+ /**
67
+ * Constructs a new 3D texture node.
68
+ *
69
+ * @param {Data3DTexture} value - The 3D texture.
70
+ * @param {Node<vec2|vec3>?} [uvNode=null] - The uv node.
71
+ * @param {Node<int>?} [levelNode=null] - The level node.
72
+ */
59
73
  constructor( value, uvNode = null, levelNode = null ) {
60
74
 
61
75
  super( value, uvNode, levelNode );
62
76
 
77
+ /**
78
+ * This flag can be used for type testing.
79
+ *
80
+ * @type {Boolean}
81
+ * @readonly
82
+ * @default true
83
+ */
63
84
  this.isTexture3DNode = true;
64
85
 
65
86
  }
66
87
 
88
+ /**
89
+ * Overwrites the default implementation to return a fixed value `'texture3D'`.
90
+ *
91
+ * @param {NodeBuilder} builder - The current node builder.
92
+ * @return {String} The input type.
93
+ */
67
94
  getInputType( /*builder*/ ) {
68
95
 
69
96
  return 'texture3D';
70
97
 
71
98
  }
72
99
 
100
+ /**
101
+ * Returns a default uv node which is in context of 3D textures a three-dimensional
102
+ * uv node.
103
+ *
104
+ * @return {Node<vec3>} The default uv node.
105
+ */
73
106
  getDefaultUV() {
74
107
 
75
108
  return vec3( 0.5, 0.5, 0.5 );
76
109
 
77
110
  }
78
111
 
112
+ /**
113
+ * Overwritten with an empty implementation since the `updateMatrix` flag is ignored
114
+ * for 3D textures. The uv transformation matrix is not applied to 3D textures.
115
+ *
116
+ * @param {Boolean} value - The update toggle.
117
+ */
79
118
  setUpdateMatrix( /*updateMatrix*/ ) { } // Ignore .updateMatrix for 3d TextureNode
80
119
 
120
+ /**
121
+ * Overwrites the default implementation to return the unmodified uv node.
122
+ *
123
+ * @param {NodeBuilder} builder - The current node builder.
124
+ * @param {Node} uvNode - The uv node to setup.
125
+ * @return {Node} The unmodified uv node.
126
+ */
81
127
  setupUV( builder, uvNode ) {
82
128
 
129
+ const texture = this.value;
130
+
131
+ if ( builder.isFlipY() && ( texture.isRenderTargetTexture === true || texture.isFramebufferTexture === true ) ) {
132
+
133
+ if ( this.sampler ) {
134
+
135
+ uvNode = uvNode.flipY();
136
+
137
+ } else {
138
+
139
+ uvNode = uvNode.setY( int( textureSize( this, this.levelNode ).y ).sub( uvNode.y ).sub( 1 ) );
140
+
141
+ }
142
+
143
+ }
144
+
83
145
  return uvNode;
84
146
 
85
147
  }
86
148
 
149
+ /**
150
+ * Generates the uv code snippet.
151
+ *
152
+ * @param {NodeBuilder} builder - The current node builder.
153
+ * @param {Node} uvNode - The uv node to generate code for.
154
+ * @return {String} The generated code snippet.
155
+ */
87
156
  generateUV( builder, uvNode ) {
88
157
 
89
158
  return uvNode.build( builder, 'vec3' );
90
159
 
91
160
  }
92
161
 
162
+ /**
163
+ * TODO.
164
+ *
165
+ * @param {Node<vec3>} uvNode - The uv node .
166
+ * @return {Node<vec3>} TODO.
167
+ */
93
168
  normal( uvNode ) {
94
169
 
95
170
  return normal( { texture: this, uv: uvNode } );
@@ -100,4 +175,13 @@ class Texture3DNode extends TextureNode {
100
175
 
101
176
  export default Texture3DNode;
102
177
 
178
+ /**
179
+ * TSL function for creating a 3D texture node.
180
+ *
181
+ * @function
182
+ * @param {Data3DTexture} value - The 3D texture.
183
+ * @param {Node<vec2|vec3>?} [uvNode=null] - The uv node.
184
+ * @param {Node<int>?} [levelNode=null] - The level node.
185
+ * @returns {Texture3DNode}
186
+ */
103
187
  export const texture3D = /*@__PURE__*/ nodeProxy( Texture3DNode );
@@ -2,6 +2,8 @@ import { add, mul, div } from '../math/OperatorNode.js';
2
2
  import { floor, ceil, fract, pow } from '../math/MathNode.js';
3
3
  import { Fn, float, vec2, vec4, int } from '../tsl/TSLBase.js';
4
4
 
5
+ /** @module TextureBicubic **/
6
+
5
7
  // Mipped Bicubic Texture Filtering by N8
6
8
  // https://www.shadertoy.com/view/Dl2SDW
7
9
 
@@ -44,13 +46,21 @@ const bicubic = ( textureNode, texelSize, lod ) => {
44
46
  const p2 = vec2( iuv.x.add( h0x ), iuv.y.add( h1y ) ).sub( 0.5 ).mul( texelSize.xy );
45
47
  const p3 = vec2( iuv.x.add( h1x ), iuv.y.add( h1y ) ).sub( 0.5 ).mul( texelSize.xy );
46
48
 
47
- const a = g0( fuv.y ).mul( add( g0x.mul( textureNode.uv( p0 ).level( lod ) ), g1x.mul( textureNode.uv( p1 ).level( lod ) ) ) );
48
- const b = g1( fuv.y ).mul( add( g0x.mul( textureNode.uv( p2 ).level( lod ) ), g1x.mul( textureNode.uv( p3 ).level( lod ) ) ) );
49
+ const a = g0( fuv.y ).mul( add( g0x.mul( textureNode.sample( p0 ).level( lod ) ), g1x.mul( textureNode.sample( p1 ).level( lod ) ) ) );
50
+ const b = g1( fuv.y ).mul( add( g0x.mul( textureNode.sample( p2 ).level( lod ) ), g1x.mul( textureNode.sample( p3 ).level( lod ) ) ) );
49
51
 
50
52
  return a.add( b );
51
53
 
52
54
  };
53
55
 
56
+ /**
57
+ * Applies mipped bicubic texture filtering to the given texture node.
58
+ *
59
+ * @method
60
+ * @param {TextureNode} textureNode - The texture node that should be filtered.
61
+ * @param {Node<float>} [lodNode=float(3)] - Defines the LOD to sample from.
62
+ * @return {Node} The filtered texture sample.
63
+ */
54
64
  export const textureBicubic = /*@__PURE__*/ Fn( ( [ textureNode, lodNode = float( 3 ) ] ) => {
55
65
 
56
66
  const fLodSize = vec2( textureNode.size( int( lodNode ) ) );