@gnsx/three 0.185.16 → 0.186.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 (418) hide show
  1. package/build/three.cjs +10 -82600
  2. package/build/three.core.js +1309 -807
  3. package/build/three.module.js +439 -338
  4. package/build/three.tsl.js +74 -44
  5. package/build/three.webgpu.js +6036 -2184
  6. package/build/three.webgpu.nodes.js +6020 -2184
  7. package/examples/jsm/Addons.js +6 -6
  8. package/examples/jsm/controls/ArcballControls.js +1 -1
  9. package/examples/jsm/controls/FirstPersonControls.js +44 -20
  10. package/examples/jsm/controls/OrbitControls.js +9 -0
  11. package/examples/jsm/controls/TrackballControls.js +109 -4
  12. package/examples/jsm/csm/CSMShadowNode.js +13 -0
  13. package/examples/jsm/exporters/GLTFExporter.js +23 -7
  14. package/examples/jsm/exporters/USDZExporter.js +2 -2
  15. package/examples/jsm/generators/CityGenerator.js +377 -45
  16. package/examples/jsm/generators/ForestGenerator.js +12 -12
  17. package/examples/jsm/generators/TerrainGenerator.js +49 -37
  18. package/examples/jsm/generators/TreeGenerator.js +70 -76
  19. package/examples/jsm/generators/city/BenchGenerator.js +127 -0
  20. package/examples/jsm/generators/city/CarGenerator.js +479 -0
  21. package/examples/jsm/generators/city/CityGeneratorUtils.js +31 -0
  22. package/examples/jsm/generators/city/HydrantGenerator.js +106 -0
  23. package/examples/jsm/generators/city/InstancedMeshGenerator.js +86 -0
  24. package/examples/jsm/generators/city/PersonGenerator.js +447 -0
  25. package/examples/jsm/generators/city/SidewalkGenerator.js +33 -38
  26. package/examples/jsm/generators/city/SkyscraperGenerator.js +448 -48
  27. package/examples/jsm/generators/city/StreetTreeGenerator.js +231 -0
  28. package/examples/jsm/generators/city/StreetlightGenerator.js +100 -0
  29. package/examples/jsm/generators/city/TrafficlightGenerator.js +106 -0
  30. package/examples/jsm/generators/city/TrashcanGenerator.js +100 -0
  31. package/examples/jsm/geometries/BoxLineGeometry.js +1 -1
  32. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  33. package/examples/jsm/geometries/RoundedBoxGeometry.js +1 -1
  34. package/examples/jsm/gpgpu/CountingSort.js +271 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +60 -239
  36. package/examples/jsm/helpers/LightProbeGridHelperWebGL.js +221 -0
  37. package/examples/jsm/inspector/Extension.js +94 -0
  38. package/examples/jsm/inspector/Inspector.js +145 -41
  39. package/examples/jsm/inspector/RendererInspector.js +100 -52
  40. package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +2609 -0
  41. package/examples/jsm/inspector/extensions/color-grading/ColorWheel.js +352 -0
  42. package/examples/jsm/inspector/extensions/color-grading/CurveEditor.js +599 -0
  43. package/examples/jsm/inspector/extensions/color-grading/LUT3DStyle.js +1201 -0
  44. package/examples/jsm/inspector/extensions/color-grading/LUTMath.js +788 -0
  45. package/examples/jsm/inspector/extensions/color-grading/modules/BrightnessModule.js +72 -0
  46. package/examples/jsm/inspector/extensions/color-grading/modules/ColorWheelModule.js +112 -0
  47. package/examples/jsm/inspector/extensions/color-grading/modules/ContrastModule.js +82 -0
  48. package/examples/jsm/inspector/extensions/color-grading/modules/CurvesModule.js +109 -0
  49. package/examples/jsm/inspector/extensions/color-grading/modules/ExposureHueModule.js +110 -0
  50. package/examples/jsm/inspector/extensions/color-grading/modules/ExposureModule.js +73 -0
  51. package/examples/jsm/inspector/extensions/color-grading/modules/HueModule.js +78 -0
  52. package/examples/jsm/inspector/extensions/color-grading/modules/ImportedCubeModule.js +89 -0
  53. package/examples/jsm/inspector/extensions/color-grading/modules/Module.js +285 -0
  54. package/examples/jsm/inspector/extensions/color-grading/modules/OutputModule.js +101 -0
  55. package/examples/jsm/inspector/extensions/color-grading/modules/RendererModule.js +225 -0
  56. package/examples/jsm/inspector/extensions/color-grading/modules/SatVibranceModule.js +102 -0
  57. package/examples/jsm/inspector/extensions/color-grading/modules/SaturationModule.js +76 -0
  58. package/examples/jsm/inspector/extensions/color-grading/modules/VibranceModule.js +76 -0
  59. package/examples/jsm/inspector/extensions/color-grading/modules/WhiteBalanceModule.js +86 -0
  60. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +26 -31
  61. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -0
  62. package/examples/jsm/inspector/tabs/Memory.js +0 -2
  63. package/examples/jsm/inspector/tabs/Settings.js +4 -0
  64. package/examples/jsm/inspector/tabs/Timeline.js +223 -171
  65. package/examples/jsm/inspector/tabs/Viewer.js +515 -21
  66. package/examples/jsm/inspector/ui/List.js +15 -9
  67. package/examples/jsm/inspector/ui/Profiler.js +170 -14
  68. package/examples/jsm/inspector/ui/Style.js +269 -23
  69. package/examples/jsm/inspector/ui/Tab.js +2 -0
  70. package/examples/jsm/inspector/ui/Values.js +14 -2
  71. package/examples/jsm/interactive/HTMLMesh.js +19 -3
  72. package/examples/jsm/lighting/LightProbeGrid.js +484 -889
  73. package/examples/jsm/lighting/LightProbeGridUtils.js +107 -0
  74. package/examples/jsm/lighting/LightProbeGridWebGL.js +841 -0
  75. package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +194 -0
  76. package/examples/jsm/lighting/vxgi/VXGINode.js +660 -0
  77. package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +478 -0
  78. package/examples/jsm/lighting/vxgi/VXGIVolume.js +1430 -0
  79. package/examples/jsm/lights/SunLight.js +95 -0
  80. package/examples/jsm/lights/SunLightNode.js +56 -0
  81. package/examples/jsm/lights/SunLightShadow.js +319 -0
  82. package/examples/jsm/lights/SunShadowNode.js +312 -0
  83. package/examples/jsm/loaders/3DMLoader.js +150 -49
  84. package/examples/jsm/loaders/3MFLoader.js +202 -1
  85. package/examples/jsm/loaders/FBXLoader.js +81 -5
  86. package/examples/jsm/loaders/GLTFGaussianSplatLoaderExtension.js +330 -0
  87. package/examples/jsm/loaders/GLTFLoader.js +79 -14
  88. package/examples/jsm/loaders/GaussianSplatPLYLoader.js +386 -0
  89. package/examples/jsm/loaders/KSPLATLoader.js +463 -0
  90. package/examples/jsm/loaders/MaterialXLoader.js +111 -1010
  91. package/examples/jsm/loaders/PCDLoader.js +1 -1
  92. package/examples/jsm/loaders/SPLATLoader.js +139 -0
  93. package/examples/jsm/loaders/SPZLoader.js +561 -0
  94. package/examples/jsm/loaders/materialx/MaterialXArchive.js +108 -0
  95. package/examples/jsm/loaders/materialx/MaterialXDocument.js +878 -0
  96. package/examples/jsm/loaders/materialx/MaterialXHextile.js +183 -0
  97. package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +376 -0
  98. package/examples/jsm/loaders/materialx/MaterialXLog.js +75 -0
  99. package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +4 -0
  100. package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +1021 -0
  101. package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +661 -0
  102. package/examples/jsm/loaders/materialx/MaterialXUtils.js +57 -0
  103. package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +997 -0
  104. package/examples/jsm/loaders/materialx/parse/MaterialXParser.js +28 -0
  105. package/examples/jsm/loaders/usd/USDAParser.js +15 -2
  106. package/examples/jsm/loaders/usd/USDCParser.js +1 -4
  107. package/examples/jsm/loaders/usd/USDComposer.js +80 -42
  108. package/examples/jsm/materials/WoodNodeMaterial.js +6 -108
  109. package/examples/jsm/misc/RollerCoaster.js +2 -2
  110. package/examples/jsm/misc/SculptGL.LICENSE.txt +21 -0
  111. package/examples/jsm/misc/Sculptor.js +1679 -0
  112. package/examples/jsm/misc/SculptorMesh.js +1504 -0
  113. package/examples/jsm/misc/SculptorTools.js +1180 -0
  114. package/examples/jsm/misc/SculptorUtils.js +345 -0
  115. package/examples/jsm/misc/TubePainter.js +28 -16
  116. package/examples/jsm/misc/VolumeSlice.js +24 -24
  117. package/examples/jsm/modifiers/SimplifyModifier.js +63 -556
  118. package/examples/jsm/objects/GaussianSplat.js +1039 -0
  119. package/examples/jsm/objects/Sky.js +66 -45
  120. package/examples/jsm/objects/SkyMesh.js +70 -51
  121. package/examples/jsm/physics/JoltPhysics.js +1 -1
  122. package/examples/jsm/postprocessing/AfterimagePass.js +4 -2
  123. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  124. package/examples/jsm/postprocessing/GTAOPass.js +1 -1
  125. package/examples/jsm/postprocessing/OutlinePass.js +5 -5
  126. package/examples/jsm/postprocessing/SAOPass.js +1 -1
  127. package/examples/jsm/postprocessing/SSAOPass.js +1 -1
  128. package/examples/jsm/postprocessing/SSRPass.js +4 -2
  129. package/examples/jsm/postprocessing/SavePass.js +1 -1
  130. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  131. package/examples/jsm/postprocessing/UnrealBloomPass.js +30 -13
  132. package/examples/jsm/renderers/CSS2DRenderer.js +29 -5
  133. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  134. package/examples/jsm/shaders/ExposureShader.js +1 -1
  135. package/examples/jsm/shaders/FilmShader.js +2 -1
  136. package/examples/jsm/transpiler/AST.js +21 -2
  137. package/examples/jsm/transpiler/GLSLDecoder.js +498 -8
  138. package/examples/jsm/transpiler/TSLEncoder.js +82 -10
  139. package/examples/jsm/transpiler/WGSLEncoder.js +33 -4
  140. package/examples/jsm/tsl/WebGLNodesHandler.js +29 -39
  141. package/examples/jsm/tsl/display/AfterImageNode.js +2 -0
  142. package/examples/jsm/tsl/display/AnaglyphPassNode.js +3 -2
  143. package/examples/jsm/tsl/display/BilateralBlurNode.js +5 -2
  144. package/examples/jsm/tsl/display/BloomNode.js +55 -30
  145. package/examples/jsm/tsl/display/DenoiseNode.js +21 -1
  146. package/examples/jsm/tsl/display/DepthOfFieldNode.js +24 -6
  147. package/examples/jsm/tsl/display/DotScreenNode.js +11 -11
  148. package/examples/jsm/tsl/display/FSR1Node.js +8 -4
  149. package/examples/jsm/tsl/display/GTAONode.js +199 -86
  150. package/examples/jsm/tsl/display/GaussianBlurNode.js +65 -52
  151. package/examples/jsm/tsl/display/GodraysNode.js +5 -2
  152. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +2 -2
  153. package/examples/jsm/tsl/display/LensflareNode.js +5 -2
  154. package/examples/jsm/tsl/display/OITPassNode.js +352 -0
  155. package/examples/jsm/tsl/display/OutlineNode.js +2 -0
  156. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +3 -2
  157. package/examples/jsm/tsl/display/RGBShiftNode.js +9 -9
  158. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +7 -4
  159. package/examples/jsm/tsl/display/RetroPassNode.js +1 -1
  160. package/examples/jsm/tsl/display/SMAANode.js +22 -61
  161. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -4
  162. package/examples/jsm/tsl/display/SSAONode.js +436 -0
  163. package/examples/jsm/tsl/display/SSGINode.js +5 -2
  164. package/examples/jsm/tsl/display/SSRNode.js +7 -2
  165. package/examples/jsm/tsl/display/SSSNode.js +5 -2
  166. package/examples/jsm/tsl/display/SharpenNode.js +5 -4
  167. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -3
  168. package/examples/jsm/tsl/display/StereoPassNode.js +1 -3
  169. package/examples/jsm/tsl/display/TAAUNode.js +22 -125
  170. package/examples/jsm/tsl/display/TRAANode.js +16 -142
  171. package/examples/jsm/tsl/display/TemporalReprojectNode.js +21 -15
  172. package/examples/jsm/tsl/display/depthAwareBlur.js +63 -0
  173. package/examples/jsm/tsl/display/hashBlur.js +3 -2
  174. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +38 -27
  175. package/examples/jsm/tsl/lighting/LightProbeGridNode.js +136 -0
  176. package/examples/jsm/tsl/math/voronoiNoise.js +112 -0
  177. package/examples/jsm/tsl/shadows/TileShadowNode.js +4 -6
  178. package/examples/jsm/tsl/utils/Raymarching.js +5 -5
  179. package/examples/jsm/tsl/utils/SoftParticles.js +60 -0
  180. package/examples/jsm/tsl/utils/TAAUtils.js +195 -0
  181. package/examples/jsm/utils/BufferGeometryUtils.js +14 -14
  182. package/examples/jsm/utils/GaussianSplatUtils.js +229 -0
  183. package/examples/jsm/utils/WebGLTextureUtils.js +1 -1
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/WebGLXRFallback.js +2 -16
  186. package/examples/jsm/webxr/XRControllerModelFactory.js +16 -4
  187. package/package.json +9 -16
  188. package/src/Three.Core.js +2 -1
  189. package/src/Three.TSL.js +73 -43
  190. package/src/Three.WebGPU.Nodes.js +1 -0
  191. package/src/Three.WebGPU.js +1 -0
  192. package/src/animation/AnimationClip.js +15 -2
  193. package/src/animation/AnimationObjectGroup.js +18 -6
  194. package/src/animation/AnimationUtils.js +26 -0
  195. package/src/animation/KeyframeTrack.js +37 -0
  196. package/src/constants.js +23 -1
  197. package/src/core/BufferAttribute.js +3 -2
  198. package/src/core/BufferGeometry.js +1 -1
  199. package/src/core/InterleavedBuffer.js +5 -1
  200. package/src/core/Object3D.js +40 -12
  201. package/src/core/Raycaster.js +4 -0
  202. package/src/core/RenderTarget.js +99 -9
  203. package/src/core/RenderTarget3D.js +12 -8
  204. package/src/extras/Controls.js +0 -8
  205. package/src/extras/PMREMGenerator.js +99 -205
  206. package/src/geometries/TorusGeometry.js +1 -1
  207. package/src/helpers/ArrowHelper.js +2 -0
  208. package/src/helpers/AxesHelper.js +2 -0
  209. package/src/helpers/Box3Helper.js +2 -0
  210. package/src/helpers/BoxHelper.js +2 -0
  211. package/src/helpers/CameraHelper.js +2 -0
  212. package/src/helpers/DirectionalLightHelper.js +2 -0
  213. package/src/helpers/GridHelper.js +2 -0
  214. package/src/helpers/HemisphereLightHelper.js +2 -0
  215. package/src/helpers/PlaneHelper.js +2 -0
  216. package/src/helpers/PointLightHelper.js +2 -0
  217. package/src/helpers/PolarGridHelper.js +2 -0
  218. package/src/helpers/SkeletonHelper.js +2 -0
  219. package/src/helpers/SpotLightHelper.js +2 -0
  220. package/src/lights/Light.js +0 -10
  221. package/src/lights/LightShadow.js +43 -12
  222. package/src/lights/SpotLightShadow.js +18 -0
  223. package/src/loaders/BufferGeometryLoader.js +5 -0
  224. package/src/loaders/ImageBitmapLoader.js +3 -1
  225. package/src/loaders/ObjectLoader.js +8 -5
  226. package/src/materials/Material.js +80 -57
  227. package/src/materials/MeshPhysicalMaterial.js +32 -0
  228. package/src/materials/nodes/Line2NodeMaterial.js +17 -8
  229. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +42 -5
  230. package/src/materials/nodes/NodeMaterial.js +19 -13
  231. package/src/materials/nodes/PointsNodeMaterial.js +2 -1
  232. package/src/materials/nodes/manager/NodeMaterialObserver.js +282 -55
  233. package/src/math/Frustum.js +9 -0
  234. package/src/math/FrustumArray.js +1 -1
  235. package/src/math/MathUtils.js +5 -3
  236. package/src/math/Matrix4.js +2 -9
  237. package/src/math/Plane.js +30 -1
  238. package/src/math/Quaternion.js +0 -10
  239. package/src/math/Ray.js +95 -45
  240. package/src/math/Triangle.js +0 -2
  241. package/src/math/Vector3.js +2 -2
  242. package/src/math/Vector4.js +0 -4
  243. package/src/math/interpolants/BezierInterpolant.js +36 -23
  244. package/src/nodes/Nodes.js +2 -0
  245. package/src/nodes/TSL.js +11 -3
  246. package/src/nodes/accessors/Batch.js +85 -13
  247. package/src/nodes/accessors/BufferAttributeNode.js +1 -1
  248. package/src/nodes/accessors/BuiltinNode.js +1 -1
  249. package/src/nodes/accessors/Instance.js +19 -18
  250. package/src/nodes/accessors/MaterialNode.js +9 -0
  251. package/src/nodes/accessors/ModelNode.js +85 -9
  252. package/src/nodes/accessors/ReferenceBaseNode.js +1 -70
  253. package/src/nodes/accessors/ReferenceElementNode.js +72 -0
  254. package/src/nodes/accessors/ReferenceNode.js +1 -70
  255. package/src/nodes/accessors/Skinning.js +124 -12
  256. package/src/nodes/accessors/StorageTextureNode.js +7 -3
  257. package/src/nodes/accessors/Texture3DNode.js +1 -1
  258. package/src/nodes/accessors/TextureNode.js +51 -21
  259. package/src/nodes/accessors/TextureSizeNode.js +4 -2
  260. package/src/nodes/accessors/UniformArrayNode.js +30 -5
  261. package/src/nodes/code/CodeNode.js +1 -1
  262. package/src/nodes/code/FunctionNode.js +12 -2
  263. package/src/nodes/core/ArrayNode.js +2 -2
  264. package/src/nodes/core/ContextNode.js +57 -4
  265. package/src/nodes/core/IndexNode.js +69 -4
  266. package/src/nodes/core/InspectorNode.js +2 -2
  267. package/src/nodes/core/MRTNode.js +44 -2
  268. package/src/nodes/core/Node.js +6 -3
  269. package/src/nodes/core/NodeBuilder.js +65 -50
  270. package/src/nodes/core/NodeFrame.js +11 -3
  271. package/src/nodes/core/NodeUtils.js +88 -0
  272. package/src/nodes/core/PropertyNode.js +8 -0
  273. package/src/nodes/core/StackNode.js +0 -1
  274. package/src/nodes/core/StructNode.js +4 -3
  275. package/src/nodes/core/UniformGroupNode.js +3 -2
  276. package/src/nodes/core/UniformNode.js +26 -12
  277. package/src/nodes/core/VarNode.js +0 -1
  278. package/src/nodes/display/BumpMapNode.js +2 -2
  279. package/src/nodes/display/ColorAdjustment.js +1 -1
  280. package/src/nodes/display/PassNode.js +76 -15
  281. package/src/nodes/display/ScreenNode.js +22 -65
  282. package/src/nodes/fog/Fog.js +4 -4
  283. package/src/nodes/functions/BSDF/BRDF_GGX.js +6 -6
  284. package/src/nodes/functions/BSDF/BRDF_Sheen.js +1 -1
  285. package/src/nodes/functions/BSDF/DFGLUT.js +2 -1
  286. package/src/nodes/functions/BSDF/LTC.js +1 -1
  287. package/src/nodes/functions/PhongLightingModel.js +1 -1
  288. package/src/nodes/functions/PhysicalLightingModel.js +83 -25
  289. package/src/nodes/functions/ToonLightingModel.js +2 -2
  290. package/src/nodes/functions/material/getParallaxCorrectNormal.js +3 -3
  291. package/src/nodes/gpgpu/AtomicFunctionNode.js +64 -13
  292. package/src/nodes/gpgpu/BarrierNode.js +13 -4
  293. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  294. package/src/nodes/gpgpu/ComputeNode.js +20 -17
  295. package/src/nodes/gpgpu/SubgroupFunctionNode.js +165 -37
  296. package/src/nodes/gpgpu/WorkgroupInfoNode.js +44 -6
  297. package/src/nodes/lighting/EnvironmentNode.js +40 -4
  298. package/src/nodes/lighting/LightsNode.js +20 -4
  299. package/src/nodes/lighting/ShadowBaseNode.js +158 -1
  300. package/src/nodes/lighting/ShadowFilterNode.js +2 -106
  301. package/src/nodes/lighting/ShadowNode.js +22 -91
  302. package/src/nodes/materialx/{lib/mx_hsv.js → MaterialXColor.js} +3 -6
  303. package/src/nodes/materialx/{lib/mx_transform_color.js → MaterialXColorTransform.js} +3 -6
  304. package/src/nodes/materialx/MaterialXCore.js +37 -0
  305. package/src/nodes/materialx/MaterialXNodes.js +64 -72
  306. package/src/nodes/materialx/{lib/mx_noise.js → MaterialXNoise.js} +426 -197
  307. package/src/nodes/math/BitcountNode.js +24 -4
  308. package/src/nodes/math/MathNode.js +4 -4
  309. package/src/nodes/math/MathUtils.js +15 -4
  310. package/src/nodes/math/OperatorNode.js +2 -2
  311. package/src/nodes/math/PackFloatNode.js +29 -1
  312. package/src/nodes/math/Packed4x8IntegerNode.js +433 -0
  313. package/src/nodes/math/UnpackFloatNode.js +30 -2
  314. package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
  315. package/src/nodes/pmrem/PMREMNode.js +1 -1
  316. package/src/nodes/pmrem/PMREMUtils.js +31 -74
  317. package/src/nodes/shapes/Shapes.js +1 -1
  318. package/src/nodes/tsl/TSLCore.js +1 -31
  319. package/src/nodes/utils/EventNode.js +75 -0
  320. package/src/nodes/utils/LoopNode.js +54 -13
  321. package/src/nodes/utils/PostProcessingUtils.js +23 -2
  322. package/src/nodes/utils/RTTNode.js +97 -32
  323. package/src/nodes/utils/ReflectorNode.js +8 -4
  324. package/src/nodes/utils/RotateNode.js +85 -8
  325. package/src/nodes/utils/SpriteUtils.js +58 -23
  326. package/src/objects/BatchedMesh.js +6 -0
  327. package/src/objects/InstancedMesh.js +1 -1
  328. package/src/objects/LOD.js +1 -1
  329. package/src/objects/Line.js +12 -0
  330. package/src/objects/Mesh.js +12 -0
  331. package/src/objects/Points.js +12 -0
  332. package/src/objects/Sprite.js +12 -0
  333. package/src/renderers/WebGLRenderer.js +93 -27
  334. package/src/renderers/common/Animation.js +12 -2
  335. package/src/renderers/common/Backend.js +38 -10
  336. package/src/renderers/common/BindGroup.js +0 -1
  337. package/src/renderers/common/Bindings.js +50 -4
  338. package/src/renderers/common/BundleGroup.js +4 -0
  339. package/src/renderers/common/ClippingContext.js +11 -1
  340. package/src/renderers/common/Color4.js +9 -0
  341. package/src/renderers/common/Constants.js +0 -5
  342. package/src/renderers/common/DirectRenderPipeline.js +233 -0
  343. package/src/renderers/common/Geometries.js +24 -3
  344. package/src/renderers/common/Info.js +3 -3
  345. package/src/renderers/common/InspectorBase.js +37 -8
  346. package/src/renderers/common/Lighting.js +11 -4
  347. package/src/renderers/common/Pipelines.js +6 -4
  348. package/src/renderers/common/QuadMesh.js +16 -2
  349. package/src/renderers/common/RenderContext.js +8 -0
  350. package/src/renderers/common/RenderList.js +53 -19
  351. package/src/renderers/common/RenderLists.js +58 -11
  352. package/src/renderers/common/RenderObject.js +14 -0
  353. package/src/renderers/common/RenderObjects.js +14 -9
  354. package/src/renderers/common/RenderPipeline.js +52 -44
  355. package/src/renderers/common/Renderer.js +226 -55
  356. package/src/renderers/common/Storage3DTexture.js +16 -0
  357. package/src/renderers/common/Textures.js +3 -3
  358. package/src/renderers/common/XRManager.js +79 -72
  359. package/src/renderers/common/extras/PMREMGenerator.js +76 -144
  360. package/src/renderers/common/nodes/NodeManager.js +144 -6
  361. package/src/renderers/common/nodes/NodeStorageBuffer.js +3 -1
  362. package/src/renderers/common/nodes/NodeUniformBuffer.js +3 -1
  363. package/src/renderers/shaders/DFGLUTData.js +2 -1
  364. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +4 -2
  365. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +48 -0
  366. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +53 -4
  367. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +20 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +20 -0
  369. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
  370. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +61 -57
  371. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +82 -0
  372. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +9 -0
  373. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +8 -1
  374. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +15 -0
  375. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
  376. package/src/renderers/shaders/ShaderLib.js +1 -0
  377. package/src/renderers/shaders/UniformsLib.js +16 -0
  378. package/src/renderers/webgl/WebGLAnimation.js +2 -2
  379. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  380. package/src/renderers/webgl/WebGLLights.js +74 -4
  381. package/src/renderers/webgl/WebGLMaterials.js +6 -0
  382. package/src/renderers/webgl/WebGLOutput.js +36 -24
  383. package/src/renderers/webgl/WebGLProgram.js +3 -0
  384. package/src/renderers/webgl/WebGLPrograms.js +8 -0
  385. package/src/renderers/webgl/WebGLRenderLists.js +6 -10
  386. package/src/renderers/webgl/WebGLShadowMap.js +47 -44
  387. package/src/renderers/webgl/WebGLTextures.js +7 -7
  388. package/src/renderers/webgl-fallback/WebGLBackend.js +153 -45
  389. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +83 -29
  390. package/src/renderers/webgl-fallback/utils/WebGLState.js +163 -17
  391. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +32 -5
  392. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +11 -4
  393. package/src/renderers/webgpu/WebGPUBackend.js +513 -145
  394. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +99 -20
  395. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -1
  396. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -12
  397. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +24 -14
  398. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +80 -14
  399. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +62 -7
  400. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +9 -3
  401. package/src/renderers/webgpu/utils/WebGPUUtils.js +16 -4
  402. package/src/renderers/webxr/WebXRManager.js +25 -2
  403. package/src/scenes/Scene.js +3 -3
  404. package/src/textures/CompressedArrayTexture.js +16 -0
  405. package/src/textures/Data3DTexture.js +16 -0
  406. package/src/textures/DataArrayTexture.js +16 -0
  407. package/src/textures/DepthTexture.js +3 -3
  408. package/src/textures/Texture.js +3 -3
  409. package/src/textures/{Source.js → TextureSource.js} +39 -8
  410. package/src/utils.js +6 -79
  411. package/build/three.core.min.js +0 -6
  412. package/build/three.module.min.js +0 -6
  413. package/build/three.tsl.min.js +0 -6
  414. package/build/three.webgpu.min.js +0 -6
  415. package/build/three.webgpu.nodes.min.js +0 -6
  416. package/examples/jsm/libs/ecsy.module.js +0 -1792
  417. package/examples/jsm/loaders/LottieLoader.js +0 -130
  418. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +0 -52
