@needle-tools/three 0.162.12 → 0.169.2

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 (635) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +29789 -1941
  3. package/build/three.module.js +29095 -1933
  4. package/build/three.module.min.js +2 -2
  5. package/build/three.webgpu.js +80003 -0
  6. package/build/three.webgpu.min.js +6 -0
  7. package/build/three.webgpu.nodes.js +79951 -0
  8. package/build/three.webgpu.nodes.min.js +6 -0
  9. package/examples/jsm/Addons.js +2 -5
  10. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  11. package/examples/jsm/animation/CCDIKSolver.js +4 -2
  12. package/examples/jsm/capabilities/WebGL.js +27 -21
  13. package/examples/jsm/controls/ArcballControls.js +174 -158
  14. package/examples/jsm/controls/DragControls.js +260 -132
  15. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  16. package/examples/jsm/controls/FlyControls.js +194 -188
  17. package/examples/jsm/controls/OrbitControls.js +790 -797
  18. package/examples/jsm/controls/PointerLockControls.js +24 -15
  19. package/examples/jsm/controls/TrackballControls.js +469 -448
  20. package/examples/jsm/controls/TransformControls.js +98 -63
  21. package/examples/jsm/csm/CSMShader.js +4 -4
  22. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  23. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  24. package/examples/jsm/effects/StereoEffect.js +6 -1
  25. package/examples/jsm/environments/RoomEnvironment.js +2 -6
  26. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  27. package/examples/jsm/exporters/EXRExporter.js +19 -11
  28. package/examples/jsm/exporters/GLTFExporter.js +77 -8
  29. package/examples/jsm/exporters/KTX2Exporter.js +21 -13
  30. package/examples/jsm/exporters/OBJExporter.js +5 -1
  31. package/examples/jsm/exporters/PLYExporter.js +9 -7
  32. package/examples/jsm/exporters/USDZExporter.js +55 -11
  33. package/examples/jsm/geometries/DecalGeometry.js +4 -1
  34. package/examples/jsm/geometries/InstancedPointsGeometry.js +1 -1
  35. package/examples/jsm/geometries/TeapotGeometry.js +1 -1
  36. package/examples/jsm/geometries/TextGeometry.js +10 -2
  37. package/examples/jsm/helpers/LightProbeHelper.js +43 -44
  38. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  39. package/examples/jsm/helpers/ViewHelper.js +75 -61
  40. package/examples/jsm/interactive/HTMLMesh.js +7 -9
  41. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  42. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  43. package/examples/jsm/libs/draco/README.md +2 -2
  44. package/examples/jsm/libs/fflate.module.js +694 -496
  45. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  46. package/examples/jsm/lights/LightProbeGenerator.js +24 -10
  47. package/examples/jsm/lights/RectAreaLightTexturesLib.js +91 -0
  48. package/examples/jsm/lights/RectAreaLightUniformsLib.js +8 -63
  49. package/examples/jsm/lines/LineMaterial.js +1 -17
  50. package/examples/jsm/lines/LineSegments2.js +15 -0
  51. package/examples/jsm/lines/Wireframe.js +16 -1
  52. package/examples/jsm/lines/webgpu/Line2.js +20 -0
  53. package/examples/jsm/lines/webgpu/LineSegments2.js +376 -0
  54. package/examples/jsm/loaders/3MFLoader.js +2 -0
  55. package/examples/jsm/loaders/ColladaLoader.js +9 -6
  56. package/examples/jsm/loaders/DRACOLoader.js +4 -2
  57. package/examples/jsm/loaders/EXRLoader.js +351 -97
  58. package/examples/jsm/loaders/FBXLoader.js +77 -78
  59. package/examples/jsm/loaders/GLTFLoader.js +76 -14
  60. package/examples/jsm/loaders/KTX2Loader.js +30 -22
  61. package/examples/jsm/loaders/LDrawLoader.js +3 -2
  62. package/examples/jsm/loaders/LUT3dlLoader.js +0 -15
  63. package/examples/jsm/loaders/LUTCubeLoader.js +0 -14
  64. package/examples/jsm/loaders/LUTImageLoader.js +0 -14
  65. package/examples/jsm/loaders/MMDLoader.js +31 -12
  66. package/examples/jsm/loaders/MTLLoader.js +4 -3
  67. package/examples/jsm/loaders/MaterialXLoader.js +45 -21
  68. package/examples/jsm/loaders/OBJLoader.js +5 -3
  69. package/examples/jsm/loaders/PCDLoader.js +14 -13
  70. package/examples/jsm/loaders/PDBLoader.js +3 -2
  71. package/examples/jsm/loaders/PLYLoader.js +8 -5
  72. package/examples/jsm/loaders/RGBMLoader.js +16 -0
  73. package/examples/jsm/loaders/STLLoader.js +3 -2
  74. package/examples/jsm/loaders/USDZLoader.js +124 -76
  75. package/examples/jsm/loaders/UltraHDRLoader.js +583 -0
  76. package/examples/jsm/loaders/VRMLLoader.js +11 -11
  77. package/examples/jsm/loaders/VTKLoader.js +80 -6
  78. package/examples/jsm/loaders/XYZLoader.js +3 -2
  79. package/examples/jsm/loaders/lwo/IFFParser.js +8 -5
  80. package/examples/jsm/materials/MeshGouraudMaterial.js +7 -1
  81. package/examples/jsm/math/Octree.js +26 -20
  82. package/examples/jsm/misc/GPUComputationRenderer.js +9 -25
  83. package/examples/jsm/misc/Timer.js +1 -1
  84. package/examples/jsm/modifiers/CurveModifier.js +11 -9
  85. package/examples/jsm/modifiers/CurveModifierGPU.js +233 -0
  86. package/examples/jsm/modifiers/SimplifyModifier.js +2 -1
  87. package/examples/jsm/objects/InstancedPoints.js +2 -2
  88. package/examples/jsm/objects/Lensflare.js +2 -2
  89. package/examples/jsm/objects/LensflareMesh.js +322 -0
  90. package/examples/jsm/objects/SkyMesh.js +187 -0
  91. package/examples/jsm/objects/Water2Mesh.js +158 -0
  92. package/examples/jsm/objects/WaterMesh.js +101 -0
  93. package/examples/jsm/physics/JoltPhysics.js +281 -0
  94. package/examples/jsm/physics/RapierPhysics.js +25 -5
  95. package/examples/jsm/postprocessing/GlitchPass.js +0 -3
  96. package/examples/jsm/postprocessing/LUTPass.js +5 -71
  97. package/examples/jsm/postprocessing/OutlinePass.js +31 -46
  98. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  99. package/examples/jsm/postprocessing/RenderTransitionPass.js +168 -0
  100. package/examples/jsm/postprocessing/SAOPass.js +0 -1
  101. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  102. package/examples/jsm/postprocessing/SSAOPass.js +6 -12
  103. package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -4
  104. package/examples/jsm/renderers/CSS2DRenderer.js +25 -5
  105. package/examples/jsm/renderers/CSS3DRenderer.js +24 -3
  106. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +1 -3
  107. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
  108. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +7 -4
  109. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +19 -5
  110. package/examples/jsm/shaders/BleachBypassShader.js +1 -2
  111. package/examples/jsm/shaders/ColorifyShader.js +1 -2
  112. package/examples/jsm/shaders/FXAAShader.js +0 -2
  113. package/examples/jsm/shaders/GTAOShader.js +1 -1
  114. package/examples/jsm/shaders/LuminosityHighPassShader.js +1 -3
  115. package/examples/jsm/shaders/OutputShader.js +1 -1
  116. package/examples/jsm/transpiler/GLSLDecoder.js +47 -5
  117. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -2
  118. package/examples/jsm/transpiler/TSLEncoder.js +24 -22
  119. package/examples/jsm/utils/BufferGeometryUtils.js +18 -16
  120. package/examples/jsm/utils/GeometryCompressionUtils.js +37 -122
  121. package/examples/jsm/utils/SceneUtils.js +60 -1
  122. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  123. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  124. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  125. package/examples/jsm/utils/SortUtils.js +8 -5
  126. package/examples/jsm/utils/TextureUtils.js +3 -2
  127. package/examples/jsm/utils/TextureUtilsGPU.js +63 -0
  128. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  129. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  130. package/examples/jsm/webxr/XRHandModelFactory.js +4 -2
  131. package/package.json +11 -8
  132. package/src/Three.WebGPU.Nodes.js +200 -0
  133. package/src/Three.WebGPU.js +201 -0
  134. package/src/Three.js +23 -1
  135. package/src/animation/AnimationClip.js +1 -1
  136. package/src/animation/tracks/BooleanKeyframeTrack.js +10 -1
  137. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -2
  138. package/src/animation/tracks/StringKeyframeTrack.js +10 -1
  139. package/src/audio/Audio.js +2 -2
  140. package/src/constants.js +6 -7
  141. package/src/core/BufferAttribute.js +0 -9
  142. package/src/core/Clock.js +1 -1
  143. package/src/core/InterleavedBuffer.js +0 -9
  144. package/src/core/Object3D.js +34 -29
  145. package/src/core/Raycaster.js +6 -2
  146. package/src/core/RenderTarget.js +8 -0
  147. package/src/extras/Controls.js +32 -0
  148. package/src/extras/PMREMGenerator.js +12 -11
  149. package/src/extras/TextureUtils.js +210 -0
  150. package/src/geometries/CylinderGeometry.js +11 -4
  151. package/src/lights/Light.js +1 -0
  152. package/src/lights/LightShadow.js +5 -0
  153. package/{examples/jsm/lights → src/lights/webgpu}/IESSpotLight.js +1 -1
  154. package/src/loaders/FileLoader.js +5 -1
  155. package/src/loaders/LoaderUtils.js +3 -1
  156. package/src/loaders/MaterialLoader.js +8 -1
  157. package/src/loaders/ObjectLoader.js +36 -2
  158. package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeLoader.js +27 -5
  159. package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeMaterialLoader.js +22 -18
  160. package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeObjectLoader.js +21 -1
  161. package/src/materials/Material.js +4 -0
  162. package/src/materials/MeshPhysicalMaterial.js +20 -0
  163. package/src/materials/ShaderMaterial.js +0 -4
  164. package/src/materials/nodes/InstancedPointsNodeMaterial.js +156 -0
  165. package/{examples/jsm/nodes/materials → src/materials/nodes}/Line2NodeMaterial.js +69 -68
  166. package/src/materials/nodes/LineBasicNodeMaterial.js +31 -0
  167. package/{examples/jsm/nodes/materials → src/materials/nodes}/LineDashedNodeMaterial.js +15 -12
  168. package/src/materials/nodes/MeshBasicNodeMaterial.js +77 -0
  169. package/src/materials/nodes/MeshLambertNodeMaterial.js +47 -0
  170. package/src/materials/nodes/MeshMatcapNodeMaterial.js +57 -0
  171. package/src/materials/nodes/MeshNormalNodeMaterial.js +44 -0
  172. package/src/materials/nodes/MeshPhongNodeMaterial.js +78 -0
  173. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +248 -0
  174. package/{examples/jsm/nodes/materials → src/materials/nodes}/MeshSSSNodeMaterial.js +10 -7
  175. package/src/materials/nodes/MeshStandardNodeMaterial.js +108 -0
  176. package/src/materials/nodes/MeshToonNodeMaterial.js +38 -0
  177. package/{examples/jsm/nodes/materials → src/materials/nodes}/NodeMaterial.js +198 -157
  178. package/{examples/jsm/nodes/materials/Materials.js → src/materials/nodes/NodeMaterials.js} +7 -1
  179. package/{examples/jsm/nodes/materials → src/materials/nodes}/PointsNodeMaterial.js +10 -7
  180. package/src/materials/nodes/ShadowNodeMaterial.js +38 -0
  181. package/src/materials/nodes/SpriteNodeMaterial.js +123 -0
  182. package/src/materials/nodes/VolumeNodeMaterial.js +108 -0
  183. package/src/materials/nodes/manager/NodeMaterialObserver.js +302 -0
  184. package/src/math/Box2.js +4 -4
  185. package/src/math/Box3.js +6 -6
  186. package/src/math/ColorManagement.js +10 -0
  187. package/src/math/Matrix2.js +54 -0
  188. package/src/math/Spherical.js +4 -5
  189. package/src/math/Triangle.js +24 -0
  190. package/src/math/Vector4.js +13 -0
  191. package/src/nodes/Nodes.js +164 -0
  192. package/src/nodes/TSL.js +179 -0
  193. package/src/nodes/accessors/AccessorsUtils.js +25 -0
  194. package/src/nodes/accessors/BatchNode.js +128 -0
  195. package/src/nodes/accessors/Bitangent.js +13 -0
  196. package/{examples/jsm → src}/nodes/accessors/BufferAttributeNode.js +44 -6
  197. package/{examples/jsm → src}/nodes/accessors/BufferNode.js +13 -4
  198. package/src/nodes/accessors/Camera.js +13 -0
  199. package/{examples/jsm → src}/nodes/accessors/ClippingNode.js +22 -15
  200. package/src/nodes/accessors/CubeTextureNode.js +79 -0
  201. package/src/nodes/accessors/InstanceNode.js +144 -0
  202. package/src/nodes/accessors/InstancedPointsMaterialNode.js +24 -0
  203. package/src/nodes/accessors/Lights.js +51 -0
  204. package/src/nodes/accessors/MaterialNode.js +441 -0
  205. package/src/nodes/accessors/MaterialProperties.js +3 -0
  206. package/{examples/jsm → src}/nodes/accessors/MaterialReferenceNode.js +10 -5
  207. package/src/nodes/accessors/ModelNode.js +72 -0
  208. package/src/nodes/accessors/ModelViewProjectionNode.js +42 -0
  209. package/{examples/jsm → src}/nodes/accessors/MorphNode.js +51 -33
  210. package/src/nodes/accessors/Normal.js +88 -0
  211. package/{examples/jsm → src}/nodes/accessors/Object3DNode.js +18 -34
  212. package/src/nodes/accessors/PointUVNode.js +30 -0
  213. package/src/nodes/accessors/Position.js +10 -0
  214. package/src/nodes/accessors/ReferenceBaseNode.js +171 -0
  215. package/{examples/jsm → src}/nodes/accessors/ReferenceNode.js +58 -9
  216. package/src/nodes/accessors/ReflectVector.js +10 -0
  217. package/src/nodes/accessors/RendererReferenceNode.js +35 -0
  218. package/{examples/jsm → src}/nodes/accessors/SceneNode.js +9 -6
  219. package/src/nodes/accessors/SkinningNode.js +191 -0
  220. package/src/nodes/accessors/StorageBufferNode.js +147 -0
  221. package/{examples/jsm/nodes/accessors/TextureStoreNode.js → src/nodes/accessors/StorageTextureNode.js} +35 -10
  222. package/src/nodes/accessors/Tangent.js +22 -0
  223. package/src/nodes/accessors/Texture3DNode.js +103 -0
  224. package/{examples/jsm/nodes/accessors/TextureBicubicNode.js → src/nodes/accessors/TextureBicubic.js} +3 -32
  225. package/{examples/jsm → src}/nodes/accessors/TextureNode.js +123 -39
  226. package/src/nodes/accessors/TextureSizeNode.js +36 -0
  227. package/src/nodes/accessors/UV.js +3 -0
  228. package/{examples/jsm/nodes/accessors/UniformsNode.js → src/nodes/accessors/UniformArrayNode.js} +33 -15
  229. package/{examples/jsm → src}/nodes/accessors/UserDataNode.js +10 -7
  230. package/src/nodes/accessors/VelocityNode.js +134 -0
  231. package/{examples/jsm → src}/nodes/accessors/VertexColorNode.js +9 -5
  232. package/{examples/jsm → src}/nodes/code/CodeNode.js +9 -5
  233. package/{examples/jsm → src}/nodes/code/ExpressionNode.js +10 -6
  234. package/{examples/jsm → src}/nodes/code/FunctionCallNode.js +8 -5
  235. package/{examples/jsm → src}/nodes/code/FunctionNode.js +8 -31
  236. package/{examples/jsm → src}/nodes/code/ScriptableNode.js +24 -7
  237. package/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +11 -8
  238. package/{examples/jsm → src}/nodes/core/AssignNode.js +12 -9
  239. package/{examples/jsm → src}/nodes/core/AttributeNode.js +29 -12
  240. package/{examples/jsm → src}/nodes/core/BypassNode.js +11 -7
  241. package/src/nodes/core/CacheNode.js +50 -0
  242. package/{examples/jsm → src}/nodes/core/ConstNode.js +6 -3
  243. package/{examples/jsm → src}/nodes/core/ContextNode.js +27 -11
  244. package/src/nodes/core/IndexNode.js +99 -0
  245. package/{examples/jsm → src}/nodes/core/InputNode.js +7 -3
  246. package/{examples/jsm → src}/nodes/core/LightingModel.js +2 -2
  247. package/src/nodes/core/MRTNode.js +85 -0
  248. package/{examples/jsm → src}/nodes/core/Node.js +114 -57
  249. package/{examples/jsm → src}/nodes/core/NodeBuilder.js +327 -90
  250. package/src/nodes/core/NodeCache.js +36 -0
  251. package/{examples/jsm → src}/nodes/core/NodeFrame.js +52 -10
  252. package/{examples/jsm → src}/nodes/core/NodeFunction.js +2 -2
  253. package/{examples/jsm → src}/nodes/core/NodeUniform.js +1 -2
  254. package/{examples/jsm → src}/nodes/core/NodeUtils.js +56 -8
  255. package/{examples/jsm → src}/nodes/core/OutputStructNode.js +13 -12
  256. package/{examples/jsm → src}/nodes/core/ParameterNode.js +7 -4
  257. package/src/nodes/core/PropertyNode.js +88 -0
  258. package/{examples/jsm → src}/nodes/core/StackNode.js +31 -11
  259. package/{examples/jsm → src}/nodes/core/StructTypeNode.js +7 -3
  260. package/{examples/jsm → src}/nodes/core/TempNode.js +10 -6
  261. package/src/nodes/core/UniformGroupNode.js +59 -0
  262. package/{examples/jsm → src}/nodes/core/UniformNode.js +37 -5
  263. package/{examples/jsm → src}/nodes/core/VarNode.js +14 -14
  264. package/src/nodes/core/VaryingNode.js +108 -0
  265. package/{examples/jsm → src}/nodes/display/AfterImageNode.js +38 -28
  266. package/src/nodes/display/AnaglyphPassNode.js +67 -0
  267. package/{examples/jsm → src}/nodes/display/AnamorphicNode.js +33 -30
  268. package/src/nodes/display/BleachBypass.js +26 -0
  269. package/src/nodes/display/BlendMode.js +54 -0
  270. package/src/nodes/display/BloomNode.js +341 -0
  271. package/{examples/jsm → src}/nodes/display/BumpMapNode.js +20 -38
  272. package/src/nodes/display/ColorAdjustment.js +46 -0
  273. package/src/nodes/display/ColorSpaceFunctions.js +38 -0
  274. package/src/nodes/display/ColorSpaceNode.js +114 -0
  275. package/src/nodes/display/DenoiseNode.js +204 -0
  276. package/src/nodes/display/DepthOfFieldNode.js +124 -0
  277. package/src/nodes/display/DotScreenNode.js +66 -0
  278. package/src/nodes/display/FXAANode.js +332 -0
  279. package/src/nodes/display/FilmNode.js +56 -0
  280. package/src/nodes/display/FrontFacingNode.js +45 -0
  281. package/src/nodes/display/GTAONode.js +331 -0
  282. package/{examples/jsm → src}/nodes/display/GaussianBlurNode.js +47 -24
  283. package/src/nodes/display/Lut3DNode.js +57 -0
  284. package/src/nodes/display/MotionBlur.js +25 -0
  285. package/{examples/jsm → src}/nodes/display/NormalMapNode.js +14 -14
  286. package/src/nodes/display/ParallaxBarrierPassNode.js +58 -0
  287. package/src/nodes/display/PassNode.js +378 -0
  288. package/src/nodes/display/PixelationPassNode.js +213 -0
  289. package/{examples/jsm → src}/nodes/display/PosterizeNode.js +8 -7
  290. package/src/nodes/display/RGBShiftNode.js +53 -0
  291. package/src/nodes/display/RenderOutputNode.js +60 -0
  292. package/src/nodes/display/SSAAPassNode.js +287 -0
  293. package/src/nodes/display/ScreenNode.js +181 -0
  294. package/src/nodes/display/Sepia.js +17 -0
  295. package/src/nodes/display/SobelOperatorNode.js +126 -0
  296. package/src/nodes/display/StereoCompositePassNode.js +110 -0
  297. package/src/nodes/display/StereoPassNode.js +83 -0
  298. package/src/nodes/display/ToneMappingFunctions.js +190 -0
  299. package/src/nodes/display/ToneMappingNode.js +67 -0
  300. package/src/nodes/display/ToonOutlinePassNode.js +111 -0
  301. package/src/nodes/display/TransitionNode.js +80 -0
  302. package/src/nodes/display/ViewportDepthNode.js +125 -0
  303. package/src/nodes/display/ViewportDepthTextureNode.js +33 -0
  304. package/src/nodes/display/ViewportSharedTextureNode.js +39 -0
  305. package/{examples/jsm → src}/nodes/display/ViewportTextureNode.js +20 -14
  306. package/src/nodes/fog/FogExp2Node.js +35 -0
  307. package/src/nodes/fog/FogNode.js +50 -0
  308. package/src/nodes/fog/FogRangeNode.js +36 -0
  309. package/src/nodes/functions/BSDF/BRDF_GGX.js +59 -0
  310. package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  311. package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  312. package/{examples/jsm → src}/nodes/functions/BSDF/DFGApprox.js +2 -2
  313. package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +2 -2
  314. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
  315. package/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  316. package/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +2 -2
  317. package/src/nodes/functions/BSDF/LTC.js +131 -0
  318. package/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  319. package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -4
  320. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
  321. package/src/nodes/functions/BasicLightingModel.js +78 -0
  322. package/{examples/jsm → src}/nodes/functions/PhongLightingModel.js +11 -9
  323. package/src/nodes/functions/PhysicalLightingModel.js +633 -0
  324. package/src/nodes/functions/ShadowMaskModel.js +31 -0
  325. package/src/nodes/functions/ToonLightingModel.js +51 -0
  326. package/src/nodes/functions/material/getGeometryRoughness.js +13 -0
  327. package/{examples/jsm → src}/nodes/functions/material/getRoughness.js +2 -2
  328. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  329. package/{examples/jsm → src}/nodes/geometry/RangeNode.js +28 -11
  330. package/src/nodes/gpgpu/AtomicFunctionNode.js +99 -0
  331. package/src/nodes/gpgpu/BarrierNode.js +40 -0
  332. package/src/nodes/gpgpu/ComputeBuiltinNode.js +98 -0
  333. package/{examples/jsm → src}/nodes/gpgpu/ComputeNode.js +10 -6
  334. package/src/nodes/gpgpu/WorkgroupInfoNode.js +100 -0
  335. package/src/nodes/lighting/AONode.js +27 -0
  336. package/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +6 -8
  337. package/src/nodes/lighting/AnalyticLightNode.js +522 -0
  338. package/src/nodes/lighting/BasicEnvironmentNode.js +30 -0
  339. package/src/nodes/lighting/BasicLightMapNode.js +32 -0
  340. package/{examples/jsm → src}/nodes/lighting/DirectionalLightNode.js +7 -9
  341. package/src/nodes/lighting/EnvironmentNode.js +138 -0
  342. package/{examples/jsm → src}/nodes/lighting/HemisphereLightNode.js +12 -11
  343. package/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +7 -9
  344. package/src/nodes/lighting/IrradianceNode.js +27 -0
  345. package/src/nodes/lighting/LightProbeNode.js +53 -0
  346. package/{examples/jsm → src}/nodes/lighting/LightUtils.js +3 -3
  347. package/src/nodes/lighting/LightingContextNode.js +67 -0
  348. package/{examples/jsm → src}/nodes/lighting/LightingNode.js +9 -3
  349. package/src/nodes/lighting/LightsNode.js +250 -0
  350. package/{examples/jsm → src}/nodes/lighting/PointLightNode.js +12 -13
  351. package/src/nodes/lighting/RectAreaLightNode.js +97 -0
  352. package/{examples/jsm → src}/nodes/lighting/SpotLightNode.js +14 -16
  353. package/{examples/jsm → src}/nodes/materialx/MaterialXNodes.js +2 -2
  354. package/src/nodes/materialx/lib/mx_hsv.js +127 -0
  355. package/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +500 -603
  356. package/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +3 -9
  357. package/{examples/jsm/nodes/math/CondNode.js → src/nodes/math/ConditionalNode.js} +48 -13
  358. package/src/nodes/math/Hash.js +13 -0
  359. package/src/nodes/math/MathNode.js +407 -0
  360. package/{examples/jsm → src}/nodes/math/MathUtils.js +0 -7
  361. package/src/nodes/math/OperatorNode.js +319 -0
  362. package/{examples/jsm → src}/nodes/math/TriNoise3D.js +19 -29
  363. package/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +7 -7
  364. package/src/nodes/pmrem/PMREMNode.js +240 -0
  365. package/src/nodes/pmrem/PMREMUtils.js +288 -0
  366. package/src/nodes/procedural/Checker.js +14 -0
  367. package/src/nodes/tsl/TSLBase.js +30 -0
  368. package/{examples/jsm/nodes/shadernode/ShaderNode.js → src/nodes/tsl/TSLCore.js} +122 -96
  369. package/{examples/jsm → src}/nodes/utils/ArrayElementNode.js +9 -5
  370. package/{examples/jsm → src}/nodes/utils/ConvertNode.js +7 -3
  371. package/src/nodes/utils/CubeMapNode.js +160 -0
  372. package/src/nodes/utils/Discard.js +8 -0
  373. package/src/nodes/utils/EquirectUVNode.js +36 -0
  374. package/src/nodes/utils/FlipNode.js +68 -0
  375. package/{examples/jsm → src}/nodes/utils/FunctionOverloadingNode.js +11 -5
  376. package/{examples/jsm → src}/nodes/utils/JoinNode.js +6 -3
  377. package/{examples/jsm → src}/nodes/utils/LoopNode.js +23 -12
  378. package/src/nodes/utils/MatcapUVNode.js +33 -0
  379. package/{examples/jsm → src}/nodes/utils/MaxMipLevelNode.js +16 -7
  380. package/{examples/jsm → src}/nodes/utils/OscNode.js +12 -8
  381. package/src/nodes/utils/Packing.js +4 -0
  382. package/src/nodes/utils/RTTNode.js +133 -0
  383. package/{examples/jsm → src}/nodes/utils/ReflectorNode.js +21 -5
  384. package/{examples/jsm → src}/nodes/utils/RemapNode.js +12 -8
  385. package/{examples/jsm → src}/nodes/utils/RotateNode.js +8 -13
  386. package/{examples/jsm → src}/nodes/utils/SetNode.js +7 -4
  387. package/{examples/jsm → src}/nodes/utils/SplitNode.js +7 -3
  388. package/{examples/jsm → src}/nodes/utils/SpriteSheetUVNode.js +10 -6
  389. package/src/nodes/utils/SpriteUtils.js +47 -0
  390. package/{examples/jsm → src}/nodes/utils/StorageArrayElementNode.js +11 -12
  391. package/{examples/jsm → src}/nodes/utils/TimerNode.js +8 -5
  392. package/{examples/jsm → src}/nodes/utils/TriplanarTexturesNode.js +11 -9
  393. package/src/nodes/utils/UVUtils.js +19 -0
  394. package/src/nodes/utils/ViewportUtils.js +14 -0
  395. package/src/objects/BatchedMesh.js +302 -144
  396. package/src/objects/InstancedMesh.js +11 -1
  397. package/src/objects/LOD.js +21 -0
  398. package/src/objects/Line.js +67 -43
  399. package/src/objects/Mesh.js +7 -23
  400. package/src/objects/Points.js +2 -0
  401. package/src/renderers/WebGLRenderer.js +473 -224
  402. package/{examples/jsm → src}/renderers/common/Animation.js +3 -0
  403. package/{examples/jsm → src}/renderers/common/Attributes.js +4 -1
  404. package/{examples/jsm → src}/renderers/common/Backend.js +30 -27
  405. package/{examples/jsm → src}/renderers/common/Background.js +18 -10
  406. package/src/renderers/common/BindGroup.js +18 -0
  407. package/src/renderers/common/Bindings.js +203 -0
  408. package/src/renderers/common/BundleGroup.js +26 -0
  409. package/src/renderers/common/ChainMap.js +59 -0
  410. package/{examples/jsm → src}/renderers/common/ClippingContext.js +24 -12
  411. package/{examples/jsm → src}/renderers/common/Color4.js +1 -1
  412. package/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +16 -4
  413. package/{examples/jsm → src}/renderers/common/Geometries.js +37 -5
  414. package/{examples/jsm → src}/renderers/common/Info.js +35 -15
  415. package/{examples/jsm → src}/renderers/common/Pipelines.js +2 -2
  416. package/src/renderers/common/PostProcessing.js +90 -0
  417. package/src/renderers/common/QuadMesh.js +55 -0
  418. package/src/renderers/common/RenderBundle.js +18 -0
  419. package/src/renderers/common/RenderBundles.js +38 -0
  420. package/{examples/jsm → src}/renderers/common/RenderContext.js +25 -2
  421. package/{examples/jsm → src}/renderers/common/RenderContexts.js +1 -1
  422. package/{examples/jsm → src}/renderers/common/RenderList.js +11 -2
  423. package/src/renderers/common/RenderObject.js +413 -0
  424. package/{examples/jsm → src}/renderers/common/RenderObjects.js +9 -2
  425. package/{examples/jsm → src}/renderers/common/Renderer.js +431 -83
  426. package/{examples/jsm → src}/renderers/common/SampledTexture.js +14 -5
  427. package/{examples/jsm → src}/renderers/common/StorageBufferAttribute.js +1 -1
  428. package/{examples/jsm → src}/renderers/common/StorageInstancedBufferAttribute.js +1 -1
  429. package/{examples/jsm → src}/renderers/common/StorageTexture.js +2 -1
  430. package/{examples/jsm → src}/renderers/common/Textures.js +15 -15
  431. package/{examples/jsm → src}/renderers/common/Uniform.js +10 -5
  432. package/{examples/jsm → src}/renderers/common/UniformsGroup.js +69 -31
  433. package/src/renderers/common/extras/PMREMGenerator.js +771 -0
  434. package/src/renderers/common/nodes/NodeBuilderState.js +58 -0
  435. package/src/renderers/common/nodes/NodeLibrary.js +118 -0
  436. package/src/renderers/common/nodes/NodeSampledTexture.js +64 -0
  437. package/{examples/jsm → src}/renderers/common/nodes/NodeSampler.js +8 -1
  438. package/{examples/jsm → src}/renderers/common/nodes/NodeStorageBuffer.js +5 -1
  439. package/{examples/jsm → src}/renderers/common/nodes/NodeUniform.js +3 -3
  440. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformBuffer.js +2 -1
  441. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformsGroup.js +2 -8
  442. package/{examples/jsm → src}/renderers/common/nodes/Nodes.js +106 -68
  443. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +31 -1
  444. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
  445. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -1
  446. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +9 -1
  447. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +0 -9
  448. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -10
  449. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  450. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +8 -22
  451. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
  452. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +1 -0
  453. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
  454. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  455. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +2 -10
  456. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +2 -16
  457. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +1 -1
  458. package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +1 -1
  459. package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +3 -14
  460. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +10 -31
  461. package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +3 -23
  462. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
  463. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +38 -25
  464. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
  465. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
  466. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +19 -11
  467. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  468. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +47 -13
  469. package/src/renderers/shaders/ShaderChunk.js +0 -2
  470. package/src/renderers/shaders/ShaderLib/depth.glsl.js +8 -0
  471. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
  472. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  473. package/src/renderers/shaders/ShaderLib.js +2 -1
  474. package/src/renderers/shaders/UniformsLib.js +3 -0
  475. package/src/renderers/shaders/UniformsUtils.js +10 -1
  476. package/src/renderers/webgl/WebGLAttributes.js +42 -38
  477. package/src/renderers/webgl/WebGLBackground.js +24 -3
  478. package/src/renderers/webgl/WebGLBindingStates.js +14 -51
  479. package/src/renderers/webgl/WebGLBufferRenderer.js +23 -22
  480. package/src/renderers/webgl/WebGLCapabilities.js +44 -13
  481. package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
  482. package/src/renderers/webgl/WebGLExtensions.js +7 -20
  483. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +23 -21
  484. package/src/renderers/webgl/WebGLLights.js +21 -44
  485. package/src/renderers/webgl/WebGLMaterials.js +9 -8
  486. package/src/renderers/webgl/WebGLMorphtargets.js +78 -217
  487. package/src/renderers/webgl/WebGLProgram.js +46 -78
  488. package/src/renderers/webgl/WebGLPrograms.js +37 -40
  489. package/src/renderers/webgl/WebGLProperties.js +7 -0
  490. package/src/renderers/webgl/WebGLRenderStates.js +15 -9
  491. package/src/renderers/webgl/WebGLShadowMap.js +25 -25
  492. package/src/renderers/webgl/WebGLState.js +35 -58
  493. package/src/renderers/webgl/WebGLTextures.js +313 -358
  494. package/src/renderers/webgl/WebGLUniforms.js +12 -2
  495. package/src/renderers/webgl/WebGLUniformsGroups.js +8 -8
  496. package/src/renderers/webgl/WebGLUtils.js +9 -78
  497. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBackend.js +389 -152
  498. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +145 -0
  499. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/nodes/GLSLNodeBuilder.js +245 -44
  500. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +7 -1
  501. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +2 -0
  502. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLExtensions.js +2 -0
  503. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +21 -3
  504. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLTextureUtils.js +271 -43
  505. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +6 -23
  506. package/{examples/jsm → src}/renderers/webgpu/WebGPUBackend.js +318 -141
  507. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +42 -0
  508. package/{examples/jsm → src}/renderers/webgpu/WebGPURenderer.js +10 -7
  509. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +59 -0
  510. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +105 -0
  511. package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeBuilder.js +424 -95
  512. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +159 -0
  513. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUAttributeUtils.js +37 -18
  514. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUBindingUtils.js +86 -32
  515. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +10 -1
  516. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +68 -27
  517. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +62 -5
  518. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTextureUtils.js +235 -68
  519. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUUtils.js +43 -5
  520. package/src/renderers/webxr/WebXRDepthSensing.js +11 -6
  521. package/src/renderers/webxr/WebXRManager.js +53 -38
  522. package/src/scenes/Scene.js +7 -1
  523. package/src/textures/CompressedArrayTexture.js +14 -0
  524. package/src/textures/DataArrayTexture.js +14 -0
  525. package/src/textures/DepthTexture.js +1 -3
  526. package/src/textures/Texture.js +12 -2
  527. package/src/utils.js +62 -1
  528. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  529. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  530. package/examples/jsm/loaders/TiltLoader.js +0 -520
  531. package/examples/jsm/nodes/Nodes.js +0 -195
  532. package/examples/jsm/nodes/accessors/AccessorsUtils.js +0 -10
  533. package/examples/jsm/nodes/accessors/BitangentNode.js +0 -89
  534. package/examples/jsm/nodes/accessors/CameraNode.js +0 -119
  535. package/examples/jsm/nodes/accessors/CubeTextureNode.js +0 -61
  536. package/examples/jsm/nodes/accessors/InstanceNode.js +0 -71
  537. package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  538. package/examples/jsm/nodes/accessors/MaterialNode.js +0 -314
  539. package/examples/jsm/nodes/accessors/ModelNode.js +0 -33
  540. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +0 -39
  541. package/examples/jsm/nodes/accessors/NormalNode.js +0 -96
  542. package/examples/jsm/nodes/accessors/PointUVNode.js +0 -26
  543. package/examples/jsm/nodes/accessors/PositionNode.js +0 -104
  544. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +0 -35
  545. package/examples/jsm/nodes/accessors/SkinningNode.js +0 -124
  546. package/examples/jsm/nodes/accessors/StorageBufferNode.js +0 -72
  547. package/examples/jsm/nodes/accessors/TangentNode.js +0 -109
  548. package/examples/jsm/nodes/accessors/TextureSizeNode.js +0 -35
  549. package/examples/jsm/nodes/accessors/UVNode.js +0 -47
  550. package/examples/jsm/nodes/core/CacheNode.js +0 -49
  551. package/examples/jsm/nodes/core/IndexNode.js +0 -66
  552. package/examples/jsm/nodes/core/NodeCache.js +0 -26
  553. package/examples/jsm/nodes/core/NodeKeywords.js +0 -80
  554. package/examples/jsm/nodes/core/PropertyNode.js +0 -72
  555. package/examples/jsm/nodes/core/UniformGroupNode.js +0 -36
  556. package/examples/jsm/nodes/core/VaryingNode.js +0 -65
  557. package/examples/jsm/nodes/display/BlendModeNode.js +0 -128
  558. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +0 -99
  559. package/examples/jsm/nodes/display/ColorSpaceNode.js +0 -108
  560. package/examples/jsm/nodes/display/FrontFacingNode.js +0 -27
  561. package/examples/jsm/nodes/display/PassNode.js +0 -183
  562. package/examples/jsm/nodes/display/ToneMappingNode.js +0 -184
  563. package/examples/jsm/nodes/display/ViewportDepthNode.js +0 -97
  564. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +0 -31
  565. package/examples/jsm/nodes/display/ViewportNode.js +0 -134
  566. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +0 -31
  567. package/examples/jsm/nodes/fog/FogExp2Node.js +0 -35
  568. package/examples/jsm/nodes/fog/FogNode.js +0 -38
  569. package/examples/jsm/nodes/fog/FogRangeNode.js +0 -34
  570. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +0 -40
  571. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +0 -393
  572. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +0 -13
  573. package/examples/jsm/nodes/lighting/AONode.js +0 -27
  574. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -241
  575. package/examples/jsm/nodes/lighting/EnvironmentNode.js +0 -181
  576. package/examples/jsm/nodes/lighting/LightNode.js +0 -57
  577. package/examples/jsm/nodes/lighting/LightingContextNode.js +0 -66
  578. package/examples/jsm/nodes/lighting/LightsNode.js +0 -188
  579. package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  580. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -28
  581. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
  582. package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +0 -34
  583. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  584. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -65
  585. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +0 -155
  586. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +0 -80
  587. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -90
  588. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +0 -130
  589. package/examples/jsm/nodes/math/HashNode.js +0 -34
  590. package/examples/jsm/nodes/math/MathNode.js +0 -391
  591. package/examples/jsm/nodes/math/OperatorNode.js +0 -274
  592. package/examples/jsm/nodes/procedural/CheckerNode.js +0 -42
  593. package/examples/jsm/nodes/utils/DiscardNode.js +0 -27
  594. package/examples/jsm/nodes/utils/EquirectUVNode.js +0 -33
  595. package/examples/jsm/nodes/utils/MatcapUVNode.js +0 -30
  596. package/examples/jsm/nodes/utils/PackingNode.js +0 -55
  597. package/examples/jsm/nodes/utils/RotateUVNode.js +0 -35
  598. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
  599. package/examples/jsm/objects/QuadMesh.js +0 -66
  600. package/examples/jsm/renderers/common/Bindings.js +0 -173
  601. package/examples/jsm/renderers/common/ChainMap.js +0 -89
  602. package/examples/jsm/renderers/common/PostProcessing.js +0 -25
  603. package/examples/jsm/renderers/common/RenderObject.js +0 -221
  604. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
  605. package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +0 -49
  606. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
  607. package/examples/jsm/utils/GPUStatsPanel.js +0 -128
  608. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  609. package/src/renderers/WebGL1Renderer.js +0 -7
  610. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
  611. /package/{examples/jsm → src}/nodes/core/NodeAttribute.js +0 -0
  612. /package/{examples/jsm → src}/nodes/core/NodeCode.js +0 -0
  613. /package/{examples/jsm → src}/nodes/core/NodeFunctionInput.js +0 -0
  614. /package/{examples/jsm → src}/nodes/core/NodeParser.js +0 -0
  615. /package/{examples/jsm → src}/nodes/core/NodeVar.js +0 -0
  616. /package/{examples/jsm → src}/nodes/core/NodeVarying.js +0 -0
  617. /package/{examples/jsm → src}/nodes/core/UniformGroup.js +0 -0
  618. /package/{examples/jsm → src}/nodes/core/constants.js +0 -0
  619. /package/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
  620. /package/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +0 -0
  621. /package/{examples/jsm → src}/renderers/common/Binding.js +0 -0
  622. /package/{examples/jsm → src}/renderers/common/Buffer.js +0 -0
  623. /package/{examples/jsm → src}/renderers/common/BufferUtils.js +0 -0
  624. /package/{examples/jsm → src}/renderers/common/ComputePipeline.js +0 -0
  625. /package/{examples/jsm → src}/renderers/common/Constants.js +0 -0
  626. /package/{examples/jsm → src}/renderers/common/DataMap.js +0 -0
  627. /package/{examples/jsm → src}/renderers/common/Pipeline.js +0 -0
  628. /package/{examples/jsm → src}/renderers/common/ProgrammableStage.js +0 -0
  629. /package/{examples/jsm → src}/renderers/common/RenderLists.js +0 -0
  630. /package/{examples/jsm → src}/renderers/common/RenderPipeline.js +0 -0
  631. /package/{examples/jsm → src}/renderers/common/Sampler.js +0 -0
  632. /package/{examples/jsm → src}/renderers/common/StorageBuffer.js +0 -0
  633. /package/{examples/jsm → src}/renderers/common/UniformBuffer.js +0 -0
  634. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLCapabilities.js +0 -0
  635. /package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +0 -0
