@plastic-software/three 0.181.3 → 0.183.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (437) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +11330 -10017
  4. package/build/three.core.js +10011 -9493
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1414 -631
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +21 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +8007 -5427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +8005 -5426
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +2 -2
  16. package/examples/jsm/controls/ArcballControls.js +3 -3
  17. package/examples/jsm/controls/MapControls.js +55 -1
  18. package/examples/jsm/controls/OrbitControls.js +109 -6
  19. package/examples/jsm/controls/TrackballControls.js +6 -6
  20. package/examples/jsm/csm/CSM.js +2 -1
  21. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  22. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  23. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  24. package/examples/jsm/exporters/EXRExporter.js +1 -1
  25. package/examples/jsm/exporters/GLTFExporter.js +131 -4
  26. package/examples/jsm/exporters/USDZExporter.js +22 -3
  27. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  28. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  29. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  30. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  31. package/examples/jsm/helpers/ViewHelper.js +67 -8
  32. package/examples/jsm/inspector/Inspector.js +74 -14
  33. package/examples/jsm/inspector/RendererInspector.js +12 -2
  34. package/examples/jsm/inspector/tabs/Console.js +41 -7
  35. package/examples/jsm/inspector/tabs/Parameters.js +18 -2
  36. package/examples/jsm/inspector/tabs/Performance.js +2 -2
  37. package/examples/jsm/inspector/tabs/Viewer.js +4 -4
  38. package/examples/jsm/inspector/ui/Profiler.js +1836 -31
  39. package/examples/jsm/inspector/ui/Style.js +973 -14
  40. package/examples/jsm/inspector/ui/Tab.js +188 -1
  41. package/examples/jsm/inspector/ui/Values.js +17 -1
  42. package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
  43. package/examples/jsm/lines/LineMaterial.js +6 -0
  44. package/examples/jsm/loaders/3DMLoader.js +5 -4
  45. package/examples/jsm/loaders/3MFLoader.js +2 -2
  46. package/examples/jsm/loaders/AMFLoader.js +2 -2
  47. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  48. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  49. package/examples/jsm/loaders/EXRLoader.js +5 -5
  50. package/examples/jsm/loaders/FBXLoader.js +2 -4
  51. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  52. package/examples/jsm/loaders/GLTFLoader.js +122 -171
  53. package/examples/jsm/loaders/HDRLoader.js +0 -1
  54. package/examples/jsm/loaders/KMZLoader.js +5 -5
  55. package/examples/jsm/loaders/KTX2Loader.js +19 -3
  56. package/examples/jsm/loaders/LDrawLoader.js +2 -3
  57. package/examples/jsm/loaders/LWOLoader.js +7 -39
  58. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  59. package/examples/jsm/loaders/PCDLoader.js +4 -2
  60. package/examples/jsm/loaders/SVGLoader.js +1 -1
  61. package/examples/jsm/loaders/TDSLoader.js +0 -2
  62. package/examples/jsm/loaders/TGALoader.js +0 -2
  63. package/examples/jsm/loaders/USDLoader.js +100 -40
  64. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  65. package/examples/jsm/loaders/VOXLoader.js +660 -117
  66. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  67. package/examples/jsm/loaders/VTKLoader.js +37 -24
  68. package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
  69. package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
  70. package/examples/jsm/loaders/usd/USDAParser.js +447 -366
  71. package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
  72. package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
  73. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  74. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  75. package/examples/jsm/math/Octree.js +131 -1
  76. package/examples/jsm/misc/Volume.js +0 -1
  77. package/examples/jsm/misc/VolumeSlice.js +0 -1
  78. package/examples/jsm/objects/LensflareMesh.js +1 -1
  79. package/examples/jsm/objects/Sky.js +76 -4
  80. package/examples/jsm/objects/SkyMesh.js +127 -10
  81. package/examples/jsm/objects/Water.js +4 -3
  82. package/examples/jsm/objects/Water2.js +5 -3
  83. package/examples/jsm/objects/WaterMesh.js +5 -7
  84. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  85. package/examples/jsm/physics/JoltPhysics.js +10 -6
  86. package/examples/jsm/physics/RapierPhysics.js +9 -5
  87. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  88. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  89. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  90. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  91. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  92. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  93. package/examples/jsm/renderers/Projector.js +268 -30
  94. package/examples/jsm/renderers/SVGRenderer.js +193 -60
  95. package/examples/jsm/shaders/GTAOShader.js +19 -6
  96. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  97. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  98. package/examples/jsm/shaders/SAOShader.js +17 -4
  99. package/examples/jsm/shaders/SSAOShader.js +11 -1
  100. package/examples/jsm/shaders/SSRShader.js +6 -5
  101. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  102. package/examples/jsm/shaders/VignetteShader.js +1 -1
  103. package/examples/jsm/transpiler/AST.js +44 -0
  104. package/examples/jsm/transpiler/GLSLDecoder.js +61 -4
  105. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  106. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  107. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  108. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  109. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  110. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  111. package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
  112. package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
  113. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  114. package/examples/jsm/tsl/display/CRT.js +150 -0
  115. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  116. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  117. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  118. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  119. package/examples/jsm/tsl/display/GTAONode.js +5 -4
  120. package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
  121. package/examples/jsm/tsl/display/GodraysNode.js +624 -0
  122. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  123. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  124. package/examples/jsm/tsl/display/OutlineNode.js +3 -3
  125. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  126. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  127. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  128. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  129. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  130. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  131. package/examples/jsm/tsl/display/SSGINode.js +8 -20
  132. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  133. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  134. package/examples/jsm/tsl/display/Shape.js +29 -0
  135. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  136. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  137. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  138. package/examples/jsm/tsl/display/TRAANode.js +273 -125
  139. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  140. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  141. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  142. package/examples/jsm/tsl/math/Bayer.js +40 -1
  143. package/examples/jsm/utils/LDrawUtils.js +1 -1
  144. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  145. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  146. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  147. package/package.json +20 -26
  148. package/src/Three.Core.js +2 -1
  149. package/src/Three.TSL.js +19 -11
  150. package/src/Three.WebGPU.Nodes.js +2 -0
  151. package/src/Three.WebGPU.js +3 -0
  152. package/src/Three.js +1 -0
  153. package/src/animation/AnimationAction.js +1 -1
  154. package/src/animation/AnimationClip.js +1 -1
  155. package/src/animation/AnimationMixer.js +6 -0
  156. package/src/animation/AnimationUtils.js +1 -12
  157. package/src/animation/KeyframeTrack.js +47 -8
  158. package/src/animation/PropertyMixer.js +4 -4
  159. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  160. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  161. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  162. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  163. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  164. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  165. package/src/audio/Audio.js +1 -1
  166. package/src/audio/AudioListener.js +5 -3
  167. package/src/cameras/Camera.js +32 -2
  168. package/src/cameras/CubeCamera.js +20 -0
  169. package/src/constants.js +90 -5
  170. package/src/core/BufferGeometry.js +14 -2
  171. package/src/core/Clock.js +7 -0
  172. package/src/core/Object3D.js +56 -4
  173. package/src/core/Raycaster.js +2 -2
  174. package/src/core/RenderTarget.js +3 -4
  175. package/src/extras/PMREMGenerator.js +7 -18
  176. package/src/extras/TextureUtils.js +5 -1
  177. package/src/geometries/ExtrudeGeometry.js +2 -2
  178. package/src/geometries/PolyhedronGeometry.js +1 -1
  179. package/src/geometries/TorusGeometry.js +8 -3
  180. package/src/helpers/CameraHelper.js +3 -0
  181. package/src/helpers/DirectionalLightHelper.js +4 -1
  182. package/src/helpers/HemisphereLightHelper.js +3 -0
  183. package/src/helpers/PointLightHelper.js +1 -25
  184. package/src/helpers/SpotLightHelper.js +3 -0
  185. package/src/lights/DirectionalLight.js +13 -0
  186. package/src/lights/HemisphereLight.js +10 -0
  187. package/src/lights/Light.js +1 -11
  188. package/src/lights/LightProbe.js +0 -15
  189. package/src/lights/LightShadow.js +15 -6
  190. package/src/lights/PointLight.js +15 -0
  191. package/src/lights/PointLightShadow.js +0 -86
  192. package/src/lights/SpotLight.js +22 -1
  193. package/src/lights/webgpu/IESSpotLight.js +2 -1
  194. package/src/loaders/Cache.js +28 -0
  195. package/src/loaders/FileLoader.js +1 -1
  196. package/src/loaders/ImageBitmapLoader.js +8 -3
  197. package/src/loaders/Loader.js +6 -0
  198. package/src/loaders/MaterialLoader.js +2 -1
  199. package/src/loaders/ObjectLoader.js +21 -2
  200. package/src/loaders/nodes/NodeLoader.js +2 -2
  201. package/src/materials/Material.js +2 -0
  202. package/src/materials/MeshLambertMaterial.js +9 -0
  203. package/src/materials/MeshPhongMaterial.js +9 -0
  204. package/src/materials/ShaderMaterial.js +20 -1
  205. package/src/materials/nodes/Line2NodeMaterial.js +7 -7
  206. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  207. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  208. package/src/materials/nodes/NodeMaterial.js +72 -25
  209. package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
  210. package/src/math/Line3.js +3 -5
  211. package/src/math/MathUtils.js +10 -10
  212. package/src/math/Matrix4.js +74 -65
  213. package/src/math/Quaternion.js +3 -29
  214. package/src/math/Sphere.js +1 -1
  215. package/src/math/Vector3.js +3 -5
  216. package/src/math/interpolants/BezierInterpolant.js +108 -0
  217. package/src/nodes/Nodes.js +87 -68
  218. package/src/nodes/TSL.js +6 -6
  219. package/src/nodes/accessors/Arrays.js +1 -1
  220. package/src/nodes/accessors/BatchNode.js +10 -10
  221. package/src/nodes/accessors/Bitangent.js +5 -5
  222. package/src/nodes/accessors/BufferAttributeNode.js +98 -12
  223. package/src/nodes/accessors/BufferNode.js +29 -2
  224. package/src/nodes/accessors/Camera.js +149 -28
  225. package/src/nodes/accessors/ClippingNode.js +4 -4
  226. package/src/nodes/accessors/CubeTextureNode.js +20 -1
  227. package/src/nodes/accessors/InstanceNode.js +148 -43
  228. package/src/nodes/accessors/MaterialNode.js +9 -1
  229. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  230. package/src/nodes/accessors/ModelNode.js +1 -1
  231. package/src/nodes/accessors/Normal.js +11 -11
  232. package/src/nodes/accessors/Position.js +34 -2
  233. package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
  234. package/src/nodes/accessors/ReferenceNode.js +4 -4
  235. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  236. package/src/nodes/accessors/SceneProperties.js +53 -0
  237. package/src/nodes/accessors/SkinningNode.js +27 -26
  238. package/src/nodes/accessors/StorageBufferNode.js +4 -21
  239. package/src/nodes/accessors/StorageTextureNode.js +37 -1
  240. package/src/nodes/accessors/Tangent.js +4 -14
  241. package/src/nodes/accessors/Texture3DNode.js +32 -35
  242. package/src/nodes/accessors/TextureNode.js +58 -22
  243. package/src/nodes/accessors/UniformArrayNode.js +4 -2
  244. package/src/nodes/accessors/UserDataNode.js +1 -2
  245. package/src/nodes/accessors/VertexColorNode.js +1 -2
  246. package/src/nodes/code/FunctionNode.js +1 -2
  247. package/src/nodes/core/ArrayNode.js +20 -1
  248. package/src/nodes/core/AssignNode.js +2 -2
  249. package/src/nodes/core/AttributeNode.js +2 -2
  250. package/src/nodes/core/ContextNode.js +103 -4
  251. package/src/nodes/core/MRTNode.js +48 -2
  252. package/src/nodes/core/Node.js +29 -3
  253. package/src/nodes/core/NodeBuilder.js +170 -53
  254. package/src/nodes/core/NodeError.js +28 -0
  255. package/src/nodes/core/NodeFrame.js +12 -4
  256. package/src/nodes/core/NodeUtils.js +10 -8
  257. package/src/nodes/core/OutputStructNode.js +12 -10
  258. package/src/nodes/core/ParameterNode.js +3 -3
  259. package/src/nodes/core/PropertyNode.js +19 -3
  260. package/src/nodes/core/StackNode.js +65 -16
  261. package/src/nodes/core/StackTrace.js +139 -0
  262. package/src/nodes/core/StructNode.js +16 -2
  263. package/src/nodes/core/StructTypeNode.js +11 -17
  264. package/src/nodes/core/SubBuildNode.js +1 -1
  265. package/src/nodes/core/UniformNode.js +21 -5
  266. package/src/nodes/core/VarNode.js +47 -22
  267. package/src/nodes/core/VaryingNode.js +1 -18
  268. package/src/nodes/display/BlendModes.js +0 -64
  269. package/src/nodes/display/ColorAdjustment.js +17 -0
  270. package/src/nodes/display/ColorSpaceNode.js +3 -3
  271. package/src/nodes/display/NormalMapNode.js +39 -4
  272. package/src/nodes/display/PassNode.js +98 -9
  273. package/src/nodes/display/RenderOutputNode.js +3 -3
  274. package/src/nodes/display/ScreenNode.js +3 -1
  275. package/src/nodes/display/ToneMappingNode.js +1 -1
  276. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  277. package/src/nodes/display/ViewportDepthNode.js +52 -4
  278. package/src/nodes/display/ViewportTextureNode.js +21 -4
  279. package/src/nodes/fog/Fog.js +18 -35
  280. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  281. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  282. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  283. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
  284. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  285. package/src/nodes/geometry/RangeNode.js +4 -2
  286. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
  287. package/src/nodes/gpgpu/ComputeNode.js +5 -4
  288. package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
  289. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  290. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  291. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  292. package/src/nodes/lighting/LightsNode.js +2 -2
  293. package/src/nodes/lighting/PointShadowNode.js +162 -149
  294. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  295. package/src/nodes/lighting/ShadowNode.js +97 -41
  296. package/src/nodes/math/BitcountNode.js +433 -0
  297. package/src/nodes/math/ConditionalNode.js +2 -2
  298. package/src/nodes/math/MathNode.js +3 -40
  299. package/src/nodes/math/OperatorNode.js +2 -1
  300. package/src/nodes/math/PackFloatNode.js +98 -0
  301. package/src/nodes/math/UnpackFloatNode.js +96 -0
  302. package/src/nodes/pmrem/PMREMNode.js +1 -1
  303. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  304. package/src/nodes/tsl/TSLCore.js +17 -14
  305. package/src/nodes/utils/ArrayElementNode.js +13 -0
  306. package/src/nodes/utils/DebugNode.js +11 -11
  307. package/src/nodes/utils/EventNode.js +1 -2
  308. package/src/nodes/utils/JoinNode.js +2 -2
  309. package/src/nodes/utils/LoopNode.js +1 -1
  310. package/src/nodes/utils/MemberNode.js +1 -1
  311. package/src/nodes/utils/Packing.js +13 -1
  312. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  313. package/src/nodes/utils/RTTNode.js +1 -1
  314. package/src/nodes/utils/ReflectorNode.js +3 -4
  315. package/src/nodes/utils/SampleNode.js +1 -1
  316. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  317. package/src/nodes/utils/UVUtils.js +28 -0
  318. package/src/objects/BatchedMesh.js +27 -14
  319. package/src/objects/InstancedMesh.js +11 -0
  320. package/src/objects/Line.js +1 -1
  321. package/src/objects/Mesh.js +1 -1
  322. package/src/objects/Points.js +1 -1
  323. package/src/objects/Skeleton.js +9 -0
  324. package/src/renderers/WebGLRenderer.js +178 -92
  325. package/src/renderers/common/Backend.js +29 -0
  326. package/src/renderers/common/Background.js +24 -11
  327. package/src/renderers/common/BindGroup.js +1 -9
  328. package/src/renderers/common/Binding.js +11 -0
  329. package/src/renderers/common/Bindings.js +27 -12
  330. package/src/renderers/common/BlendMode.js +143 -0
  331. package/src/renderers/common/Buffer.js +40 -0
  332. package/src/renderers/common/BundleGroup.js +1 -1
  333. package/src/renderers/common/ChainMap.js +30 -6
  334. package/src/renderers/common/CubeRenderTarget.js +50 -6
  335. package/src/renderers/common/Geometries.js +29 -3
  336. package/src/renderers/common/Lighting.js +5 -21
  337. package/src/renderers/common/Pipelines.js +4 -4
  338. package/src/renderers/common/PostProcessing.js +8 -206
  339. package/src/renderers/common/RenderBundles.js +2 -1
  340. package/src/renderers/common/RenderContext.js +16 -0
  341. package/src/renderers/common/RenderContexts.js +33 -49
  342. package/src/renderers/common/RenderLists.js +2 -1
  343. package/src/renderers/common/RenderObject.js +15 -3
  344. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  345. package/src/renderers/common/RenderObjects.js +18 -2
  346. package/src/renderers/common/RenderPipeline.js +203 -17
  347. package/src/renderers/common/Renderer.js +257 -72
  348. package/src/renderers/common/Sampler.js +4 -4
  349. package/src/renderers/common/StorageBuffer.js +13 -1
  350. package/src/renderers/common/Textures.js +17 -1
  351. package/src/renderers/common/TimestampQueryPool.js +5 -3
  352. package/src/renderers/common/Uniform.js +8 -0
  353. package/src/renderers/common/UniformsGroup.js +61 -0
  354. package/src/renderers/common/XRManager.js +3 -2
  355. package/src/renderers/common/extras/PMREMGenerator.js +2 -8
  356. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  357. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
  358. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  359. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  360. package/src/renderers/shaders/DFGLUTData.js +19 -34
  361. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  362. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  363. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  364. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  365. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  366. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
  367. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  369. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  370. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  371. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
  372. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  373. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  374. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  375. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  376. package/src/renderers/shaders/ShaderChunk.js +3 -3
  377. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  378. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  379. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  380. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  381. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  382. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  383. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  384. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  385. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  386. package/src/renderers/shaders/ShaderLib.js +7 -5
  387. package/src/renderers/shaders/UniformsLib.js +0 -3
  388. package/src/renderers/webgl/WebGLBackground.js +2 -2
  389. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  390. package/src/renderers/webgl/WebGLCapabilities.js +3 -4
  391. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  392. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  393. package/src/renderers/webgl/WebGLLights.js +18 -1
  394. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  395. package/src/renderers/webgl/WebGLObjects.js +3 -1
  396. package/src/renderers/webgl/WebGLOutput.js +267 -0
  397. package/src/renderers/webgl/WebGLProgram.js +45 -109
  398. package/src/renderers/webgl/WebGLPrograms.js +45 -49
  399. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  400. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  401. package/src/renderers/webgl/WebGLState.js +32 -37
  402. package/src/renderers/webgl/WebGLTextures.js +89 -28
  403. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  404. package/src/renderers/webgl/WebGLUtils.js +6 -2
  405. package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
  406. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
  407. package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
  408. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
  409. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
  410. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  411. package/src/renderers/webgpu/WebGPUBackend.js +119 -13
  412. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  413. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
  414. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
  415. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  416. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -0
  417. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  418. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  419. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +65 -42
  420. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  421. package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
  422. package/src/renderers/webxr/WebXRManager.js +2 -2
  423. package/src/textures/CubeDepthTexture.js +76 -0
  424. package/src/textures/Source.js +1 -1
  425. package/src/textures/Texture.js +3 -3
  426. package/src/utils.js +258 -3
  427. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  428. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  429. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  430. package/src/nodes/accessors/SceneNode.js +0 -145
  431. package/src/nodes/code/ScriptableNode.js +0 -726
  432. package/src/nodes/code/ScriptableValueNode.js +0 -253
  433. package/src/nodes/display/PosterizeNode.js +0 -65
  434. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  435. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  436. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  437. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -2,10 +2,10 @@ import {
2
2
  Color,
3
3
  Mesh,
4
4
  Vector3,
5
- MeshLambertNodeMaterial
5
+ NodeMaterial
6
6
  } from 'three/webgpu';
