@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
@@ -130,7 +130,6 @@ uniform float opacity;
130
130
  varying vec3 vViewPosition;
131
131
 
132
132
  #include <common>
133
- #include <packing>
134
133
  #include <dithering_pars_fragment>
135
134
  #include <color_pars_fragment>
136
135
  #include <uv_pars_fragment>
@@ -200,14 +199,10 @@ void main() {
200
199
  vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;
201
200
 
202
201
  #ifdef USE_SHEEN
203
-
204
- // Sheen energy compensation approximation calculation can be found at the end of
205
- // https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing
206
- float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );
207
-
208
- outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;
209
-
210
- #endif
202
+
203
+ outgoingLight = outgoingLight + sheenSpecularDirect + sheenSpecularIndirect;
204
+
205
+ #endif
211
206
 
212
207
  #ifdef USE_CLEARCOAT
213
208
 
@@ -56,7 +56,6 @@ uniform vec3 emissive;
56
56
  uniform float opacity;
57
57
 
58
58
  #include <common>
59
- #include <packing>
60
59
  #include <dithering_pars_fragment>
61
60
  #include <color_pars_fragment>
62
61
  #include <uv_pars_fragment>
@@ -36,7 +36,6 @@ uniform vec3 color;
36
36
  uniform float opacity;
37
37
 
38
38
  #include <common>
39
- #include <packing>
40
39
  #include <fog_pars_fragment>
41
40
  #include <bsdfs>
42
41
  #include <lights_pars_begin>
@@ -53,6 +52,7 @@ void main() {
53
52
  #include <tonemapping_fragment>
54
53
  #include <colorspace_fragment>
55
54
  #include <fog_fragment>
55
+ #include <premultiplied_alpha_fragment>
56
56
 
57
57
  }
58
58
  `;
@@ -11,8 +11,6 @@ uniform sampler2D shadow_pass;
11
11
  uniform vec2 resolution;
12
12
  uniform float radius;
13
13
 
14
- #include <packing>
15
-
16
14
  void main() {
17
15
 
18
16
  const float samples = float( VSM_SAMPLES );
@@ -28,13 +26,13 @@ void main() {
28
26
 
29
27
  #ifdef HORIZONTAL_PASS
30
28
 
31
- vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );
29
+ vec2 distribution = texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ).rg;
32
30
  mean += distribution.x;
33
31
  squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;
34
32
 
35
33
  #else
36
34
 
37
- float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );
35
+ float depth = texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ).r;
38
36
  mean += depth;
39
37
  squared_mean += depth * depth;
40
38
 
@@ -45,9 +43,9 @@ void main() {
45
43
  mean = mean / samples;
46
44
  squared_mean = squared_mean / samples;
47
45
 
48
- float std_dev = sqrt( squared_mean - mean * mean );
46
+ float std_dev = sqrt( max( 0.0, squared_mean - mean * mean ) );
49
47
 
50
- gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );
48
+ gl_FragColor = vec4( mean, std_dev, 0.0, 1.0 );
51
49
 
52
50
  }
53
51
  `;
@@ -39,7 +39,8 @@ const ShaderLib = {
39
39
  UniformsLib.fog,
40
40
  UniformsLib.lights,
41
41
  {
42
- emissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }
42
+ emissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },
43
+ envMapIntensity: { value: 1 }
43
44
  }
44
45
  ] ),
45
46
 
@@ -65,7 +66,8 @@ const ShaderLib = {
65
66
  {
66
67
  emissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },
67
68
  specular: { value: /*@__PURE__*/ new Color( 0x111111 ) },
68
- shininess: { value: 30 }
69
+ shininess: { value: 30 },
70
+ envMapIntensity: { value: 1 }
69
71
  }
70
72
  ] ),
71
73
 
@@ -265,7 +267,7 @@ const ShaderLib = {
265
267
 
266
268
  },
267
269
 
