@plastic-software/three 0.181.3 → 0.183.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (437) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +11330 -10017
  4. package/build/three.core.js +10011 -9493
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1414 -631
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +21 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +8007 -5427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +8005 -5426
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +2 -2
  16. package/examples/jsm/controls/ArcballControls.js +3 -3
  17. package/examples/jsm/controls/MapControls.js +55 -1
  18. package/examples/jsm/controls/OrbitControls.js +109 -6
  19. package/examples/jsm/controls/TrackballControls.js +6 -6
  20. package/examples/jsm/csm/CSM.js +2 -1
  21. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  22. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  23. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  24. package/examples/jsm/exporters/EXRExporter.js +1 -1
  25. package/examples/jsm/exporters/GLTFExporter.js +131 -4
  26. package/examples/jsm/exporters/USDZExporter.js +22 -3
  27. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  28. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  29. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  30. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  31. package/examples/jsm/helpers/ViewHelper.js +67 -8
  32. package/examples/jsm/inspector/Inspector.js +74 -14
  33. package/examples/jsm/inspector/RendererInspector.js +12 -2
  34. package/examples/jsm/inspector/tabs/Console.js +41 -7
  35. package/examples/jsm/inspector/tabs/Parameters.js +18 -2
  36. package/examples/jsm/inspector/tabs/Performance.js +2 -2
  37. package/examples/jsm/inspector/tabs/Viewer.js +4 -4
  38. package/examples/jsm/inspector/ui/Profiler.js +1836 -31
  39. package/examples/jsm/inspector/ui/Style.js +973 -14
  40. package/examples/jsm/inspector/ui/Tab.js +188 -1
  41. package/examples/jsm/inspector/ui/Values.js +17 -1
  42. package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
  43. package/examples/jsm/lines/LineMaterial.js +6 -0
  44. package/examples/jsm/loaders/3DMLoader.js +5 -4
  45. package/examples/jsm/loaders/3MFLoader.js +2 -2
  46. package/examples/jsm/loaders/AMFLoader.js +2 -2
  47. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  48. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  49. package/examples/jsm/loaders/EXRLoader.js +5 -5
  50. package/examples/jsm/loaders/FBXLoader.js +2 -4
  51. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  52. package/examples/jsm/loaders/GLTFLoader.js +122 -171
  53. package/examples/jsm/loaders/HDRLoader.js +0 -1
  54. package/examples/jsm/loaders/KMZLoader.js +5 -5
  55. package/examples/jsm/loaders/KTX2Loader.js +19 -3
  56. package/examples/jsm/loaders/LDrawLoader.js +2 -3
  57. package/examples/jsm/loaders/LWOLoader.js +7 -39
  58. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  59. package/examples/jsm/loaders/PCDLoader.js +4 -2
  60. package/examples/jsm/loaders/SVGLoader.js +1 -1
  61. package/examples/jsm/loaders/TDSLoader.js +0 -2
  62. package/examples/jsm/loaders/TGALoader.js +0 -2
  63. package/examples/jsm/loaders/USDLoader.js +100 -40
  64. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  65. package/examples/jsm/loaders/VOXLoader.js +660 -117
  66. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  67. package/examples/jsm/loaders/VTKLoader.js +37 -24
  68. package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
  69. package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
  70. package/examples/jsm/loaders/usd/USDAParser.js +447 -366
  71. package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
  72. package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
  73. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  74. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  75. package/examples/jsm/math/Octree.js +131 -1
  76. package/examples/jsm/misc/Volume.js +0 -1
  77. package/examples/jsm/misc/VolumeSlice.js +0 -1
  78. package/examples/jsm/objects/LensflareMesh.js +1 -1
  79. package/examples/jsm/objects/Sky.js +76 -4
  80. package/examples/jsm/objects/SkyMesh.js +127 -10
  81. package/examples/jsm/objects/Water.js +4 -3
  82. package/examples/jsm/objects/Water2.js +5 -3
  83. package/examples/jsm/objects/WaterMesh.js +5 -7
  84. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  85. package/examples/jsm/physics/JoltPhysics.js +10 -6
  86. package/examples/jsm/physics/RapierPhysics.js +9 -5
  87. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  88. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  89. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  90. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  91. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  92. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  93. package/examples/jsm/renderers/Projector.js +268 -30
  94. package/examples/jsm/renderers/SVGRenderer.js +193 -60
  95. package/examples/jsm/shaders/GTAOShader.js +19 -6
  96. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  97. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  98. package/examples/jsm/shaders/SAOShader.js +17 -4
  99. package/examples/jsm/shaders/SSAOShader.js +11 -1
  100. package/examples/jsm/shaders/SSRShader.js +6 -5
  101. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  102. package/examples/jsm/shaders/VignetteShader.js +1 -1
  103. package/examples/jsm/transpiler/AST.js +44 -0
  104. package/examples/jsm/transpiler/GLSLDecoder.js +61 -4
  105. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  106. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  107. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  108. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  109. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  110. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  111. package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
  112. package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
  113. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  114. package/examples/jsm/tsl/display/CRT.js +150 -0
  115. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  116. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  117. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  118. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  119. package/examples/jsm/tsl/display/GTAONode.js +5 -4
  120. package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
  121. package/examples/jsm/tsl/display/GodraysNode.js +624 -0
  122. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  123. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  124. package/examples/jsm/tsl/display/OutlineNode.js +3 -3
  125. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  126. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  127. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  128. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  129. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  130. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  131. package/examples/jsm/tsl/display/SSGINode.js +8 -20
  132. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  133. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  134. package/examples/jsm/tsl/display/Shape.js +29 -0
  135. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  136. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  137. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  138. package/examples/jsm/tsl/display/TRAANode.js +273 -125
  139. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  140. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  141. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  142. package/examples/jsm/tsl/math/Bayer.js +40 -1
  143. package/examples/jsm/utils/LDrawUtils.js +1 -1
  144. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  145. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  146. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  147. package/package.json +20 -26
  148. package/src/Three.Core.js +2 -1
  149. package/src/Three.TSL.js +19 -11
  150. package/src/Three.WebGPU.Nodes.js +2 -0
  151. package/src/Three.WebGPU.js +3 -0
  152. package/src/Three.js +1 -0
  153. package/src/animation/AnimationAction.js +1 -1
  154. package/src/animation/AnimationClip.js +1 -1
  155. package/src/animation/AnimationMixer.js +6 -0
  156. package/src/animation/AnimationUtils.js +1 -12
  157. package/src/animation/KeyframeTrack.js +47 -8
  158. package/src/animation/PropertyMixer.js +4 -4
  159. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  160. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  161. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  162. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  163. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  164. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  165. package/src/audio/Audio.js +1 -1
  166. package/src/audio/AudioListener.js +5 -3
  167. package/src/cameras/Camera.js +32 -2
  168. package/src/cameras/CubeCamera.js +20 -0
  169. package/src/constants.js +90 -5
  170. package/src/core/BufferGeometry.js +14 -2
  171. package/src/core/Clock.js +7 -0
  172. package/src/core/Object3D.js +56 -4
  173. package/src/core/Raycaster.js +2 -2
  174. package/src/core/RenderTarget.js +3 -4
  175. package/src/extras/PMREMGenerator.js +7 -18
  176. package/src/extras/TextureUtils.js +5 -1
  177. package/src/geometries/ExtrudeGeometry.js +2 -2
  178. package/src/geometries/PolyhedronGeometry.js +1 -1
  179. package/src/geometries/TorusGeometry.js +8 -3
  180. package/src/helpers/CameraHelper.js +3 -0
  181. package/src/helpers/DirectionalLightHelper.js +4 -1
  182. package/src/helpers/HemisphereLightHelper.js +3 -0
  183. package/src/helpers/PointLightHelper.js +1 -25
  184. package/src/helpers/SpotLightHelper.js +3 -0
  185. package/src/lights/DirectionalLight.js +13 -0
  186. package/src/lights/HemisphereLight.js +10 -0
  187. package/src/lights/Light.js +1 -11
  188. package/src/lights/LightProbe.js +0 -15
  189. package/src/lights/LightShadow.js +15 -6
  190. package/src/lights/PointLight.js +15 -0
  191. package/src/lights/PointLightShadow.js +0 -86
  192. package/src/lights/SpotLight.js +22 -1
  193. package/src/lights/webgpu/IESSpotLight.js +2 -1
  194. package/src/loaders/Cache.js +28 -0
  195. package/src/loaders/FileLoader.js +1 -1
  196. package/src/loaders/ImageBitmapLoader.js +8 -3
  197. package/src/loaders/Loader.js +6 -0
  198. package/src/loaders/MaterialLoader.js +2 -1
  199. package/src/loaders/ObjectLoader.js +21 -2
  200. package/src/loaders/nodes/NodeLoader.js +2 -2
  201. package/src/materials/Material.js +2 -0
  202. package/src/materials/MeshLambertMaterial.js +9 -0
  203. package/src/materials/MeshPhongMaterial.js +9 -0
  204. package/src/materials/ShaderMaterial.js +20 -1
  205. package/src/materials/nodes/Line2NodeMaterial.js +7 -7
  206. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  207. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  208. package/src/materials/nodes/NodeMaterial.js +72 -25
  209. package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
  210. package/src/math/Line3.js +3 -5
  211. package/src/math/MathUtils.js +10 -10
  212. package/src/math/Matrix4.js +74 -65
  213. package/src/math/Quaternion.js +3 -29
  214. package/src/math/Sphere.js +1 -1
  215. package/src/math/Vector3.js +3 -5
  216. package/src/math/interpolants/BezierInterpolant.js +108 -0
  217. package/src/nodes/Nodes.js +87 -68
  218. package/src/nodes/TSL.js +6 -6
  219. package/src/nodes/accessors/Arrays.js +1 -1
  220. package/src/nodes/accessors/BatchNode.js +10 -10
  221. package/src/nodes/accessors/Bitangent.js +5 -5
  222. package/src/nodes/accessors/BufferAttributeNode.js +98 -12
  223. package/src/nodes/accessors/BufferNode.js +29 -2
  224. package/src/nodes/accessors/Camera.js +149 -28
  225. package/src/nodes/accessors/ClippingNode.js +4 -4
  226. package/src/nodes/accessors/CubeTextureNode.js +20 -1
  227. package/src/nodes/accessors/InstanceNode.js +148 -43
  228. package/src/nodes/accessors/MaterialNode.js +9 -1
  229. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  230. package/src/nodes/accessors/ModelNode.js +1 -1
  231. package/src/nodes/accessors/Normal.js +11 -11
  232. package/src/nodes/accessors/Position.js +34 -2
  233. package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
  234. package/src/nodes/accessors/ReferenceNode.js +4 -4
  235. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  236. package/src/nodes/accessors/SceneProperties.js +53 -0
  237. package/src/nodes/accessors/SkinningNode.js +27 -26
  238. package/src/nodes/accessors/StorageBufferNode.js +4 -21
  239. package/src/nodes/accessors/StorageTextureNode.js +37 -1
  240. package/src/nodes/accessors/Tangent.js +4 -14
  241. package/src/nodes/accessors/Texture3DNode.js +32 -35
  242. package/src/nodes/accessors/TextureNode.js +58 -22
  243. package/src/nodes/accessors/UniformArrayNode.js +4 -2
  244. package/src/nodes/accessors/UserDataNode.js +1 -2
  245. package/src/nodes/accessors/VertexColorNode.js +1 -2
  246. package/src/nodes/code/FunctionNode.js +1 -2
  247. package/src/nodes/core/ArrayNode.js +20 -1
  248. package/src/nodes/core/AssignNode.js +2 -2
  249. package/src/nodes/core/AttributeNode.js +2 -2
  250. package/src/nodes/core/ContextNode.js +103 -4
  251. package/src/nodes/core/MRTNode.js +48 -2
  252. package/src/nodes/core/Node.js +29 -3
  253. package/src/nodes/core/NodeBuilder.js +170 -53
  254. package/src/nodes/core/NodeError.js +28 -0
  255. package/src/nodes/core/NodeFrame.js +12 -4
  256. package/src/nodes/core/NodeUtils.js +10 -8
  257. package/src/nodes/core/OutputStructNode.js +12 -10
  258. package/src/nodes/core/ParameterNode.js +3 -3
  259. package/src/nodes/core/PropertyNode.js +19 -3
  260. package/src/nodes/core/StackNode.js +65 -16
  261. package/src/nodes/core/StackTrace.js +139 -0
  262. package/src/nodes/core/StructNode.js +16 -2
  263. package/src/nodes/core/StructTypeNode.js +11 -17
  264. package/src/nodes/core/SubBuildNode.js +1 -1
  265. package/src/nodes/core/UniformNode.js +21 -5
  266. package/src/nodes/core/VarNode.js +47 -22
  267. package/src/nodes/core/VaryingNode.js +1 -18
  268. package/src/nodes/display/BlendModes.js +0 -64
  269. package/src/nodes/display/ColorAdjustment.js +17 -0
  270. package/src/nodes/display/ColorSpaceNode.js +3 -3
  271. package/src/nodes/display/NormalMapNode.js +39 -4
  272. package/src/nodes/display/PassNode.js +98 -9
  273. package/src/nodes/display/RenderOutputNode.js +3 -3
  274. package/src/nodes/display/ScreenNode.js +3 -1
  275. package/src/nodes/display/ToneMappingNode.js +1 -1
  276. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  277. package/src/nodes/display/ViewportDepthNode.js +52 -4
  278. package/src/nodes/display/ViewportTextureNode.js +21 -4
  279. package/src/nodes/fog/Fog.js +18 -35
  280. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  281. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  282. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  283. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
  284. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  285. package/src/nodes/geometry/RangeNode.js +4 -2
  286. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
  287. package/src/nodes/gpgpu/ComputeNode.js +5 -4
  288. package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
  289. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  290. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  291. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  292. package/src/nodes/lighting/LightsNode.js +2 -2
  293. package/src/nodes/lighting/PointShadowNode.js +162 -149
  294. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  295. package/src/nodes/lighting/ShadowNode.js +97 -41
  296. package/src/nodes/math/BitcountNode.js +433 -0
  297. package/src/nodes/math/ConditionalNode.js +2 -2
  298. package/src/nodes/math/MathNode.js +3 -40
  299. package/src/nodes/math/OperatorNode.js +2 -1
  300. package/src/nodes/math/PackFloatNode.js +98 -0
  301. package/src/nodes/math/UnpackFloatNode.js +96 -0
  302. package/src/nodes/pmrem/PMREMNode.js +1 -1
  303. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  304. package/src/nodes/tsl/TSLCore.js +17 -14
  305. package/src/nodes/utils/ArrayElementNode.js +13 -0
  306. package/src/nodes/utils/DebugNode.js +11 -11
  307. package/src/nodes/utils/EventNode.js +1 -2
  308. package/src/nodes/utils/JoinNode.js +2 -2
  309. package/src/nodes/utils/LoopNode.js +1 -1
  310. package/src/nodes/utils/MemberNode.js +1 -1
  311. package/src/nodes/utils/Packing.js +13 -1
  312. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  313. package/src/nodes/utils/RTTNode.js +1 -1
  314. package/src/nodes/utils/ReflectorNode.js +3 -4
  315. package/src/nodes/utils/SampleNode.js +1 -1
  316. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  317. package/src/nodes/utils/UVUtils.js +28 -0
  318. package/src/objects/BatchedMesh.js +27 -14
  319. package/src/objects/InstancedMesh.js +11 -0
  320. package/src/objects/Line.js +1 -1
  321. package/src/objects/Mesh.js +1 -1
  322. package/src/objects/Points.js +1 -1
  323. package/src/objects/Skeleton.js +9 -0
  324. package/src/renderers/WebGLRenderer.js +178 -92
  325. package/src/renderers/common/Backend.js +29 -0
  326. package/src/renderers/common/Background.js +24 -11
  327. package/src/renderers/common/BindGroup.js +1 -9
  328. package/src/renderers/common/Binding.js +11 -0
  329. package/src/renderers/common/Bindings.js +27 -12
  330. package/src/renderers/common/BlendMode.js +143 -0
  331. package/src/renderers/common/Buffer.js +40 -0
  332. package/src/renderers/common/BundleGroup.js +1 -1
  333. package/src/renderers/common/ChainMap.js +30 -6
  334. package/src/renderers/common/CubeRenderTarget.js +50 -6
  335. package/src/renderers/common/Geometries.js +29 -3
  336. package/src/renderers/common/Lighting.js +5 -21
  337. package/src/renderers/common/Pipelines.js +4 -4
  338. package/src/renderers/common/PostProcessing.js +8 -206
  339. package/src/renderers/common/RenderBundles.js +2 -1
  340. package/src/renderers/common/RenderContext.js +16 -0
  341. package/src/renderers/common/RenderContexts.js +33 -49
  342. package/src/renderers/common/RenderLists.js +2 -1
  343. package/src/renderers/common/RenderObject.js +15 -3
  344. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  345. package/src/renderers/common/RenderObjects.js +18 -2
  346. package/src/renderers/common/RenderPipeline.js +203 -17
  347. package/src/renderers/common/Renderer.js +257 -72
  348. package/src/renderers/common/Sampler.js +4 -4
  349. package/src/renderers/common/StorageBuffer.js +13 -1
  350. package/src/renderers/common/Textures.js +17 -1
  351. package/src/renderers/common/TimestampQueryPool.js +5 -3
  352. package/src/renderers/common/Uniform.js +8 -0
  353. package/src/renderers/common/UniformsGroup.js +61 -0
  354. package/src/renderers/common/XRManager.js +3 -2
  355. package/src/renderers/common/extras/PMREMGenerator.js +2 -8
  356. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  357. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
  358. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  359. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  360. package/src/renderers/shaders/DFGLUTData.js +19 -34
  361. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  362. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  363. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  364. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  365. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  366. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
  367. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  369. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  370. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  371. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
  372. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  373. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  374. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  375. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  376. package/src/renderers/shaders/ShaderChunk.js +3 -3
  377. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  378. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  379. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  380. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  381. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  382. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  383. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  384. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  385. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  386. package/src/renderers/shaders/ShaderLib.js +7 -5
  387. package/src/renderers/shaders/UniformsLib.js +0 -3
  388. package/src/renderers/webgl/WebGLBackground.js +2 -2
  389. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  390. package/src/renderers/webgl/WebGLCapabilities.js +3 -4
  391. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  392. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  393. package/src/renderers/webgl/WebGLLights.js +18 -1
  394. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  395. package/src/renderers/webgl/WebGLObjects.js +3 -1
  396. package/src/renderers/webgl/WebGLOutput.js +267 -0
  397. package/src/renderers/webgl/WebGLProgram.js +45 -109
  398. package/src/renderers/webgl/WebGLPrograms.js +45 -49
  399. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  400. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  401. package/src/renderers/webgl/WebGLState.js +32 -37
  402. package/src/renderers/webgl/WebGLTextures.js +89 -28
  403. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  404. package/src/renderers/webgl/WebGLUtils.js +6 -2
  405. package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
  406. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
  407. package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
  408. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
  409. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
  410. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  411. package/src/renderers/webgpu/WebGPUBackend.js +119 -13
  412. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  413. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
  414. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
  415. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  416. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -0
  417. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  418. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  419. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +65 -42
  420. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  421. package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
  422. package/src/renderers/webxr/WebXRManager.js +2 -2
  423. package/src/textures/CubeDepthTexture.js +76 -0
  424. package/src/textures/Source.js +1 -1
  425. package/src/textures/Texture.js +3 -3
  426. package/src/utils.js +258 -3
  427. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  428. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  429. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  430. package/src/nodes/accessors/SceneNode.js +0 -145
  431. package/src/nodes/code/ScriptableNode.js +0 -726
  432. package/src/nodes/code/ScriptableValueNode.js +0 -253
  433. package/src/nodes/display/PosterizeNode.js +0 -65
  434. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  435. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  436. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  437. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -44,6 +44,17 @@ class Binding {
44
44
 
45
45
  }