@@ -12,14 +12,26 @@ import Background from './Background.js';
12
12
  import Nodes from './nodes/Nodes.js';
13
13
  import Color4 from './Color4.js';
14
14
  import ClippingContext from './ClippingContext.js';
15
- import { Scene, Frustum, Matrix4, Vector2, Vector3, Vector4, DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoToneMapping } from 'three';
16
-
17
- const _scene = new Scene();
18
- const _drawingBufferSize = new Vector2();
19
- const _screen = new Vector4();
20
- const _frustum = new Frustum();
21
- const _projScreenMatrix = new Matrix4();
22
- const _vector3 = new Vector3();
15
+ import QuadMesh from './QuadMesh.js';
16
+ import RenderBundles from './RenderBundles.js';
17
+ import NodeLibrary from './nodes/NodeLibrary.js';
18
+
19
+ import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
20
+
21
+ import { Scene } from '../../scenes/Scene.js';
22
+ import { Frustum } from '../../math/Frustum.js';
23
+ import { Matrix4 } from '../../math/Matrix4.js';
24
+ import { Vector2 } from '../../math/Vector2.js';
25
+ import { Vector4 } from '../../math/Vector4.js';
26
+ import { RenderTarget } from '../../core/RenderTarget.js';
27
+ import { DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoToneMapping, LinearFilter, LinearSRGBColorSpace, HalfFloatType, RGBAFormat, PCFShadowMap } from '../../constants.js';
28
+
29
+ const _scene = /*@__PURE__*/ new Scene();
30
+ const _drawingBufferSize = /*@__PURE__*/ new Vector2();
31
+ const _screen = /*@__PURE__*/ new Vector4();
32
+ const _frustum = /*@__PURE__*/ new Frustum();
33
+ const _projScreenMatrix = /*@__PURE__*/ new Matrix4();
34
+ const _vector4 = /*@__PURE__*/ new Vector4();
23
35
 