@@ -95,6 +95,15 @@ class KeyframeTrack {
95
95
 
96
96
  }
97
97
 
98
+ if ( AnimationUtils.hasTangents( track.settings ) ) {
99
+
100
+ json.settings = {
101
+ inTangents: AnimationUtils.convertArray( track.settings.inTangents, Array ),
102
+ outTangents: AnimationUtils.convertArray( track.settings.outTangents, Array )
103
+ };
104
+
105
+ }
106
+
98
107
  }
99
108
 
100
109
  json.type = track.ValueTypeName; // mandatory
@@ -320,6 +329,13 @@ class KeyframeTrack {
320
329
 
321
330
  }
322
331
 
332
+ if ( AnimationUtils.hasTangents( this.settings ) ) {
333
+
334
+ scaleTangentTimes( this.settings.inTangents, timeScale );
335
+ scaleTangentTimes( this.settings.outTangents, timeScale );
336
+
337
+ }
338
+
323
339
  }
324
340
 
325
341
  return this;
@@ -595,12 +611,33 @@ class KeyframeTrack {
595
611
  // Interpolant argument to constructor is not saved, so copy the factory method directly.
596
612
  track.createInterpolant = this.createInterpolant;
597
613
 
614
+ if ( AnimationUtils.hasTangents( this.settings ) ) {
615
+
616
+ track.settings = {
617
+ inTangents: this.settings.inTangents.slice(),
618
+ outTangents: this.settings.outTangents.slice()
619
+ };
620
+
621
+ }
622
+
598
623
  return track;
599
624
 
600
625
  }