268
- distanceRGBA: {
270
+ distance: {
269
271
 
270
272
  uniforms: /*@__PURE__*/ mergeUniforms( [
271
273
  UniformsLib.common,
@@ -277,8 +279,8 @@ const ShaderLib = {
277
279
  }
278
280
  ] ),
279
281
 
280
- vertexShader: ShaderChunk.distanceRGBA_vert,
281
- fragmentShader: ShaderChunk.distanceRGBA_frag
282
+ vertexShader: ShaderChunk.distance_vert,
283
+ fragmentShader: ShaderChunk.distance_frag
282
284
 
283
285
  },
284
286
 
@@ -139,7 +139,6 @@ const UniformsLib = {
139
139
  shadowMapSize: {}
140
140
  } },
141
141
 
142
- directionalShadowMap: { value: [] },
143
142
  directionalShadowMatrix: { value: [] },
144
143
 
145
144
  spotLights: { value: [], properties: {
@@ -161,7 +160,6 @@ const UniformsLib = {
161
160
  } },
162
161
 
163
162
  spotLightMap: { value: [] },
164
- spotShadowMap: { value: [] },
165
163
  spotLightMatrix: { value: [] },
166
164
 
167
165
  pointLights: { value: [], properties: {
@@ -181,7 +179,6 @@ const UniformsLib = {
181
179
  shadowCameraFar: {}
182
180
  } },
183
181
 
184
- pointShadowMap: { value: [] },
185
182
  pointShadowMatrix: { value: [] },
186
183
 
187
184
  hemisphereLights: { value: [], properties: {
@@ -14,7 +14,7 @@ const _rgb = { r: 0, b: 0, g: 0 };
14
14
  const _e1 = /*@__PURE__*/ new Euler();
15
15
  const _m1 = /*@__PURE__*/ new Matrix4();
16
16
 
17
- function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha, premultipliedAlpha ) {
17
+ function WebGLBackground( renderer, environments, state, objects, alpha, premultipliedAlpha ) {
18
18
 
19
19
  const clearColor = new Color( 0x000000 );
20
20
  let clearAlpha = alpha === true ? 0 : 1;
@@ -33,7 +33,7 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
33
33
  if ( background && background.isTexture ) {
34
34
 
35
35
  const usePMREM = scene.backgroundBlurriness > 0; // use PMREM if the user wants to blur the background
36
- background = ( usePMREM ? cubeuvmaps : cubemaps ).get( background );
36
+ background = environments.get( background, usePMREM );
37
37
 
38
38
  }
39
39
 
@@ -14,7 +14,7 @@ function WebGLBindingStates( gl, attributes ) {
14
14
 
15
15
  let updateBuffers = false;
16
16
 
17
- const state = getBindingState( geometry, program, material );
17
+ const state = getBindingState( object, geometry, program, material );
18
18
 
19
19
  if ( currentState !== state ) {
20
20
 
@@ -67,16 +67,28 @@ function WebGLBindingStates( gl, attributes ) {
67
67
 
68
68
  }
69
69
 
70
- function getBindingState( geometry, program, material ) {
70
+ function getBindingState( object, geometry, program, material ) {
71
71
 
72
72
  const wireframe = ( material.wireframe === true );
73
73
 
74
- let programMap = bindingStates[ geometry.id ];
74
+ let objectMap = bindingStates[ geometry.id ];
75
+
76
+ if ( objectMap === undefined ) {
77
+
78
+ objectMap = {};
79
+ bindingStates[ geometry.id ] = objectMap;
80
+
81
+ }
82
+
83
+ // Each InstancedMesh requires unique binding states because it contains instanced attributes.
84
+ const objectId = ( object.isInstancedMesh === true ) ? object.id : 0;
85
+
86
+ let programMap = objectMap[ objectId ];
75
87
 
76
88
  if ( programMap === undefined ) {
77
89
 
78
90
  programMap = {};
79
- bindingStates[ geometry.id ] = programMap;
91
+ objectMap[ objectId ] = programMap;
80
92
 
81
93
  }
82
94
 
@@ -477,21 +489,27 @@ function WebGLBindingStates( gl, attributes ) {
477
489
 
478
490
  for ( const geometryId in bindingStates ) {
479
491
 
480
- const programMap = bindingStates[ geometryId ];
492
+ const objectMap = bindingStates[ geometryId ];
481
493
 
482
- for ( const programId in programMap ) {
494
+ for ( const objectId in objectMap ) {
483
495
 
484
- const stateMap = programMap[ programId ];
496
+ const programMap = objectMap[ objectId ];
485
497
 
486
- for ( const wireframe in stateMap ) {
498
+ for ( const programId in programMap ) {
487
499
 
488
- deleteVertexArrayObject( stateMap[ wireframe ].object );
500
+ const stateMap = programMap[ programId ];
489
501
 
490
- delete stateMap[ wireframe ];
502
+ for ( const wireframe in stateMap ) {
491
503
 
492
- }
504
+ deleteVertexArrayObject( stateMap[ wireframe ].object );
493
505
 
494
- delete programMap[ programId ];
506
+ delete stateMap[ wireframe ];
507
+
508
+ }
509
+
510
+ delete programMap[ programId ];
511
+
512
+ }
495
513
 
496
514
  }
497
515
 
@@ -505,21 +523,27 @@ function WebGLBindingStates( gl, attributes ) {
505
523
 
506
524
  if ( bindingStates[ geometry.id ] === undefined ) return;
507
525
 
508
- const programMap = bindingStates[ geometry.id ];
526
+ const objectMap = bindingStates[ geometry.id ];
509
527
 
510
- for ( const programId in programMap ) {
528
+ for ( const objectId in objectMap ) {
511
529
 
512
- const stateMap = programMap[ programId ];
530
+ const programMap = objectMap[ objectId ];
513
531
 
514
- for ( const wireframe in stateMap ) {
532
+ for ( const programId in programMap ) {
515
533
 
516
- deleteVertexArrayObject( stateMap[ wireframe ].object );
534
+ const stateMap = programMap[ programId ];
517
535
 
518
- delete stateMap[ wireframe ];
536
+ for ( const wireframe in stateMap ) {
519
537
 
520
- }
538
+ deleteVertexArrayObject( stateMap[ wireframe ].object );
521
539
 
522
- delete programMap[ programId ];
540
+ delete stateMap[ wireframe ];
541
+
542
+ }
543
+
544
+ delete programMap[ programId ];
545
+
546
+ }
523
547
 
524
548
  }
525
549
 
@@ -531,26 +555,73 @@ function WebGLBindingStates( gl, attributes ) {
531
555
 
532
556
  for ( const geometryId in bindingStates ) {
533
557
 
534
- const programMap = bindingStates[ geometryId ];
558
+ const objectMap = bindingStates[ geometryId ];
559
+
560
+ for ( const objectId in objectMap ) {
561
+
562
+ const programMap = objectMap[ objectId ];
563
+
564
+ if ( programMap[ program.id ] === undefined ) continue;
565
+
566
+ const stateMap = programMap[ program.id ];
567
+
568
+ for ( const wireframe in stateMap ) {
569
+
570
+ deleteVertexArrayObject( stateMap[ wireframe ].object );
571
+
572
+ delete stateMap[ wireframe ];
573
+
574
+ }
575
+
576
+ delete programMap[ program.id ];
577
+
578
+ }
579
+
580
+ }
581
+
582
+ }
583
+
584
+ function releaseStatesOfObject( object ) {
585
+
586
+ for ( const geometryId in bindingStates ) {
587
+
588
+ const objectMap = bindingStates[ geometryId ];
535
589
 
536
- if ( programMap[ program.id ] === undefined ) continue;
590
+ const objectId = ( object.isInstancedMesh === true ) ? object.id : 0;
537
591
 
538
- const stateMap = programMap[ program.id ];
592
+ const programMap = objectMap[ objectId ];
539
593
 
540
- for ( const wireframe in stateMap ) {
594
+ if ( programMap === undefined ) continue;
541
595
 
542
- deleteVertexArrayObject( stateMap[ wireframe ].object );
596
+ for ( const programId in programMap ) {
543
597
 
544
- delete stateMap[ wireframe ];
598
+ const stateMap = programMap[ programId ];
599
+
600
+ for ( const wireframe in stateMap ) {
601
+
602
+ deleteVertexArrayObject( stateMap[ wireframe ].object );
603
+
604
+ delete stateMap[ wireframe ];
605
+
606
+ }
607
+
608
+ delete programMap[ programId ];
545
609
 
546
610
  }
547
611
 
548
- delete programMap[ program.id ];
612
+ delete objectMap[ objectId ];
613
+
614
+ if ( Object.keys( objectMap ).length === 0 ) {
615
+
616
+ delete bindingStates[ geometryId ];
617
+
618
+ }
549
619
 
550
620
  }
551
621
 
552
622
  }
553
623
 
624
+
554
625
  function reset() {
555
626
 
556
627
  resetDefaultState();
@@ -580,6 +651,7 @@ function WebGLBindingStates( gl, attributes ) {
580
651
  resetDefaultState: resetDefaultState,
581
652
  dispose: dispose,
582
653
  releaseStatesOfGeometry: releaseStatesOfGeometry,
654
+ releaseStatesOfObject: releaseStatesOfObject,
583
655
  releaseStatesOfProgram: releaseStatesOfProgram,
584
656
 
585
657
  initAttributes: initAttributes,
@@ -105,9 +105,8 @@ function WebGLCapabilities( gl, extensions, parameters, utils ) {
105
105
  const maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );
106
106
  const maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );
107
107
 
108
- const vertexTextures = maxVertexTextures > 0;
109
-
110
108
  const maxSamples = gl.getParameter( gl.MAX_SAMPLES );
109
+ const samples = gl.getParameter( gl.SAMPLES );
111
110
 
112
111
  return {
113
112
 
@@ -133,9 +132,9 @@ function WebGLCapabilities( gl, extensions, parameters, utils ) {
133
132
  maxVaryings: maxVaryings,
134
133
  maxFragmentUniforms: maxFragmentUniforms,
135
134
 
136
- vertexTextures: vertexTextures,
135
+ maxSamples: maxSamples,
137
136
 
138
- maxSamples: maxSamples
137
+ samples: samples
139
138
 
140
139
  };
141
140
 
@@ -0,0 +1,228 @@
1
+ import { CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../constants.js';
2
+ import { PMREMGenerator } from '../../extras/PMREMGenerator.js';
3
+ import { WebGLCubeRenderTarget } from '../WebGLCubeRenderTarget.js';
4
+
5
+ function WebGLEnvironments( renderer ) {
6
+
7
+ let cubeMaps = new WeakMap();
8
+ let pmremMaps = new WeakMap();
9
+
10
+ let pmremGenerator = null;
11
+
12
+ function get( texture, usePMREM = false ) {
13
+
14
+ if ( texture === null || texture === undefined ) return null;
15
+
16
+ if ( usePMREM ) {
17
+
18
+ return getPMREM( texture );
19
+
20
+ }
21
+
22
+ return getCube( texture );
23
+
24
+ }
25
+
26
+ function getCube( texture ) {
27
+
28
+ if ( texture && texture.isTexture ) {
29
+
30
+ const mapping = texture.mapping;
31
+
32
+ if ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {
33
+
34
+ if ( cubeMaps.has( texture ) ) {
35
+
36
+ const cubemap = cubeMaps.get( texture ).texture;
37
+ return mapTextureMapping( cubemap, texture.mapping );
38
+
39
+ } else {
40
+
41
+ const image = texture.image;
42
+
43
+ if ( image && image.height > 0 ) {
44
+
45
+ const renderTarget = new WebGLCubeRenderTarget( image.height );
46
+ renderTarget.fromEquirectangularTexture( renderer, texture );
47
+ cubeMaps.set( texture, renderTarget );
48
+
49
+ texture.addEventListener( 'dispose', onCubemapDispose );
50
+
51
+ return mapTextureMapping( renderTarget.texture, texture.mapping );
52
+
53
+ } else {
54
+
55
+ // image not yet ready. try the conversion next frame
56
+
57
+ return null;
58
+
59
+ }
60
+
61
+ }
62
+
63
+ }
64
+
65
+ }
66
+
67
+ return texture;
68
+
69
+ }
70
+
71
+ function getPMREM( texture ) {
72
+
73
+ if ( texture && texture.isTexture ) {
74
+
75
+ const mapping = texture.mapping;
76
+
77
+ const isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping );
78
+ const isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );
79
+
80
+ // equirect/cube map to cubeUV conversion
81
+
82
+ if ( isEquirectMap || isCubeMap ) {
83
+
84
+ let renderTarget = pmremMaps.get( texture );
85
+
86
+ const currentPMREMVersion = renderTarget !== undefined ? renderTarget.texture.pmremVersion : 0;
87
+
88
+ if ( texture.isRenderTargetTexture && texture.pmremVersion !== currentPMREMVersion ) {
89
+
90
+ if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );
91
+
92
+ renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture, renderTarget ) : pmremGenerator.fromCubemap( texture, renderTarget );
93
+ renderTarget.texture.pmremVersion = texture.pmremVersion;
94
+
95
+ pmremMaps.set( texture, renderTarget );
96
+
97
+ return renderTarget.texture;
98
+
99
+ } else {
100
+
101
+ if ( renderTarget !== undefined ) {
102
+
103
+ return renderTarget.texture;
104
+
105
+ } else {
106
+
107
+ const image = texture.image;
108
+
109
+ if ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) {
110
+
111
+ if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );
112
+
113
+ renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );
114
+ renderTarget.texture.pmremVersion = texture.pmremVersion;
115
+
116
+ pmremMaps.set( texture, renderTarget );
117
+
118
+ texture.addEventListener( 'dispose', onPMREMDispose );
119
+
120
+ return renderTarget.texture;
121
+
122
+ } else {
123
+
124
+ // image not yet ready. try the conversion next frame
125
+
126
+ return null;
127
+
128
+ }
129
+
130
+ }
131
+
132
+ }
133
+
134
+ }
135
+
136
+ }
137
+
138
+ return texture;
139
+
140
+ }
141
+
142
+ function mapTextureMapping( texture, mapping ) {
143
+
144
+ if ( mapping === EquirectangularReflectionMapping ) {
145
+
146
+ texture.mapping = CubeReflectionMapping;
147
+
148
+ } else if ( mapping === EquirectangularRefractionMapping ) {
149
+
150
+ texture.mapping = CubeRefractionMapping;
151
+
152
+ }
153
+
154
+ return texture;
155
+
156
+ }
157
+
158
+ function isCubeTextureComplete( image ) {
159
+
160
+ let count = 0;
161
+ const length = 6;
162
+
163
+ for ( let i = 0; i < length; i ++ ) {
164
+
165
+ if ( image[ i ] !== undefined ) count ++;
166
+
167
+ }
168
+
169
+ return count === length;
170
+
171
+ }
172
+
173
+ function onCubemapDispose( event ) {
174
+
175
+ const texture = event.target;
176
+
177
+ texture.removeEventListener( 'dispose', onCubemapDispose );
178
+
179
+ const cubemap = cubeMaps.get( texture );
180
+
181
+ if ( cubemap !== undefined ) {
182
+
183
+ cubeMaps.delete( texture );
184
+ cubemap.dispose();
185
+
186
+ }
187
+
188
+ }
189
+
190
+ function onPMREMDispose( event ) {
191
+
192
+ const texture = event.target;
193
+
194
+ texture.removeEventListener( 'dispose', onPMREMDispose );
195
+
196
+ const pmrem = pmremMaps.get( texture );
197
+
198
+ if ( pmrem !== undefined ) {
199
+
200
+ pmremMaps.delete( texture );
201
+ pmrem.dispose();
202
+
203
+ }
204
+
205
+ }
206
+
207
+ function dispose() {
208
+
209
+ cubeMaps = new WeakMap();
210
+ pmremMaps = new WeakMap();
211
+
212
+ if ( pmremGenerator !== null ) {
213
+
214
+ pmremGenerator.dispose();
215
+ pmremGenerator = null;
216
+
217
+ }
218
+
219
+ }
220
+
221
+ return {
222
+ get: get,
223
+ dispose: dispose
224
+ };
225
+
226
+ }
227
+
228
+ export { WebGLEnvironments };
@@ -1,5 +1,4 @@
1
1
  import { Uint16BufferAttribute, Uint32BufferAttribute } from '../../core/BufferAttribute.js';
2
- import { arrayNeedsUint32 } from '../../utils.js';
3
2
 
4
3
  function WebGLGeometries( gl, attributes, info, bindingStates ) {
5
4
 
@@ -85,6 +84,12 @@ function WebGLGeometries( gl, attributes, info, bindingStates ) {
85
84
  const geometryPosition = geometry.attributes.position;
86
85
  let version = 0;
87
86
 
87
+ if ( geometryPosition === undefined ) {
88
+
89
+ return;
90
+
91
+ }
92
+
88
93
  if ( geometryIndex !== null ) {
89
94
 
90
95
  const array = geometryIndex.array;
@@ -100,7 +105,7 @@ function WebGLGeometries( gl, attributes, info, bindingStates ) {
100
105
 
101
106
  }
102
107
 
103
- } else if ( geometryPosition !== undefined ) {
108
+ } else {
104
109
 
105
110
  const array = geometryPosition.array;
106
111
  version = geometryPosition.version;
@@ -115,13 +120,11 @@ function WebGLGeometries( gl, attributes, info, bindingStates ) {
115
120
 
116
121
  }
117
122
 
118
- } else {
119
-
120
- return;
121
-
122
123
  }
123
124
 
124
- const attribute = new ( arrayNeedsUint32( indices ) ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );
125
+ // check whether a 32 bit or 16 bit buffer is required to store the indices
126
+ // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565
127
+ const attribute = new ( geometryPosition.count >= 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );
125
128
  attribute.version = version;
126
129
 
127
130
  // Updating index buffer in VAO now. See WebGLBindingStates
@@ -3,6 +3,7 @@ import { Matrix4 } from '../../math/Matrix4.js';
3
3
  import { Vector2 } from '../../math/Vector2.js';
4
4
  import { Vector3 } from '../../math/Vector3.js';
5
5
  import { UniformsLib } from '../shaders/UniformsLib.js';
6
+ import { RGFormat } from '../../constants.js';
6
7
 
7
8
  function UniformsCache() {
8
9
 
@@ -239,7 +240,23 @@ function WebGLLights( extensions ) {
239
240
  const intensity = light.intensity;
240
241
  const distance = light.distance;
241
242
 
242
- const shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;
243
+ let shadowMap = null;
244
+
245
+ if ( light.shadow && light.shadow.map ) {
246
+
247
+ if ( light.shadow.map.texture.format === RGFormat ) {
248
+
249
+ // VSM uses color texture with blurred mean/std_dev
250
+ shadowMap = light.shadow.map.texture;
251
+
252
+ } else {
253
+
254
+ // Other types use depth texture
255
+ shadowMap = light.shadow.map.depthTexture || light.shadow.map.texture;
256
+
257
+ }
258
+
259
+ }
243
260
 
244
261
  if ( light.isAmbientLight ) {
245
262