@needle-tools/three 0.145.4 → 0.146.2

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 (393) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +32586 -35951
  3. package/build/three.js +32600 -35965
  4. package/build/three.min.js +6 -7
  5. package/build/three.module.js +1547 -1154
  6. package/examples/js/animation/AnimationClipCreator.js +0 -8
  7. package/examples/js/animation/CCDIKSolver.js +49 -66
  8. package/examples/js/animation/MMDAnimationHelper.js +66 -137
  9. package/examples/js/animation/MMDPhysics.js +70 -134
  10. package/examples/js/cameras/CinematicCamera.js +33 -22
  11. package/examples/js/controls/ArcballControls.js +138 -405
  12. package/examples/js/controls/DragControls.js +8 -33
  13. package/examples/js/controls/FirstPersonControls.js +32 -54
  14. package/examples/js/controls/FlyControls.js +29 -55
  15. package/examples/js/controls/OrbitControls.js +85 -95
  16. package/examples/js/controls/PointerLockControls.js +5 -14
  17. package/examples/js/controls/TrackballControls.js +33 -86
  18. package/examples/js/controls/TransformControls.js +84 -169
  19. package/examples/js/csm/CSM.js +4 -39
  20. package/examples/js/csm/CSMFrustum.js +3 -9
  21. package/examples/js/csm/CSMHelper.js +24 -4
  22. package/examples/js/csm/CSMShader.js +2 -6
  23. package/examples/js/curves/CurveExtras.js +27 -27
  24. package/examples/js/curves/NURBSCurve.js +4 -16
  25. package/examples/js/curves/NURBSSurface.js +3 -9
  26. package/examples/js/curves/NURBSUtils.js +8 -45
  27. package/examples/js/effects/AnaglyphEffect.js +4 -18
  28. package/examples/js/effects/AsciiEffect.js +32 -31
  29. package/examples/js/effects/OutlineEffect.js +26 -30
  30. package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
  31. package/examples/js/effects/PeppersGhostEffect.js +12 -39
  32. package/examples/js/effects/StereoEffect.js +0 -4
  33. package/examples/js/environments/RoomEnvironment.js +12 -10
  34. package/examples/js/exporters/ColladaExporter.js +48 -65
  35. package/examples/js/exporters/DRACOExporter.js +22 -22
  36. package/examples/js/exporters/EXRExporter.js +15 -18
  37. package/examples/js/exporters/GLTFExporter.js +143 -261
  38. package/examples/js/exporters/MMDExporter.js +5 -12
  39. package/examples/js/exporters/OBJExporter.js +42 -33
  40. package/examples/js/exporters/PLYExporter.js +38 -33
  41. package/examples/js/exporters/STLExporter.js +5 -7
  42. package/examples/js/exporters/USDZExporter.js +110 -25
  43. package/examples/js/geometries/BoxLineGeometry.js +0 -1
  44. package/examples/js/geometries/ConvexGeometry.js +11 -6
  45. package/examples/js/geometries/DecalGeometry.js +53 -20
  46. package/examples/js/geometries/LightningStrike.js +54 -67
  47. package/examples/js/geometries/ParametricGeometries.js +8 -7
  48. package/examples/js/geometries/ParametricGeometry.js +25 -12
  49. package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
  50. package/examples/js/geometries/TeapotGeometry.js +54 -50
  51. package/examples/js/geometries/TextGeometry.js +6 -4
  52. package/examples/js/helpers/LightProbeHelper.js +1 -2
  53. package/examples/js/helpers/OctreeHelper.js +22 -20
  54. package/examples/js/helpers/PositionalAudioHelper.js +8 -6
  55. package/examples/js/helpers/RectAreaLightHelper.js +6 -7
  56. package/examples/js/helpers/VertexNormalsHelper.js +15 -13
  57. package/examples/js/helpers/VertexTangentsHelper.js +15 -9
  58. package/examples/js/helpers/ViewHelper.js +31 -16
  59. package/examples/js/interactive/HTMLMesh.js +22 -33
  60. package/examples/js/interactive/InteractiveGroup.js +6 -12
  61. package/examples/js/interactive/SelectionBox.js +3 -70
  62. package/examples/js/interactive/SelectionHelper.js +0 -8
  63. package/examples/js/lights/LightProbeGenerator.js +32 -39
  64. package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
  65. package/examples/js/lines/LineGeometry.js +3 -5
  66. package/examples/js/lines/LineMaterial.js +4 -11
  67. package/examples/js/lines/LineSegments2.js +38 -89
  68. package/examples/js/lines/LineSegmentsGeometry.js +7 -28
  69. package/examples/js/lines/Wireframe.js +2 -7
  70. package/examples/js/lines/WireframeGeometry2.js +3 -1
  71. package/examples/js/loaders/3DMLoader.js +58 -155
  72. package/examples/js/loaders/3MFLoader.js +72 -106
  73. package/examples/js/loaders/AMFLoader.js +0 -25
  74. package/examples/js/loaders/BVHLoader.js +44 -43
  75. package/examples/js/loaders/BasisTextureLoader.js +16 -46
  76. package/examples/js/loaders/ColladaLoader.js +201 -359
  77. package/examples/js/loaders/DDSLoader.js +24 -25
  78. package/examples/js/loaders/DRACOLoader.js +29 -66
  79. package/examples/js/loaders/EXRLoader.js +67 -164
  80. package/examples/js/loaders/FBXLoader.js +286 -441
  81. package/examples/js/loaders/FontLoader.js +6 -15
  82. package/examples/js/loaders/GCodeLoader.js +15 -16
  83. package/examples/js/loaders/GLTFLoader.js +354 -405
  84. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
  85. package/examples/js/loaders/KMZLoader.js +3 -7
  86. package/examples/js/loaders/KTXLoader.js +12 -30
  87. package/examples/js/loaders/LDrawLoader.js +178 -289
  88. package/examples/js/loaders/LUT3dlLoader.js +7 -11
  89. package/examples/js/loaders/LUTCubeLoader.js +0 -8
  90. package/examples/js/loaders/LWOLoader.js +59 -124
  91. package/examples/js/loaders/LogLuvLoader.js +27 -77
  92. package/examples/js/loaders/LottieLoader.js +4 -4
  93. package/examples/js/loaders/MD2Loader.js +26 -27
  94. package/examples/js/loaders/MDDLoader.js +6 -10
  95. package/examples/js/loaders/MMDLoader.js +180 -189
  96. package/examples/js/loaders/MTLLoader.js +18 -47
  97. package/examples/js/loaders/MaterialXLoader.js +392 -0
  98. package/examples/js/loaders/NRRDLoader.js +44 -84
  99. package/examples/js/loaders/OBJLoader.js +50 -65
  100. package/examples/js/loaders/PCDLoader.js +34 -29
  101. package/examples/js/loaders/PDBLoader.js +17 -13
  102. package/examples/js/loaders/PLYLoader.js +9 -39
  103. package/examples/js/loaders/PRWMLoader.js +11 -22
  104. package/examples/js/loaders/PVRLoader.js +7 -16
  105. package/examples/js/loaders/RGBELoader.js +36 -61
  106. package/examples/js/loaders/RGBMLoader.js +26 -87
  107. package/examples/js/loaders/STLLoader.js +20 -27
  108. package/examples/js/loaders/SVGLoader.js +361 -233
  109. package/examples/js/loaders/TDSLoader.js +81 -118
  110. package/examples/js/loaders/TGALoader.js +39 -41
  111. package/examples/js/loaders/TIFFLoader.js +0 -1
  112. package/examples/js/loaders/TTFLoader.js +0 -8
  113. package/examples/js/loaders/TiltLoader.js +14 -15
  114. package/examples/js/loaders/VOXLoader.js +8 -16
  115. package/examples/js/loaders/VRMLLoader.js +243 -340
  116. package/examples/js/loaders/VTKLoader.js +101 -118
  117. package/examples/js/loaders/XYZLoader.js +2 -4
  118. package/examples/js/loaders/lwo/IFFParser.js +55 -136
  119. package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
  120. package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
  121. package/examples/js/materials/MeshGouraudMaterial.js +15 -13
  122. package/examples/js/math/Capsule.js +0 -17
  123. package/examples/js/math/ColorConverter.js +3 -3
  124. package/examples/js/math/ConvexHull.js +183 -139
  125. package/examples/js/math/ImprovedNoise.js +1 -1
  126. package/examples/js/math/Lut.js +8 -15
  127. package/examples/js/math/MeshSurfaceSampler.js +6 -28
  128. package/examples/js/math/OBB.js +90 -49
  129. package/examples/js/math/Octree.js +2 -57
  130. package/examples/js/math/SimplexNoise.js +74 -88
  131. package/examples/js/misc/ConvexObjectBreaker.js +37 -48
  132. package/examples/js/misc/GPUComputationRenderer.js +14 -18
  133. package/examples/js/misc/Gyroscope.js +5 -9
  134. package/examples/js/misc/MD2Character.js +14 -23
  135. package/examples/js/misc/MD2CharacterComplex.js +73 -54
  136. package/examples/js/misc/MorphAnimMesh.js +0 -6
  137. package/examples/js/misc/MorphBlendMesh.js +3 -30
  138. package/examples/js/misc/ProgressiveLightMap.js +47 -43
  139. package/examples/js/misc/RollerCoaster.js +17 -24
  140. package/examples/js/misc/TubePainter.js +18 -12
  141. package/examples/js/misc/Volume.js +16 -45
  142. package/examples/js/misc/VolumeSlice.js +14 -24
  143. package/examples/js/modifiers/CurveModifier.js +19 -21
  144. package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
  145. package/examples/js/modifiers/SimplifyModifier.js +56 -59
  146. package/examples/js/modifiers/TessellateModifier.js +2 -9
  147. package/examples/js/objects/GroundProjectedEnv.js +2 -14
  148. package/examples/js/objects/Lensflare.js +47 -38
  149. package/examples/js/objects/LightningStorm.js +10 -13
  150. package/examples/js/objects/MarchingCubes.js +80 -59
  151. package/examples/js/objects/Reflector.js +22 -20
  152. package/examples/js/objects/ReflectorForSSRPass.js +19 -23
  153. package/examples/js/objects/Refractor.js +52 -30
  154. package/examples/js/objects/ShadowMesh.js +1 -2
  155. package/examples/js/objects/Sky.js +2 -7
  156. package/examples/js/objects/Water.js +23 -18
  157. package/examples/js/objects/Water2.js +20 -19
  158. package/examples/js/physics/AmmoPhysics.js +23 -20
  159. package/examples/js/physics/OimoPhysics.js +19 -17
  160. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
  161. package/examples/js/postprocessing/AfterimagePass.js +19 -12
  162. package/examples/js/postprocessing/BloomPass.js +38 -17
  163. package/examples/js/postprocessing/BokehPass.js +29 -12
  164. package/examples/js/postprocessing/ClearPass.js +1 -6
  165. package/examples/js/postprocessing/CubeTexturePass.js +12 -9
  166. package/examples/js/postprocessing/DotScreenPass.js +7 -5
  167. package/examples/js/postprocessing/EffectComposer.js +25 -32
  168. package/examples/js/postprocessing/FilmPass.js +7 -5
  169. package/examples/js/postprocessing/GlitchPass.js +10 -11
  170. package/examples/js/postprocessing/HalftonePass.js +9 -9
  171. package/examples/js/postprocessing/LUTPass.js +2 -15
  172. package/examples/js/postprocessing/MaskPass.js +20 -17
  173. package/examples/js/postprocessing/OutlinePass.js +45 -36
  174. package/examples/js/postprocessing/Pass.js +11 -14
  175. package/examples/js/postprocessing/RenderPass.js +3 -7
  176. package/examples/js/postprocessing/SAOPass.js +40 -32
  177. package/examples/js/postprocessing/SMAAPass.js +34 -17
  178. package/examples/js/postprocessing/SSAARenderPass.js +14 -14
  179. package/examples/js/postprocessing/SSAOPass.js +56 -42
  180. package/examples/js/postprocessing/SSRPass.js +78 -61
  181. package/examples/js/postprocessing/SavePass.js +14 -6
  182. package/examples/js/postprocessing/ShaderPass.js +9 -8
  183. package/examples/js/postprocessing/TAARenderPass.js +11 -9
  184. package/examples/js/postprocessing/TexturePass.js +7 -4
  185. package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
  186. package/examples/js/renderers/CSS2DRenderer.js +2 -21
  187. package/examples/js/renderers/CSS3DRenderer.js +3 -24
  188. package/examples/js/renderers/Projector.js +29 -85
  189. package/examples/js/renderers/SVGRenderer.js +4 -50
  190. package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
  191. package/examples/js/shaders/AfterimageShader.js +3 -6
  192. package/examples/js/shaders/BasicShader.js +3 -6
  193. package/examples/js/shaders/BleachBypassShader.js +3 -6
  194. package/examples/js/shaders/BlendShader.js +3 -6
  195. package/examples/js/shaders/BokehShader.js +3 -6
  196. package/examples/js/shaders/BokehShader2.js +4 -13
  197. package/examples/js/shaders/BrightnessContrastShader.js +3 -6
  198. package/examples/js/shaders/ColorCorrectionShader.js +2 -6
  199. package/examples/js/shaders/ColorifyShader.js +2 -6
  200. package/examples/js/shaders/ConvolutionShader.js +5 -10
  201. package/examples/js/shaders/CopyShader.js +3 -6
  202. package/examples/js/shaders/DOFMipMapShader.js +3 -6
  203. package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
  204. package/examples/js/shaders/DigitalGlitch.js +3 -6
  205. package/examples/js/shaders/DotScreenShader.js +2 -6
  206. package/examples/js/shaders/FXAAShader.js +1 -3
  207. package/examples/js/shaders/FilmShader.js +3 -6
  208. package/examples/js/shaders/FocusShader.js +3 -6
  209. package/examples/js/shaders/FreiChenShader.js +2 -6
  210. package/examples/js/shaders/GammaCorrectionShader.js +3 -6
  211. package/examples/js/shaders/GodRaysShader.js +11 -24
  212. package/examples/js/shaders/HalftoneShader.js +3 -6
  213. package/examples/js/shaders/HorizontalBlurShader.js +3 -6
  214. package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
  215. package/examples/js/shaders/HueSaturationShader.js +3 -6
  216. package/examples/js/shaders/KaleidoShader.js +3 -6
  217. package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
  218. package/examples/js/shaders/LuminosityShader.js +3 -6
  219. package/examples/js/shaders/MMDToonShader.js +2 -6
  220. package/examples/js/shaders/MirrorShader.js +3 -6
  221. package/examples/js/shaders/NormalMapShader.js +2 -6
  222. package/examples/js/shaders/RGBShiftShader.js +3 -6
  223. package/examples/js/shaders/SAOShader.js +2 -6
  224. package/examples/js/shaders/SMAAShader.js +6 -18
  225. package/examples/js/shaders/SSAOShader.js +2 -6
  226. package/examples/js/shaders/SSRShader.js +6 -18
  227. package/examples/js/shaders/SepiaShader.js +3 -6
  228. package/examples/js/shaders/SobelOperatorShader.js +2 -6
  229. package/examples/js/shaders/TechnicolorShader.js +3 -6
  230. package/examples/js/shaders/ToneMapShader.js +3 -6
  231. package/examples/js/shaders/ToonShader.js +8 -24
  232. package/examples/js/shaders/TriangleBlurShader.js +2 -6
  233. package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
  234. package/examples/js/shaders/VelocityShader.js +126 -0
  235. package/examples/js/shaders/VerticalBlurShader.js +3 -6
  236. package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
  237. package/examples/js/shaders/VignetteShader.js +3 -6
  238. package/examples/js/shaders/VolumeShader.js +2 -6
  239. package/examples/js/shaders/WaterRefractionShader.js +2 -6
  240. package/examples/js/textures/FlakesTexture.js +0 -1
  241. package/examples/js/utils/BufferGeometryUtils.js +234 -168
  242. package/examples/js/utils/CameraUtils.js +5 -20
  243. package/examples/js/utils/GPUStatsPanel.js +3 -12
  244. package/examples/js/utils/GeometryCompressionUtils.js +19 -44
  245. package/examples/js/utils/GeometryUtils.js +13 -18
  246. package/examples/js/utils/LDrawUtils.js +8 -11
  247. package/examples/js/utils/PackedPhongMaterial.js +6 -4
  248. package/examples/js/utils/SceneUtils.js +117 -6
  249. package/examples/js/utils/ShadowMapViewer.js +17 -14
  250. package/examples/js/utils/SkeletonUtils.js +13 -27
  251. package/examples/js/utils/UVsDebug.js +20 -12
  252. package/examples/js/utils/WorkerPool.js +1 -11
  253. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  254. package/examples/jsm/capabilities/WebGPU.js +3 -1
  255. package/examples/jsm/controls/OrbitControls.js +44 -4
  256. package/examples/jsm/exporters/GLTFExporter.js +17 -131
  257. package/examples/jsm/exporters/USDZExporter.js +75 -19
  258. package/examples/jsm/interactive/HTMLMesh.js +2 -0
  259. package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
  260. package/examples/jsm/loaders/3DMLoader.js +1 -2
  261. package/examples/jsm/loaders/ColladaLoader.js +28 -0
  262. package/examples/jsm/loaders/FBXLoader.js +16 -2
  263. package/examples/jsm/loaders/GLTFLoader.js +204 -377
  264. package/examples/jsm/loaders/KTX2Loader.js +68 -29
  265. package/examples/jsm/loaders/LDrawLoader.js +14 -13
  266. package/examples/jsm/loaders/LottieLoader.js +4 -2
  267. package/examples/jsm/loaders/MaterialXLoader.js +728 -0
  268. package/examples/jsm/loaders/PCDLoader.js +1 -1
  269. package/examples/jsm/loaders/PLYLoader.js +68 -16
  270. package/examples/jsm/loaders/SVGLoader.js +227 -14
  271. package/examples/jsm/loaders/USDZLoader.js +31 -16
  272. package/examples/jsm/nodes/Nodes.js +14 -2
  273. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  274. package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
  275. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  276. package/examples/jsm/nodes/accessors/SkinningNode.js +1 -1
  277. package/examples/jsm/nodes/core/Node.js +1 -1
  278. package/examples/jsm/nodes/core/NodeBuilder.js +36 -4
  279. package/examples/jsm/nodes/core/NodeFrame.js +2 -2
  280. package/examples/jsm/nodes/core/NodeVarying.js +7 -4
  281. package/examples/jsm/nodes/core/VaryingNode.js +6 -4
  282. package/examples/jsm/nodes/core/constants.js +13 -13
  283. package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
  284. package/examples/jsm/nodes/display/ViewportNode.js +106 -0
  285. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  286. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  287. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
  288. package/examples/jsm/nodes/materials/Materials.js +9 -7
  289. package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
  290. package/examples/jsm/nodes/materialx/MaterialXNodes.js +6 -2
  291. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
  292. package/examples/jsm/nodes/math/MathNode.js +5 -0
  293. package/examples/jsm/nodes/math/OperatorNode.js +6 -1
  294. package/examples/jsm/nodes/shadernode/ShaderNode.js +26 -13
  295. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +2 -0
  296. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +18 -0
  297. package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
  298. package/examples/jsm/nodes/utils/JoinNode.js +8 -2
  299. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
  300. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  301. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
  302. package/examples/jsm/nodes/utils/TimerNode.js +1 -1
  303. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
  304. package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
  305. package/examples/jsm/postprocessing/BloomPass.js +22 -3
  306. package/examples/jsm/postprocessing/BokehPass.js +18 -4
  307. package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
  308. package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
  309. package/examples/jsm/postprocessing/EffectComposer.js +9 -0
  310. package/examples/jsm/postprocessing/FilmPass.js +8 -0
  311. package/examples/jsm/postprocessing/GlitchPass.js +13 -1
  312. package/examples/jsm/postprocessing/HalftonePass.js +8 -0
  313. package/examples/jsm/postprocessing/OutlinePass.js +10 -0
  314. package/examples/jsm/postprocessing/Pass.js +2 -0
  315. package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
  316. package/examples/jsm/postprocessing/SAOPass.js +20 -0
  317. package/examples/jsm/postprocessing/SMAAPass.js +16 -0
  318. package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
  319. package/examples/jsm/postprocessing/SavePass.js +17 -1
  320. package/examples/jsm/postprocessing/ShaderPass.js +8 -0
  321. package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
  322. package/examples/jsm/postprocessing/TexturePass.js +8 -0
  323. package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
  324. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +39 -16
  325. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
  326. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
  327. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
  328. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
  329. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +35 -5
  330. package/examples/jsm/shaders/MMDToonShader.js +0 -2
  331. package/examples/jsm/shaders/VelocityShader.js +128 -0
  332. package/examples/jsm/utils/BufferGeometryUtils.js +130 -6
  333. package/examples/jsm/utils/SceneUtils.js +129 -4
  334. package/examples/jsm/utils/TextureUtils.js +85 -0
  335. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  336. package/examples/jsm/webxr/XRHandMeshModel.js +6 -3
  337. package/package.json +11 -12
  338. package/src/Three.js +1 -0
  339. package/src/audio/AudioContext.js +5 -5
  340. package/src/cameras/CubeCamera.js +14 -14
  341. package/src/constants.js +1 -1
  342. package/src/core/InstancedBufferGeometry.js +1 -7
  343. package/src/extras/Earcut.js +67 -67
  344. package/src/helpers/DirectionalLightHelper.js +5 -1
  345. package/src/helpers/HemisphereLightHelper.js +4 -1
  346. package/src/helpers/PointLightHelper.js +2 -1
  347. package/src/helpers/SpotLightHelper.js +4 -2
  348. package/src/lights/PointLight.js +2 -2
  349. package/src/lights/SpotLight.js +2 -2
  350. package/src/loaders/FileLoader.js +4 -1
  351. package/src/loaders/ObjectLoader.js +5 -1
  352. package/src/materials/Material.js +1 -1
  353. package/src/math/Color.js +5 -5
  354. package/src/math/Matrix3.js +53 -18
  355. package/src/math/Ray.js +2 -5
  356. package/src/math/Sphere.js +19 -26
  357. package/src/objects/InstancedMesh.js +7 -0
  358. package/src/objects/LOD.js +25 -6
  359. package/src/renderers/WebGL3DRenderTarget.js +1 -1
  360. package/src/renderers/WebGLArrayRenderTarget.js +1 -1
  361. package/src/renderers/WebGLCubeRenderTarget.js +1 -1
  362. package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
  363. package/src/renderers/WebGLRenderTarget.js +1 -1
  364. package/src/renderers/WebGLRenderer.js +36 -62
  365. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
  366. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
  367. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
  369. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
  370. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
  371. package/src/renderers/shaders/ShaderChunk.js +3 -0
  372. package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
  373. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  374. package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
  375. package/src/renderers/shaders/ShaderLib.js +20 -6
  376. package/src/renderers/shaders/UniformsLib.js +1 -1
  377. package/src/renderers/shaders/UniformsUtils.js +15 -0
  378. package/src/renderers/webgl/WebGLAttributes.js +2 -0
  379. package/src/renderers/webgl/WebGLBackground.js +15 -7
  380. package/src/renderers/webgl/WebGLLights.js +0 -4
  381. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  382. package/src/renderers/webgl/WebGLShadowMap.js +3 -1
  383. package/src/renderers/webgl/WebGLState.js +31 -1
  384. package/src/renderers/webgl/WebGLTextures.js +71 -18
  385. package/src/renderers/webgl/WebGLUniforms.js +116 -20
  386. package/src/renderers/webgl/WebGLUtils.js +1 -1
  387. package/src/renderers/webxr/WebXRController.js +46 -13
  388. package/src/renderers/webxr/WebXRManager.js +85 -3
  389. package/src/scenes/Scene.js +8 -0
  390. package/src/textures/CompressedArrayTexture.js +18 -0
  391. package/examples/js/libs/lottie_canvas.js +0 -12751
  392. package/examples/js/shaders/PixelShader.js +0 -51
  393. package/examples/jsm/shaders/PixelShader.js +0 -44