601
626
 
602
627
  }
603
628
 
629
+ function scaleTangentTimes( tangents, timeScale ) {
630
+
631
+ // tangents are [ time, value ] pairs, so only every second entry is a time
632
+
633
+ for ( let i = 0, n = tangents.length; i !== n; i += 2 ) {
634
+
635
+ tangents[ i ] *= timeScale;
636
+
637
+ }
638
+
639
+ }
640
+
604
641
  /**
605
642
  * The value type name.
606
643
  *
package/src/constants.js CHANGED
@@ -1,4 +1,4 @@
1
- export const REVISION = '185';
1
+ export const REVISION = '186';
2
2
 
3
3
  /**
4
4
  * Represents mouse buttons and interaction types in context of controls.
@@ -70,6 +70,7 @@ export const PCFShadowMap = 1;
70
70
  *
71
71
  * @type {number}
72
72
  * @constant
73
+ * @deprecated since r186. Use `PCFShadowMap` instead.
73
74
  */
74
75
  export const PCFSoftShadowMap = 2;
75
76
 
@@ -1709,6 +1710,18 @@ export const Compatibility = {
1709
1710
  TEXTURE_COMPARE: 'depthTextureCompare'
1710
1711
  };
1711
1712
 
1713
+ /**
1714
+ * Represents the refresh types of render objects.
1715
+ *
1716
+ * @type {ConstantsRenderObjectRefreshType}
1717
+ * @constant
1718
+ */
1719
+ export const RenderObjectRefreshType = {
1720
+ NONE: 0,
1721
+ SHARED: 1,
1722
+ FULL: 2
1723
+ };
1724
+
1712
1725
  /**
1713
1726
  * This type represents mouse buttons and interaction types in context of controls.
1714
1727
  *
@@ -1758,3 +1771,12 @@ export const Compatibility = {
1758
1771
  * @property {string} FIRST - Flat interpolation using the first vertex.
1759
1772
  * @property {string} EITHER - Flat interpolation using either vertex.
1760
1773
  */