46
46
 
47
+ /**
48
+ * The shader stages in which the binding's resource is visible.
49
+ *
50
+ * @return {number} The visibility bitmask.
51
+ */
52
+ getVisibility() {
53
+
54
+ return this.visibility;
55
+
56
+ }
57
+
47
58
  /**
48
59
  * Clones the binding.
49
60
  *
@@ -164,6 +164,7 @@ class Bindings extends DataMap {
164
164
 
165
165
  for ( const bindGroup of bindings ) {
166
166
 
167
+ this.backend.deleteBindGroupData( bindGroup );
167
168
  this.delete( bindGroup );
168
169
 
169
170
  }
@@ -181,6 +182,7 @@ class Bindings extends DataMap {
181
182
 
182
183
  for ( const bindGroup of bindings ) {
183
184
 
185
+ this.backend.deleteBindGroupData( bindGroup );
184
186
  this.delete( bindGroup );
185
187
 
186
188
  }
@@ -251,24 +253,31 @@ class Bindings extends DataMap {
251
253
 
252
254
  for ( const binding of bindGroup.bindings ) {
253
255
 
254
- if ( binding.isNodeUniformsGroup ) {
256
+ const updatedGroup = this.nodes.updateGroup( binding );
255
257
 
256
- const updated = this.nodes.updateGroup( binding );
258
+ // every uniforms group is a uniform buffer. So if no update is required,
259
+ // we move one with the next binding. Otherwise the next if block will update the group.
257
260
 
258
- // every uniforms group is a uniform buffer. So if no update is required,
259
- // we move one with the next binding. Otherwise the next if block will update the group.
261
+ if ( updatedGroup === false ) continue;
260
262
 
261
- if ( updated === false ) continue;
262
-
263
- }
263
+ //
264
264
 
265
265
  if ( binding.isStorageBuffer ) {
266
266
 
267
267
  const attribute = binding.attribute;
268
268
  const attributeType = attribute.isIndirectStorageBufferAttribute ? AttributeType.INDIRECT : AttributeType.STORAGE;
269
269
 
270
+ const bindingData = backend.get( binding );
271
+
270
272
  this.attributes.update( attribute, attributeType );
271
273
 
274
+ if ( bindingData.attribute !== attribute ) {
275
+
276
+ bindingData.attribute = attribute;
277
+
278
+ needsBindingsUpdate = true;
279
+
280
+ }
272
281
 
273
282
  }
274
283
 
@@ -297,7 +306,7 @@ class Bindings extends DataMap {
297
306
 
298
307
  this.textures.updateTexture( texture );
299
308
 
300
- // generation: update the bindings if a new texture has been created
309
+ // generation: update the bindings if the binding refers to a different texture object
301
310
 
302
311
  if ( binding.generation !== texturesTextureData.generation ) {
303
312
 
@@ -305,10 +314,12 @@ class Bindings extends DataMap {
305
314
 
306
315
  needsBindingsUpdate = true;
307
316
 
308
- cacheBindings = false;
309
-
310
317
  }
311
318
 
319
+ // keep track which bind groups refer to the current texture (this is needed for dispose)
320
+
321
+ texturesTextureData.bindGroups.add( bindGroup );
322
+
312
323
  }
313
324
 
314
325
  const textureData = backend.get( texture );
@@ -356,14 +367,18 @@ class Bindings extends DataMap {
356
367
 
357
368
  needsBindingsUpdate = true;
358
369
 
359
- cacheBindings = false;
360
-
361
370
  }
362
371
 
363
372
  }
364
373
 
365
374
  }
366
375
 
376
+ if ( binding.isBuffer && binding.updateRanges.length > 0 ) {
377
+
378
+ binding.clearUpdateRanges();
379
+
380
+ }
381
+
367
382
  }
368
383
 
369
384
  if ( needsBindingsUpdate === true ) {
@@ -0,0 +1,143 @@
1
+ import { NormalBlending, AddEquation, SrcAlphaFactor, OneMinusSrcAlphaFactor } from '../../constants.js';
2
+
3
+ /**
4
+ * Represents blending configuration.
5
+ *
6
+ * This class encapsulates all blending-related properties that control how
7
+ * a material's colors are combined with the colors already in the frame buffer.
8
+ */
9
+ class BlendMode {
10
+
11
+ /**
12
+ * Constructs a new blending configuration.
13
+ *
14
+ * @param {(NoBlending|NormalBlending|AdditiveBlending|SubtractiveBlending|MultiplyBlending|CustomBlending|MaterialBlending)} [blending=NormalBlending] - The blending mode.
15
+ */
16
+ constructor( blending = NormalBlending ) {
17
+
18
+ /**
19
+ * Defines the blending type.
20
+ *
21
+ * It must be set to `CustomBlending` if custom blending properties like
22
+ * {@link BlendMode#blendSrc}, {@link BlendMode#blendDst} or {@link BlendMode#blendEquation}
23
+ * should have any effect.
24
+ *
25
+ * @type {(NoBlending|NormalBlending|AdditiveBlending|SubtractiveBlending|MultiplyBlending|CustomBlending|MaterialBlending)}
26
+ * @default NormalBlending
27
+ */
28
+ this.blending = blending;
29
+
30
+ /**
31
+ * Defines the blending source factor.
32
+ *
33
+ * This determines how the source (incoming) fragment color is factored before being added
34
+ * to the destination (existing) fragment color in the frame buffer.
35
+ *
36
+ * @type {(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}
37
+ * @default SrcAlphaFactor
38
+ */
39
+ this.blendSrc = SrcAlphaFactor;
40
+
41
+ /**
42
+ * Defines the blending destination factor.
43
+ *
44
+ * This determines how the destination (existing) fragment color in the frame buffer
45
+ * is factored before being combined with the source (incoming) fragment color.
46
+ *
47
+ * @type {(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}
48
+ * @default OneMinusSrcAlphaFactor
49
+ */
50
+ this.blendDst = OneMinusSrcAlphaFactor;
51
+
52
+ /**
53
+ * Defines the blending equation.
54
+ *
55
+ * This determines how the source and destination colors are combined.
56
+ *
57
+ * @type {(AddEquation|SubtractEquation|ReverseSubtractEquation|MinEquation|MaxEquation)}
58
+ * @default AddEquation
59
+ */
60
+ this.blendEquation = AddEquation;
61
+
62
+ /**
63
+ * Defines the blending source alpha factor.
64
+ *
65
+ * When set, this allows separate control of the alpha channel's source blending factor.
66
+ * If `null`, {@link BlendMode#blendSrc} is used for the alpha channel as well.
67
+ *
68
+ * @type {?(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}
69
+ * @default null
70
+ */
71
+ this.blendSrcAlpha = null;
72
+
73
+ /**
74
+ * Defines the blending destination alpha factor.
75
+ *
76
+ * When set, this allows separate control of the alpha channel's destination blending factor.
77
+ * If `null`, {@link BlendMode#blendDst} is used for the alpha channel as well.
78
+ *
79
+ * @type {?(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}
80
+ * @default null
81
+ */
82
+ this.blendDstAlpha = null;
83
+
84
+ /**
85
+ * Defines the blending equation of the alpha channel.
86
+ *
87
+ * When set, this allows separate control of the alpha channel's blending equation.
88
+ * If `null`, {@link BlendMode#blendEquation} is used for the alpha channel as well.
89
+ *
90
+ * @type {?(AddEquation|SubtractEquation|ReverseSubtractEquation|MinEquation|MaxEquation)}
91
+ * @default null
92
+ */
93
+ this.blendEquationAlpha = null;
94
+
95
+ /**
96
+ * Defines whether to premultiply the alpha (transparency) value.
97
+ *
98
+ * If `true`, the RGB color of the texture or material is multiplied by its alpha value.
99
+ * This is useful for transparent textures/materials where the color data
100
+ * should already include the transparency information.
101
+ *
102
+ * @type {boolean}
103
+ * @default false
104
+ */
105
+ this.premultiplyAlpha = false;
106
+
107
+ }
108
+
109
+ /**
110
+ * Copies the blending properties from the given source to this instance.
111
+ *
112
+ * @param {BlendMode} source - The blending configuration to copy from.
113
+ * @return {BlendMode} A reference to this instance.
114
+ */
115
+ copy( source ) {
116
+
117
+ this.blending = source.blending;
118
+ this.blendSrc = source.blendSrc;
119
+ this.blendDst = source.blendDst;
120
+ this.blendEquation = source.blendEquation;
121
+ this.blendSrcAlpha = source.blendSrcAlpha;
122
+ this.blendDstAlpha = source.blendDstAlpha;
123
+ this.blendEquationAlpha = source.blendEquationAlpha;
124
+ this.premultiplyAlpha = source.premultiplyAlpha;
125
+
126
+ return this;
127
+
128
+ }
129
+
130
+ /**
131
+ * Returns a clone of this blending configuration.
132
+ *
133
+ * @return {BlendMode} A new Blending instance with the same properties.
134
+ */
135
+ clone() {
136
+
137
+ return new this.constructor().copy( this );
138
+
139
+ }
140
+
141
+ }
142
+
143
+ export default BlendMode;
@@ -44,6 +44,46 @@ class Buffer extends Binding {
44
44
  */
45
45
  this._buffer = buffer;
46
46
 
47
+ /**
48
+ * An array of update ranges.
49
+ *
50
+ * @private
51
+ * @type {Array<{start: number, count: number}>}
52
+ */
53
+ this._updateRanges = [];
54
+
55
+ }
56
+
57
+ /**
58
+ * The array of update ranges.
59
+ *
60
+ * @type {Array<{start: number, count: number}>}
61
+ */
62
+ get updateRanges() {
63
+
64
+ return this._updateRanges;
65
+
66
+ }
67
+
68
+ /**
69
+ * Adds an update range.
70
+ *
71
+ * @param {number} start - The start index.
72
+ * @param {number} count - The number of elements.
73
+ */
74
+ addUpdateRange( start, count ) {
75
+
76
+ this.updateRanges.push( { start, count } );
77
+
78
+ }
79
+
80
+ /**
81
+ * Clears all update ranges.
82
+ */
83
+ clearUpdateRanges() {
84
+
85
+ this.updateRanges.length = 0;
86
+
47
87
  }