@@ -3,8 +3,7 @@ import { Vector3 } from './Vector3.js';
3
3
 
4
4
  const _box = /*@__PURE__*/ new Box3();
5
5
  const _v1 = /*@__PURE__*/ new Vector3();
6
- const _toFarthestPoint = /*@__PURE__*/ new Vector3();
7
- const _toPoint = /*@__PURE__*/ new Vector3();
6
+ const _v2 = /*@__PURE__*/ new Vector3();
8
7
 
9
8
  class Sphere {
10
9
 
@@ -164,29 +163,28 @@ class Sphere {
164
163
  if ( this.isEmpty() ) {
165
164
 
166
165
  this.center.copy( point );
166
+
167
167
  this.radius = 0;
168
168
 
169
169
  return this;
170
170
 
171
171
  }
172
172
 
173
- // from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L649-L671
174
-
175
- _toPoint.subVectors( point, this.center );
173
+ _v1.subVectors( point, this.center );
176
174
 
177
- const lengthSq = _toPoint.lengthSq();
175
+ const lengthSq = _v1.lengthSq();
178
176
 
179
177
  if ( lengthSq > ( this.radius * this.radius ) ) {
180
178
 
179
+ // calculate the minimal sphere
180
+
181
181
  const length = Math.sqrt( lengthSq );
182
- const missingRadiusHalf = ( length - this.radius ) * 0.5;
183
182
 
184
- // Nudge this sphere towards the target point. Add half the missing distance to radius,
185
- // and the other half to position. This gives a tighter enclosure, instead of if
186
- // the whole missing distance were just added to radius.
183
+ const delta = ( length - this.radius ) * 0.5;
187
184
 
188
- this.center.add( _toPoint.multiplyScalar( missingRadiusHalf / length ) );
189
- this.radius += missingRadiusHalf;
185
+ this.center.addScaledVector( _v1, delta / length );
186
+
187
+ this.radius += delta;
190
188
 
191
189
  }
192
190
 
@@ -196,12 +194,13 @@ class Sphere {
196
194
 
197
195
  union( sphere ) {
198
196
 
199
- // handle empty sphere cases
200
197
  if ( sphere.isEmpty() ) {
201
198
 
202
199
  return this;
203
200
 
204
- } else if ( this.isEmpty() ) {
201
+ }
202
+
203
+ if ( this.isEmpty() ) {
205
204
 
206
205
  this.copy( sphere );
207
206
 
@@ -209,26 +208,20 @@ class Sphere {
209
208
 
210
209
  }
211
210
 
212
- // from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L759-L769
211
+ if ( this.center.equals( sphere.center ) === true ) {
213
212
 
214
- // To enclose another sphere into this sphere, we only need to enclose two points:
215
- // 1) Enclose the farthest point on the other sphere into this sphere.
216
- // 2) Enclose the opposite point of the farthest point into this sphere.
213
+ this.radius = Math.max( this.radius, sphere.radius );
217
214
 
218
- if ( this.center.equals( sphere.center ) === true ) {
215
+ } else {
219
216
 
220
- _toFarthestPoint.set( 0, 0, 1 ).multiplyScalar( sphere.radius );
217
+ _v2.subVectors( sphere.center, this.center ).setLength( sphere.radius );
221
218
 
219
+ this.expandByPoint( _v1.copy( sphere.center ).add( _v2 ) );
222
220
 
223
- } else {
224
-
225
- _toFarthestPoint.subVectors( sphere.center, this.center ).normalize().multiplyScalar( sphere.radius );
221
+ this.expandByPoint( _v1.copy( sphere.center ).sub( _v2 ) );
226
222
 
227
223
  }
228
224
 
229
- this.expandByPoint( _v1.copy( sphere.center ).add( _toFarthestPoint ) );
230
- this.expandByPoint( _v1.copy( sphere.center ).sub( _toFarthestPoint ) );
231
-
232
225
  return this;
233
226
 
234
227
  }
@@ -7,6 +7,7 @@ const _instanceWorldMatrix = /*@__PURE__*/ new Matrix4();
7
7
 
8
8
  const _instanceIntersects = [];
9
9
 
10
+ const _identity = /*@__PURE__*/ new Matrix4();
10
11
  const _mesh = /*@__PURE__*/ new Mesh();
11
12
 
12
13
  class InstancedMesh extends Mesh {
@@ -24,6 +25,12 @@ class InstancedMesh extends Mesh {
24
25
 
25
26
  this.frustumCulled = false;
26
27
 
28
+ for ( let i = 0; i < count; i ++ ) {
29
+
30
+ this.setMatrixAt( i, _identity );
31
+
32
+ }
33
+
27
34
  }
28
35
 
29
36
  copy( source, recursive ) {
@@ -38,7 +38,7 @@ class LOD extends Object3D {
38
38
 
39
39
  const level = levels[ i ];
40
40
 
41
- this.addLevel( level.object.clone(), level.distance );
41
+ this.addLevel( level.object.clone(), level.distance, level.hysteresis );
42
42
 
43
43
  }
44
44
 
@@ -48,7 +48,7 @@ class LOD extends Object3D {
48
48
 
49
49
  }
50
50
 
51
- addLevel( object, distance = 0 ) {
51
+ addLevel( object, distance = 0, hysteresis = 0 ) {
52
52
 
53
53
  distance = Math.abs( distance );
54
54
 
@@ -66,7 +66,7 @@ class LOD extends Object3D {
66
66
 
67
67
  }
68
68
 
69
- levels.splice( l, 0, { distance: distance, object: object } );
69
+ levels.splice( l, 0, { distance: distance, hysteresis: hysteresis, object: object } );
70
70
 
71
71
  this.add( object );
72
72
 
@@ -80,6 +80,8 @@ class LOD extends Object3D {
80
80
 
81
81
  }
82
82
 
83
+
84
+
83
85
  getObjectForDistance( distance ) {
84
86
 
85
87
  const levels = this.levels;
@@ -90,7 +92,15 @@ class LOD extends Object3D {
90
92
 
91
93
  for ( i = 1, l = levels.length; i < l; i ++ ) {
92
94
 
93
- if ( distance < levels[ i ].distance ) {
95
+ let levelDistance = levels[ i ].distance;
96
+
97
+ if ( levels[ i ].object.visible ) {
98
+
99
+ levelDistance -= levelDistance * levels[ i ].hysteresis;
100
+
101
+ }
102
+
103
+ if ( distance < levelDistance ) {
94
104
 
95
105
  break;
96
106
 
@@ -139,7 +149,15 @@ class LOD extends Object3D {
139
149
 
140
150
  for ( i = 1, l = levels.length; i < l; i ++ ) {
141
151
 
142
- if ( distance >= levels[ i ].distance ) {
152
+ let levelDistance = levels[ i ].distance;
153
+
154
+ if ( levels[ i ].object.visible ) {
155
+
156
+ levelDistance -= levelDistance * levels[ i ].hysteresis;
157
+
158
+ }
159
+
160
+ if ( distance >= levelDistance ) {
143
161
 
144
162
  levels[ i - 1 ].object.visible = false;
145
163
  levels[ i ].object.visible = true;
@@ -180,7 +198,8 @@ class LOD extends Object3D {
180
198
 
181
199
  data.object.levels.push( {
182
200
  object: level.object.uuid,
183
- distance: level.distance
201
+ distance: level.distance,
202
+ hysteresis: level.hysteresis
184
203
  } );
185
204
 
186
205
  }
@@ -3,7 +3,7 @@ import { Data3DTexture } from '../textures/Data3DTexture.js';
3
3
 
4
4
  class WebGL3DRenderTarget extends WebGLRenderTarget {
5
5
 
6
- constructor( width, height, depth ) {
6
+ constructor( width = 1, height = 1, depth = 1 ) {
7
7
 
8
8
  super( width, height );
9
9
 
@@ -3,7 +3,7 @@ import { DataArrayTexture } from '../textures/DataArrayTexture.js';
3
3
 
4
4
  class WebGLArrayRenderTarget extends WebGLRenderTarget {
5
5
 
6
- constructor( width, height, depth ) {
6
+ constructor( width = 1, height = 1, depth = 1 ) {
7
7
 
8
8
  super( width, height );
9
9
 
@@ -9,7 +9,7 @@ import { CubeTexture } from '../textures/CubeTexture.js';
9
9
 
10
10
  class WebGLCubeRenderTarget extends WebGLRenderTarget {
11
11
 
12
- constructor( size, options = {} ) {
12
+ constructor( size = 1, options = {} ) {
13
13
 
14
14
  super( size, size, options );
15
15
 
@@ -2,7 +2,7 @@ import { WebGLRenderTarget } from './WebGLRenderTarget.js';
2
2
 
3
3
  class WebGLMultipleRenderTargets extends WebGLRenderTarget {
4
4
 
5
- constructor( width, height, count, options = {} ) {
5
+ constructor( width = 1, height = 1, count = 1, options = {} ) {
6
6
 
7
7
  super( width, height, options );
8
8
 
@@ -11,7 +11,7 @@ import { Source } from '../textures/Source.js';
11
11
  */
12
12
  class WebGLRenderTarget extends EventDispatcher {
13
13
 
14
- constructor( width, height, options = {} ) {
14
+ constructor( width = 1, height = 1, options = {} ) {
15
15
 
16
16
  super();
17
17
 
@@ -134,28 +134,6 @@ function WebGLRenderer( parameters = {} ) {
134
134
  this.toneMapping = NoToneMapping;
135
135
  this.toneMappingExposure = 1.0;
136
136
 
137
- //
138
-
139
- Object.defineProperties( this, {
140
-
141
- // @deprecated since r136, 0e21088102b4de7e0a0a33140620b7a3424b9e6d
142
-
143
- gammaFactor: {
144
- get: function () {
145
-
146
- console.warn( 'THREE.WebGLRenderer: .gammaFactor has been removed.' );
147
- return 2;
148
-
149
- },
150
- set: function () {
151
-
152
- console.warn( 'THREE.WebGLRenderer: .gammaFactor has been removed.' );
153
-
154
- }
155
- }
156
-
157
- } );
158
-
159
137
  // internal properties
160
138
 
161
139
  const _this = this;
@@ -337,7 +315,7 @@ function WebGLRenderer( parameters = {} ) {
337
315
  materials = new WebGLMaterials( _this, properties );
338
316
  renderLists = new WebGLRenderLists();
339
317
  renderStates = new WebGLRenderStates( extensions, capabilities );
340
- background = new WebGLBackground( _this, cubemaps, state, objects, _alpha, _premultipliedAlpha );
318
+ background = new WebGLBackground( _this, cubemaps, cubeuvmaps, state, objects, _alpha, _premultipliedAlpha );
341
319
  shadowMap = new WebGLShadowMap( _this, objects, capabilities );
342
320
  uniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state );
343
321
 
@@ -722,31 +700,48 @@ function WebGLRenderer( parameters = {} ) {
722
700
  //
723
701
 
724
702
  let index = geometry.index;
725
- const position = geometry.attributes.position;
703
+ let rangeFactor = 1;
704
+
705
+ if ( material.wireframe === true ) {
706
+
707
+ index = geometries.getWireframeAttribute( geometry );
708
+ rangeFactor = 2;
709
+
710
+ }
726
711
 
727
712
  //
728
713
 
729
- if ( index === null ) {
714
+ const drawRange = geometry.drawRange;
715
+ const position = geometry.attributes.position;
730
716
 
731
- if ( position === undefined || position.count === 0 ) return;
717
+ let drawStart = drawRange.start * rangeFactor;
718
+ let drawEnd = ( drawRange.start + drawRange.count ) * rangeFactor;
732
719
 
733
- } else if ( index.count === 0 ) {
720
+ if ( group !== null ) {
734
721
 
735
- return;
722
+ drawStart = Math.max( drawStart, group.start * rangeFactor );
723
+ drawEnd = Math.min( drawEnd, ( group.start + group.count ) * rangeFactor );
736
724
 
737
725
  }
738
726
 
739
- //
727
+ if ( index !== null ) {
740
728
 
741
- let rangeFactor = 1;
729
+ drawStart = Math.max( drawStart, 0 );
730
+ drawEnd = Math.min( drawEnd, index.count );
742
731
 
743
- if ( material.wireframe === true ) {
732
+ } else if ( position !== undefined && position !== null ) {
744
733
 
745
- index = geometries.getWireframeAttribute( geometry );
746
- rangeFactor = 2;
734
+ drawStart = Math.max( drawStart, 0 );
735
+ drawEnd = Math.min( drawEnd, position.count );
747
736
 
748
737
  }
749
738
 
739
+ const drawCount = drawEnd - drawStart;
740
+
741
+ if ( drawCount < 0 || drawCount === Infinity ) return;
742
+
743
+ //
744
+
750
745
  bindingStates.setup( object, material, program, geometry, index );
751
746
 
752
747
  let attribute;
@@ -763,23 +758,6 @@ function WebGLRenderer( parameters = {} ) {
763
758
 
764
759
  //
765
760
 
766
- const dataCount = ( index !== null ) ? index.count : position.count;
767
-
768
- const rangeStart = geometry.drawRange.start * rangeFactor;
769
- const rangeCount = geometry.drawRange.count * rangeFactor;
770
-
771
- const groupStart = group !== null ? group.start * rangeFactor : 0;
772
- const groupCount = group !== null ? group.count * rangeFactor : Infinity;
773
-
774
- const drawStart = Math.max( rangeStart, groupStart );
775
- const drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;
776
-
777
- const drawCount = Math.max( 0, drawEnd - drawStart + 1 );
778
-
779
- if ( drawCount === 0 ) return;
780
-
781
- //
782
-
783
761
  if ( object.isMesh ) {
784
762
 
785
763
  if ( material.wireframe === true ) {
@@ -831,7 +809,8 @@ function WebGLRenderer( parameters = {} ) {
831
809
 
832
810
  } else if ( geometry.isInstancedBufferGeometry ) {
833
811
 
834
- const instanceCount = Math.min( geometry.instanceCount, geometry._maxInstanceCount );
812
+ const maxInstanceCount = geometry._maxInstanceCount !== undefined ? geometry._maxInstanceCount : Infinity;
813
+ const instanceCount = Math.min( geometry.instanceCount, maxInstanceCount );
835
814
 
836
815
  renderer.renderInstances( drawStart, drawCount, instanceCount );
837
816
 
@@ -1935,6 +1914,9 @@ function WebGLRenderer( parameters = {} ) {
1935
1914
  _currentActiveMipmapLevel = activeMipmapLevel;
1936
1915
 
1937
1916
  let useDefaultFramebuffer = true;
1917
+ let framebuffer = null;
1918
+ let isCube = false;
1919
+ let isRenderTarget3D = false;
1938
1920
 
1939
1921
  if ( renderTarget ) {
1940
1922
 
@@ -1957,17 +1939,9 @@ function WebGLRenderer( parameters = {} ) {
1957
1939
 
1958
1940
  }
1959
1941
 
1960
- }
1961
-
1962
- let framebuffer = null;
1963
- let isCube = false;
1964
- let isRenderTarget3D = false;
1965
-
1966
- if ( renderTarget ) {
1967
-
1968
1942
  const texture = renderTarget.texture;
1969
1943
 
1970
- if ( texture.isData3DTexture || texture.isDataArrayTexture ) {
1944
+ if ( texture.isData3DTexture || texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {
1971
1945
 
1972
1946
  isRenderTarget3D = true;
1973
1947
 
@@ -2208,7 +2182,7 @@ function WebGLRenderer( parameters = {} ) {
2208
2182
 
2209
2183
  } else {
2210
2184
 
2211
- if ( srcTexture.isCompressedTexture ) {
2185
+ if ( srcTexture.isCompressedArrayTexture ) {
2212
2186
 
2213
2187
  console.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.' );
2214
2188
  _gl.compressedTexSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, image.data );
@@ -2244,7 +2218,7 @@ function WebGLRenderer( parameters = {} ) {
2244
2218
 
2245
2219
  textures.setTexture3D( texture, 0 );
2246
2220
 
2247
- } else if ( texture.isDataArrayTexture ) {
2221
+ } else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {
2248
2222
 
2249
2223
  textures.setTexture2DArray( texture, 0 );
2250
2224
 
@@ -38,10 +38,6 @@ export default /* glsl */`
38
38
 
39
39
  vec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );
40
40
 
41
- #elif defined( ENVMAP_TYPE_CUBE_UV )
42
-
43
- vec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );
44
-
45
41
  #else
46
42
 
47
43
  vec4 envColor = vec4( 0.0 );
@@ -5,7 +5,6 @@ export default /* glsl */`
5
5
  *
6
6
  * Instructions for use:
7
7
  * - Ensure that both RE_Direct, RE_IndirectDiffuse and RE_IndirectSpecular are defined
8
- * - If you have defined an RE_IndirectSpecular, you need to also provide a Material_LightProbeLOD. <---- ???
9
8
  * - Create a material parameter that is to be passed as the third parameter to your lighting functions.
10
9
  *
11
10
  * TODO:
@@ -25,6 +25,4 @@ void RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in GeometricCon
25
25
 
26
26
  #define RE_Direct RE_Direct_Lambert
27
27
  #define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert
28
-
29
- #define Material_LightProbeLOD( material ) (0)
30
28
  `;
@@ -29,6 +29,4 @@ void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in Geometric
29
29
 
30
30
  #define RE_Direct RE_Direct_BlinnPhong
31
31
  #define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong
32
-
33
- #define Material_LightProbeLOD( material ) (0)
34
32
  `;
@@ -23,6 +23,4 @@ void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContex
23
23
 
24
24
  #define RE_Direct RE_Direct_Toon
25
25
  #define RE_IndirectDiffuse RE_IndirectDiffuse_Toon
26
-
27
- #define Material_LightProbeLOD( material ) (0)
28
26
  `;
@@ -25,6 +25,14 @@ float unpackRGBAToDepth( const in vec4 v ) {
25
25
  return dot( v, UnpackFactors );
26
26
  }
27
27
 
28
+ vec2 packDepthToRG( in highp float v ) {
29
+ return packDepthToRGBA( v ).yx;
30
+ }
31
+
32
+ float unpackRGToDepth( const in highp vec2 v ) {
33
+ return unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) );
34
+ }
35
+
28
36
  vec4 pack2HalfToRGBA( vec2 v ) {
29
37
  vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );
30
38
  return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );
@@ -106,6 +106,7 @@ import uv2_vertex from './ShaderChunk/uv2_vertex.glsl.js';
106
106
  import worldpos_vertex from './ShaderChunk/worldpos_vertex.glsl.js';
107
107
 
108
108
  import * as background from './ShaderLib/background.glsl.js';
109
+ import * as backgroundCube from './ShaderLib/backgroundCube.glsl.js';
109
110
  import * as cube from './ShaderLib/cube.glsl.js';
110
111
  import * as depth from './ShaderLib/depth.glsl.js';
111
112
  import * as distanceRGBA from './ShaderLib/distanceRGBA.glsl.js';
@@ -232,6 +233,8 @@ export const ShaderChunk = {
232
233
 
233
234
  background_vert: background.vertex,
234
235
  background_frag: background.fragment,
236
+ backgroundCube_vert: backgroundCube.vertex,
237
+ backgroundCube_frag: backgroundCube.fragment,
235
238
  cube_vert: cube.vertex,
236
239
  cube_frag: cube.fragment,
237
240
  depth_vert: depth.vertex,
@@ -13,21 +13,26 @@ void main() {
13
13
 
14
14
  export const fragment = /* glsl */`
15
15
  uniform sampler2D t2D;
16
+ uniform float backgroundIntensity;
16
17
 
17
18
  varying vec2 vUv;
18
19
 
19
20
  void main() {
20
21
 
21
- gl_FragColor = texture2D( t2D, vUv );
22
+ vec4 texColor = texture2D( t2D, vUv );
22
23
 
23
24
  #ifdef DECODE_VIDEO_TEXTURE
24
25
 
25
26
  // inline sRGB decode (TODO: Remove this code when https://crbug.com/1256340 is solved)
26
27
 
27
- gl_FragColor = vec4( mix( pow( gl_FragColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), gl_FragColor.rgb * 0.0773993808, vec3( lessThanEqual( gl_FragColor.rgb, vec3( 0.04045 ) ) ) ), gl_FragColor.w );
28
+ texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );
28
29
 
29
30
  #endif
30
31
 
32
+ texColor.rgb *= backgroundIntensity;
33
+
34
+ gl_FragColor = texColor;
35
+
31
36
  #include <tonemapping_fragment>
32
37
  #include <encodings_fragment>
33
38
 
@@ -0,0 +1,62 @@
1
+ export const vertex = /* glsl */`
2
+ varying vec3 vWorldDirection;
3
+
4
+ #include <common>
5
+
6
+ void main() {
7
+
8
+ vWorldDirection = transformDirection( position, modelMatrix );
9
+
10
+ #include <begin_vertex>
11
+ #include <project_vertex>
12
+
13
+ gl_Position.z = gl_Position.w; // set z to camera.far
14
+
15
+ }
16
+ `;
17
+
18
+ export const fragment = /* glsl */`
19
+
20
+ #ifdef ENVMAP_TYPE_CUBE
21
+
22
+ uniform samplerCube envMap;
23
+
24
+ #elif defined( ENVMAP_TYPE_CUBE_UV )
25
+
26
+ uniform sampler2D envMap;
27
+
28
+ #endif
29
+
30
+ uniform float flipEnvMap;
31
+ uniform float backgroundBlurriness;
32
+ uniform float backgroundIntensity;
33
+
34
+ varying vec3 vWorldDirection;
35
+
36
+ #include <cube_uv_reflection_fragment>
37
+
38
+ void main() {
39
+
40
+ #ifdef ENVMAP_TYPE_CUBE
41
+
42
+ vec4 texColor = textureCube( envMap, vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );
43
+
44
+ #elif defined( ENVMAP_TYPE_CUBE_UV )
45
+
46
+ vec4 texColor = textureCubeUV( envMap, vWorldDirection, backgroundBlurriness );
47
+
48
+ #else
49
+
50
+ vec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );
51
+
52
+ #endif
53
+
54
+ texColor.rgb *= backgroundIntensity;
55
+
56
+ gl_FragColor = texColor;
57
+
58
+ #include <tonemapping_fragment>
59
+ #include <encodings_fragment>
60
+
61
+ }
62
+ `;
@@ -16,19 +16,17 @@ void main() {
16
16
  `;
17
17
 
18
18
  export const fragment = /* glsl */`
19
- #include <envmap_common_pars_fragment>
19
+ uniform samplerCube tCube;
20
+ uniform float tFlip;
20
21
  uniform float opacity;
21
22
 
22
23
  varying vec3 vWorldDirection;
23
24
 
24
- #include <cube_uv_reflection_fragment>
25
-
26
25
  void main() {
27
26
 
28
- vec3 vReflect = vWorldDirection;
29
- #include <envmap_fragment>
27
+ vec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );
30
28
 
31
- gl_FragColor = envColor;
29
+ gl_FragColor = texColor;
32
30
  gl_FragColor.a *= opacity;
33
31
 
34
32
  #include <tonemapping_fragment>
@@ -218,6 +218,7 @@ const ShaderLib = {
218
218
  uniforms: {
219
219
  uvTransform: { value: /*@__PURE__*/ new Matrix3() },
220
220
  t2D: { value: null },
221
+ backgroundIntensity: { value: 1 }
221
222
  },
222
223
 
223
224
  vertexShader: ShaderChunk.background_vert,
@@ -225,14 +226,27 @@ const ShaderLib = {
225
226
 
226
227
  },
227
228
 
229
+ backgroundCube: {
230
+
231
+ uniforms: {
232
+ envMap: { value: null },
233
+ flipEnvMap: { value: - 1 },
234
+ backgroundBlurriness: { value: 0 },
235
+ backgroundIntensity: { value: 1 }
236
+ },
237
+
238
+ vertexShader: ShaderChunk.backgroundCube_vert,
239
+ fragmentShader: ShaderChunk.backgroundCube_frag
240
+
241
+ },
242
+
228
243
  cube: {
229
244
 
230
- uniforms: /*@__PURE__*/ mergeUniforms( [
231
- UniformsLib.envmap,
232
- {
233
- opacity: { value: 1.0 }
234
- }
235
- ] ),
245
+ uniforms: {
246
+ tCube: { value: null },
247
+ tFlip: { value: - 1 },
248
+ opacity: { value: 1.0 }
249
+ },
236
250
 
237
251
  vertexShader: ShaderChunk.cube_vert,
238
252
  fragmentShader: ShaderChunk.cube_frag
@@ -34,7 +34,7 @@ const UniformsLib = {
34
34
  flipEnvMap: { value: - 1 },
35
35
  reflectivity: { value: 1.0 }, // basic, lambert, phong
36
36
  ior: { value: 1.5 }, // physical
37
- refractionRatio: { value: 0.98 } // basic, lambert, phong
37
+ refractionRatio: { value: 0.98 }, // basic, lambert, phong
38
38
 
39
39
  },
40
40