super-three 0.181.0 → 0.184.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 (539) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +13152 -11354
  4. package/build/three.core.js +12319 -11539
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1808 -781
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +27 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +10523 -6263
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +10484 -6262
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +11 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +7 -4
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +58 -54
  19. package/examples/jsm/controls/FlyControls.js +4 -0
  20. package/examples/jsm/controls/MapControls.js +55 -1
  21. package/examples/jsm/controls/OrbitControls.js +111 -8
  22. package/examples/jsm/controls/TrackballControls.js +8 -8
  23. package/examples/jsm/controls/TransformControls.js +34 -2
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  26. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  27. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  28. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  29. package/examples/jsm/exporters/EXRExporter.js +1 -1
  30. package/examples/jsm/exporters/GLTFExporter.js +152 -9
  31. package/examples/jsm/exporters/USDZExporter.js +22 -3
  32. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  33. package/examples/jsm/geometries/TextGeometry.js +18 -0
  34. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  36. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  37. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  38. package/examples/jsm/helpers/ViewHelper.js +67 -8
  39. package/examples/jsm/inspector/Extension.js +13 -0
  40. package/examples/jsm/inspector/Inspector.js +203 -88
  41. package/examples/jsm/inspector/RendererInspector.js +14 -4
  42. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  43. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  44. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  45. package/examples/jsm/inspector/tabs/Console.js +41 -7
  46. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  47. package/examples/jsm/inspector/tabs/Parameters.js +51 -3
  48. package/examples/jsm/inspector/tabs/Performance.js +4 -4
  49. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  50. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  51. package/examples/jsm/inspector/tabs/Viewer.js +107 -5
  52. package/examples/jsm/inspector/ui/Graph.js +2 -2
  53. package/examples/jsm/inspector/ui/List.js +1 -1
  54. package/examples/jsm/inspector/ui/Profiler.js +1936 -34
  55. package/examples/jsm/inspector/ui/Style.js +1044 -31
  56. package/examples/jsm/inspector/ui/Tab.js +222 -3
  57. package/examples/jsm/inspector/ui/Values.js +55 -2
  58. package/examples/jsm/inspector/ui/utils.js +13 -0
  59. package/examples/jsm/interaction/InteractionManager.js +226 -0
  60. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  61. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  62. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  63. package/examples/jsm/lines/LineMaterial.js +7 -1
  64. package/examples/jsm/loaders/3DMLoader.js +5 -4
  65. package/examples/jsm/loaders/3MFLoader.js +2 -2
  66. package/examples/jsm/loaders/AMFLoader.js +2 -2
  67. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  68. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  69. package/examples/jsm/loaders/EXRLoader.js +687 -48
  70. package/examples/jsm/loaders/FBXLoader.js +235 -37
  71. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  72. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  73. package/examples/jsm/loaders/HDRLoader.js +1 -2
  74. package/examples/jsm/loaders/KMZLoader.js +5 -5
  75. package/examples/jsm/loaders/KTX2Loader.js +27 -5
  76. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  77. package/examples/jsm/loaders/LWOLoader.js +7 -39
  78. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  79. package/examples/jsm/loaders/PCDLoader.js +4 -2
  80. package/examples/jsm/loaders/SVGLoader.js +2 -2
  81. package/examples/jsm/loaders/TDSLoader.js +0 -2
  82. package/examples/jsm/loaders/TGALoader.js +0 -2
  83. package/examples/jsm/loaders/USDLoader.js +100 -40
  84. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  85. package/examples/jsm/loaders/VOXLoader.js +660 -117
  86. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  87. package/examples/jsm/loaders/VTKLoader.js +42 -25
  88. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  89. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  90. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  91. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  92. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  93. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  94. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  95. package/examples/jsm/math/Octree.js +131 -1
  96. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  97. package/examples/jsm/misc/RollerCoaster.js +42 -4
  98. package/examples/jsm/misc/Volume.js +0 -1
  99. package/examples/jsm/misc/VolumeSlice.js +0 -1
  100. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  101. package/examples/jsm/objects/LensflareMesh.js +1 -1
  102. package/examples/jsm/objects/Reflector.js +73 -25
  103. package/examples/jsm/objects/Sky.js +90 -6
  104. package/examples/jsm/objects/SkyMesh.js +150 -16
  105. package/examples/jsm/objects/Water.js +4 -3
  106. package/examples/jsm/objects/Water2.js +5 -3
  107. package/examples/jsm/objects/WaterMesh.js +5 -7
  108. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  109. package/examples/jsm/physics/JoltPhysics.js +10 -6
  110. package/examples/jsm/physics/RapierPhysics.js +9 -5
  111. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  112. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  113. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  114. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  115. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  116. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  117. package/examples/jsm/renderers/Projector.js +246 -28
  118. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  119. package/examples/jsm/shaders/GTAOShader.js +19 -6
  120. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  122. package/examples/jsm/shaders/SAOShader.js +17 -4
  123. package/examples/jsm/shaders/SSAOShader.js +11 -1
  124. package/examples/jsm/shaders/SSRShader.js +6 -5
  125. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  126. package/examples/jsm/shaders/VignetteShader.js +1 -1
  127. package/examples/jsm/transpiler/AST.js +44 -0
  128. package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  130. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  131. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  132. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  133. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  134. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  135. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  136. package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
  137. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  138. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  139. package/examples/jsm/tsl/display/CRT.js +150 -0
  140. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  141. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  142. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  143. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  144. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  145. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  146. package/examples/jsm/tsl/display/GTAONode.js +6 -4
  147. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  148. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  149. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  150. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  151. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  152. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  153. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  154. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  155. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  156. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  157. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  158. package/examples/jsm/tsl/display/SSGINode.js +8 -24
  159. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  160. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  161. package/examples/jsm/tsl/display/Shape.js +29 -0
  162. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  163. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  164. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  165. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  166. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  167. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  168. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  169. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  170. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  171. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  172. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  173. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  174. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  175. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  176. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  177. package/examples/jsm/tsl/math/Bayer.js +53 -3
  178. package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
  179. package/examples/jsm/utils/ColorUtils.js +76 -0
  180. package/examples/jsm/utils/LDrawUtils.js +1 -1
  181. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  182. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  183. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  186. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  187. package/package.json +24 -30
  188. package/src/Three.Core.js +3 -1
  189. package/src/Three.TSL.js +25 -11
  190. package/src/Three.WebGPU.Nodes.js +5 -0
  191. package/src/Three.WebGPU.js +9 -0
  192. package/src/Three.js +1 -0
  193. package/src/animation/AnimationAction.js +12 -2
  194. package/src/animation/AnimationClip.js +1 -1
  195. package/src/animation/AnimationMixer.js +6 -0
  196. package/src/animation/AnimationUtils.js +1 -12
  197. package/src/animation/KeyframeTrack.js +47 -8
  198. package/src/animation/PropertyMixer.js +4 -4
  199. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  200. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  201. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  202. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  203. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  204. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  205. package/src/audio/Audio.js +1 -1
  206. package/src/audio/AudioContext.js +2 -2
  207. package/src/audio/AudioListener.js +5 -3
  208. package/src/cameras/Camera.js +32 -2
  209. package/src/cameras/CubeCamera.js +20 -0
  210. package/src/constants.js +90 -5
  211. package/src/core/BufferAttribute.js +13 -1
  212. package/src/core/BufferGeometry.js +14 -2
  213. package/src/core/Clock.js +7 -0
  214. package/src/core/Object3D.js +52 -4
  215. package/src/core/Raycaster.js +2 -2
  216. package/src/core/RenderTarget.js +4 -4
  217. package/src/extras/PMREMGenerator.js +7 -18
  218. package/src/extras/TextureUtils.js +5 -1
  219. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  220. package/src/geometries/ExtrudeGeometry.js +2 -2
  221. package/src/geometries/PolyhedronGeometry.js +1 -1
  222. package/src/geometries/TorusGeometry.js +8 -3
  223. package/src/helpers/CameraHelper.js +3 -0
  224. package/src/helpers/DirectionalLightHelper.js +4 -1
  225. package/src/helpers/HemisphereLightHelper.js +3 -0
  226. package/src/helpers/PointLightHelper.js +1 -25
  227. package/src/helpers/SpotLightHelper.js +3 -0
  228. package/src/lights/DirectionalLight.js +13 -0
  229. package/src/lights/HemisphereLight.js +10 -0
  230. package/src/lights/Light.js +1 -11
  231. package/src/lights/LightProbe.js +0 -15
  232. package/src/lights/LightShadow.js +15 -6
  233. package/src/lights/PointLight.js +15 -0
  234. package/src/lights/PointLightShadow.js +0 -86
  235. package/src/lights/SpotLight.js +22 -1
  236. package/src/lights/webgpu/IESSpotLight.js +2 -1
  237. package/src/loaders/AudioLoader.js +11 -1
  238. package/src/loaders/Cache.js +28 -0
  239. package/src/loaders/DataTextureLoader.js +6 -4
  240. package/src/loaders/FileLoader.js +2 -3
  241. package/src/loaders/ImageBitmapLoader.js +12 -9
  242. package/src/loaders/Loader.js +6 -0
  243. package/src/loaders/MaterialLoader.js +3 -2
  244. package/src/loaders/ObjectLoader.js +46 -6
  245. package/src/loaders/nodes/NodeLoader.js +2 -2
  246. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  247. package/src/materials/Material.js +2 -0
  248. package/src/materials/MeshLambertMaterial.js +9 -0
  249. package/src/materials/MeshPhongMaterial.js +9 -0
  250. package/src/materials/MeshToonMaterial.js +1 -1
  251. package/src/materials/ShaderMaterial.js +20 -1
  252. package/src/materials/nodes/Line2NodeMaterial.js +34 -7
  253. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  254. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  255. package/src/materials/nodes/NodeMaterial.js +45 -25
  256. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
  257. package/src/math/Line3.js +6 -5
  258. package/src/math/MathUtils.js +10 -10
  259. package/src/math/Matrix2.js +13 -9
  260. package/src/math/Matrix3.js +13 -9
  261. package/src/math/Matrix4.js +87 -74
  262. package/src/math/Plane.js +4 -3
  263. package/src/math/Quaternion.js +3 -29
  264. package/src/math/Sphere.js +1 -1
  265. package/src/math/Triangle.js +1 -1
  266. package/src/math/Vector2.js +11 -7
  267. package/src/math/Vector3.js +15 -13
  268. package/src/math/Vector4.js +13 -9
  269. package/src/math/interpolants/BezierInterpolant.js +108 -0
  270. package/src/nodes/Nodes.js +86 -68
  271. package/src/nodes/TSL.js +7 -7
  272. package/src/nodes/accessors/Arrays.js +1 -1
  273. package/src/nodes/accessors/BatchNode.js +10 -10
  274. package/src/nodes/accessors/Bitangent.js +5 -5
  275. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  276. package/src/nodes/accessors/BufferNode.js +29 -2
  277. package/src/nodes/accessors/Camera.js +149 -28
  278. package/src/nodes/accessors/ClippingNode.js +4 -4
  279. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  280. package/src/nodes/accessors/InstanceNode.js +148 -43
  281. package/src/nodes/accessors/MaterialNode.js +9 -1
  282. package/src/nodes/accessors/MaterialProperties.js +2 -5
  283. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  284. package/src/nodes/accessors/ModelNode.js +1 -1
  285. package/src/nodes/accessors/Normal.js +11 -11
  286. package/src/nodes/accessors/Object3DNode.js +1 -1
  287. package/src/nodes/accessors/Position.js +34 -2
  288. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  289. package/src/nodes/accessors/ReferenceNode.js +8 -8
  290. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  291. package/src/nodes/accessors/SceneProperties.js +47 -0
  292. package/src/nodes/accessors/SkinningNode.js +27 -26
  293. package/src/nodes/accessors/StorageBufferNode.js +14 -25
  294. package/src/nodes/accessors/StorageTextureNode.js +40 -9
  295. package/src/nodes/accessors/Tangent.js +4 -14
  296. package/src/nodes/accessors/Texture3DNode.js +32 -35
  297. package/src/nodes/accessors/TextureNode.js +67 -23
  298. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  299. package/src/nodes/accessors/UserDataNode.js +1 -2
  300. package/src/nodes/accessors/VertexColorNode.js +1 -2
  301. package/src/nodes/code/FunctionCallNode.js +1 -1
  302. package/src/nodes/code/FunctionNode.js +2 -3
  303. package/src/nodes/core/ArrayNode.js +21 -2
  304. package/src/nodes/core/AssignNode.js +3 -3
  305. package/src/nodes/core/AttributeNode.js +3 -3
  306. package/src/nodes/core/BypassNode.js +1 -1
  307. package/src/nodes/core/ContextNode.js +104 -5
  308. package/src/nodes/core/IndexNode.js +2 -1
  309. package/src/nodes/core/InputNode.js +1 -1
  310. package/src/nodes/core/InspectorNode.js +1 -1
  311. package/src/nodes/core/IsolateNode.js +1 -1
  312. package/src/nodes/core/MRTNode.js +48 -2
  313. package/src/nodes/core/Node.js +112 -15
  314. package/src/nodes/core/NodeBuilder.js +284 -66
  315. package/src/nodes/core/NodeError.js +28 -0
  316. package/src/nodes/core/NodeFrame.js +12 -4
  317. package/src/nodes/core/NodeUtils.js +11 -9
  318. package/src/nodes/core/OutputStructNode.js +12 -10
  319. package/src/nodes/core/ParameterNode.js +4 -4
  320. package/src/nodes/core/PropertyNode.js +19 -3
  321. package/src/nodes/core/StackNode.js +66 -17
  322. package/src/nodes/core/StackTrace.js +139 -0
  323. package/src/nodes/core/StructNode.js +17 -3
  324. package/src/nodes/core/StructTypeNode.js +12 -18
  325. package/src/nodes/core/SubBuildNode.js +2 -2
  326. package/src/nodes/core/UniformGroupNode.js +36 -6
  327. package/src/nodes/core/UniformNode.js +21 -5
  328. package/src/nodes/core/VarNode.js +48 -23
  329. package/src/nodes/core/VaryingNode.js +2 -19
  330. package/src/nodes/display/BlendModes.js +0 -64
  331. package/src/nodes/display/ColorAdjustment.js +17 -0
  332. package/src/nodes/display/ColorSpaceNode.js +3 -3
  333. package/src/nodes/display/NormalMapNode.js +39 -4
  334. package/src/nodes/display/PassNode.js +125 -16
  335. package/src/nodes/display/RenderOutputNode.js +7 -7
  336. package/src/nodes/display/ScreenNode.js +4 -2
  337. package/src/nodes/display/ToneMappingNode.js +1 -1
  338. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  339. package/src/nodes/display/ViewportDepthNode.js +52 -4
  340. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  341. package/src/nodes/display/ViewportTextureNode.js +39 -11
  342. package/src/nodes/fog/Fog.js +18 -35
  343. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  344. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  345. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  346. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  347. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  348. package/src/nodes/geometry/RangeNode.js +5 -3
  349. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  350. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  351. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  352. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  353. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  354. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  355. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  356. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  357. package/src/nodes/lighting/LightsNode.js +7 -28
  358. package/src/nodes/lighting/PointShadowNode.js +162 -149
  359. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  360. package/src/nodes/lighting/ShadowNode.js +120 -42
  361. package/src/nodes/math/BitcastNode.js +1 -1
  362. package/src/nodes/math/BitcountNode.js +433 -0
  363. package/src/nodes/math/ConditionalNode.js +3 -3
  364. package/src/nodes/math/MathNode.js +76 -41
  365. package/src/nodes/math/OperatorNode.js +3 -2
  366. package/src/nodes/math/PackFloatNode.js +98 -0
  367. package/src/nodes/math/UnpackFloatNode.js +96 -0
  368. package/src/nodes/pmrem/PMREMNode.js +1 -1
  369. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  370. package/src/nodes/tsl/TSLBase.js +1 -1
  371. package/src/nodes/tsl/TSLCore.js +38 -17
  372. package/src/nodes/utils/ArrayElementNode.js +14 -1
  373. package/src/nodes/utils/ConvertNode.js +1 -1
  374. package/src/nodes/utils/DebugNode.js +12 -12
  375. package/src/nodes/utils/EventNode.js +31 -2
  376. package/src/nodes/utils/FlipNode.js +1 -1
  377. package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
  378. package/src/nodes/utils/JoinNode.js +3 -3
  379. package/src/nodes/utils/LoopNode.js +1 -1
  380. package/src/nodes/utils/MemberNode.js +2 -2
  381. package/src/nodes/utils/Packing.js +13 -1
  382. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  383. package/src/nodes/utils/RTTNode.js +1 -1
  384. package/src/nodes/utils/ReflectorNode.js +3 -4
  385. package/src/nodes/utils/Remap.js +48 -0
  386. package/src/nodes/utils/RotateNode.js +1 -1
  387. package/src/nodes/utils/SampleNode.js +1 -1
  388. package/src/nodes/utils/SetNode.js +1 -1
  389. package/src/nodes/utils/SplitNode.js +1 -1
  390. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  391. package/src/nodes/utils/UVUtils.js +28 -0
  392. package/src/objects/BatchedMesh.js +44 -16
  393. package/src/objects/InstancedMesh.js +30 -3
  394. package/src/objects/Line.js +1 -1
  395. package/src/objects/Mesh.js +1 -1
  396. package/src/objects/Points.js +1 -1
  397. package/src/objects/Skeleton.js +9 -0
  398. package/src/objects/SkinnedMesh.js +26 -9
  399. package/src/renderers/WebGLRenderer.js +329 -145
  400. package/src/renderers/common/Animation.js +3 -3
  401. package/src/renderers/common/Attributes.js +15 -1
  402. package/src/renderers/common/Backend.js +29 -8
  403. package/src/renderers/common/Background.js +26 -13
  404. package/src/renderers/common/BindGroup.js +1 -16
  405. package/src/renderers/common/Binding.js +11 -0
  406. package/src/renderers/common/Bindings.js +29 -14
  407. package/src/renderers/common/BlendMode.js +143 -0
  408. package/src/renderers/common/Buffer.js +40 -0
  409. package/src/renderers/common/BundleGroup.js +1 -1
  410. package/src/renderers/common/ChainMap.js +30 -6
  411. package/src/renderers/common/ComputePipeline.js +1 -1
  412. package/src/renderers/common/CubeRenderTarget.js +51 -7
  413. package/src/renderers/common/Geometries.js +29 -3
  414. package/src/renderers/common/Info.js +333 -4
  415. package/src/renderers/common/InspectorBase.js +6 -1
  416. package/src/renderers/common/Lighting.js +5 -21
  417. package/src/renderers/common/Pipelines.js +40 -7
  418. package/src/renderers/common/PostProcessing.js +8 -206
  419. package/src/renderers/common/ReadbackBuffer.js +78 -0
  420. package/src/renderers/common/RenderBundle.js +3 -1
  421. package/src/renderers/common/RenderBundles.js +7 -3
  422. package/src/renderers/common/RenderContext.js +16 -0
  423. package/src/renderers/common/RenderContexts.js +33 -49
  424. package/src/renderers/common/RenderLists.js +2 -1
  425. package/src/renderers/common/RenderObject.js +17 -5
  426. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  427. package/src/renderers/common/RenderObjects.js +21 -5
  428. package/src/renderers/common/RenderPipeline.js +232 -17
  429. package/src/renderers/common/Renderer.js +481 -117
  430. package/src/renderers/common/Sampler.js +4 -4
  431. package/src/renderers/common/StorageBuffer.js +13 -1
  432. package/src/renderers/common/Textures.js +89 -4
  433. package/src/renderers/common/TimestampQueryPool.js +5 -3
  434. package/src/renderers/common/Uniform.js +8 -0
  435. package/src/renderers/common/UniformsGroup.js +62 -1
  436. package/src/renderers/common/XRManager.js +37 -29
  437. package/src/renderers/common/extras/PMREMGenerator.js +25 -23
  438. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  439. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
  440. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  441. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  442. package/src/renderers/shaders/DFGLUTData.js +19 -34
  443. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  444. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  445. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  446. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  447. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  448. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  449. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  450. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  451. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  452. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  453. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  454. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  455. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  456. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  457. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  458. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  459. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  461. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  462. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  463. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  464. package/src/renderers/shaders/ShaderChunk.js +5 -3
  465. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  466. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  467. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  468. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  469. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  470. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  471. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  472. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  473. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  474. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  475. package/src/renderers/shaders/ShaderLib.js +7 -6
  476. package/src/renderers/shaders/UniformsLib.js +7 -5
  477. package/src/renderers/shaders/UniformsUtils.js +27 -5
  478. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  479. package/src/renderers/webgl/WebGLBackground.js +15 -15
  480. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  481. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  482. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  483. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  484. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  485. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  486. package/src/renderers/webgl/WebGLLights.js +18 -1
  487. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  488. package/src/renderers/webgl/WebGLObjects.js +3 -1
  489. package/src/renderers/webgl/WebGLOutput.js +270 -0
  490. package/src/renderers/webgl/WebGLProgram.js +49 -109
  491. package/src/renderers/webgl/WebGLPrograms.js +63 -51
  492. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  493. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  494. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  495. package/src/renderers/webgl/WebGLState.js +75 -37
  496. package/src/renderers/webgl/WebGLTextures.js +215 -54
  497. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  498. package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
  499. package/src/renderers/webgl/WebGLUtils.js +6 -2
  500. package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
  501. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  504. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
  507. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  508. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  509. package/src/renderers/webgpu/WebGPUBackend.js +260 -140
  510. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  511. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
  512. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
  513. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  514. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  515. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  516. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  517. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
  519. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  520. package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
  521. package/src/renderers/webxr/WebXRController.js +12 -0
  522. package/src/renderers/webxr/WebXRManager.js +4 -2
  523. package/src/textures/CubeDepthTexture.js +76 -0
  524. package/src/textures/HTMLTexture.js +74 -0
  525. package/src/textures/Source.js +2 -2
  526. package/src/textures/Texture.js +16 -5
  527. package/src/utils.js +280 -3
  528. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  529. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  530. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  531. package/src/nodes/accessors/SceneNode.js +0 -145
  532. package/src/nodes/code/ScriptableNode.js +0 -726
  533. package/src/nodes/code/ScriptableValueNode.js +0 -253
  534. package/src/nodes/display/PosterizeNode.js +0 -65
  535. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  536. package/src/nodes/utils/RemapNode.js +0 -125
  537. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  538. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  539. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -1,5 +1,5 @@