48
88
 
49
89
  /**
@@ -44,7 +44,7 @@ class BundleGroup extends Group {
44
44
  /**
45
45
  * Whether the bundle is static or not. When set to `true`, the structure
46
46
  * is assumed to be static and does not change. E.g. no new objects are
47
- * added to the group
47
+ * added to the group.
48
48
  *
49
49
  * If a change is required, an update can still be forced by setting the
50
50
  * `needsUpdate` flag to `true`.
@@ -14,11 +14,35 @@ class ChainMap {
14
14
  constructor() {
15
15
 
16
16
  /**
17
- * The root Weak Map.
17
+ * A map of Weak Maps by their key length.
18
18
  *
19
- * @type {WeakMap<Object, WeakMap>}
19
+ * @type {Object<number, WeakMap>}
20
20
  */
21
- this.weakMap = new WeakMap();
21
+ this.weakMaps = {};
22
+
23
+
24
+ }
25
+
26
+ /**
27
+ * Returns the Weak Map for the given keys.
28
+ *
29
+ * @param {Array<Object>} keys - List of keys.
30
+ * @return {WeakMap} The weak map.
31
+ */
32
+ _getWeakMap( keys ) {
33
+
34
+ const length = keys.length;
35
+
36
+ let weakMap = this.weakMaps[ length ];
37
+
38
+ if ( weakMap === undefined ) {
39
+
40
+ weakMap = new WeakMap();
41
+ this.weakMaps[ length ] = weakMap;
42
+
43
+ }
44
+
45
+ return weakMap;
22
46
 
23
47
  }