24
36
  class Renderer {
25
37
 
@@ -31,15 +43,21 @@ class Renderer {
31
43
 
32
44
  const {
33
45
  logarithmicDepthBuffer = false,
34
- alpha = true
46
+ alpha = true,
47
+ depth = true,
48
+ stencil = false,
49
+ antialias = false,
50
+ samples = 0,
51
+ getFallback = null
35
52
  } = parameters;
36
53
 
37
54
  // public
38
-
39
55
  this.domElement = backend.getDomElement();
40
56
 
41
57
  this.backend = backend;
42
58
 
59
+ this.samples = samples || ( antialias === true ) ? 4 : 0;
60
+
43
61
  this.autoClear = true;
44
62
  this.autoClearColor = true;
45
63
  this.autoClearDepth = true;
@@ -56,15 +74,23 @@ class Renderer {
56
74
 
57
75
  this.sortObjects = true;
58
76
 
59
- this.depth = true;
60
- this.stencil = true;
77
+ this.depth = depth;
78
+ this.stencil = stencil;
61
79
 
62
80
  this.clippingPlanes = [];
63
81
 
64
82
  this.info = new Info();
65
83
 
84
+ this.nodes = {
85
+ library: new NodeLibrary(),
86
+ modelViewMatrix: null,
87
+ modelNormalViewMatrix: null
88
+ };
89
+
66
90
  // internals
67
91
 
92
+ this._getFallback = getFallback;
93
+
68
94
  this._pixelRatio = 1;
69
95
  this._width = this.domElement.width;
70
96
  this._height = this.domElement.height;
@@ -80,16 +106,21 @@ class Renderer {
80
106
  this._bindings = null;
81
107
  this._objects = null;
82
108
  this._pipelines = null;
109
+ this._bundles = null;
83
110
  this._renderLists = null;
84
111
  this._renderContexts = null;
85
112
  this._textures = null;
86
113
  this._background = null;
87
114
 
115
+ this._quad = new QuadMesh( new NodeMaterial() );
116
+ this._quad.material.type = 'Renderer_output';
117
+
88
118
  this._currentRenderContext = null;
89
119
 
90
120
  this._opaqueSort = null;
91
121
  this._transparentSort = null;
92
122
 
123
+ this._frameBufferTarget = null;
93
124
 
94
125
  const alphaClear = this.alpha === true ? 0 : 1;
95
126
 
@@ -101,8 +132,11 @@ class Renderer {
101
132
  this._activeCubeFace = 0;
102
133
  this._activeMipmapLevel = 0;
103
134
 
135
+ this._mrt = null;
136
+
104
137
  this._renderObjectFunction = null;
105
138
  this._currentRenderObjectFunction = null;
139
+ this._currentRenderBundle = null;
106
140
 
107
141
  this._handleObjectFunction = this._renderObjectDirect;
108
142
 
@@ -111,17 +145,39 @@ class Renderer {
111
145
 
112
146
  this._compilationPromises = null;
113
147
 
114
- // backwards compatibility
148
+ this.transparent = true;
149
+ this.opaque = true;
115
150
 
116
151
  this.shadowMap = {
117
152
  enabled: false,
118
- type: null
153
+ type: PCFShadowMap
119
154
  };
120
155
 
121
156
  this.xr = {
122
157
  enabled: false
123
158
  };
124
159
 
160
+ this.debug = {
161
+ checkShaderErrors: true,
162
+ onShaderError: null,
163
+ getShaderAsync: async ( scene, camera, object ) => {
164
+
165
+ await this.compileAsync( scene, camera );
166
+
167
+ const renderList = this._renderLists.get( scene, camera );
168
+ const renderContext = this._renderContexts.get( scene, camera, this._renderTarget );
169
+
170
+ const material = scene.overrideMaterial || object.material;
171
+
172
+ const renderObject = this._objects.get( object, material, scene, camera, renderList.lightsNode, renderContext );
173
+
174
+ const { fragmentShader, vertexShader } = renderObject.getNodeBuilderState();
175
+
176
+ return { fragmentShader, vertexShader };
177
+
178
+ }
179
+ };
180
+
125
181
  }
126
182
 
127
183
  async init() {
@@ -140,7 +196,7 @@ class Renderer {
140
196
 
141
197
  this._initPromise = new Promise( async ( resolve, reject ) => {
142
198
 
143
- const backend = this.backend;
199
+ let backend = this.backend;
144
200
 
145
201
  try {
146
202
 
@@ -148,8 +204,28 @@ class Renderer {
148
204
 
149
205
  } catch ( error ) {
150
206
 
151
- reject( error );
152
- return;
207
+ if ( this._getFallback !== null ) {
208
+
209
+ // try the fallback
210
+
211
+ try {
212
+
213
+ this.backend = backend = this._getFallback( error );
214
+ await backend.init( this );
215
+
216
+ } catch ( error ) {
217
+
218
+ reject( error );
219
+ return;
220
+
221
+ }
222
+
223
+ } else {
224
+
225
+ reject( error );
226
+ return;
227
+
228
+ }
153
229
 
154
230
  }
155
231
 
@@ -163,6 +239,7 @@ class Renderer {
163
239
  this._bindings = new Bindings( backend, this._nodes, this._textures, this._attributes, this._pipelines, this.info );
164
240
  this._objects = new RenderObjects( this, this._nodes, this._geometries, this._pipelines, this._bindings, this.info );
165
241
  this._renderLists = new RenderLists();
242
+ this._bundles = new RenderBundles();
166
243
  this._renderContexts = new RenderContexts();
167
244
 
168
245
  //
@@ -289,8 +366,8 @@ class Renderer {
289
366
  const transparentObjects = renderList.transparent;
290
367
  const lightsNode = renderList.lightsNode;
291
368
 
292
- if ( opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );
293
- if ( transparentObjects.length > 0 ) this._renderObjects( transparentObjects, camera, sceneRef, lightsNode );
369
+ if ( this.opaque === true && opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );
370
+ if ( this.transparent === true && transparentObjects.length > 0 ) this._renderObjects( transparentObjects, camera, sceneRef, lightsNode );
294
371
 
295
372
  // restore render tree
296
373
 
@@ -312,26 +389,161 @@ class Renderer {
312
389
 
313
390
  if ( this._initialized === false ) await this.init();
314
391
 
315
- const renderContext = this._renderContext( scene, camera );
392
+ const renderContext = this._renderScene( scene, camera );
316
393
 
317
394
  await this.backend.resolveTimestampAsync( renderContext, 'render' );
318
395
 
319
396
  }
320
397
 
398
+ setMRT( mrt ) {
399
+
400
+ this._mrt = mrt;
401
+
402
+ return this;
403
+
404
+ }
405
+
406
+ getMRT() {
407
+
408
+ return this._mrt;
409
+
410
+ }
411
+
412
+ _renderBundle( bundle, sceneRef, lightsNode ) {
413
+
414
+ const { bundleGroup, camera, renderList } = bundle;
415
+
416
+ const renderContext = this._currentRenderContext;
417
+
418
+ //
419
+
420
+ const renderBundle = this._bundles.get( bundleGroup, camera );
421
+ const renderBundleData = this.backend.get( renderBundle );
422
+
423
+ if ( renderBundleData.renderContexts === undefined ) renderBundleData.renderContexts = new Set();
424
+
425
+ //
426
+
427
+ const needsUpdate = bundleGroup.version !== renderBundleData.version;
428
+ const renderBundleNeedsUpdate = renderBundleData.renderContexts.has( renderContext ) === false || needsUpdate;
429
+
430
+ renderBundleData.renderContexts.add( renderContext );
431
+
432
+ if ( renderBundleNeedsUpdate ) {
433
+
434
+ this.backend.beginBundle( renderContext );
435
+
436
+ if ( renderBundleData.renderObjects === undefined || needsUpdate ) {
437
+
438
+ renderBundleData.renderObjects = [];
439
+
440
+ }
441
+
442
+ this._currentRenderBundle = renderBundle;
443
+
444
+ const opaqueObjects = renderList.opaque;
445
+
446
+ if ( opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );
447
+
448
+ this._currentRenderBundle = null;
449
+
450
+ //
451
+
452
+ this.backend.finishBundle( renderContext, renderBundle );
453
+
454
+ renderBundleData.version = bundleGroup.version;
455
+
456
+ } else {
457
+
458
+ const { renderObjects } = renderBundleData;
459
+
460
+ for ( let i = 0, l = renderObjects.length; i < l; i ++ ) {
461
+
462
+ const renderObject = renderObjects[ i ];
463
+
464
+ if ( this._nodes.needsRefresh( renderObject ) ) {
465
+
466
+ this._nodes.updateBefore( renderObject );
467
+
468
+ this._nodes.updateForRender( renderObject );
469
+ this._bindings.updateForRender( renderObject );
470
+
471
+ this._nodes.updateAfter( renderObject );
472
+
473
+ }
474
+
475
+ }
476
+
477
+ }
478
+
479
+ this.backend.addBundle( renderContext, renderBundle );
480
+
481
+ }
482
+
321
483
  render( scene, camera ) {
322
484
 
323
485
  if ( this._initialized === false ) {
324
486
 
325
- console.error( 'THREE.Renderer: .render() called before the backend is initialized. Try using .renderAsync() instead.' );
326
- return;
487
+ console.warn( 'THREE.Renderer: .render() called before the backend is initialized. Try using .renderAsync() instead.' );
488
+
489
+ return this.renderAsync( scene, camera );
327
490
 
328
491
  }
329
492
 
330
- this._renderContext( scene, camera );
493
+ this._renderScene( scene, camera );
331
494
 
332
495
  }
333
496
 
334
- _renderContext( scene, camera ) {
497
+ _getFrameBufferTarget() {
498
+
499
+ const { currentToneMapping, currentColorSpace } = this;
500
+
501
+ const useToneMapping = currentToneMapping !== NoToneMapping;
502
+ const useColorSpace = currentColorSpace !== LinearSRGBColorSpace;
503
+
504
+ if ( useToneMapping === false && useColorSpace === false ) return null;
505
+
506
+ const { width, height } = this.getDrawingBufferSize( _drawingBufferSize );
507
+ const { depth, stencil } = this;
508
+
509
+ let frameBufferTarget = this._frameBufferTarget;
510
+
511
+ if ( frameBufferTarget === null ) {
512
+
513
+ frameBufferTarget = new RenderTarget( width, height, {
514
+ depthBuffer: depth,
515
+ stencilBuffer: stencil,
516
+ type: HalfFloatType, // FloatType
517
+ format: RGBAFormat,
518
+ colorSpace: LinearSRGBColorSpace,
519
+ generateMipmaps: false,
520
+ minFilter: LinearFilter,
521
+ magFilter: LinearFilter,
522
+ samples: this.samples
523
+ } );
524
+
525
+ frameBufferTarget.isPostProcessingRenderTarget = true;
526
+
527
+ this._frameBufferTarget = frameBufferTarget;
528
+
529
+ }
530
+
531
+ frameBufferTarget.depthBuffer = depth;
532
+ frameBufferTarget.stencilBuffer = stencil;
533
+ frameBufferTarget.setSize( width, height );
534
+ frameBufferTarget.viewport.copy( this._viewport );
535
+ frameBufferTarget.scissor.copy( this._scissor );
536
+ frameBufferTarget.viewport.multiplyScalar( this._pixelRatio );
537
+ frameBufferTarget.scissor.multiplyScalar( this._pixelRatio );
538
+ frameBufferTarget.scissorTest = this._scissorTest;
539
+
540
+ return frameBufferTarget;
541
+
542
+ }
543
+
544
+ _renderScene( scene, camera, useFrameBufferTarget = true ) {
545
+
546
+ const frameBufferTarget = useFrameBufferTarget ? this._getFrameBufferTarget() : null;
335
547
 
336
548
  // preserve render tree
337
549
 
@@ -345,11 +557,31 @@ class Renderer {
345
557
 
346
558
  const sceneRef = ( scene.isScene === true ) ? scene : _scene;
347
559
 
348
- const renderTarget = this._renderTarget;
349
- const renderContext = this._renderContexts.get( scene, camera, renderTarget );
560
+ const outputRenderTarget = this._renderTarget;
561
+
350
562
  const activeCubeFace = this._activeCubeFace;
351
563
  const activeMipmapLevel = this._activeMipmapLevel;
352
564
 
565
+ //
566
+
567
+ let renderTarget;
568
+
569
+ if ( frameBufferTarget !== null ) {
570
+
571
+ renderTarget = frameBufferTarget;
572
+
573
+ this.setRenderTarget( renderTarget );
574
+
575
+ } else {
576
+
577
+ renderTarget = outputRenderTarget;
578
+
579
+ }
580
+
581
+ //
582
+
583
+ const renderContext = this._renderContexts.get( scene, camera, renderTarget );
584
+
353
585
  this._currentRenderContext = renderContext;
354
586
  this._currentRenderObjectFunction = this._renderObjectFunction || this.renderObject;
355
587
 
@@ -357,6 +589,7 @@ class Renderer {
357
589
 
358
590
  this.info.calls ++;
359
591
  this.info.render.calls ++;
592
+ this.info.render.frameCalls ++;
360
593
 
361
594
  nodeFrame.renderId = this.info.calls;
362
595
 
@@ -378,8 +611,6 @@ class Renderer {
378
611
 
379
612
  if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
380
613
 
381
- if ( this.info.autoReset === true ) this.info.reset();
382
-
383
614
  //
384
615
 
385
616
  let viewport = this._viewport;
@@ -485,12 +716,16 @@ class Renderer {
485
716
 
486
717
  // process render lists
487
718
 
488
- const opaqueObjects = renderList.opaque;
489
- const transparentObjects = renderList.transparent;
490
- const lightsNode = renderList.lightsNode;
719
+ const {
720
+ bundles,
721
+ lightsNode,
722
+ transparent: transparentObjects,
723
+ opaque: opaqueObjects
724
+ } = renderList;
491
725
 
492
- if ( opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );
493
- if ( transparentObjects.length > 0 ) this._renderObjects( transparentObjects, camera, sceneRef, lightsNode );
726
+ if ( bundles.length > 0 ) this._renderBundles( bundles, sceneRef, lightsNode );
727
+ if ( this.opaque === true && opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );
728
+ if ( this.transparent === true && transparentObjects.length > 0 ) this._renderObjects( transparentObjects, camera, sceneRef, lightsNode );
494
729
 
495
730
  // finish render pass
496
731
 
@@ -505,6 +740,25 @@ class Renderer {
505
740
 
506
741
  //
507
742
 
743
+ if ( frameBufferTarget !== null ) {
744
+
745
+ this.setRenderTarget( outputRenderTarget, activeCubeFace, activeMipmapLevel );
746
+
747
+ const quad = this._quad;
748
+
749
+ if ( this._nodes.hasOutputChange( renderTarget.texture ) ) {
750
+
751
+ quad.material.fragmentNode = this._nodes.getOutputNode( renderTarget.texture );
752
+ quad.material.needsUpdate = true;
753
+
754
+ }
755
+
756
+ this._renderScene( quad, quad.camera, false );
757
+
758
+ }
759
+
760
+ //
761
+
508
762
  sceneRef.onAfterRender( this, scene, camera, renderTarget );
509
763
 
510
764
  //
@@ -539,14 +793,6 @@ class Renderer {
539
793
 
540
794
  }
541
795
 
542
- getArrayBuffer( attribute ) { // @deprecated, r155
543
-
544
- console.warn( 'THREE.Renderer: getArrayBuffer() is deprecated. Use getArrayBufferAsync() instead.' );
545
-
546
- return this.getArrayBufferAsync( attribute );
547
-
548
- }
549
-
550
796
  async getArrayBufferAsync( attribute ) {
551
797
 
552
798
  return await this.backend.getArrayBufferAsync( attribute );
@@ -761,8 +1007,17 @@ class Renderer {
761
1007
 
762
1008
  clear( color = true, depth = true, stencil = true ) {
763
1009
 
1010
+ if ( this._initialized === false ) {
1011
+
1012
+ console.warn( 'THREE.Renderer: .clear() called before the backend is initialized. Try using .clearAsync() instead.' );
1013
+
1014
+ return this.clearAsync( color, depth, stencil );
1015
+
1016
+ }
1017
+
1018
+ const renderTarget = this._renderTarget || this._getFrameBufferTarget();
1019
+
764
1020
  let renderTargetData = null;
765
- const renderTarget = this._renderTarget;
766
1021
 
767
1022
  if ( renderTarget !== null ) {
768
1023
 
@@ -774,6 +1029,24 @@ class Renderer {
774
1029
 
775
1030
  this.backend.clear( color, depth, stencil, renderTargetData );
776
1031
 
1032
+ if ( renderTarget !== null && this._renderTarget === null ) {
1033
+
1034
+ // If a color space transform or tone mapping is required,
1035
+ // the clear operation clears the intermediate renderTarget texture, but does not update the screen canvas.
1036
+
1037
+ const quad = this._quad;
1038
+
1039
+ if ( this._nodes.hasOutputChange( renderTarget.texture ) ) {
1040
+
1041
+ quad.material.fragmentNode = this._nodes.getOutputNode( renderTarget.texture );
1042
+ quad.material.needsUpdate = true;
1043
+
1044
+ }
1045
+
1046
+ this._renderScene( quad, quad.camera, false );
1047
+
1048
+ }
1049
+
777
1050
  }
778
1051
 
779
1052
  clearColor() {
@@ -820,19 +1093,15 @@ class Renderer {
820
1093
 
821
1094
  }
822
1095
 
823
- get currentColorSpace() {
824
-
825
- const renderTarget = this._renderTarget;
1096
+ get currentToneMapping() {
826
1097
 
827
- if ( renderTarget !== null ) {
1098
+ return this._renderTarget !== null ? NoToneMapping : this.toneMapping;
828
1099
 
829
- const texture = renderTarget.texture;
830
-
831
- return ( Array.isArray( texture ) ? texture[ 0 ] : texture ).colorSpace;
1100
+ }
832
1101
 
833
- }
1102
+ get currentColorSpace() {
834
1103
 
835
- return this.outputColorSpace;
1104
+ return this._renderTarget !== null ? LinearSRGBColorSpace : this.outputColorSpace;
836
1105
 
837
1106
  }
838
1107
 
@@ -892,17 +1161,17 @@ class Renderer {
892
1161
 
893
1162
  this.info.calls ++;
894
1163
  this.info.compute.calls ++;
895
- this.info.compute.computeCalls ++;
1164
+ this.info.compute.frameCalls ++;
896
1165
 
897
1166
  nodeFrame.renderId = this.info.calls;
898
1167
 
899
1168
  //
900
- if ( this.info.autoReset === true ) this.info.resetCompute();
901
1169
 
902
1170
  const backend = this.backend;
903
1171
  const pipelines = this._pipelines;
904
1172
  const bindings = this._bindings;
905
1173
  const nodes = this._nodes;
1174
+
906
1175
  const computeList = Array.isArray( computeNodes ) ? computeNodes : [ computeNodes ];
907
1176
 
908
1177
  if ( computeList[ 0 ] === undefined || computeList[ 0 ].isComputeNode !== true ) {
@@ -957,31 +1226,53 @@ class Renderer {
957
1226
 
958
1227
  }
959
1228
 
960
- hasFeatureAsync( name ) {
1229
+ async hasFeatureAsync( name ) {
961
1230
 
962
- return this.backend.hasFeatureAsync( name );
1231
+ if ( this._initialized === false ) await this.init();
1232
+
1233
+ return this.backend.hasFeature( name );
963
1234
 
964
1235
  }
965
1236
 
966
1237
  hasFeature( name ) {
967
1238
 
1239
+ if ( this._initialized === false ) {
1240
+
1241
+ console.warn( 'THREE.Renderer: .hasFeature() called before the backend is initialized. Try using .hasFeatureAsync() instead.' );
1242
+
1243
+ return false;
1244
+
1245
+ }
1246
+
968
1247
  return this.backend.hasFeature( name );
969
1248
 
970
1249
  }
971
1250
 
972
- copyFramebufferToTexture( framebufferTexture ) {
1251
+ copyFramebufferToTexture( framebufferTexture, rectangle = null ) {
973
1252
 
974
1253
  const renderContext = this._currentRenderContext;
975
1254
 
976
1255
  this._textures.updateTexture( framebufferTexture );
977
1256
 
978
- this.backend.copyFramebufferToTexture( framebufferTexture, renderContext );
1257
+ rectangle = rectangle === null ? _vector4.set( 0, 0, framebufferTexture.image.width, framebufferTexture.image.height ) : rectangle;
1258
+
1259
+ this.backend.copyFramebufferToTexture( framebufferTexture, renderContext, rectangle );
979
1260
 
980
1261
  }
981
1262
 
982
- readRenderTargetPixelsAsync( renderTarget, x, y, width, height ) {
1263
+ copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {
1264
+
1265
+ this._textures.updateTexture( srcTexture );
1266
+ this._textures.updateTexture( dstTexture );
983
1267
 
984
- return this.backend.copyTextureToBuffer( renderTarget.texture, x, y, width, height );
1268
+ this.backend.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition, level );
1269
+
1270
+ }
1271
+
1272
+
1273
+ readRenderTargetPixelsAsync( renderTarget, x, y, width, height, index = 0, faceIndex = 0 ) {
1274
+
1275
+ return this.backend.copyTextureToBuffer( renderTarget.textures[ index ], x, y, width, height, faceIndex );
985
1276
 
986
1277
  }
987
1278
 
@@ -1011,16 +1302,15 @@ class Renderer {
1011
1302
 
1012
1303
  if ( this.sortObjects === true ) {
1013
1304
 
1014
- _vector3.setFromMatrixPosition( object.matrixWorld ).applyMatrix4( _projScreenMatrix );
1305
+ _vector4.setFromMatrixPosition( object.matrixWorld ).applyMatrix4( _projScreenMatrix );
1015
1306
 
1016
1307
  }
1017
1308
 
1018
- const geometry = object.geometry;
1019
- const material = object.material;
1309
+ const { geometry, material } = object;
1020
1310
 
1021
1311
  if ( material.visible ) {
1022
1312
 
1023
- renderList.push( object, geometry, material, groupOrder, _vector3.z, null );
1313
+ renderList.push( object, geometry, material, groupOrder, _vector4.z, null );
1024
1314
 
1025
1315
  }
1026
1316
 
@@ -1034,14 +1324,13 @@ class Renderer {
1034
1324
 
1035
1325
  if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {
1036
1326
 
1037
- const geometry = object.geometry;
1038
- const material = object.material;
1327
+ const { geometry, material } = object;
1039
1328
 
1040
1329
  if ( this.sortObjects === true ) {
1041
1330
 
1042
1331
  if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();
1043
1332
 
1044
- _vector3
1333
+ _vector4
1045
1334
  .copy( geometry.boundingSphere.center )
1046
1335
  .applyMatrix4( object.matrixWorld )
1047
1336
  .applyMatrix4( _projScreenMatrix );
@@ -1059,7 +1348,7 @@ class Renderer {
1059
1348
 
1060
1349
  if ( groupMaterial && groupMaterial.visible ) {
1061
1350
 
1062
- renderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group );
1351
+ renderList.push( object, geometry, groupMaterial, groupOrder, _vector4.z, group );
1063
1352
 
1064
1353
  }
1065
1354
 
@@ -1067,7 +1356,7 @@ class Renderer {
1067
1356
 
1068
1357
  } else if ( material.visible ) {
1069
1358
 
1070
- renderList.push( object, geometry, material, groupOrder, _vector3.z, null );
1359
+ renderList.push( object, geometry, material, groupOrder, _vector4.z, null );
1071
1360
 
1072
1361
  }
1073
1362
 
@@ -1077,6 +1366,25 @@ class Renderer {
1077
1366
 
1078
1367
  }
1079
1368
 
1369
+ if ( object.isBundleGroup === true && this.backend.beginBundle !== undefined ) {
1370
+
1371
+ const baseRenderList = renderList;
1372
+
1373
+ // replace render list
1374
+ renderList = this._renderLists.get( object, camera );
1375
+
1376
+ renderList.begin();
1377
+
1378
+ baseRenderList.pushBundle( {
1379
+ bundleGroup: object,
1380
+ camera,
1381
+ renderList,
1382
+ } );
1383
+
1384
+ renderList.finish();
1385
+
1386
+ }
1387
+
1080
1388
  const children = object.children;
1081
1389
 
1082
1390
  for ( let i = 0, l = children.length; i < l; i ++ ) {
@@ -1087,6 +1395,16 @@ class Renderer {
1087
1395
 
1088
1396
  }
1089
1397
 
1398
+ _renderBundles( bundles, sceneRef, lightsNode ) {
1399
+
1400
+ for ( const bundle of bundles ) {
1401
+
1402
+ this._renderBundle( bundle, sceneRef, lightsNode );
1403
+
1404
+ }
1405
+
1406
+ }
1407
+
1090
1408
  _renderObjects( renderList, camera, scene, lightsNode ) {
1091
1409
 
1092
1410
  // process renderable objects
@@ -1141,6 +1459,7 @@ class Renderer {
1141
1459
 
1142
1460
  let overridePositionNode;
1143
1461
  let overrideFragmentNode;
1462
+ let overrideDepthNode;
1144
1463
 
1145
1464
  //
1146
1465
 
@@ -1157,7 +1476,6 @@ class Renderer {
1157
1476
  if ( material.positionNode && material.positionNode.isNode ) {
1158
1477
 
1159
1478
  overridePositionNode = overrideMaterial.positionNode;
1160
-
1161
1479
  overrideMaterial.positionNode = material.positionNode;
1162
1480
 
1163
1481
  }
@@ -1166,6 +1484,14 @@ class Renderer {
1166
1484
 
1167
1485
  overrideMaterial.side = material.shadowSide === null ? material.side : material.shadowSide;
1168
1486
 
1487
+ if ( material.depthNode && material.depthNode.isNode ) {
1488
+
1489
+ overrideDepthNode = overrideMaterial.depthNode;
1490
+ overrideMaterial.depthNode = material.depthNode;
1491
+
1492
+ }
1493
+
1494
+
1169
1495
  if ( material.shadowNode && material.shadowNode.isNode ) {
1170
1496
 
1171
1497
  overrideFragmentNode = overrideMaterial.fragmentNode;
@@ -1210,16 +1536,16 @@ class Renderer {
1210
1536
  if ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {
1211
1537
 
1212
1538
  material.side = BackSide;
1213
- this._handleObjectFunction( object, material, scene, camera, lightsNode, 'backSide' ); // create backSide pass id
1539
+ this._handleObjectFunction( object, material, scene, camera, lightsNode, group, 'backSide' ); // create backSide pass id
1214
1540
 
1215
1541
  material.side = FrontSide;
1216
- this._handleObjectFunction( object, material, scene, camera, lightsNode ); // use default pass id
1542
+ this._handleObjectFunction( object, material, scene, camera, lightsNode, group ); // use default pass id
1217
1543
 
1218
1544
  material.side = DoubleSide;
1219
1545
 
1220
1546
  } else {
1221
1547
 
1222
- this._handleObjectFunction( object, material, scene, camera, lightsNode );
1548
+ this._handleObjectFunction( object, material, scene, camera, lightsNode, group );
1223
1549
 
1224
1550
  }
1225
1551
 
@@ -1231,6 +1557,12 @@ class Renderer {
1231
1557
 
1232
1558
  }
1233
1559
 
1560
+ if ( overrideDepthNode !== undefined ) {
1561
+
1562
+ scene.overrideMaterial.depthNode = overrideDepthNode;
1563
+
1564
+ }
1565
+
1234
1566
  if ( overrideFragmentNode !== undefined ) {
1235
1567
 
1236
1568
  scene.overrideMaterial.fragmentNode = overrideFragmentNode;
@@ -1243,30 +1575,45 @@ class Renderer {
1243
1575
 
1244
1576
  }
1245
1577
 
1246
- _renderObjectDirect( object, material, scene, camera, lightsNode, passId ) {
1578
+ _renderObjectDirect( object, material, scene, camera, lightsNode, group, passId ) {
1247
1579
 
1248
1580
  const renderObject = this._objects.get( object, material, scene, camera, lightsNode, this._currentRenderContext, passId );
1581
+ renderObject.drawRange = object.geometry.drawRange;
1582
+ renderObject.group = group;
1249
1583
 
1250
1584
  //
1251
1585
 
1252
- this._nodes.updateBefore( renderObject );
1586
+ const needsRefresh = this._nodes.needsRefresh( renderObject );
1253
1587
 
1254
- //
1588
+ if ( needsRefresh ) {
1255
1589
 
1256
- object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
1257
- object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
1590
+ this._nodes.updateBefore( renderObject );
1258
1591
 
1259
- //
1592
+ this._geometries.updateForRender( renderObject );
1593
+
1594
+ this._nodes.updateForRender( renderObject );
1595
+ this._bindings.updateForRender( renderObject );
1596
+
1597
+ }
1260
1598
 
1261
- this._nodes.updateForRender( renderObject );
1262
- this._geometries.updateForRender( renderObject );
1263
- this._bindings.updateForRender( renderObject );
1264
1599
  this._pipelines.updateForRender( renderObject );
1265
1600
 
1266
1601
  //
1267
1602
 
1603
+ if ( this._currentRenderBundle !== null ) {
1604
+
1605
+ const renderBundleData = this.backend.get( this._currentRenderBundle );
1606
+
1607
+ renderBundleData.renderObjects.push( renderObject );
1608
+
1609
+ renderObject.bundle = this._currentRenderBundle.scene;
1610
+
1611
+ }
1612
+
1268
1613
  this.backend.draw( renderObject, this.info );
1269
1614
 
1615
+ if ( needsRefresh ) this._nodes.updateAfter( renderObject );
1616
+
1270
1617
  }
1271
1618
 
1272
1619
  _createObjectPipeline( object, material, scene, camera, lightsNode, passId ) {
@@ -1277,14 +1624,15 @@ class Renderer {
1277
1624
 
1278
1625
  this._nodes.updateBefore( renderObject );
1279
1626
 
1280
- //
1627
+ this._geometries.updateForRender( renderObject );
1281
1628
 
1282
1629
  this._nodes.updateForRender( renderObject );
1283
- this._geometries.updateForRender( renderObject );
1284
1630
  this._bindings.updateForRender( renderObject );
1285
1631
 
1286
1632
  this._pipelines.getForRender( renderObject, this._compilationPromises );
1287
1633
 
1634
+ this._nodes.updateAfter( renderObject );
1635
+
1288
1636
  }
1289
1637
 
1290
1638
  get compute() {