1
1
  import DataMap from './DataMap.js';
2
- import RenderPipeline from './RenderPipeline.js';
2
+ import RenderObjectPipeline from './RenderObjectPipeline.js';
3
3
  import ComputePipeline from './ComputePipeline.js';
4
4
  import ProgrammableStage from './ProgrammableStage.js';
5
5
 
@@ -15,9 +15,10 @@ class Pipelines extends DataMap {
15
15
  * Constructs a new pipeline management component.
16
16
  *
17
17
  * @param {Backend} backend - The renderer's backend.
18
- * @param {Nodes} nodes - Renderer component for managing nodes related logic.
18
+ * @param {NodeManager} nodes - Renderer component for managing nodes related logic.
19
+ * @param {Info} info - Renderer component for managing metrics and monitoring data.
19
20
  */
20
- constructor( backend, nodes ) {
21
+ constructor( backend, nodes, info ) {
21
22
 
22
23
  super();
23
24
 
@@ -31,10 +32,17 @@ class Pipelines extends DataMap {
31
32
  /**
32
33
  * Renderer component for managing nodes related logic.
33
34
  *
34
- * @type {Nodes}
35
+ * @type {NodeManager}
35
36
  */
36
37
  this.nodes = nodes;
37
38
 
39
+ /**
40
+ * Renderer component for managing metrics and monitoring data.
41
+ *
42
+ * @type {Info}
43
+ */
44
+ this.info = info;
45
+
38
46
  /**
39
47
  * A references to the bindings management component.
40
48
  * This reference will be set inside the `Bindings`
@@ -108,6 +116,7 @@ class Pipelines extends DataMap {
108
116
  this.programs.compute.set( nodeBuilderState.computeShader, stageCompute );
109
117
 
110
118
  backend.createProgram( stageCompute );
119
+ this.info.createProgram( stageCompute );
111
120
 
112
121
  }
113
122
 
@@ -146,7 +155,7 @@ class Pipelines extends DataMap {
146
155
  *
147
156
  * @param {RenderObject} renderObject - The render object.
148
157
  * @param {?Array<Promise>} [promises=null] - An array of compilation promises which is only relevant in context of `Renderer.compileAsync()`.
149
- * @return {RenderPipeline} The render pipeline.
158
+ * @return {RenderObjectPipeline} The render pipeline.
150
159
  */
151
160
  getForRender( renderObject, promises = null ) {
152
161
 
@@ -184,6 +193,7 @@ class Pipelines extends DataMap {
184
193
  this.programs.vertex.set( nodeBuilderState.vertexShader, stageVertex );
185
194
 
186
195
  backend.createProgram( stageVertex );
196
+ this.info.createProgram( stageVertex );
187
197
 
188
198
  }
189
199
 
@@ -197,6 +207,7 @@ class Pipelines extends DataMap {
197
207
  this.programs.fragment.set( nodeBuilderState.fragmentShader, stageFragment );
198
208
 
199
209
  backend.createProgram( stageFragment );
210
+ this.info.createProgram( stageFragment );
200
211
 
201
212
  }
202
213
 
@@ -234,6 +245,26 @@ class Pipelines extends DataMap {
234
245
 
235
246
  }
236
247
 
248
+ /**
249
+ * Checks if the render pipeline for the given render object is ready for drawing.
250
+ * Returns false if the GPU pipeline is still being compiled asynchronously.
251
+ *
252
+ * @param {RenderObject} renderObject - The render object.
253
+ * @return {boolean} True if the pipeline is ready for drawing.
254
+ */
255
+ isReady( renderObject ) {
256
+
257
+ const data = this.get( renderObject );
258
+ const pipeline = data.pipeline;
259
+
260
+ if ( pipeline === undefined ) return false;
261
+
262
+ const pipelineData = this.backend.get( pipeline );
263
+
264
+ return pipelineData.pipeline !== undefined && pipelineData.pipeline !== null;
265
+
266
+ }
267
+
237
268
  /**
238
269
  * Deletes the pipeline for the given render object.
239
270
  *
@@ -344,7 +375,7 @@ class Pipelines extends DataMap {
344
375
  * @param {ProgrammableStage} stageFragment - The programmable stage representing the fragment shader.
345
376
  * @param {string} cacheKey - The cache key.
346
377
  * @param {?Array<Promise>} promises - An array of compilation promises which is only relevant in context of `Renderer.compileAsync()`.
347
- * @return {ComputePipeline} The compute pipeline.
378
+ * @return {RenderObjectPipeline} The render pipeline.
348
379
  */
349
380
  _getRenderPipeline( renderObject, stageVertex, stageFragment, cacheKey, promises ) {
350
381
 
@@ -356,7 +387,7 @@ class Pipelines extends DataMap {
356
387
 
357
388
  if ( pipeline === undefined ) {
358
389
 
359
- pipeline = new RenderPipeline( cacheKey, stageVertex, stageFragment );
390
+ pipeline = new RenderObjectPipeline( cacheKey, stageVertex, stageFragment );
360
391
 
361
392
  this.caches.set( cacheKey, pipeline );
362
393
 
@@ -428,6 +459,8 @@ class Pipelines extends DataMap {
428
459
 
429
460
  this.programs[ stage ].delete( code );
430
461
 
462
+ this.info.destroyProgram( program );
463
+
431
464
  }
432
465
 
433
466
  /**
@@ -1,223 +1,25 @@
1
- import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
2
- import { ColorManagement } from '../../math/ColorManagement.js';
3
- import { vec4, renderOutput } from '../../nodes/TSL.js';
4
- import { NoToneMapping } from '../../constants.js';
5
- import QuadMesh from '../../renderers/common/QuadMesh.js';
1
+ import RenderPipeline from './RenderPipeline.js';
6
2
  import { warnOnce } from '../../utils.js';
7
3
 
8
4
  /**
9
- * This module is responsible to manage the post processing setups in apps.
10
- * You usually create a single instance of this class and use it to define
11
- * the output of your post processing effect chain.
12
- * ```js
13
- * const postProcessing = new PostProcessing( renderer );
5
+ * @deprecated since r183. Use {@link RenderPipeline} instead. PostProcessing has been renamed to RenderPipeline.
14
6
  *
15
- * const scenePass = pass( scene, camera );
16
- *
17
- * postProcessing.outputNode = scenePass;
18
- * ```
19
- *
20
- * Note: This module can only be used with `WebGPURenderer`.
7
+ * This class is a wrapper for backward compatibility and will be removed in a future version.
21
8
  */
22
- class PostProcessing {
9
+ class PostProcessing extends RenderPipeline {
23
10
 
24
11
  /**
25
12
  * Constructs a new post processing management module.
26
13
  *
27
14
  * @param {Renderer} renderer - A reference to the renderer.
28
15
  * @param {Node<vec4>} outputNode - An optional output node.
16
+ * @deprecated since r183. Use {@link RenderPipeline} instead.
29
17
  */
30
- constructor( renderer, outputNode = vec4( 0, 0, 1, 1 ) ) {
31
-
32
- /**
33
- * A reference to the renderer.
34
- *
35
- * @type {Renderer}
36
- */
37
- this.renderer = renderer;
38
-
39
- /**
40
- * A node which defines the final output of the post
41
- * processing. This is usually the last node in a chain
42
- * of effect nodes.
43
- *
44
- * @type {Node<vec4>}
45
- */
46
- this.outputNode = outputNode;
47
-
48
- /**
49
- * Whether the default output tone mapping and color
50
- * space transformation should be enabled or not.
51
- *
52
- * It is enabled by default by it must be disabled when
53
- * effects must be executed after tone mapping and color
54
- * space conversion. A typical example is FXAA which
55
- * requires sRGB input.
56
- *
57
- * When set to `false`, the app must control the output
58
- * transformation with `RenderOutputNode`.
59
- *
60
- * ```js
61
- * const outputPass = renderOutput( scenePass );
62
- * ```
63
- *
64
- * @type {boolean}
65
- */
66
- this.outputColorTransform = true;
67
-
68
- /**
69
- * Must be set to `true` when the output node changes.
70
- *
71
- * @type {Node<vec4>}
72
- */
73
- this.needsUpdate = true;
74
-
75
- const material = new NodeMaterial();
76
- material.name = 'PostProcessing';
77
-
78
- /**
79
- * The full screen quad that is used to render
80
- * the effects.
81
- *
82
- * @private
83
- * @type {QuadMesh}
84
- */
85
- this._quadMesh = new QuadMesh( material );
86
- this._quadMesh.name = 'Post-Processing';
87
-
88
- /**
89
- * The context of the post processing stack.
90
- *
91
- * @private
92
- * @type {?Object}
93
- * @default null
94
- */
95
- this._context = null;
96
-
97
- }
98
-
99
- /**
100
- * When `PostProcessing` is used to apply post processing effects,
101
- * the application must use this version of `render()` inside
102
- * its animation loop (not the one from the renderer).
103
- */
104
- render() {
105
-
106
- const renderer = this.renderer;
107
-
108
- this._update();
109
-
110
- if ( this._context.onBeforePostProcessing !== null ) this._context.onBeforePostProcessing();
111
-
112
- const toneMapping = renderer.toneMapping;
113
- const outputColorSpace = renderer.outputColorSpace;
114
-
115
- renderer.toneMapping = NoToneMapping;
116
- renderer.outputColorSpace = ColorManagement.workingColorSpace;
117
-
118
- //
119
-
120
- const currentXR = renderer.xr.enabled;
121
- renderer.xr.enabled = false;
122
-
123
- this._quadMesh.render( renderer );
124
-
125
- renderer.xr.enabled = currentXR;
126
-
127
- //
128
-
129
- renderer.toneMapping = toneMapping;
130
- renderer.outputColorSpace = outputColorSpace;
131
-
132
- if ( this._context.onAfterPostProcessing !== null ) this._context.onAfterPostProcessing();
133
-
134
- }
135
-
136
- /**
137
- * Returns the current context of the post processing stack.
138
- *
139
- * @readonly
140
- * @type {?Object}
141
- */
142
- get context() {
143
-
144
- return this._context;
145
-
146
- }
147
-
148
- /**
149
- * Frees internal resources.
150
- */
151
- dispose() {
152
-
153
- this._quadMesh.material.dispose();
154
-
155
- }
156
-
157
- /**
158
- * Updates the state of the module.
159
- *
160
- * @private
161
- */
162
- _update() {
163
-
164
- if ( this.needsUpdate === true ) {
165
-
166
- const renderer = this.renderer;
167
-
168
- const toneMapping = renderer.toneMapping;
169
- const outputColorSpace = renderer.outputColorSpace;
170
-
171
- const context = {
172
- postProcessing: this,
173
- onBeforePostProcessing: null,
174
- onAfterPostProcessing: null
175
- };
176
-
177
- let outputNode = this.outputNode;
178
-
179
- if ( this.outputColorTransform === true ) {
180
-
181
- outputNode = outputNode.context( context );
182
-
183
- outputNode = renderOutput( outputNode, toneMapping, outputColorSpace );
184
-
185
- } else {
186
-
187
- context.toneMapping = toneMapping;
188
- context.outputColorSpace = outputColorSpace;
189
-
190
- outputNode = outputNode.context( context );
191
-
192
- }
193
-
194
- this._context = context;
195
-
196
- this._quadMesh.material.fragmentNode = outputNode;
197
- this._quadMesh.material.needsUpdate = true;
198
-
199
- this.needsUpdate = false;
200
-
201
- }
202
-
203
- }
204
-
205
- /**
206
- * When `PostProcessing` is used to apply post processing effects,
207
- * the application must use this version of `renderAsync()` inside
208
- * its animation loop (not the one from the renderer).
209
- *
210
- * @async
211
- * @deprecated
212
- * @return {Promise} A Promise that resolves when the render has been finished.
213
- */
214
- async renderAsync() {
215
-
216
- warnOnce( 'PostProcessing: "renderAsync()" has been deprecated. Use "render()" and "await renderer.init();" when creating the renderer.' ); // @deprecated r181
18
+ constructor( renderer, outputNode ) {
217
19
 
218
- await this.renderer.init();
20
+ warnOnce( 'PostProcessing: "PostProcessing" has been renamed to "RenderPipeline". Please update your code to use "THREE.RenderPipeline" instead.' ); // @deprecated, r183
219
21
 
220
- this.render();
22
+ super( renderer, outputNode );
221
23
 
222
24
  }
223
25
 
@@ -0,0 +1,78 @@
1
+ import { EventDispatcher } from '../../core/EventDispatcher.js';
2
+
3
+ /**
4
+ * A readback buffer is used to transfer data from the GPU to the CPU.
5
+ * It is primarily used to read back compute shader results.
6
+ *
7
+ * @augments EventDispatcher
8
+ */
9
+ class ReadbackBuffer extends EventDispatcher {
10
+
11
+ /**
12
+ * Constructs a new readback buffer.
13
+ *
14
+ * @param {number} maxByteLength - The maximum size of the buffer to be read back.
15
+ */
16
+ constructor( maxByteLength ) {
17
+
18
+ super();
19
+
20
+ /**
21
+ * Name used for debugging purposes.
22
+ *
23
+ * @type {string}
24
+ */
25
+ this.name = '';
26
+
27
+ /**
28
+ * The mapped, read back array buffer.
29
+ *
30
+ * @type {ArrayBuffer|null}
31
+ */
32
+ this.buffer = null;
33
+
34
+ /**
35
+ * The maximum size of the buffer to be read back.
36
+ *
37
+ * @type {number}
38
+ */
39
+ this.maxByteLength = maxByteLength;
40
+
41
+ /**
42
+ * This flag can be used for type testing.
43
+ *
44
+ * @type {boolean}
45
+ * @readonly
46
+ * @default true
47
+ */
48
+ this.isReadbackBuffer = true;
49
+
50
+ this._mapped = false;
51
+
52
+ }
53
+
54
+ /**
55
+ * Releases the mapped buffer data so the GPU buffer can be
56
+ * used by the GPU again.
57
+ *
58
+ * Note: Any `ArrayBuffer` data associated with this readback buffer
59
+ * are removed and no longer accessible after calling this method.
60
+ */
61
+ release() {
62
+
63
+ this.dispatchEvent( { type: 'release' } );
64
+
65
+ }
66
+
67
+ /**
68
+ * Frees internal resources.
69
+ */
70
+ dispose() {
71
+
72
+ this.dispatchEvent( { type: 'dispose' } );
73
+
74
+ }
75
+
76
+ }
77
+
78
+ export default ReadbackBuffer;
@@ -11,11 +11,13 @@ class RenderBundle {
11
11
  *
12
12
  * @param {BundleGroup} bundleGroup - The bundle group.
13
13
  * @param {Camera} camera - The camera the bundle group is rendered with.
14
+ * @param {RenderContext} renderContext - The render context the bundle is rendered with.
14
15
  */
15
- constructor( bundleGroup, camera ) {
16
+ constructor( bundleGroup, camera, renderContext ) {
16
17
 
17
18
  this.bundleGroup = bundleGroup;
18
19
  this.camera = camera;
20
+ this.renderContext = renderContext;
19
21
 
20
22
  }
21
23
 
@@ -29,25 +29,29 @@ class RenderBundles {
29
29
  *
30
30
  * @param {BundleGroup} bundleGroup - The bundle group.
31
31
  * @param {Camera} camera - The camera the bundle group is rendered with.
32
+ * @param {RenderContext} renderContext - The render context the bundle is rendered with.
32
33
  * @return {RenderBundle} The render bundle.
33
34
  */
34
- get( bundleGroup, camera ) {
35
+ get( bundleGroup, camera, renderContext ) {
35
36
 
36
37
  const bundles = this.bundles;
37
38
 
38
39
  _chainKeys[ 0 ] = bundleGroup;
39
40
  _chainKeys[ 1 ] = camera;
41
+ _chainKeys[ 2 ] = renderContext;
40
42
 
41
43
  let bundle = bundles.get( _chainKeys );
42
44
 
43
45
  if ( bundle === undefined ) {
44
46
 
45
- bundle = new RenderBundle( bundleGroup, camera );
47
+ bundle = new RenderBundle( bundleGroup, camera, renderContext );
46
48
  bundles.set( _chainKeys, bundle );
47
49
 
48
50
  }
49
51
 
50
- _chainKeys.length = 0;
52
+ _chainKeys[ 0 ] = null;
53
+ _chainKeys[ 1 ] = null;
54
+ _chainKeys[ 2 ] = null;
51
55
 
52
56
  return bundle;
53
57
 
@@ -25,6 +25,14 @@ class RenderContext {
25
25
  */
26
26
  this.id = _id ++;
27
27
 
28
+ /**
29
+ * The MRT configuration.
30
+ *
31
+ * @type {?MRTNode}
32
+ * @default null
33
+ */
34
+ this.mrt = null;
35
+
28
36
  /**
29
37
  * Whether the current active framebuffer has a color attachment.
30
38
  *
@@ -214,6 +222,14 @@ class RenderContext {
214
222
  */
215
223
  this.clippingContext = null;
216
224
 
225
+ /**
226
+ * The current camera.
227
+ *
228
+ * @type {?Camera}
229
+ * @default null
230
+ */
231
+ this.camera = null;
232
+
217
233
  /**
218
234
  * This flag can be used for type testing.
219
235
  *
@@ -1,11 +1,4 @@
1
- import ChainMap from './ChainMap.js';
2
1
  import RenderContext from './RenderContext.js';
3
- import { Scene } from '../../scenes/Scene.js';
4
- import { Camera } from '../../cameras/Camera.js';
5
-
6
- const _chainKeys = [];
7
- const _defaultScene = /*@__PURE__*/ new Scene();
8
- const _defaultCamera = /*@__PURE__*/ new Camera();
9
2
 
10
3
  /**
11
4
  * This module manages the render contexts of the renderer.
@@ -16,31 +9,38 @@ class RenderContexts {
16
9
 
17
10
  /**
18
11
  * Constructs a new render context management component.
12
+ *
13
+ * @param {Renderer} renderer - The renderer.
19
14
  */
20
- constructor() {
15
+ constructor( renderer ) {
21
16
 
22
17
  /**
23
- * A dictionary that manages render contexts in chain maps
24
- * for each attachment state.
18
+ * The renderer.
25
19
  *
26
- * @type {Object<string,ChainMap>}
20
+ * @type {Renderer}
27
21
  */
28
- this.chainMaps = {};
22
+ this.renderer = renderer;
23
+
24
+ /**
25
+ * A dictionary that manages render contexts.
26
+ *
27
+ * @type {Object<string,RenderContext>}
28
+ */
29
+ this._renderContexts = {};
29
30
 
30
31
  }
31
32
 
32
33
  /**
33
34
  * Returns a render context for the given scene, camera and render target.
34
35
  *
35
- * @param {Scene} scene - The scene.
36
- * @param {Camera} camera - The camera that is used to render the scene.
37
36
  * @param {?RenderTarget} [renderTarget=null] - The active render target.
37
+ * @param {?MRTNode} [mrt=null] - The MRT configuration
38
+ * @param {?number} [callDepth=0] - The call depth of the renderer.
38
39
  * @return {RenderContext} The render context.
39
40
  */
40
- get( scene, camera, renderTarget = null ) {
41
+ get( renderTarget = null, mrt = null, callDepth = 0 ) {
41
42
 
42
- _chainKeys[ 0 ] = scene;
43
- _chainKeys[ 1 ] = camera;
43
+ //
44
44
 
45
45
  let attachmentState;
46
46
 
@@ -51,54 +51,38 @@ class RenderContexts {
51
51
  } else {
52
52
 
53
53
  const format = renderTarget.texture.format;
54
+ const type = renderTarget.texture.type;
54
55
  const count = renderTarget.textures.length;
55
56
 
56
- attachmentState = `${ count }:${ format }:${ renderTarget.samples }:${ renderTarget.depthBuffer }:${ renderTarget.stencilBuffer }`;
57
+ attachmentState = `${ count }:${ format }:${ type }:${ renderTarget.samples }:${ renderTarget.depthBuffer }:${ renderTarget.stencilBuffer }`;
57
58
 
58
59
  }
59
60
 
60
- const chainMap = this._getChainMap( attachmentState );
61
+ //
62
+
63
+ const mrtState = ( mrt !== null ) ? mrt.id : 'default';
61
64
 
62
- let renderState = chainMap.get( _chainKeys );
65
+ //
66
+
67
+ const renderStateKey = attachmentState + '-' + mrtState + '-' + callDepth;
68
+
69
+ let renderState = this._renderContexts[ renderStateKey ];
63
70
 
64
71
  if ( renderState === undefined ) {
65
72
 
66
73
  renderState = new RenderContext();
74
+ renderState.mrt = mrt;
67
75
 
68
- chainMap.set( _chainKeys, renderState );
76
+ this._renderContexts[ renderStateKey ] = renderState;
69
77
 
70
78
  }
71
79
 
72
- _chainKeys.length = 0;
73
-
74
80
  if ( renderTarget !== null ) renderState.sampleCount = renderTarget.samples === 0 ? 1 : renderTarget.samples;
75
81
 
76
- return renderState;
82
+ renderState.clearDepthValue = this.renderer.getClearDepth();
83
+ renderState.clearStencilValue = this.renderer.getClearStencil();
77
84
 
78
- }
79
-
80
- /**
81
- * Returns a render context intended for clear operations.
82
- *
83
- * @param {?RenderTarget} [renderTarget=null] - The active render target.
84
- * @return {RenderContext} The render context.
85
- */
86
- getForClear( renderTarget = null ) {
87
-
88
- return this.get( _defaultScene, _defaultCamera, renderTarget );
89
-
90
- }
91
-
92
- /**
93
- * Returns a chain map for the given attachment state.
94
- *
95
- * @private
96
- * @param {string} attachmentState - The attachment state.
97
- * @return {ChainMap} The chain map.
98
- */
99
- _getChainMap( attachmentState ) {
100
-
101
- return this.chainMaps[ attachmentState ] || ( this.chainMaps[ attachmentState ] = new ChainMap() );
85
+ return renderState;
102
86
 
103
87
  }
104
88
 
@@ -107,7 +91,7 @@ class RenderContexts {
107
91
  */
108
92
  dispose() {
109
93
 
110
- this.chainMaps = {};
94
+ this._renderContexts = {};
111
95
 
112
96
  }
113
97
 
@@ -57,7 +57,8 @@ class RenderLists {
57
57
 
58
58
  }
59
59
 
60
- _chainKeys.length = 0;
60
+ _chainKeys[ 0 ] = null;
61
+ _chainKeys[ 1 ] = null;
61
62
 
62
63
  return list;
63
64