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
@@ -3,14 +3,23 @@ import { Float32BufferAttribute } from '../../core/BufferAttribute.js';
3
3
  import { Mesh } from '../../objects/Mesh.js';
4
4
  import { OrthographicCamera } from '../../cameras/OrthographicCamera.js';
5
5
 
6
- // Helper for passes that need to fill the viewport with a single quad.
7
-
8
6
  const _camera = /*@__PURE__*/ new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
9
7
 
10
- // https://github.com/mrdoob/three.js/pull/21358
11
-
8
+ /**
9
+ * The purpose of this special geometry is to fill the entire viewport with a single triangle.
10
+ *
11
+ * Reference: {@link https://github.com/mrdoob/three.js/pull/21358}
12
+ *
13
+ * @private
14
+ * @augments BufferGeometry
15
+ */
12
16
  class QuadGeometry extends BufferGeometry {
13
17
 
18
+ /**
19
+ * Constructs a new quad geometry.
20
+ *
21
+ * @param {Boolean} [flipY=false] - Whether the uv coordinates should be flipped along the vertical axis or not.
22
+ */
14
23
  constructor( flipY = false ) {
15
24
 
16
25
  super();
@@ -26,24 +35,64 @@ class QuadGeometry extends BufferGeometry {
26
35
 
27
36
  const _geometry = /*@__PURE__*/ new QuadGeometry();
28
37
 
38
+
39
+ /**
40
+ * This module is a helper for passes which need to render a full
41
+ * screen effect which is quite common in context of post processing.
42
+ *
43
+ * The intended usage is to reuse a single quad mesh for rendering
44
+ * subsequent passes by just reassigning the `material` reference.
45
+ *
46
+ * @augments BufferGeometry
47
+ */
29
48
  class QuadMesh extends Mesh {
30
49
 
50
+ /**
51
+ * Constructs a new quad mesh.
52
+ *
53
+ * @param {Material?} [material=null] - The material to render the quad mesh with.
54
+ */
31
55
  constructor( material = null ) {
32
56
 
33
57
  super( _geometry, material );
34
58
 
59
+ /**
60
+ * The camera to render the quad mesh with.
61
+ *
62
+ * @type {OrthographicCamera}
63
+ * @readonly
64
+ */
35
65
  this.camera = _camera;
36
66
 
67
+ /**
68
+ * This flag can be used for type testing.
69
+ *
70
+ * @type {Boolean}
71
+ * @readonly
72
+ * @default true
73
+ */
37
74
  this.isQuadMesh = true;
38
75
 
39
76
  }
40
77
 
41
- renderAsync( renderer ) {
78
+ /**
79
+ * Async version of `render()`.
80
+ *
81
+ * @async
82
+ * @param {Renderer} renderer - The renderer.
83
+ * @return {Promise} A Promise that resolves when the render has been finished.
84
+ */
85
+ async renderAsync( renderer ) {
42
86
 
43
87
  return renderer.renderAsync( this, _camera );
44
88
 
45
89
  }
46
90
 
91
+ /**
92
+ * Renders the quad mesh
93
+ *
94
+ * @param {Renderer} renderer - The renderer.
95
+ */
47
96
  render( renderer ) {
48
97
 
49
98
  renderer.render( this, _camera );
@@ -1,18 +1,24 @@
1
+ /**
2
+ * This module is used to represent render bundles inside the renderer
3
+ * for further processing.
4
+ *
5
+ * @private
6
+ */
1
7
  class RenderBundle {
2
8
 
3
- constructor( scene, camera ) {
9
+ /**
10
+ * Constructs a new bundle group.
11
+ *
12
+ * @param {BundleGroup} bundleGroup - The bundle group.
13
+ * @param {Camera} camera - The camera the bundle group is rendered with.
14
+ */
15
+ constructor( bundleGroup, camera ) {
4
16
 
5
- this.scene = scene;
17
+ this.bundleGroup = bundleGroup;
6
18
  this.camera = camera;
7
19
 
8
20
  }
9
21
 
10
- clone() {
11
-
12
- return Object.assign( new this.constructor(), this );
13
-
14
- }
15
-
16
22
  }
17
23
 
18
24
  export default RenderBundle;
@@ -1,35 +1,58 @@
1
1
  import ChainMap from './ChainMap.js';
2
2
  import RenderBundle from './RenderBundle.js';
3
3
 
4
+ /**
5
+ * This renderer module manages render bundles.
6
+ *
7
+ * @private
8
+ */
4
9
  class RenderBundles {
5
10
 
11
+ /**
12
+ * Constructs a new render bundle management component.
13
+ */
6
14
  constructor() {
7
15
 
8
- this.lists = new ChainMap();
16
+ /**
17
+ * A chain map for maintaining the render bundles.
18
+ *
19
+ * @type {ChainMap}
20
+ */
21
+ this.bundles = new ChainMap();
9
22
 
10
23
  }
11
24
 
12
- get( scene, camera ) {
25
+ /**
26
+ * Returns a render bundle for the given bundle group and camera.
27
+ *
28
+ * @param {BundleGroup} bundleGroup - The bundle group.
29
+ * @param {Camera} camera - The camera the bundle group is rendered with.
30
+ * @return {RenderBundle} The render bundle.
31
+ */
32
+ get( bundleGroup, camera ) {
13
33
 
14
- const lists = this.lists;
15
- const keys = [ scene, camera ];
34
+ const bundles = this.bundles;
35
+ const keys = [ bundleGroup, camera ];
16
36
 
17
- let list = lists.get( keys );
37
+ let bundle = bundles.get( keys );
18
38
 
19
- if ( list === undefined ) {
39
+ if ( bundle === undefined ) {
20
40
 
21
- list = new RenderBundle( scene, camera );
22
- lists.set( keys, list );
41
+ bundle = new RenderBundle( bundleGroup, camera );
42
+ bundles.set( keys, bundle );
23
43
 
24
44
  }
25
45
 
26
- return list;
46
+ return bundle;
27
47
 
28
48
  }
29
49
 
50
+ /**
51
+ * Frees all internal resources.
52
+ */
30
53
  dispose() {
31
54
 
32
- this.lists = new ChainMap();
55
+ this.bundles = new ChainMap();
33
56
 
34
57
  }
35
58
 
@@ -1,44 +1,203 @@
1
1
  import { Vector4 } from '../../math/Vector4.js';
2
2
  import { hashArray } from '../../nodes/core/NodeUtils.js';
3
3
 
4
- let id = 0;
5
-
4
+ let _id = 0;
5
+
6
+ /**
7
+ * Any render or compute command is executed in a specific context that defines
8
+ * the state of the renderer and its backend. Typical examples for such context
9
+ * data are the current clear values or data from the active framebuffer. This
10
+ * module is used to represent these contexts as objects.
11
+ *
12
+ * @private
13
+ */
6
14
  class RenderContext {
7
15
 
16
+ /**
17
+ * Constructs a new render context.
18
+ */
8
19
  constructor() {
9
20
 
10
- this.id = id ++;
11
-
21
+ /**
22
+ * The context's ID.
23
+ *
24
+ * @type {Number}
25
+ */
26
+ this.id = _id ++;
27
+
28
+ /**
29
+ * Whether the current active framebuffer has a color attachment.
30
+ *
31
+ * @type {Boolean}
32
+ * @default true
33
+ */
12
34
  this.color = true;
35
+
36
+ /**
37
+ * Whether the color attachment should be cleared or not.
38
+ *
39
+ * @type {Boolean}
40
+ * @default true
41
+ */
13
42
  this.clearColor = true;
43
+
44
+ /**
45
+ * The clear color value.
46
+ *
47
+ * @type {Object}
48
+ * @default true
49
+ */
14
50
  this.clearColorValue = { r: 0, g: 0, b: 0, a: 1 };
15
51
 
52
+ /**
53
+ * Whether the current active framebuffer has a depth attachment.
54
+ *
55
+ * @type {Boolean}
56
+ * @default true
57
+ */
16
58
  this.depth = true;
59
+
60
+ /**
61
+ * Whether the depth attachment should be cleared or not.
62
+ *
63
+ * @type {Boolean}
64
+ * @default true
65
+ */
17
66
  this.clearDepth = true;
67
+
68
+ /**
69
+ * The clear depth value.
70
+ *
71
+ * @type {Number}
72
+ * @default 1
73
+ */
18
74
  this.clearDepthValue = 1;
19
75
 
76
+ /**
77
+ * Whether the current active framebuffer has a stencil attachment.
78
+ *
79
+ * @type {Boolean}
80
+ * @default false
81
+ */
20
82
  this.stencil = false;
83
+
84
+ /**
85
+ * Whether the stencil attachment should be cleared or not.
86
+ *
87
+ * @type {Boolean}
88
+ * @default true
89
+ */
21
90
  this.clearStencil = true;
91
+
92
+ /**
93
+ * The clear stencil value.
94
+ *
95
+ * @type {Number}
96
+ * @default 1
97
+ */
22
98
  this.clearStencilValue = 1;
23
99
 
100
+ /**
101
+ * By default the viewport encloses the entire framebuffer If a smaller
102
+ * viewport is manually defined, this property is to `true` by the renderer.
103
+ *
104
+ * @type {Boolean}
105
+ * @default false
106
+ */
24
107
  this.viewport = false;
108
+
109
+ /**
110
+ * The viewport value. This value is in physical pixels meaning it incorporates
111
+ * the renderer's pixel ratio. The viewport property of render targets or
112
+ * the renderer is in logical pixels.
113
+ *
114
+ * @type {Vector4}
115
+ */
25
116
  this.viewportValue = new Vector4();
26
117
 
118
+ /**
119
+ * When the scissor test is active and scissor rectangle smaller than the
120
+ * framebuffers dimensions, this property is to `true` by the renderer.
121
+ *
122
+ * @type {Boolean}
123
+ * @default false
124
+ */
27
125
  this.scissor = false;
126
+
127
+ /**
128
+ * The scissor rectangle.
129
+ *
130
+ * @type {Vector4}
131
+ */
28
132
  this.scissorValue = new Vector4();
29
133
 
134
+ /**
135
+ * The textures of the active render target.
136
+ * `null` when no render target is set.
137
+ *
138
+ * @type {Array<Texture>?}
139
+ * @default null
140
+ */
30
141
  this.textures = null;
142
+
143
+ /**
144
+ * The depth texture of the active render target.
145
+ * `null` when no render target is set.
146
+ *
147
+ * @type {DepthTexture?}
148
+ * @default null
149
+ */
31
150
  this.depthTexture = null;
151
+
152
+ /**
153
+ * The active cube face.
154
+ *
155
+ * @type {Number}
156
+ * @default 0
157
+ */
32
158
  this.activeCubeFace = 0;
159
+
160
+ /**
161
+ * The number of MSAA samples. This value is always `1` when
162
+ * MSAA isn't used.
163
+ *
164
+ * @type {Number}
165
+ * @default 1
166
+ */
33
167
  this.sampleCount = 1;
34
168
 
169
+ /**
170
+ * The framebuffers width in physical pixels.
171
+ *
172
+ * @type {Number}
173
+ * @default 0
174
+ */
35
175
  this.width = 0;
176
+
177
+ /**
178
+ * The framebuffers height in physical pixels.
179
+ *
180
+ * @type {Number}
181
+ * @default 0
182
+ */
36
183
  this.height = 0;
37
184
 
185
+ /**
186
+ * This flag can be used for type testing.
187
+ *
188
+ * @type {Boolean}
189
+ * @readonly
190
+ * @default true
191
+ */
38
192
  this.isRenderContext = true;
39
193
 
40
194
  }
41
195
 
196
+ /**
197
+ * Returns the cache key of this render context.
198
+ *
199
+ * @return {Number} The cache key.
200
+ */
42
201
  getCacheKey() {
43
202
 
44
203
  return getCacheKey( this );
@@ -47,6 +206,12 @@ class RenderContext {
47
206
 
48
207
  }
49
208
 
209
+ /**
210
+ * Computes a cache key for the given render context.
211
+ *
212
+ * @param {RenderContext} renderContext - The render context.
213
+ * @return {Number} The cache key.
214
+ */
50
215
  export function getCacheKey( renderContext ) {
51
216
 
52
217
  const { textures, activeCubeFace } = renderContext;
@@ -1,17 +1,48 @@
1
1
  import ChainMap from './ChainMap.js';
2
2
  import RenderContext from './RenderContext.js';
3
3
 
4
+ /**
5
+ * This module manages the render contexts of the renderer.
6
+ *
7
+ * @private
8
+ */
4
9
  class RenderContexts {
5
10
 
11
+ /**
12
+ * Constructs a new render context management component.
13
+ */
6
14
  constructor() {
7
15
 
16
+ /**
17
+ * A dictionary that manages render contexts in chain maps
18
+ * for each attachment state.
19
+ *
20
+ * @type {Object<String,ChainMap>}
21
+ */
8
22
  this.chainMaps = {};
9
23
 
10
24
  }
11
25
 
12
- get( scene, camera, renderTarget = null ) {
26
+ /**
27
+ * Returns a render context for the given scene, camera and render target.
28
+ *
29
+ * @param {Scene?} [scene=null] - The scene. The parameter can become `null` e.g. when the renderer clears a render target.
30
+ * @param {Camera?} [camera=null] - The camera that is used to render the scene. The parameter can become `null` e.g. when the renderer clears a render target.
31
+ * @param {RenderTarget?} [renderTarget=null] - The active render target.
32
+ * @return {RenderContext} The render context.
33
+ */
34
+ get( scene = null, camera = null, renderTarget = null ) {
35
+
36
+ const chainKey = [];
37
+ if ( scene !== null ) chainKey.push( scene );
38
+ if ( camera !== null ) chainKey.push( camera );
39
+
40
+ if ( chainKey.length === 0 ) {
41
+
42
+ chainKey.push( { id: 'default' } );
43
+
44
+ }
13
45
 
14
- const chainKey = [ scene, camera ];
15
46
 
16
47
  let attachmentState;
17
48
 
@@ -46,12 +77,21 @@ class RenderContexts {
46
77
 
47
78
  }
48
79
 
80
+ /**
81
+ * Returns a chain map for the given attachment state.
82
+ *
83
+ * @param {String} attachmentState - The attachment state.
84
+ * @return {ChainMap} The chain map.
85
+ */
49
86
  getChainMap( attachmentState ) {
50
87
 
51
88
  return this.chainMaps[ attachmentState ] || ( this.chainMaps[ attachmentState ] = new ChainMap() );
52
89
 
53
90
  }
54
91
 
92
+ /**
93
+ * Frees internal resources.
94
+ */
55
95
  dispose() {
56
96
 
57
97
  this.chainMaps = {};