7
7
 
8
- import { Fn, add, cameraPosition, div, normalize, positionWorld, sub, time, texture, vec2, vec3, max, dot, reflect, pow, length, float, uniform, reflector, mul, mix, diffuseColor } from 'three/tsl';
8
+ import { Fn, add, cameraPosition, div, normalize, positionWorld, sub, time, texture, vec2, max, dot, reflect, pow, length, float, uniform, reflector, mul, mix } from 'three/tsl';
9
9
 
10
10
  /**
11
11
  * A basic flat, reflective water effect.
@@ -32,7 +32,7 @@ class WaterMesh extends Mesh {
32
32
  */
33
33
  constructor( geometry, options ) {
34
34
 
35
- const material = new MeshLambertNodeMaterial();
35
+ const material = new NodeMaterial();
36
36
 
37
37
  super( geometry, material );
38
38
 
@@ -155,8 +155,6 @@ class WaterMesh extends Mesh {
155
155
 
156
156
  material.receivedShadowPositionNode = positionWorld.add( distortion );
157
157
 
158
- material.setupOutgoingLight = () => diffuseColor.rgb; // backwards compatibility
159
-
160
158
  material.colorNode = Fn( () => {
161
159
 
162
160
  const mirrorSampler = reflector();
@@ -166,10 +164,10 @@ class WaterMesh extends Mesh {
166
164
  this.add( mirrorSampler.target );
167
165
 
168
166
  const theta = max( dot( eyeDirection, surfaceNormal ), 0.0 );
169
- const rf0 = float( 0.3 );
167
+ const rf0 = float( 0.02 );
170
168
  const reflectance = mul( pow( float( 1.0 ).sub( theta ), 5.0 ), float( 1.0 ).sub( rf0 ) ).add( rf0 );
171
169
  const scatter = max( 0.0, dot( surfaceNormal, eyeDirection ) ).mul( this.waterColor );
172
- const albedo = mix( this.sunColor.mul( diffuseLight ).mul( 0.3 ).add( scatter ), mirrorSampler.rgb.mul( specularLight ).add( mirrorSampler.rgb.mul( 0.9 ) ).add( vec3( 0.1 ) ), reflectance );
170
+ const albedo = mix( this.sunColor.mul( diffuseLight ).mul( 0.3 ).add( scatter ), mirrorSampler.rgb.add( specularLight ), reflectance );
173
171
 
174
172
  return albedo;
175
173
 
@@ -23,7 +23,7 @@ async function AmmoPhysics() {
23
23
 
24
24
  }
25
25
 
26
- const AmmoLib = await Ammo(); // eslint-disable-line no-undef
26
+ const AmmoLib = await Ammo();
27
27
 
28
28
  const frameRate = 60;
29
29
 
@@ -66,6 +66,8 @@ async function AmmoPhysics() {
66
66
 
67
67
  }
68
68
 
69
+ console.error( 'AmmoPhysics: Unsupported geometry type:', geometry.type );
70
+
69
71
  return null;
70
72
 
71
73
  }
@@ -83,7 +85,7 @@ async function AmmoPhysics() {
83
85
 
84
86
  if ( physics ) {
85
87
 
86
- addMesh( child, physics.mass );
88
+ addMesh( child, physics.mass, physics.restitution );
87
89
 
88
90
  }
89
91
 
@@ -93,7 +95,7 @@ async function AmmoPhysics() {
93
95
 
94
96
  }
95
97
 
96
- function addMesh( mesh, mass = 0 ) {
98
+ function addMesh( mesh, mass = 0, restitution = 0 ) {
97
99
 
98
100
  const shape = getShape( mesh.geometry );
99
101
 
@@ -101,11 +103,11 @@ async function AmmoPhysics() {
101
103
 
102
104
  if ( mesh.isInstancedMesh ) {
103
105
 
104
- handleInstancedMesh( mesh, mass, shape );
106
+ handleInstancedMesh( mesh, shape, mass, restitution );
105
107
 
106
108
  } else if ( mesh.isMesh ) {
107
109
 
108
- handleMesh( mesh, mass, shape );
110
+ handleMesh( mesh, shape, mass, restitution );
109
111
 
110
112
  }
111
113
 
@@ -113,7 +115,7 @@ async function AmmoPhysics() {
113
115
 
114
116
  }
115
117
 
116
- function handleMesh( mesh, mass, shape ) {
118
+ function handleMesh( mesh, shape, mass, restitution ) {
117
119
 
118
120
  const position = mesh.position;
119
121
  const quaternion = mesh.quaternion;
@@ -129,6 +131,7 @@ async function AmmoPhysics() {
129
131
  shape.calculateLocalInertia( mass, localInertia );
130
132
 
131
133
  const rbInfo = new AmmoLib.btRigidBodyConstructionInfo( mass, motionState, shape, localInertia );
134
+ rbInfo.set_m_restitution( restitution );
132
135
 
133
136
  const body = new AmmoLib.btRigidBody( rbInfo );
134
137
  // body.setFriction( 4 );
@@ -144,7 +147,7 @@ async function AmmoPhysics() {
144
147
 
145
148
  }
146
149
 
147
- function handleInstancedMesh( mesh, mass, shape ) {
150
+ function handleInstancedMesh( mesh, shape, mass, restitution ) {
148
151
 
149
152
  const array = mesh.instanceMatrix.array;
150
153
 
@@ -163,6 +166,7 @@ async function AmmoPhysics() {
163
166
  shape.calculateLocalInertia( mass, localInertia );
164
167
 
165
168
  const rbInfo = new AmmoLib.btRigidBodyConstructionInfo( mass, motionState, shape, localInertia );
169
+ rbInfo.set_m_restitution( restitution );
166
170
 
167
171
  const body = new AmmoLib.btRigidBody( rbInfo );
168
172
  world.addRigidBody( body );
@@ -302,6 +306,7 @@ async function AmmoPhysics() {
302
306
  * @name AmmoPhysics#addMesh
303
307
  * @param {Mesh} mesh The mesh to add.
304
308
  * @param {number} [mass=0] The mass in kg of the mesh.
309
+ * @param {number} [restitution=0] The restitution of the mesh, usually from 0 to 1. Represents how "bouncy" objects are when they collide with each other.
305
310
  */
306
311
  addMesh: addMesh,
307
312
 
@@ -1,6 +1,6 @@
1
- import { Clock, Vector3, Quaternion, Matrix4 } from 'three';
1
+ import { Timer, Vector3, Quaternion, Matrix4 } from 'three';
2
2
 
3
- const JOLT_PATH = 'https://cdn.jsdelivr.net/npm/jolt-physics@0.23.0/dist/jolt-physics.wasm-compat.js';
3
+ const JOLT_PATH = 'https://cdn.jsdelivr.net/npm/jolt-physics@1.0.0/dist/jolt-physics.wasm-compat.js';
4
4
 
5
5
  const frameRate = 60;
6
6
 
@@ -28,6 +28,8 @@ function getShape( geometry ) {
28
28
 
29
29
  }
30
30
 
31
+ console.error( 'JoltPhysics: Unsupported geometry type:', geometry.type );
32
+
31
33
  return null;
32
34
 
33
35
  }
@@ -75,7 +77,7 @@ async function JoltPhysics() {
75
77
 
76
78
  if ( Jolt === null ) {
77
79
 
78
- const { default: initJolt } = await import( `${JOLT_PATH}` );
80
+ const { default: initJolt } = await import( JOLT_PATH /* @vite-ignore */ );
79
81
  Jolt = await initJolt();
80
82
 
81
83
  }
@@ -220,11 +222,13 @@ async function JoltPhysics() {
220
222
 
221
223
  //
222
224
 
223
- const clock = new Clock();
225
+ const timer = new Timer();
224
226
 
225
227
  function step() {
226
228
 
227
- let deltaTime = clock.getDelta();
229
+ timer.update();
230
+
231
+ let deltaTime = timer.getDelta();
228
232
 
229
233
  // Don't go below 30 Hz to prevent spiral of death
230
234
  deltaTime = Math.min( deltaTime, 1.0 / 30.0 );
@@ -305,7 +309,7 @@ async function JoltPhysics() {
305
309
  * @name JoltPhysics#addMesh
306
310
  * @param {Mesh} mesh The mesh to add.
307
311
  * @param {number} [mass=0] The mass in kg of the mesh.
308
- * @param {number} [restitution=0] The restitution/friction of the mesh.
312
+ * @param {number} [restitution=0] The restitution of the mesh, usually from 0 to 1. Represents how "bouncy" objects are when they collide with each other.
309
313
  */
310
314
  addMesh: addMesh,
311
315
 
@@ -1,4 +1,4 @@
1
- import { Clock, Vector3, Quaternion, Matrix4 } from 'three';
1
+ import { Timer, Vector3, Quaternion, Matrix4 } from 'three';
2
2
 
3
3
  const RAPIER_PATH = 'https://cdn.skypack.dev/@dimforge/rapier3d-compat@0.17.3';
4
4
 
@@ -73,6 +73,8 @@ function getShape( geometry ) {
73
73
 
74
74
  }
75
75
 
76
+ console.error( 'RapierPhysics: Unsupported geometry type:', geometry.type );
77
+
76
78
  return null;
77
79
 
78
80
  }
@@ -95,7 +97,7 @@ async function RapierPhysics() {
95
97
 
96
98
  if ( RAPIER === null ) {
97
99
 
98
- RAPIER = await import( `${RAPIER_PATH}` );
100
+ RAPIER = await import( RAPIER_PATH /* @vite-ignore */ );
99
101
  await RAPIER.init();
100
102
 
101
103
  }
@@ -299,11 +301,13 @@ async function RapierPhysics() {
299
301
 
300
302
  //
301
303
 
302
- const clock = new Clock();
304
+ const timer = new Timer();
303
305
 
304
306
  function step() {
305
307
 
306
- world.timestep = clock.getDelta();
308
+ timer.update();
309
+
310
+ world.timestep = timer.getDelta();
307
311
  world.step();
308
312
 
309
313
  //
@@ -372,7 +376,7 @@ async function RapierPhysics() {
372
376
  * @name RapierPhysics#addMesh
373
377
  * @param {Mesh} mesh The mesh to add.
374
378
  * @param {number} [mass=0] The mass in kg of the mesh.
375
- * @param {number} [restitution=0] The restitution/friction of the mesh.
379
+ * @param {number} [restitution=0] The restitution of the mesh, usually from 0 to 1. Represents how "bouncy" objects are when they collide with each other.
376
380
  */
377
381
  addMesh: addMesh,
378
382
 
@@ -1,7 +1,7 @@
1
1
  import {
2
- Clock,
3
2
  HalfFloatType,
4
3
  NoBlending,
4
+ Timer,
5
5
  Vector2,
6
6
  WebGLRenderTarget
7
7
  } from 'three';
@@ -121,12 +121,12 @@ class EffectComposer {
121
121
  this.copyPass.material.blending = NoBlending;
122
122
 
123
123
  /**
124
- * The internal clock for managing time data.
124
+ * The internal timer for managing time data.
125
125
  *
126
126
  * @private
127
- * @type {Clock}
127
+ * @type {Timer}
128
128
  */
129
- this.clock = new Clock();
129
+ this.timer = new Timer();
130
130
 
131
131
  }
132
132
 
@@ -215,9 +215,11 @@ class EffectComposer {
215
215
 
216
216
  // deltaTime value is in seconds
217
217
 
218
+ this.timer.update();
219
+
218
220
  if ( deltaTime === undefined ) {
219
221
 
220
- deltaTime = this.clock.getDelta();
222
+ deltaTime = this.timer.getDelta();
221
223
 
222
224
  }
223
225
 
@@ -39,6 +39,15 @@ class OutputPass extends Pass {
39
39
 
40
40
  super();
41
41
 
42
+ /**
43
+ * This flag indicates that this is an output pass.
44
+ *
45
+ * @type {boolean}
46
+ * @readonly
47
+ * @default true
48
+ */
49
+ this.isOutputPass = true;
50
+
42
51
  /**
43
52
  * The pass uniforms.
44
53
  *
@@ -93,6 +93,16 @@ class RenderPass extends Pass {
93
93
  * @default false
94
94
  */
95
95
  this.needsSwap = false;
96
+
97
+ /**
98
+ * This flag indicates that this pass renders the scene itself.
99
+ *
100
+ * @type {boolean}
101
+ * @readonly
102
+ * @default true
103
+ */
104
+ this.isRenderPass = true;
105
+
96
106
  this._oldClearColor = new Color();
97
107
 
98
108
  }
@@ -114,7 +114,7 @@ class RenderTransitionPass extends Pass {
114
114
  }
115
115
 
116
116
  /**
117
- * Sets the texture threshold. This value defined how strong the texture effects
117
+ * Sets the texture threshold. This value defines how strong the texture effects
118
118
  * the transition. Must be in the range `[0,1]` (0 means full effect, 1 means no effect).
119
119
  *
120
120
  * @param {boolean|number} value - The threshold value.
@@ -56,7 +56,7 @@ class UnrealBloomPass extends Pass {
56
56
  this.strength = strength;
57
57
 
58
58
  /**
59
- * The Bloom radius.
59
+ * The Bloom radius. Must be in the range `[0,1]`.
60
60
  *
61
61
  * @type {number}
62
62
  */
@@ -187,6 +187,7 @@ class UnrealBloomPass extends Pass {
187
187
  uniforms: this.copyUniforms,
188
188
  vertexShader: CopyShader.vertexShader,
189
189
  fragmentShader: CopyShader.fragmentShader,
190
+ premultipliedAlpha: true,
190
191
  blending: AdditiveBlending,
191
192
  depthTest: false,
192
193
  depthWrite: false,
@@ -399,33 +400,46 @@ class UnrealBloomPass extends Pass {
399
400
  'gaussianCoefficients': { value: coefficients } // precomputed Gaussian coefficients
400
401
  },
401
402
 
402
- vertexShader:
403
- `varying vec2 vUv;
403
+ vertexShader: /* glsl */`
404
+
405
+ varying vec2 vUv;
406
+
404
407
  void main() {
408
+
405
409
  vUv = uv;
406
410
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
411
+
407
412
  }`,
408
413
 
409
- fragmentShader:
410
- `#include <common>
414
+ fragmentShader: /* glsl */`
415
+
416
+ #include <common>
417
+
411
418
  varying vec2 vUv;
419
+
412
420
  uniform sampler2D colorTexture;
413
421
  uniform vec2 invSize;
414
422
  uniform vec2 direction;
415
423
  uniform float gaussianCoefficients[KERNEL_RADIUS];
416
424
 
417
425
  void main() {
426
+
418
427
  float weightSum = gaussianCoefficients[0];
419
428
  vec3 diffuseSum = texture2D( colorTexture, vUv ).rgb * weightSum;
420
- for( int i = 1; i < KERNEL_RADIUS; i ++ ) {
421
- float x = float(i);
429
+
430
+ for ( int i = 1; i < KERNEL_RADIUS; i ++ ) {
431
+
432
+ float x = float( i );
422
433
  float w = gaussianCoefficients[i];
423
434
  vec2 uvOffset = direction * invSize * x;
424
435
  vec3 sample1 = texture2D( colorTexture, vUv + uvOffset ).rgb;
425
436
  vec3 sample2 = texture2D( colorTexture, vUv - uvOffset ).rgb;
426
437
  diffuseSum += ( sample1 + sample2 ) * w;
438
+
427
439
  }
440
+
428
441
  gl_FragColor = vec4( diffuseSum, 1.0 );
442
+
429
443
  }`
430
444
  } );
431
445
 
@@ -451,15 +465,21 @@ class UnrealBloomPass extends Pass {
451
465
  'bloomRadius': { value: 0.0 }
452
466
  },
453
467
 
454
- vertexShader:
455
- `varying vec2 vUv;
468
+ vertexShader: /* glsl */`
469
+
470
+ varying vec2 vUv;
471
+
456
472
  void main() {
473
+
457
474
  vUv = uv;
458
475
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
476
+
459
477
  }`,
460
478
 
461
- fragmentShader:
462
- `varying vec2 vUv;
479
+ fragmentShader: /* glsl */`
480
+
481
+ varying vec2 vUv;
482
+
463
483
  uniform sampler2D blurTexture1;
464
484
  uniform sampler2D blurTexture2;
465
485
  uniform sampler2D blurTexture3;
@@ -470,17 +490,27 @@ class UnrealBloomPass extends Pass {
470
490
  uniform float bloomFactors[NUM_MIPS];
471
491
  uniform vec3 bloomTintColors[NUM_MIPS];
472
492
 
473
- float lerpBloomFactor(const in float factor) {
493
+ float lerpBloomFactor( const in float factor ) {
494
+
474
495
  float mirrorFactor = 1.2 - factor;
475
- return mix(factor, mirrorFactor, bloomRadius);
496
+ return mix( factor, mirrorFactor, bloomRadius );
497
+
476
498
  }
477
499
 
478
500
  void main() {
479
- gl_FragColor = bloomStrength * ( lerpBloomFactor(bloomFactors[0]) * vec4(bloomTintColors[0], 1.0) * texture2D(blurTexture1, vUv) +
480
- lerpBloomFactor(bloomFactors[1]) * vec4(bloomTintColors[1], 1.0) * texture2D(blurTexture2, vUv) +
481
- lerpBloomFactor(bloomFactors[2]) * vec4(bloomTintColors[2], 1.0) * texture2D(blurTexture3, vUv) +
482
- lerpBloomFactor(bloomFactors[3]) * vec4(bloomTintColors[3], 1.0) * texture2D(blurTexture4, vUv) +
483
- lerpBloomFactor(bloomFactors[4]) * vec4(bloomTintColors[4], 1.0) * texture2D(blurTexture5, vUv) );
501
+
502
+ // 3.0 for backwards compatibility with previous alpha-based intensity
503
+ vec3 bloom = 3.0 * bloomStrength * (
504
+ lerpBloomFactor( bloomFactors[ 0 ] ) * bloomTintColors[ 0 ] * texture2D( blurTexture1, vUv ).rgb +
505
+ lerpBloomFactor( bloomFactors[ 1 ] ) * bloomTintColors[ 1 ] * texture2D( blurTexture2, vUv ).rgb +
506
+ lerpBloomFactor( bloomFactors[ 2 ] ) * bloomTintColors[ 2 ] * texture2D( blurTexture3, vUv ).rgb +
507
+ lerpBloomFactor( bloomFactors[ 3 ] ) * bloomTintColors[ 3 ] * texture2D( blurTexture4, vUv ).rgb +
508
+ lerpBloomFactor( bloomFactors[ 4 ] ) * bloomTintColors[ 4 ] * texture2D( blurTexture5, vUv ).rgb
509
+ );
510
+
511
+ float bloomAlpha = max( bloom.r, max( bloom.g, bloom.b ) );
512
+ gl_FragColor = vec4( bloom, bloomAlpha );
513
+
484
514
  }`
485
515
  } );
486
516
 
@@ -141,7 +141,7 @@ const _matrix2 = new Matrix4();
141
141
  * This renderer can be used to apply hierarchical 3D transformations to DOM elements
142
142
  * via the CSS3 [transform](https://www.w3schools.com/cssref/css3_pr_transform.asp) property.
143
143
  * `CSS3DRenderer` is particularly interesting if you want to apply 3D effects to a website without
144
- * canvas based rendering. It can also be used in order to combine DOM elements with WebGLcontent.
144
+ * canvas based rendering. It can also be used in order to combine DOM elements with WebGL content.
145
145
  *
146
146
  * There are, however, some important limitations:
147
147
  *