1774
+
1775
+ /**
1776
+ * Represents the refresh types of render objects.
1777
+ *
1778
+ * @typedef {Object} ConstantsRenderObjectRefreshType
1779
+ * @property {number} NONE - No refresh required.
1780
+ * @property {number} SHARED - Only shared uniform buffers require an update.
1781
+ * @property {number} FULL - The render object requires a full refresh.
1782
+ */
@@ -670,8 +670,9 @@ class BufferAttribute extends EventDispatcher {
670
670
  normalized: this.normalized
671
671
  };
672
672
 
673
- if ( this.name !== '' ) data.name = this.name;
674
- if ( this.usage !== StaticDrawUsage ) data.usage = this.usage;
673
+ data.name = this.name;
674
+ data.usage = this.usage;
675
+ data.gpuType = this.gpuType;
675
676
 
676
677
  return data;
677
678
 
@@ -1241,7 +1241,7 @@ class BufferGeometry extends EventDispatcher {
1241
1241
 
1242
1242
  data.uuid = this.uuid;
1243
1243
  data.type = ( this.parameters !== undefined && this._transformed === true ) ? 'BufferGeometry' : this.type;
1244
- if ( this.name !== '' ) data.name = this.name;
1244
+ data.name = this.name;
1245
1245
  if ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;
1246
1246
 
1247
1247
  if ( this.parameters !== undefined && this._transformed !== true ) {
@@ -277,13 +277,17 @@ class InterleavedBuffer {
277
277
 
278
278
  //
279
279
 
280
- return {
280
+ const json = {
281
281
  uuid: this.uuid,
282
282
  buffer: this.array.buffer._uuid,
283
283
  type: this.array.constructor.name,
284
284
  stride: this.stride
285
285
  };
286
286
 
287
+ json.usage = this.usage;
288
+
289
+ return json;
290
+
287
291
  }
288
292
 
289
293
  }
@@ -1256,6 +1256,17 @@ class Object3D extends EventDispatcher {
1256
1256
  */
1257
1257
  raycast( /* raycaster, intersects */ ) {}
1258
1258
 
1259
+ /**
1260
+ * Abstract method to test whether this 3D object intersects the given frustum.
1261
+ * Renderable 3D objects such as {@link Mesh}, {@link Line} or {@link Points}
1262
+ * implement this method in order to use frustum culling.
1263
+ *
1264
+ * @abstract
1265
+ * @param {Frustum|FrustumArray} frustum - The frustum to test.
1266
+ * @return {boolean|undefined} Whether this 3D object intersects the given frustum or not.
1267
+ */
1268
+ intersectsFrustum( /* frustum */ ) {}
1269
+
1259
1270
  /**
1260
1271
  * Executes the callback on this 3D object and all descendants.
1261
1272
  *
@@ -1505,20 +1516,18 @@ class Object3D extends EventDispatcher {
1505
1516
  object.uuid = this.uuid;
1506
1517
  object.type = this.type;
1507
1518
 
1519
+ object.name = this.name;
1520
+ object.castShadow = this.castShadow;
1521
+ object.receiveShadow = this.receiveShadow;
1522
+ object.visible = this.visible;
1523
+ object.frustumCulled = this.frustumCulled;
1524
+ object.renderOrder = this.renderOrder;
1525
+ object.static = this.static;
1526
+ object.matrixAutoUpdate = this.matrixAutoUpdate;
1508
1527
  // WITH_GENESYS
1509
1528
  object.nodeId = this.nodeId;
1510
- // !WITH_GENESYS
1511
-
1512
- if ( this.name !== '' ) object.name = this.name;
1513
- if ( this.castShadow === true ) object.castShadow = true;
1514
- if ( this.receiveShadow === true ) object.receiveShadow = true;
1515
- if ( this.visible === false ) object.visible = false;
1516
- // WITH_GENESYS
1517
1529
  if ( this.selfHidden === true ) object.selfHidden = true;
1518
1530
  // !WITH_GENESYS
1519
- if ( this.frustumCulled === false ) object.frustumCulled = false;
1520
- if ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;
1521
- if ( this.static !== false ) object.static = this.static;
1522
1531
  if ( Object.keys( this.userData ).length > 0 ) object.userData = this.userData;
1523
1532
 
1524
1533
  object.layers = this.layers.mask;
@@ -1527,8 +1536,6 @@ class Object3D extends EventDispatcher {
1527
1536
 
1528
1537
  if ( this.pivot !== null ) object.pivot = this.pivot.toArray();
1529
1538
 
1530
- if ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;
1531
-
1532
1539
  if ( this.morphTargetDictionary !== undefined ) object.morphTargetDictionary = Object.assign( {}, this.morphTargetDictionary );
1533
1540
  if ( this.morphTargetInfluences !== undefined ) object.morphTargetInfluences = this.morphTargetInfluences.slice();
1534
1541
 
@@ -1850,6 +1857,27 @@ class Object3D extends EventDispatcher {
1850
1857
 
1851
1858
  }
1852
1859
 
1860
+ /**
1861
+ * Frees the GPU-related resources allocated by this instance. Call this
1862
+ * method whenever this instance is no longer used in your app.
1863
+ *
1864
+ * Geometries, materials and textures are potentially shared with other
1865
+ * 3D objects and must be disposed of separately.
1866
+ *
1867
+ * @fires Object3D#dispose
1868
+ */
1869
+ dispose() {
1870
+
1871
+ /**
1872
+ * Fires when the 3D object has been disposed of.
1873
+ *
1874
+ * @event Object3D#dispose
1875
+ * @type {Object}
1876
+ */
1877
+ this.dispatchEvent( { type: 'dispose' } );
1878
+
1879
+ }
1880
+
1853
1881
  }
1854
1882
 
1855
1883
  /**
@@ -185,6 +185,10 @@ class Raycaster {
185
185
  * be detected. To raycast against both faces of an object, you'll want to set {@link Material#side}
186
186
  * to `THREE.DoubleSide`.
187
187
  *
188
+ * Note that a ray hitting a triangle mesh exactly along an edge shared by two faces may be
189
+ * reported by both faces, resulting in two coincident intersections (identical point and
190
+ * distance) in the returned array.
191
+ *
188
192
  * @param {Object3D} object - The 3D object to check for intersection with the ray.
189
193
  * @param {boolean} [recursive=true] - If set to `true`, it also checks all descendants.
190
194
  * Otherwise it only checks intersection with the object.
@@ -2,7 +2,7 @@ import { EventDispatcher } from './EventDispatcher.js';
2
2
  import { Texture } from '../textures/Texture.js';
3
3
  import { LinearFilter } from '../constants.js';
4
4
  import { Vector4 } from '../math/Vector4.js';
5
- import { Source } from '../textures/Source.js';
5
+ import { TextureSource } from '../textures/TextureSource.js';
6
6
 
7
7
  /**
8
8
  * A render target is a buffer where the video card draws pixels for a scene
@@ -30,8 +30,12 @@ class RenderTarget extends EventDispatcher {
30
30
  * @property {string} [colorSpace=NoColorSpace] - The texture's color space.
31
31
  * @property {boolean} [depthBuffer=true] - Whether to allocate a depth buffer or not.
32
32
  * @property {boolean} [stencilBuffer=false] - Whether to allocate a stencil buffer or not.
33
- * @property {boolean} [resolveDepthBuffer=true] - Whether to resolve the depth buffer or not.
34
- * @property {boolean} [resolveStencilBuffer=true] - Whether to resolve the stencil buffer or not.
33
+ * @property {boolean} [resolveColorBuffer=true] - Whether to resolve the color buffer or not. Only relevant for multisampled render targets.
34
+ * @property {boolean} [resolveDepthBuffer=true] - Whether to resolve the depth buffer or not. Only relevant for multisampled render targets.
35
+ * @property {boolean} [resolveStencilBuffer=true] - Whether to resolve the stencil buffer or not. Only relevant for multisampled render targets.
36
+ * @property {boolean} [storeMultisampledColorBuffer=true] - Whether to store the multisampled color buffer or not. Setting to `false` saves memory bandwidth when the multisampled data are not needed after a render pass.
37
+ * @property {boolean} [storeMultisampledDepthBuffer=true] - Whether to store the multisampled depth buffer or not. Setting to `false` saves memory bandwidth when the multisampled data are not needed after a render pass.
38
+ * @property {boolean} [storeMultisampledStencilBuffer=true] - Whether to store the multisampled stencil buffer or not. Setting to `false` saves memory bandwidth when the multisampled data are not needed after a render pass.
35
39
  * @property {?Texture} [depthTexture=null] - Reference to a depth texture.
36
40
  * @property {number} [samples=0] - The MSAA samples count.
37
41
  * @property {number} [count=1] - Defines the number of color attachments . Must be at least `1`.
@@ -57,8 +61,12 @@ class RenderTarget extends EventDispatcher {
57
61
  minFilter: LinearFilter,
58
62
  depthBuffer: true,
59
63
  stencilBuffer: false,
64
+ resolveColorBuffer: true,
60
65
  resolveDepthBuffer: true,
61
66
  resolveStencilBuffer: true,
67
+ storeMultisampledColorBuffer: true,
68
+ storeMultisampledDepthBuffer: true,
69
+ storeMultisampledStencilBuffer: true,
62
70
  depthTexture: null,
63
71
  samples: 0,
64
72
  count: 1,
@@ -165,7 +173,28 @@ class RenderTarget extends EventDispatcher {
165
173
  this.stencilBuffer = options.stencilBuffer;
166
174
 
167
175
  /**
168
- * Whether to resolve the depth buffer or not.
176
+ * Whether to resolve the color buffer or not. When set to `false`, the color
177
+ * attachments do not receive the resolved (single-sampled) output of a render
178
+ * pass and the render target's textures are left untouched. The rendered
179
+ * content is then only accessible within the render pass itself.
180
+ *
181
+ * Only relevant for multisampled render targets.
182
+ *
183
+ * @type {boolean}
184
+ * @default true
185
+ */
186
+ this.resolveColorBuffer = options.resolveColorBuffer;
187
+
188
+ /**
189
+ * Whether to resolve the depth buffer or not. When set to `false`, the depth
190
+ * texture does not receive the resolved depth output of a render pass which
191
+ * saves memory bandwidth. Use this setting when the depth data of a render
192
+ * pass are not required afterwards.
193
+ *
194
+ * Only relevant for multisampled render targets in WebGL. WebGPU does not
195
+ * support depth resolves; sampling the depth texture of a multisampled render
196
+ * target accesses the multisampled data directly, see
197
+ * {@link RenderTarget#storeMultisampledDepthBuffer}.
169
198
  *
170
199
  * @type {boolean}
171
200
  * @default true
@@ -173,13 +202,54 @@ class RenderTarget extends EventDispatcher {
173
202
  this.resolveDepthBuffer = options.resolveDepthBuffer;
174
203
 
175
204
  /**
176
- * Whether to resolve the stencil buffer or not.
205
+ * Whether to resolve the stencil buffer or not. Analogous to
206
+ * {@link RenderTarget#resolveDepthBuffer} but for the stencil aspect.
177
207
  *
178
208
  * @type {boolean}
179
209
  * @default true
180
210
  */
181
211
  this.resolveStencilBuffer = options.resolveStencilBuffer;
182
212
 
213
+ /**
214
+ * Whether to store the multisampled color buffer or not. When set to `false`,
215
+ * the multisampled data are discarded at the end of a render pass, right after
216
+ * they have been resolved. This saves memory bandwidth, especially on tile-based
217
+ * GPUs, and is the recommended setting for render targets that are fully redrawn
218
+ * each frame and whose output is only accessed via the resolved textures (e.g.
219
+ * scene passes in post-processing chains).
220
+ *
221
+ * Must be kept `true` when the multisampled data are needed after the render
222
+ * pass ends, e.g. when rendering into the target without clearing or when the
223
+ * scene contains transmissive objects which require a mid-pass framebuffer copy.
224
+ *
225
+ * @type {boolean}
226
+ * @default true
227
+ */
228
+ this.storeMultisampledColorBuffer = options.storeMultisampledColorBuffer;
229
+
230
+ /**
231
+ * Whether to store the multisampled depth buffer or not. When set to `false`,
232
+ * the multisampled depth data are discarded at the end of a render pass which
233
+ * saves memory bandwidth.
234
+ *
235
+ * Must be kept `true` in WebGPU when the depth texture of a multisampled render
236
+ * target is sampled (e.g. by depth-based post-processing effects) since depth
237
+ * is read directly from the multisampled data.
238
+ *
239
+ * @type {boolean}
240
+ * @default true
241
+ */
242
+ this.storeMultisampledDepthBuffer = options.storeMultisampledDepthBuffer;
243
+
244
+ /**
245
+ * Whether to store the multisampled stencil buffer or not. Analogous to
246
+ * {@link RenderTarget#storeMultisampledDepthBuffer} but for the stencil aspect.
247
+ *
248
+ * @type {boolean}
249
+ * @default true
250
+ */
251
+ this.storeMultisampledStencilBuffer = options.storeMultisampledStencilBuffer;
252
+
183
253
  this._depthTexture = null;
184
254
  this.depthTexture = options.depthTexture;
185
255
 
@@ -264,8 +334,8 @@ class RenderTarget extends EventDispatcher {
264
334
 
265
335
  set depthTexture( current ) {
266
336
 
267
- if ( this._depthTexture !== null ) this._depthTexture.renderTarget = null;
268
- if ( current !== null ) current.renderTarget = this;
337
+ if ( this._depthTexture !== null && this._depthTexture.renderTarget === this ) this._depthTexture.renderTarget = null;
338
+ if ( current !== null && current.renderTarget === null ) current.renderTarget = this;
269
339
 
270
340
  this._depthTexture = current;
271
341
 
@@ -368,17 +438,37 @@ class RenderTarget extends EventDispatcher {
368
438
  // ensure image object is not shared, see #20328
369
439
 
370
440
  const image = Object.assign( {}, source.textures[ i ].image );
371
- this.textures[ i ].source = new Source( image );
441
+ this.textures[ i ].source = new TextureSource( image );
372
442
 
373
443
  }
374
444
 
375
445
  this.depthBuffer = source.depthBuffer;
376
446
  this.stencilBuffer = source.stencilBuffer;
377
447
 
448
+ this.resolveColorBuffer = source.resolveColorBuffer;
378
449
  this.resolveDepthBuffer = source.resolveDepthBuffer;
379
450
  this.resolveStencilBuffer = source.resolveStencilBuffer;
380
451
 
381
- if ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone();
452
+ this.storeMultisampledColorBuffer = source.storeMultisampledColorBuffer;
453
+ this.storeMultisampledDepthBuffer = source.storeMultisampledDepthBuffer;
454
+ this.storeMultisampledStencilBuffer = source.storeMultisampledStencilBuffer;
455
+
456
+ if ( source.depthTexture !== null ) {
457
+
458
+ if ( source.depthTexture.renderTarget === source ) {
459
+
460
+ const depthTexture = source.depthTexture.clone();
461
+ depthTexture.renderTarget = null;
462
+
463
+ this.depthTexture = depthTexture;
464
+
465
+ } else {
466
+
467
+ this.depthTexture = source.depthTexture;
468
+
469
+ }
470
+
471
+ }
382
472
 
383
473
  this.samples = source.samples;
384
474
  this.multiview = source.multiview;
@@ -31,15 +31,19 @@ class RenderTarget3D extends RenderTarget {
31
31
 
32
32
  this.depth = depth;
33
33
 
34
- /**
35
- * Overwritten with a different texture type.
36
- *
37
- * @type {Data3DTexture}
38
- */
39
- this.texture = new Data3DTexture( null, width, height, depth );
40
- this._setTextureOptions( options );
34
+ // overwrite attachments with 3D textures
35
+
36
+ for ( let i = 0; i < this.textures.length; i ++ ) {
41
37
 
42
- this.texture.isRenderTargetTexture = true;
38
+ const texture = new Data3DTexture( null, width, height, depth );
39
+ texture.isRenderTargetTexture = true;
40
+ texture.renderTarget = this;
41
+
42
+ this.textures[ i ] = texture;
43
+
44
+ }
45
+
46
+ this._setTextureOptions( options );
43
47
 
44
48
  }
45
49
 
@@ -1,5 +1,4 @@
1
1
  import { EventDispatcher } from '../core/EventDispatcher.js';
2
- import { warn } from '../utils.js';
3
2
 
4
3
  /**
5
4
  * Abstract base class for controls.
@@ -83,13 +82,6 @@ class Controls extends EventDispatcher {
83
82
  */
84
83
  connect( element ) {
85
84
 
86
- if ( element === undefined ) {
87
-
88
- warn( 'Controls: connect() now requires an element.' ); // @deprecated, the warning can be removed with r185
89
- return;
90
-
91
- }
92
-
93
85
  if ( this.domElement !== null ) this.disconnect();
94
86
 
95
87
  this.domElement = element;