24
48
 
@@ -30,7 +54,7 @@ class ChainMap {
30
54
  */
31
55
  get( keys ) {
32
56
 
33
- let map = this.weakMap;
57
+ let map = this._getWeakMap( keys );
34
58
 
35
59
  for ( let i = 0; i < keys.length - 1; i ++ ) {
36
60
 
@@ -53,7 +77,7 @@ class ChainMap {
53
77
  */
54
78
  set( keys, value ) {
55
79
 
56
- let map = this.weakMap;
80
+ let map = this._getWeakMap( keys );
57
81
 
58
82
  for ( let i = 0; i < keys.length - 1; i ++ ) {
59
83
 
@@ -79,7 +103,7 @@ class ChainMap {
79
103
  */
80
104
  delete( keys ) {
81
105
 
82
- let map = this.weakMap;
106
+ let map = this._getWeakMap( keys );
83
107
 
84
108
  for ( let i = 0; i < keys.length - 1; i ++ ) {
85
109
 
@@ -3,22 +3,21 @@ import { texture as TSL_Texture } from '../../nodes/accessors/TextureNode.js';
3
3
  import { positionWorldDirection } from '../../nodes/accessors/Position.js';
4
4
  import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
5
5
 
6
- import { WebGLCubeRenderTarget } from '../../renderers/WebGLCubeRenderTarget.js';
6
+ import { RenderTarget } from '../../core/RenderTarget.js';
7
7
  import { Scene } from '../../scenes/Scene.js';
8
8
  import { CubeCamera } from '../../cameras/CubeCamera.js';
9
9
  import { BoxGeometry } from '../../geometries/BoxGeometry.js';
10
10
  import { Mesh } from '../../objects/Mesh.js';
11
+ import { CubeTexture } from '../../textures/CubeTexture.js';
11
12
  import { BackSide, NoBlending, LinearFilter, LinearMipmapLinearFilter } from '../../constants.js';
12
13
 
13
- // @TODO: Consider rename WebGLCubeRenderTarget to just CubeRenderTarget
14
-
15
14
  /**
16
15
  * This class represents a cube render target. It is a special version
17
16
  * of `WebGLCubeRenderTarget` which is compatible with `WebGPURenderer`.
18
17
  *
19
- * @augments WebGLCubeRenderTarget
18
+ * @augments RenderTarget
20
19
  */
21
- class CubeRenderTarget extends WebGLCubeRenderTarget {
20
+ class CubeRenderTarget extends RenderTarget {
22
21
 
23
22
  /**
24
23
  * Constructs a new cube render target.
@@ -28,7 +27,7 @@ class CubeRenderTarget extends WebGLCubeRenderTarget {
28
27
  */
29
28
  constructor( size = 1, options = {} ) {
30
29
 
31
- super( size, options );
30
+ super( size, size, options );
32
31
 
33
32
  /**
34
33
  * This flag can be used for type testing.
@@ -39,6 +38,27 @@ class CubeRenderTarget extends WebGLCubeRenderTarget {
39
38
  */
40
39
  this.isCubeRenderTarget = true;
41
40
 
41
+ const image = { width: size, height: size, depth: 1 };
42
+ const images = [ image, image, image, image, image, image ];
43
+
44
+ /**
45
+ * Overwritten with a different texture type.
46
+ *
47
+ * @type {DataArrayTexture}
48
+ */
49
+ this.texture = new CubeTexture( images );
50
+ this._setTextureOptions( options );
51
+
52
+ // By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)
53
+ // in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,
54
+ // in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.
55
+
56
+ // three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped
57
+ // and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture
58
+ // as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures).
59
+
60
+ this.texture.isRenderTargetTexture = true;
61
+
42
62
  }
43
63
 
44
64
  /**
@@ -98,6 +118,30 @@ class CubeRenderTarget extends WebGLCubeRenderTarget {
98
118
 
99
119
  }
100
120
 
121
+ /**
122
+ * Clears this cube render target.
123
+ *
124
+ * @param {Renderer} renderer - The renderer.
125
+ * @param {boolean} [color=true] - Whether the color buffer should be cleared or not.
126
+ * @param {boolean} [depth=true] - Whether the depth buffer should be cleared or not.
127
+ * @param {boolean} [stencil=true] - Whether the stencil buffer should be cleared or not.
128
+ */
129
+ clear( renderer, color = true, depth = true, stencil = true ) {
130
+
131
+ const currentRenderTarget = renderer.getRenderTarget();
132
+
133
+ for ( let i = 0; i < 6; i ++ ) {
134
+
135
+ renderer.setRenderTarget( this, i );
136
+
137
+ renderer.clear( color, depth, stencil );
138
+
139
+ }
140
+
141
+ renderer.setRenderTarget( currentRenderTarget );
142
+
143
+ }
144
+
101
145
  }
102
146
 
103
147
  export default CubeRenderTarget;
@@ -1,6 +1,5 @@
1
1
  import DataMap from './DataMap.js';
2
2
  import { AttributeType } from './Constants.js';
3
- import { arrayNeedsUint32 } from '../../utils.js';
4
3
 
5
4
  import { Uint16BufferAttribute, Uint32BufferAttribute } from '../../core/BufferAttribute.js';
6
5
 
@@ -18,6 +17,20 @@ function getWireframeVersion( geometry ) {
18
17
 
19
18
  }
20
19
 
20
+ /**
21
+ * Returns the wireframe ID for the given geometry.
22
+ *
23
+ * @private
24
+ * @function
25
+ * @param {BufferGeometry} geometry - The geometry.
26
+ * @return {number} The ID.
27
+ */
28
+ function getWireframeId( geometry ) {
29
+
30
+ return ( geometry.index !== null ) ? geometry.index.id : geometry.attributes.position.id;
31
+
32
+ }
33
+
21
34
  /**
22
35
  * Returns a wireframe index attribute for the given geometry.
23
36
  *
@@ -63,8 +76,9 @@ function getWireframeIndex( geometry ) {
63
76
 
64
77
  }
65
78
 
66
- const attribute = new ( arrayNeedsUint32( indices ) ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );
79
+ const attribute = new ( geometryPosition.count >= 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );
67
80
  attribute.version = getWireframeVersion( geometry );
81
+ attribute.__id = getWireframeId( geometry );
68
82
 
69
83
  return attribute;
70
84
 
@@ -310,6 +324,18 @@ class Geometries extends DataMap {
310
324
 
311
325
  }
312
326
 
327
+ /**
328
+ * Returns the byte offset into the indirect attribute buffer of the given render object.
329
+ *
330
+ * @param {RenderObject} renderObject - The render object.
331
+ * @return {number} The byte offset into the indirect attribute buffer.
332
+ */
333
+ getIndirectOffset( renderObject ) {
334
+
335
+ return renderObject.geometry.indirectOffset;
336
+
337
+ }
338
+
313
339
  /**
314
340
  * Returns the index of the given render object's geometry. This is implemented
315
341
  * in a method to return a wireframe index if necessary.
@@ -335,7 +361,7 @@ class Geometries extends DataMap {
335
361
 
336
362
  wireframes.set( geometry, wireframeAttribute );
337
363
 
338
- } else if ( wireframeAttribute.version !== getWireframeVersion( geometry ) ) {
364
+ } else if ( wireframeAttribute.version !== getWireframeVersion( geometry ) || wireframeAttribute.__id !== getWireframeId( geometry ) ) {
339
365
 
340
366
  this.attributes.delete( wireframeAttribute );
341
367
 
@@ -1,8 +1,7 @@
1
1
  import { LightsNode } from '../../nodes/Nodes.js';
2
- import ChainMap from './ChainMap.js';
3
2
 
4
3
  const _defaultLights = /*@__PURE__*/ new LightsNode();
5
- const _chainKeys = [];
4
+ const _weakMap = /*@__PURE__*/ new WeakMap();
6
5
 
7
6
  /**
8
7
  * This renderer module manages the lights nodes which are unique
@@ -12,18 +11,8 @@ const _chainKeys = [];
12
11
  * with the actual lights from the scene.
13
12
  *
14
13
  * @private
15
- * @augments ChainMap
16
14
  */
17
- class Lighting extends ChainMap {
18
-
19
- /**
20
- * Constructs a lighting management component.
21
- */
22
- constructor() {
23
-
24
- super();
25
-
26
- }
15
+ class Lighting {
27
16
 
28
17
  /**
29
18
  * Creates a new lights node for the given array of lights.
@@ -44,26 +33,21 @@ class Lighting extends ChainMap {
44
33
  * @param {Camera} camera - The camera.
45
34
  * @return {LightsNode} The lights node.
46
35
  */
47
- getNode( scene, camera ) {
36
+ getNode( scene ) {
48
37
 
49
38
  // ignore post-processing
50
39
 
51
40
  if ( scene.isQuadMesh ) return _defaultLights;
52
41
 
53
- _chainKeys[ 0 ] = scene;
54
- _chainKeys[ 1 ] = camera;
55
-
56
- let node = this.get( _chainKeys );
42
+ let node = _weakMap.get( scene );
57
43
 
58
44
  if ( node === undefined ) {
59
45
 
60
46
  node = this.createNode();
61
- this.set( _chainKeys, node );
47
+ _weakMap.set( scene, node );
62
48
 
63
49
  }
64
50
 
65
- _chainKeys.length = 0;
66
-
67
51
  return node;
68
52
 
69
53
  }
@@ -1,5 +1,5 @@
1
1
  import DataMap from './DataMap.js';
2
- import RenderPipeline from './RenderPipeline.js';
2
+ import RenderObjectPipeline from './RenderObjectPipeline.js';
3
3
  import ComputePipeline from './ComputePipeline.js';
4
4
  import ProgrammableStage from './ProgrammableStage.js';
5
5
 
@@ -146,7 +146,7 @@ class Pipelines extends DataMap {
146
146
  *
147
147
  * @param {RenderObject} renderObject - The render object.
148
148
  * @param {?Array<Promise>} [promises=null] - An array of compilation promises which is only relevant in context of `Renderer.compileAsync()`.
149
- * @return {RenderPipeline} The render pipeline.
149
+ * @return {RenderObjectPipeline} The render pipeline.
150
150
  */
151
151
  getForRender( renderObject, promises = null ) {
152
152
 
@@ -344,7 +344,7 @@ class Pipelines extends DataMap {
344
344
  * @param {ProgrammableStage} stageFragment - The programmable stage representing the fragment shader.
345
345
  * @param {string} cacheKey - The cache key.
346
346
  * @param {?Array<Promise>} promises - An array of compilation promises which is only relevant in context of `Renderer.compileAsync()`.
347
- * @return {ComputePipeline} The compute pipeline.
347
+ * @return {RenderObjectPipeline} The render pipeline.
348
348
  */
349
349
  _getRenderPipeline( renderObject, stageVertex, stageFragment, cacheKey, promises ) {
350
350
 
@@ -356,7 +356,7 @@ class Pipelines extends DataMap {
356
356
 
357
357
  if ( pipeline === undefined ) {
358
358
 
359
- pipeline = new RenderPipeline( cacheKey, stageVertex, stageFragment );
359
+ pipeline = new RenderObjectPipeline( cacheKey, stageVertex, stageFragment );
360
360
 
361
361
  this.caches.set( cacheKey, pipeline );
362
362