@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
@@ -0,0 +1,233 @@
1
+ import { output, renderOutput, uniform } from '../../nodes/TSL.js';
2
+ import { ColorManagement } from '../../math/ColorManagement.js';
3
+ import { NoToneMapping } from '../../constants.js';
4
+ import RenderPipeline from './RenderPipeline.js';
5
+
6
+ /**
7
+ * An alternative render pipeline that applies output processing directly in
8
+ * material shaders. This avoids the intermediate framebuffer and output pass
9
+ * used by {@link Renderer}, but changes blending and is not compatible with
10
+ * materials that sample the framebuffer, such as transmissive materials.
11
+ *
12
+ * ```js
13
+ * const renderPipeline = new DirectRenderPipeline( renderer );
14
+ * renderPipeline.render( scene, camera );
15
+ * ```
16
+ *
17
+ * Note: This module can only be used with `WebGPURenderer`.
18
+ *
19
+ * @augments RenderPipeline
20
+ */
21
+ class DirectRenderPipeline extends RenderPipeline {
22
+
23
+ /**
24
+ * Constructs a direct render pipeline.
25
+ *
26
+ * @param {Renderer} renderer - A reference to the renderer.
27
+ * @param {Node<vec4>} outputNode - An optional output node.
28
+ */
29
+ constructor( renderer, outputNode = output ) {
30
+
31
+ super( renderer, outputNode );
32
+
33
+ /**
34
+ * This flag can be used for type testing.
35
+ *
36
+ * @type {boolean}
37
+ * @readonly
38
+ * @default true
39
+ */
40
+ this.isDirectRenderPipeline = true;
41
+
42
+ /**
43
+ * The context node used to apply output processing in material shaders.
44
+ *
45
+ * @private
46
+ * @type {?ContextNode}
47
+ * @default null
48
+ */
49
+ this._contextNode = null;
50
+
51
+ /**
52
+ * The renderer context node wrapped by this pipeline.
53
+ *
54
+ * @private
55
+ * @type {?ContextNode}
56
+ * @default null
57
+ */
58
+ this._rendererContextNode = null;
59
+
60
+ /**
61
+ * Cached node representations of solid scene backgrounds.
62
+ *
63
+ * @private
64
+ * @type {WeakMap<Color, UniformNode>}
65
+ */
66
+ this._backgroundNodes = new WeakMap();
67
+
68
+ }
69
+
70
+ /**
71
+ * Renders the scene with output processing applied directly in material shaders.
72
+ *
73
+ * @param {Object3D} scene - The scene or object to render.
74
+ * @param {Camera} camera - The camera.
75
+ */
76
+ render( scene, camera ) {
77
+
78
+ const renderer = this.renderer;
79
+
80
+ this._update();
81
+
82
+ const backgroundNode = this._getBackgroundNode( scene );
83
+ const currentBackgroundNode = backgroundNode !== null ? scene.backgroundNode : null;
84
+ const currentContextNode = renderer.contextNode;
85
+ const outputRenderTarget = renderer.getOutputRenderTarget();
86
+ const useDirectXRRenderTarget = outputRenderTarget !== null && renderer.xr.isPresenting === true &&
87
+ renderer.backend.isWebGPUBackend === true && renderer.isOutputTarget === true;
88
+
89
+ let samples;
90
+ let depthBuffer;
91
+ let toneMapping;
92
+ let outputColorSpace;
93
+
94
+ if ( backgroundNode !== null ) scene.backgroundNode = backgroundNode;
95
+
96
+ renderer.contextNode = this._contextNode;
97
+
98
+ if ( useDirectXRRenderTarget ) {
99
+
100
+ samples = outputRenderTarget.samples;
101
+ depthBuffer = outputRenderTarget.depthBuffer;
102
+
103
+ outputRenderTarget.samples = renderer.samples;
104
+ outputRenderTarget.depthBuffer = true;
105
+
106
+ }
107
+
108
+ try {
109
+
110
+ for ( const callback of this._contextData.onBeforePipelineCallbacks ) callback();
111
+
112
+ toneMapping = renderer.toneMapping;
113
+ outputColorSpace = renderer.outputColorSpace;
114
+
115
+ renderer.toneMapping = NoToneMapping;
116
+ renderer.outputColorSpace = ColorManagement.workingColorSpace;
117
+
118
+ if ( renderer.xr.enabled ) {
119
+
120
+ renderer.xr.renderLayers();
121
+
122
+ }
123
+
124
+ renderer.render( scene, camera );
125
+
126
+ } finally {
127
+
128
+ if ( toneMapping !== undefined ) renderer.toneMapping = toneMapping;
129
+ if ( outputColorSpace !== undefined ) renderer.outputColorSpace = outputColorSpace;
130
+
131
+ if ( backgroundNode !== null && scene.backgroundNode === backgroundNode ) scene.backgroundNode = currentBackgroundNode;
132
+
133
+ if ( renderer.contextNode === this._contextNode ) renderer.contextNode = currentContextNode;
134
+
135
+ if ( useDirectXRRenderTarget ) {
136
+
137
+ outputRenderTarget.samples = samples;
138
+ outputRenderTarget.depthBuffer = depthBuffer;
139
+
140
+ }
141
+
142
+ for ( const callback of this._contextData.onAfterPipelineCallbacks ) callback();
143
+
144
+ }
145
+
146
+ }
147
+
148
+ /**
149
+ * Returns a node representation of a solid scene background so it receives
150
+ * the same inline output processing as material fragments.
151
+ *
152
+ * @private
153
+ * @param {Object3D} scene - The scene or object to render.
154
+ * @return {?UniformNode} The background node.
155
+ */
156
+ _getBackgroundNode( scene ) {
157
+
158
+ if ( scene.isScene !== true || scene.backgroundNode != null || scene.background?.isColor !== true ) return null;
159
+
160
+ const environmentBlendMode = this.renderer.xr.getEnvironmentBlendMode();
161
+
162
+ if ( environmentBlendMode === 'additive' || environmentBlendMode === 'alpha-blend' ) return null;
163
+
164
+ let backgroundNode = this._backgroundNodes.get( scene.background );
165
+
166
+ if ( backgroundNode === undefined ) {
167
+
168
+ backgroundNode = uniform( scene.background );
169
+ this._backgroundNodes.set( scene.background, backgroundNode );
170
+
171
+ }
172
+
173
+ return backgroundNode;
174
+
175
+ }
176
+
177
+ /**
178
+ * Updates the state of the module.
179
+ *
180
+ * @private
181
+ */
182
+ _update() {
183
+
184
+ if ( this._rendererContextNode !== this.renderer.contextNode ) {
185
+
186
+ this._rendererContextNode = this.renderer.contextNode;
187
+ this.needsUpdate = true;
188
+
189
+ }
190
+
191
+ super._update();
192
+
193
+ }
194
+
195
+ /**
196
+ * Updates the context used to process material output directly.
197
+ *
198
+ * @private
199
+ */
200
+ _updateContext() {
201
+
202
+ super._updateContext();
203
+
204
+ const pipelineOutputNode = this.outputNode;
205
+ const toneMapping = this._toneMapping;
206
+ const outputColorSpace = this._outputColorSpace;
207
+ const outputColorTransform = this.outputColorTransform;
208
+
209
+ this._contextNode = this._rendererContextNode.context( {
210
+
211
+ ...this._contextData,
212
+
213
+ getOutput: ( materialOutputNode, builder ) => {
214
+
215
+ const renderer = builder.renderer;
216
+ const renderTarget = renderer.getRenderTarget();
217
+
218
+ if ( renderer.isOutputTarget === false && renderTarget?._hasExternalTextures !== true ) return materialOutputNode;
219
+
220
+ output.assign( materialOutputNode );
221
+
222
+ return outputColorTransform === true ?
223
+ renderOutput( pipelineOutputNode, toneMapping, outputColorSpace ) :
224
+ pipelineOutputNode;
225
+
226
+ }
227
+ } );
228
+
229
+ }
230
+
231
+ }
232
+
233
+ export default DirectRenderPipeline;
@@ -186,8 +186,9 @@ class Geometries extends DataMap {
186
186
 
187
187
  this.info.memory.geometries --;
188
188
 
189
+ // index
190
+
189
191
  const index = geometry.index;
190
- const geometryAttributes = renderObject.getAttributes();
191
192
 
192
193
  if ( index !== null ) {
193
194
 
@@ -195,12 +196,16 @@ class Geometries extends DataMap {
195
196
 
196
197
  }
197
198
 
198
- for ( const geometryAttribute of geometryAttributes ) {
199
+ // geometry attributes
200
+
201
+ for ( const attribute of Object.values( geometry.attributes ) ) {
199
202
 
200
- this.attributes.delete( geometryAttribute );
203
+ this.attributes.delete( attribute );
201
204
 
202
205
  }
203
206
 
207
+ // wireframe attributes
208
+
204
209
  const wireframeAttribute = this.wireframes.get( geometry );
205
210
 
206
211
  if ( wireframeAttribute !== undefined ) {
@@ -209,6 +214,22 @@ class Geometries extends DataMap {
209
214
 
210
215
  }
211
216
 
217
+ // node attributes (TODO: Remove this bit once we support BufferAttribute.dispose())
218
+
219
+ const currentAttributes = new Set( Object.values( renderObject.geometry.attributes ) );
220
+
221
+ for ( const attribute of renderObject.getAttributes() ) {
222
+
223
+ if ( currentAttributes.has( attribute ) === false ) {
224
+
225
+ this.attributes.delete( attribute );
226
+
227
+ }
228
+
229
+ }
230
+
231
+ //
232
+
212
233
  geometry.removeEventListener( 'dispose', onDispose );
213
234
 
214
235
  this._geometryDisposeListeners.delete( geometry );
@@ -139,10 +139,10 @@ class Info {
139
139
  /**
140
140
  * Map for storing calculated byte sizes of tracked objects.
141
141
  *
142
- * @type {Map<Object, number>}
142
+ * @type {WeakMap<Object, number>}
143
143
  * @private
144
144
  */
145
- this.memoryMap = new Map();
145
+ this.memoryMap = new WeakMap();
146
146
 
147
147
  }
148
148
 
@@ -218,7 +218,7 @@ class Info {
218
218
 
219
219
  }
220
220
 
221
- this.memoryMap.clear();
221
+ this.memoryMap = new WeakMap();
222
222
 
223
223
  }
224
224
 
@@ -3,7 +3,6 @@ import { EventDispatcher } from '../../core/EventDispatcher.js';
3
3
  /**
4
4
  * InspectorBase is the base class for all inspectors.
5
5
  *
6
- * @class InspectorBase
7
6
  * @augments EventDispatcher
8
7
  */
9
8
  class InspectorBase extends EventDispatcher {
@@ -30,6 +29,22 @@ class InspectorBase extends EventDispatcher {
30
29
  */
31
30
  this.currentFrame = null;
32
31
 
32
+ /**
33
+ * Indicates whether the inspector is running.
34
+ *
35
+ * @type {boolean}
36
+ * @default false
37
+ */
38
+ this.isRunning = false;
39
+
40
+ /**
41
+ * Indicates whether the inspector is enabled.
42
+ *
43
+ * @type {boolean}
44
+ * @default true
45
+ */
46
+ this.enabled = true;
47
+
33
48
  }
34
49
 
35
50
  /**
@@ -68,20 +83,23 @@ class InspectorBase extends EventDispatcher {
68
83
 
69
84
  }
70
85
 
71
- /**
72
- * Initializes the inspector.
73
- */
74
- init() { }
75
-
76
86
  /**
77
87
  * Called when a frame begins.
78
88
  */
79
- begin() { }
89
+ begin() {
90
+
91
+ this.isRunning = true;
92
+
93
+ }
80
94
 
81
95
  /**
82
96
  * Called when a frame ends.
83
97
  */
84
- finish() { }
98
+ finish() {
99
+
100
+ this.isRunning = false;
101
+
102
+ }
85
103
 
86
104
  /**
87
105
  * Inspects a node.
@@ -146,6 +164,17 @@ class InspectorBase extends EventDispatcher {
146
164
  */
147
165
  copyFramebufferToTexture( /*framebufferTexture*/ ) { }
148
166
 
167
+ /**
168
+ * Frees all internal resources of the inspector.
169
+ */
170
+ dispose() {
171
+
172
+ if ( this.isRunning === true ) this.finish();
173
+
174
+ this.dispatchEvent( { type: 'dispose' } );
175
+
176
+ }
177
+
149
178
  }
150
179
 
151
180
  export default InspectorBase;
@@ -6,11 +6,10 @@ import {
6
6
  } from '../../nodes/Nodes.js';
7
7
 
8
8
  const _defaultLights = /*@__PURE__*/ new LightsNode();
9
- const _weakMap = /*@__PURE__*/ new WeakMap();
10
9
 
11
10
  /**
12
11
  * This renderer module manages the lights nodes which are unique
13
- * per scene and camera combination.
12
+ * per scene + camera + lighting combination.
14
13
  *
15
14
  * The lights node itself is later configured in the render list
16
15
  * with the actual lights from the scene.
@@ -40,6 +39,14 @@ class Lighting {
40
39
  */
41
40
  this._cache = [];
42
41
 
42
+ /**
43
+ * A map of lights nodes per scene.
44
+ *
45
+ * @private
46
+ * @type {WeakMap<Scene, LightsNode>}
47
+ */
48
+ this._lightsNodeMap = new WeakMap();
49
+
43
50
  }
44
51
 
45
52
  /**
@@ -81,12 +88,12 @@ class Lighting {
81
88
  // Ignore renderable objects, e.g: Mesh, Sprite, etc.
82
89
  if ( scene.isScene !== true && scene.isGroup !== true ) return _defaultLights;
83
90
 
84
- let node = _weakMap.get( scene );
91
+ let node = this._lightsNodeMap.get( scene );
85
92
 
86
93
  if ( node === undefined ) {
87
94
 
88
95
  node = this.createNode();
89
- _weakMap.set( scene, node );
96
+ this._lightsNodeMap.set( scene, node );
90
97
 
91
98
  }
92
99
 
@@ -81,9 +81,10 @@ class Pipelines extends DataMap {
81
81
  *
82
82
  * @param {Node} computeNode - The compute node.
83
83
  * @param {Array<BindGroup>} bindings - The bindings.
84
+ * @param {?Array<Promise>} [promises=null] - An array of compilation promises which is only relevant in context of `Renderer.compileComputeAsync()`.
84
85
  * @return {ComputePipeline} The compute pipeline.
85
86
  */
86
- getForCompute( computeNode, bindings ) {
87
+ getForCompute( computeNode, bindings, promises = null ) {
87
88
 
88
89
  const { backend } = this;
89
90
 
@@ -130,7 +131,7 @@ class Pipelines extends DataMap {
130
131
 
131
132
  if ( previousPipeline && previousPipeline.usedTimes === 0 ) this._releasePipeline( previousPipeline );
132
133
 
133
- pipeline = this._getComputePipeline( computeNode, stageCompute, cacheKey, bindings );
134
+ pipeline = this._getComputePipeline( computeNode, stageCompute, cacheKey, bindings, promises );
134
135
 
135
136
  }
136
137
 
@@ -342,9 +343,10 @@ class Pipelines extends DataMap {
342
343
  * @param {ProgrammableStage} stageCompute - The programmable stage representing the compute shader.
343
344
  * @param {string} cacheKey - The cache key.
344
345
  * @param {Array<BindGroup>} bindings - The bindings.
346
+ * @param {?Array<Promise>} promises - An array of compilation promises which is only relevant in context of `Renderer.compileComputeAsync()`.
345
347
  * @return {ComputePipeline} The compute pipeline.
346
348
  */
347
- _getComputePipeline( computeNode, stageCompute, cacheKey, bindings ) {
349
+ _getComputePipeline( computeNode, stageCompute, cacheKey, bindings, promises ) {
348
350
 
349
351
  // check for existing pipeline
350
352
 
@@ -358,7 +360,7 @@ class Pipelines extends DataMap {
358
360
 
359
361
  this.caches.set( cacheKey, pipeline );
360
362
 
361
- this.backend.createComputePipeline( pipeline, bindings );
363
+ this.backend.createComputePipeline( pipeline, bindings, promises );
362
364
 
363
365
  }
364
366
 
@@ -2,6 +2,8 @@ import { BufferGeometry } from '../../core/BufferGeometry.js';
2
2
  import { Float32BufferAttribute } from '../../core/BufferAttribute.js';
3
3
  import { Mesh } from '../../objects/Mesh.js';
4
4
  import { OrthographicCamera } from '../../cameras/OrthographicCamera.js';
5
+ import { vec4, array } from '../../nodes/tsl/TSLBase.js';
6
+ import { vertexIndex } from '../../nodes/core/IndexNode.js';
5
7
  import { warnOnce } from '../../utils.js';
6
8
 
7
9
  const _camera = /*@__PURE__*/ new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
@@ -36,6 +38,12 @@ class QuadGeometry extends BufferGeometry {
36
38
 
37
39
  const _geometry = /*@__PURE__*/ new QuadGeometry();
38
40
 
41
+ const _vertexNode = /*@__PURE__*/ vec4(
42
+ array( [ - 1.0, - 1.0, 3.0 ] ).element( vertexIndex ),
43
+ array( [ 3.0, - 1.0, - 1.0 ] ).element( vertexIndex ),
44
+ 0.0,
45
+ 1.0
46
+ );
39
47
 
40
48
  /**
41
49
  * This module is a helper for passes which need to render a full
@@ -53,9 +61,9 @@ class QuadMesh extends Mesh {
53
61
  /**
54
62
  * Constructs a new quad mesh.
55
63
  *
56
- * @param {?Material} [material=null] - The material to render the quad mesh with.
64
+ * @param {NodeMaterial} material - The material to render the quad mesh with.
57
65
  */
58
- constructor( material = null ) {
66
+ constructor( material ) {
59
67
 
60
68
  super( _geometry, material );
61
69
 
@@ -103,8 +111,14 @@ class QuadMesh extends Mesh {
103
111
  */
104
112
  render( renderer ) {
105
113
 
114
+ const previousVertexNode = this.material.vertexNode;
115
+
116
+ this.material.vertexNode = _vertexNode;
117
+
106
118
  renderer.render( this, _camera );
107
119
 
120
+ this.material.vertexNode = previousVertexNode;
121
+
108
122
  }
109
123
 
110
124
  }
@@ -240,6 +240,14 @@ class RenderContext {
240
240
  this.gpuProfilerLabel = null;
241
241
  // !WITH_GENESYS
242
242
 
243
+ /**
244
+ * Whether a fullscreen pass is rendered or not.
245
+ *
246
+ * @type {boolean}
247
+ * @default false
248
+ */
249
+ this.fullscreenPass = false;
250
+
243
251
  /**
244
252
  * This flag can be used for type testing.
245
253
  *
@@ -201,6 +201,14 @@ class RenderList {
201
201
  */
202
202
  this.occlusionQueryCount = 0;
203
203
 
204
+ /**
205
+ * The ID of the frame the render list was last used in.
206
+ *
207
+ * @type {number}
208
+ * @default -1
209
+ */
210
+ this.frameId = - 1;
211
+
204
212
  /**
205
213
  * The last object that was counted for occlusion query testing. Used to
206
214
  * avoid counting an object more than once when it produces multiple render
@@ -312,6 +320,10 @@ class RenderList {
312
320
  */
313
321
  push( object, geometry, material, groupOrder, z, group, clippingContext ) {
314
322
 
323
+ // with a reversed depth buffer the projected z is inverted
324
+
325
+ if ( this.camera.reversedDepth === true ) z = - z;
326
+
315
327
  const renderItem = this.getNextRenderItem( object, geometry, material, groupOrder, z, group, clippingContext );
316
328
 
317
329
  if ( object.occlusionTest === true && this._lastOcclusionObject !== object ) {
@@ -409,22 +421,13 @@ class RenderList {
409
421
  *
410
422
  * @param {?function(any, any): number} customOpaqueSort - A custom sort function for opaque objects.
411
423
  * @param {?function(any, any): number} customTransparentSort - A custom sort function for transparent objects.
412
- * @param {boolean} reversedDepth - Whether a reversed depth buffer is used or not.
413
424
  */
414
- sort( customOpaqueSort, customTransparentSort, reversedDepth ) {
425
+ sort( customOpaqueSort, customTransparentSort ) {
415
426
 
416
427
  if ( this.opaque.length > 1 ) this.opaque.sort( customOpaqueSort || painterSortStable );
417
428
  if ( this.transparentDoublePass.length > 1 ) this.transparentDoublePass.sort( customTransparentSort || reversePainterSortStable );
418
429
  if ( this.transparent.length > 1 ) this.transparent.sort( customTransparentSort || reversePainterSortStable );
419
430
 
420
- if ( reversedDepth ) {
421
-
422
- this.opaque.reverse();
423
- this.transparentDoublePass.reverse();
424
- this.transparent.reverse();
425
-
426
- }
427
-
428
431
  }
429
432
 
430
433
  /**
@@ -449,15 +452,7 @@ class RenderList {
449
452
 
450
453
  if ( renderItem.id === null ) break;
451
454
 
452
- renderItem.id = null;
453
- renderItem.object = null;
454
- renderItem.geometry = null;
455
- renderItem.material = null;
456
- renderItem.groupOrder = null;
457
- renderItem.renderOrder = null;
458
- renderItem.z = null;
459
- renderItem.group = null;
460
- renderItem.clippingContext = null;
455
+ resetRenderItem( renderItem );
461
456
 
462
457
  }
463
458
 
@@ -465,6 +460,45 @@ class RenderList {
465
460
 
466
461
  }
467
462
 
463
+ /**
464
+ * This method is called when the render list has become inactive.
465
+ */
466
+ clear() {
467
+
468
+ // Clear all references from the render items so scene objects
469
+ // are not retained when the render list is not used anymore.
470
+
471
+ for ( let i = 0, il = this.renderItems.length; i < il; i ++ ) {
472
+
473
+ const renderItem = this.renderItems[ i ];
474
+
475
+ if ( renderItem.id === null ) break;
476
+
477
+ resetRenderItem( renderItem );
478
+
479
+ }
480
+
481
+ this.opaque.length = 0;
482
+ this.transparentDoublePass.length = 0;
483
+ this.transparent.length = 0;
484
+ this.bundles.length = 0;
485
+
486
+ }
487
+
488
+ }
489
+
490
+ function resetRenderItem( renderItem ) {
491
+
492
+ renderItem.id = null;
493
+ renderItem.object = null;
494
+ renderItem.geometry = null;
495
+ renderItem.material = null;
496
+ renderItem.groupOrder = null;
497
+ renderItem.renderOrder = null;
498
+ renderItem.z = null;
499
+ renderItem.group = null;
500
+ renderItem.clippingContext = null;
501
+
468
502
  }
469
503
 
470
504
  export default RenderList;