super-three 0.141.0 → 0.147.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 (646) hide show
  1. package/README.md +9 -9
  2. package/build/three.cjs +2441 -1569
  3. package/build/three.js +2441 -1569
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +2847 -1576
  6. package/examples/js/animation/AnimationClipCreator.js +0 -8
  7. package/examples/js/animation/CCDIKSolver.js +50 -67
  8. package/examples/js/animation/MMDAnimationHelper.js +66 -137
  9. package/examples/js/animation/MMDPhysics.js +71 -150
  10. package/examples/js/cameras/CinematicCamera.js +33 -22
  11. package/examples/js/controls/ArcballControls.js +149 -403
  12. package/examples/js/controls/DragControls.js +8 -33
  13. package/examples/js/controls/FirstPersonControls.js +32 -61
  14. package/examples/js/controls/FlyControls.js +29 -63
  15. package/examples/js/controls/OrbitControls.js +125 -103
  16. package/examples/js/controls/PointerLockControls.js +5 -22
  17. package/examples/js/controls/TrackballControls.js +33 -88
  18. package/examples/js/controls/TransformControls.js +101 -182
  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 +6 -20
  28. package/examples/js/effects/AsciiEffect.js +32 -31
  29. package/examples/js/effects/OutlineEffect.js +30 -54
  30. package/examples/js/effects/ParallaxBarrierEffect.js +2 -15
  31. package/examples/js/effects/PeppersGhostEffect.js +14 -41
  32. package/examples/js/effects/StereoEffect.js +2 -6
  33. package/examples/js/environments/RoomEnvironment.js +32 -8
  34. package/examples/js/exporters/ColladaExporter.js +52 -78
  35. package/examples/js/exporters/DRACOExporter.js +22 -34
  36. package/examples/js/exporters/EXRExporter.js +15 -18
  37. package/examples/js/exporters/GLTFExporter.js +168 -345
  38. package/examples/js/exporters/MMDExporter.js +5 -12
  39. package/examples/js/exporters/OBJExporter.js +40 -52
  40. package/examples/js/exporters/PLYExporter.js +50 -57
  41. package/examples/js/exporters/STLExporter.js +5 -14
  42. package/examples/js/exporters/USDZExporter.js +119 -27
  43. package/examples/js/geometries/BoxLineGeometry.js +0 -1
  44. package/examples/js/geometries/ConvexGeometry.js +12 -7
  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 +23 -17
  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 +25 -39
  60. package/examples/js/interactive/InteractiveGroup.js +9 -14
  61. package/examples/js/interactive/SelectionBox.js +3 -70
  62. package/examples/js/interactive/SelectionHelper.js +2 -8
  63. package/examples/js/libs/ktx-parse.umd.js +1 -0
  64. package/examples/js/libs/meshopt_decoder.js +98 -32
  65. package/examples/js/lights/LightProbeGenerator.js +32 -39
  66. package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
  67. package/examples/js/lines/LineGeometry.js +3 -5
  68. package/examples/js/lines/LineMaterial.js +4 -11
  69. package/examples/js/lines/LineSegments2.js +40 -89
  70. package/examples/js/lines/LineSegmentsGeometry.js +7 -28
  71. package/examples/js/lines/Wireframe.js +2 -7
  72. package/examples/js/lines/WireframeGeometry2.js +3 -1
  73. package/examples/js/loaders/3DMLoader.js +58 -155
  74. package/examples/js/loaders/3MFLoader.js +72 -106
  75. package/examples/js/loaders/AMFLoader.js +0 -25
  76. package/examples/js/loaders/BVHLoader.js +44 -43
  77. package/examples/js/loaders/BasisTextureLoader.js +16 -46
  78. package/examples/js/loaders/ColladaLoader.js +229 -359
  79. package/examples/js/loaders/DDSLoader.js +24 -25
  80. package/examples/js/loaders/DRACOLoader.js +30 -90
  81. package/examples/js/loaders/EXRLoader.js +69 -177
  82. package/examples/js/loaders/FBXLoader.js +294 -441
  83. package/examples/js/loaders/FontLoader.js +9 -31
  84. package/examples/js/loaders/GCodeLoader.js +15 -16
  85. package/examples/js/loaders/GLTFLoader.js +458 -739
  86. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -17
  87. package/examples/js/loaders/KMZLoader.js +3 -7
  88. package/examples/js/loaders/KTXLoader.js +12 -30
  89. package/examples/js/loaders/LDrawLoader.js +309 -355
  90. package/examples/js/loaders/LUT3dlLoader.js +7 -11
  91. package/examples/js/loaders/LUTCubeLoader.js +0 -8
  92. package/examples/js/loaders/LWOLoader.js +59 -124
  93. package/examples/js/loaders/LogLuvLoader.js +27 -77
  94. package/examples/js/loaders/LottieLoader.js +4 -4
  95. package/examples/js/loaders/MD2Loader.js +26 -27
  96. package/examples/js/loaders/MDDLoader.js +6 -10
  97. package/examples/js/loaders/MMDLoader.js +180 -189
  98. package/examples/js/loaders/MTLLoader.js +18 -47
  99. package/examples/js/loaders/NRRDLoader.js +44 -84
  100. package/examples/js/loaders/OBJLoader.js +56 -77
  101. package/examples/js/loaders/PCDLoader.js +92 -42
  102. package/examples/js/loaders/PDBLoader.js +17 -13
  103. package/examples/js/loaders/PLYLoader.js +65 -51
  104. package/examples/js/loaders/PRWMLoader.js +11 -22
  105. package/examples/js/loaders/PVRLoader.js +7 -16
  106. package/examples/js/loaders/RGBELoader.js +36 -61
  107. package/examples/js/loaders/RGBMLoader.js +26 -87
  108. package/examples/js/loaders/STLLoader.js +20 -27
  109. package/examples/js/loaders/SVGLoader.js +365 -236
  110. package/examples/js/loaders/TDSLoader.js +81 -118
  111. package/examples/js/loaders/TGALoader.js +39 -41
  112. package/examples/js/loaders/TIFFLoader.js +30 -0
  113. package/examples/js/loaders/TTFLoader.js +0 -8
  114. package/examples/js/loaders/TiltLoader.js +14 -15
  115. package/examples/js/loaders/VOXLoader.js +8 -16
  116. package/examples/js/loaders/VRMLLoader.js +266 -354
  117. package/examples/js/loaders/VTKLoader.js +102 -119
  118. package/examples/js/loaders/XYZLoader.js +2 -4
  119. package/examples/js/loaders/lwo/IFFParser.js +55 -136
  120. package/examples/js/loaders/lwo/LWO2Parser.js +39 -89
  121. package/examples/js/loaders/lwo/LWO3Parser.js +38 -79
  122. package/examples/js/materials/MeshGouraudMaterial.js +387 -0
  123. package/examples/js/math/Capsule.js +0 -17
  124. package/examples/js/math/ColorConverter.js +3 -53
  125. package/examples/js/math/ConvexHull.js +185 -141
  126. package/examples/js/math/ImprovedNoise.js +1 -1
  127. package/examples/js/math/Lut.js +8 -15
  128. package/examples/js/math/MeshSurfaceSampler.js +6 -28
  129. package/examples/js/math/OBB.js +90 -49
  130. package/examples/js/math/Octree.js +2 -57
  131. package/examples/js/math/SimplexNoise.js +74 -88
  132. package/examples/js/misc/ConvexObjectBreaker.js +37 -48
  133. package/examples/js/misc/GPUComputationRenderer.js +47 -14
  134. package/examples/js/misc/Gyroscope.js +5 -9
  135. package/examples/js/misc/MD2Character.js +14 -23
  136. package/examples/js/misc/MD2CharacterComplex.js +73 -54
  137. package/examples/js/misc/MorphAnimMesh.js +0 -6
  138. package/examples/js/misc/MorphBlendMesh.js +3 -30
  139. package/examples/js/misc/ProgressiveLightMap.js +47 -43
  140. package/examples/js/misc/RollerCoaster.js +17 -24
  141. package/examples/js/misc/TubePainter.js +18 -12
  142. package/examples/js/misc/Volume.js +173 -194
  143. package/examples/js/misc/VolumeSlice.js +91 -99
  144. package/examples/js/modifiers/CurveModifier.js +19 -21
  145. package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
  146. package/examples/js/modifiers/SimplifyModifier.js +57 -60
  147. package/examples/js/modifiers/TessellateModifier.js +2 -9
  148. package/examples/js/objects/GroundProjectedEnv.js +181 -0
  149. package/examples/js/objects/Lensflare.js +47 -38
  150. package/examples/js/objects/LightningStorm.js +10 -13
  151. package/examples/js/objects/MarchingCubes.js +80 -59
  152. package/examples/js/objects/Reflector.js +31 -22
  153. package/examples/js/objects/ReflectorForSSRPass.js +20 -25
  154. package/examples/js/objects/Refractor.js +61 -33
  155. package/examples/js/objects/ShadowMesh.js +6 -3
  156. package/examples/js/objects/Sky.js +2 -7
  157. package/examples/js/objects/Water.js +23 -18
  158. package/examples/js/objects/Water2.js +20 -19
  159. package/examples/js/physics/AmmoPhysics.js +23 -20
  160. package/examples/js/physics/OimoPhysics.js +19 -17
  161. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
  162. package/examples/js/postprocessing/AfterimagePass.js +19 -12
  163. package/examples/js/postprocessing/BloomPass.js +38 -17
  164. package/examples/js/postprocessing/BokehPass.js +29 -12
  165. package/examples/js/postprocessing/ClearPass.js +1 -6
  166. package/examples/js/postprocessing/CubeTexturePass.js +12 -9
  167. package/examples/js/postprocessing/DotScreenPass.js +7 -5
  168. package/examples/js/postprocessing/EffectComposer.js +25 -32
  169. package/examples/js/postprocessing/FilmPass.js +7 -5
  170. package/examples/js/postprocessing/GlitchPass.js +10 -11
  171. package/examples/js/postprocessing/HalftonePass.js +9 -9
  172. package/examples/js/postprocessing/LUTPass.js +2 -15
  173. package/examples/js/postprocessing/MaskPass.js +20 -17
  174. package/examples/js/postprocessing/OutlinePass.js +49 -38
  175. package/examples/js/postprocessing/Pass.js +11 -14
  176. package/examples/js/postprocessing/RenderPass.js +3 -7
  177. package/examples/js/postprocessing/RenderPixelatedPass.js +215 -0
  178. package/examples/js/postprocessing/SAOPass.js +40 -32
  179. package/examples/js/postprocessing/SMAAPass.js +34 -17
  180. package/examples/js/postprocessing/SSAARenderPass.js +14 -14
  181. package/examples/js/postprocessing/SSAOPass.js +56 -42
  182. package/examples/js/postprocessing/SSRPass.js +78 -61
  183. package/examples/js/postprocessing/SavePass.js +14 -6
  184. package/examples/js/postprocessing/ShaderPass.js +9 -8
  185. package/examples/js/postprocessing/TAARenderPass.js +11 -9
  186. package/examples/js/postprocessing/TexturePass.js +7 -4
  187. package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
  188. package/examples/js/renderers/CSS2DRenderer.js +4 -23
  189. package/examples/js/renderers/CSS3DRenderer.js +5 -26
  190. package/examples/js/renderers/Projector.js +31 -108
  191. package/examples/js/renderers/SVGRenderer.js +4 -50
  192. package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
  193. package/examples/js/shaders/AfterimageShader.js +3 -6
  194. package/examples/js/shaders/BasicShader.js +3 -6
  195. package/examples/js/shaders/BleachBypassShader.js +3 -6
  196. package/examples/js/shaders/BlendShader.js +3 -6
  197. package/examples/js/shaders/BokehShader.js +3 -6
  198. package/examples/js/shaders/BokehShader2.js +4 -13
  199. package/examples/js/shaders/BrightnessContrastShader.js +3 -6
  200. package/examples/js/shaders/ColorCorrectionShader.js +2 -6
  201. package/examples/js/shaders/ColorifyShader.js +2 -6
  202. package/examples/js/shaders/ConvolutionShader.js +5 -10
  203. package/examples/js/shaders/CopyShader.js +3 -6
  204. package/examples/js/shaders/DOFMipMapShader.js +3 -6
  205. package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
  206. package/examples/js/shaders/DigitalGlitch.js +3 -6
  207. package/examples/js/shaders/DotScreenShader.js +2 -6
  208. package/examples/js/shaders/FXAAShader.js +1 -3
  209. package/examples/js/shaders/FilmShader.js +3 -6
  210. package/examples/js/shaders/FocusShader.js +3 -6
  211. package/examples/js/shaders/FreiChenShader.js +2 -6
  212. package/examples/js/shaders/GammaCorrectionShader.js +3 -6
  213. package/examples/js/shaders/GodRaysShader.js +11 -24
  214. package/examples/js/shaders/HalftoneShader.js +3 -6
  215. package/examples/js/shaders/HorizontalBlurShader.js +3 -6
  216. package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
  217. package/examples/js/shaders/HueSaturationShader.js +3 -6
  218. package/examples/js/shaders/KaleidoShader.js +3 -6
  219. package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
  220. package/examples/js/shaders/LuminosityShader.js +4 -7
  221. package/examples/js/shaders/MMDToonShader.js +2 -4
  222. package/examples/js/shaders/MirrorShader.js +3 -6
  223. package/examples/js/shaders/NormalMapShader.js +2 -6
  224. package/examples/js/shaders/RGBShiftShader.js +3 -6
  225. package/examples/js/shaders/SAOShader.js +2 -6
  226. package/examples/js/shaders/SMAAShader.js +6 -18
  227. package/examples/js/shaders/SSAOShader.js +2 -6
  228. package/examples/js/shaders/SSRShader.js +6 -18
  229. package/examples/js/shaders/SepiaShader.js +3 -6
  230. package/examples/js/shaders/SobelOperatorShader.js +2 -6
  231. package/examples/js/shaders/TechnicolorShader.js +3 -6
  232. package/examples/js/shaders/ToneMapShader.js +4 -7
  233. package/examples/js/shaders/ToonShader.js +8 -24
  234. package/examples/js/shaders/TriangleBlurShader.js +2 -6
  235. package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
  236. package/examples/js/shaders/VelocityShader.js +126 -0
  237. package/examples/js/shaders/VerticalBlurShader.js +3 -6
  238. package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
  239. package/examples/js/shaders/VignetteShader.js +3 -6
  240. package/examples/js/shaders/VolumeShader.js +2 -6
  241. package/examples/js/shaders/WaterRefractionShader.js +2 -6
  242. package/examples/js/textures/FlakesTexture.js +0 -1
  243. package/examples/js/utils/BufferGeometryUtils.js +237 -171
  244. package/examples/js/utils/CameraUtils.js +5 -20
  245. package/examples/js/utils/GPUStatsPanel.js +3 -12
  246. package/examples/js/utils/GeometryCompressionUtils.js +19 -44
  247. package/examples/js/utils/GeometryUtils.js +15 -36
  248. package/examples/js/utils/LDrawUtils.js +8 -11
  249. package/examples/js/utils/PackedPhongMaterial.js +6 -4
  250. package/examples/js/utils/SceneUtils.js +109 -14
  251. package/examples/js/utils/ShadowMapViewer.js +17 -14
  252. package/examples/js/utils/SkeletonUtils.js +13 -27
  253. package/examples/js/utils/UVsDebug.js +20 -12
  254. package/examples/js/utils/WorkerPool.js +1 -11
  255. package/examples/jsm/animation/CCDIKSolver.js +27 -3
  256. package/examples/jsm/animation/MMDPhysics.js +28 -22
  257. package/examples/jsm/capabilities/WebGPU.js +3 -1
  258. package/examples/jsm/controls/ArcballControls.js +17 -2
  259. package/examples/jsm/controls/FirstPersonControls.js +20 -27
  260. package/examples/jsm/controls/FlyControls.js +16 -24
  261. package/examples/jsm/controls/OrbitControls.js +44 -9
  262. package/examples/jsm/controls/PointerLockControls.js +0 -7
  263. package/examples/jsm/controls/TrackballControls.js +14 -5
  264. package/examples/jsm/controls/TransformControls.js +18 -16
  265. package/examples/jsm/csm/CSM.js +1 -0
  266. package/examples/jsm/csm/CSMHelper.js +30 -0
  267. package/examples/jsm/effects/AnaglyphEffect.js +2 -2
  268. package/examples/jsm/effects/OutlineEffect.js +4 -25
  269. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -2
  270. package/examples/jsm/effects/PeppersGhostEffect.js +2 -2
  271. package/examples/jsm/effects/StereoEffect.js +2 -2
  272. package/examples/jsm/environments/RoomEnvironment.js +23 -0
  273. package/examples/jsm/exporters/ColladaExporter.js +4 -13
  274. package/examples/jsm/exporters/DRACOExporter.js +0 -13
  275. package/examples/jsm/exporters/GLTFExporter.js +29 -110
  276. package/examples/jsm/exporters/KTX2Exporter.js +29 -29
  277. package/examples/jsm/exporters/OBJExporter.js +0 -18
  278. package/examples/jsm/exporters/PLYExporter.js +14 -22
  279. package/examples/jsm/exporters/STLExporter.js +1 -9
  280. package/examples/jsm/exporters/USDZExporter.js +107 -4
  281. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  282. package/examples/jsm/geometries/ParametricGeometry.js +0 -6
  283. package/examples/jsm/helpers/OctreeHelper.js +22 -8
  284. package/examples/jsm/helpers/VertexNormalsHelper.js +7 -1
  285. package/examples/jsm/helpers/VertexTangentsHelper.js +7 -0
  286. package/examples/jsm/helpers/ViewHelper.js +24 -0
  287. package/examples/jsm/interactive/HTMLMesh.js +14 -15
  288. package/examples/jsm/interactive/InteractiveGroup.js +4 -2
  289. package/examples/jsm/interactive/SelectionHelper.js +5 -3
  290. package/examples/jsm/libs/flow.module.js +610 -160
  291. package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
  292. package/examples/jsm/libs/meshopt_decoder.module.js +97 -32
  293. package/examples/jsm/libs/utif.module.js +1579 -0
  294. package/examples/jsm/libs/zstddec.module.js +1 -0
  295. package/examples/jsm/lines/LineSegments2.js +4 -0
  296. package/examples/jsm/loaders/3DMLoader.js +1 -2
  297. package/examples/jsm/loaders/ColladaLoader.js +29 -0
  298. package/examples/jsm/loaders/DRACOLoader.js +2 -28
  299. package/examples/jsm/loaders/EXRLoader.js +3 -13
  300. package/examples/jsm/loaders/FBXLoader.js +26 -3
  301. package/examples/jsm/loaders/FontLoader.js +3 -16
  302. package/examples/jsm/loaders/GLTFLoader.js +321 -464
  303. package/examples/jsm/loaders/HDRCubeTextureLoader.js +0 -13
  304. package/examples/jsm/loaders/KTX2Loader.js +254 -53
  305. package/examples/jsm/loaders/LDrawLoader.js +149 -87
  306. package/examples/jsm/loaders/LottieLoader.js +4 -2
  307. package/examples/jsm/loaders/MaterialXLoader.js +728 -0
  308. package/examples/jsm/loaders/OBJLoader.js +6 -14
  309. package/examples/jsm/loaders/PCDLoader.js +60 -14
  310. package/examples/jsm/loaders/PLYLoader.js +71 -19
  311. package/examples/jsm/loaders/RGBELoader.js +1 -1
  312. package/examples/jsm/loaders/SVGLoader.js +231 -17
  313. package/examples/jsm/loaders/TIFFLoader.js +36 -0
  314. package/examples/jsm/loaders/USDZLoader.js +633 -0
  315. package/examples/jsm/loaders/VRMLLoader.js +36 -26
  316. package/examples/jsm/loaders/VTKLoader.js +1 -1
  317. package/examples/jsm/loaders/lwo/LWO2Parser.js +6 -8
  318. package/examples/jsm/loaders/lwo/LWO3Parser.js +6 -8
  319. package/examples/jsm/materials/MeshGouraudMaterial.js +423 -0
  320. package/examples/jsm/math/ColorConverter.js +1 -49
  321. package/examples/jsm/math/ConvexHull.js +4 -4
  322. package/examples/jsm/math/Octree.js +1 -1
  323. package/examples/jsm/misc/GPUComputationRenderer.js +43 -0
  324. package/examples/jsm/misc/Volume.js +169 -171
  325. package/examples/jsm/misc/VolumeSlice.js +78 -80
  326. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  327. package/examples/jsm/node-editor/NodeEditor.js +91 -12
  328. package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +1 -1
  329. package/examples/jsm/node-editor/accessors/NormalEditor.js +1 -1
  330. package/examples/jsm/node-editor/accessors/PositionEditor.js +1 -1
  331. package/examples/jsm/node-editor/accessors/UVEditor.js +1 -1
  332. package/examples/jsm/node-editor/core/BaseNode.js +10 -3
  333. package/examples/jsm/node-editor/display/BlendEditor.js +1 -1
  334. package/examples/jsm/node-editor/display/NormalMapEditor.js +1 -1
  335. package/examples/jsm/node-editor/inputs/ColorEditor.js +1 -1
  336. package/examples/jsm/node-editor/inputs/FloatEditor.js +1 -1
  337. package/examples/jsm/node-editor/inputs/SliderEditor.js +1 -1
  338. package/examples/jsm/node-editor/inputs/TextureEditor.js +1 -1
  339. package/examples/jsm/node-editor/inputs/Vector2Editor.js +1 -1
  340. package/examples/jsm/node-editor/inputs/Vector3Editor.js +1 -1
  341. package/examples/jsm/node-editor/inputs/Vector4Editor.js +1 -1
  342. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +7 -10
  343. package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +1 -1
  344. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +7 -10
  345. package/examples/jsm/node-editor/math/AngleEditor.js +4 -4
  346. package/examples/jsm/node-editor/math/DotEditor.js +1 -1
  347. package/examples/jsm/node-editor/math/InvertEditor.js +3 -3
  348. package/examples/jsm/node-editor/math/LimiterEditor.js +1 -1
  349. package/examples/jsm/node-editor/math/NormalizeEditor.js +1 -1
  350. package/examples/jsm/node-editor/math/OperatorEditor.js +1 -1
  351. package/examples/jsm/node-editor/math/PowerEditor.js +1 -1
  352. package/examples/jsm/node-editor/math/TrigonometryEditor.js +1 -1
  353. package/examples/jsm/node-editor/procedural/CheckerEditor.js +1 -1
  354. package/examples/jsm/node-editor/scene/MeshEditor.js +11 -8
  355. package/examples/jsm/node-editor/utils/JoinEditor.js +1 -1
  356. package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
  357. package/examples/jsm/node-editor/utils/PreviewEditor.js +7 -3
  358. package/examples/jsm/node-editor/utils/SplitEditor.js +1 -1
  359. package/examples/jsm/node-editor/utils/TimerEditor.js +1 -1
  360. package/examples/jsm/nodes/Nodes.js +70 -13
  361. package/examples/jsm/nodes/accessors/BitangentNode.js +62 -0
  362. package/examples/jsm/nodes/accessors/CubeTextureNode.js +9 -5
  363. package/examples/jsm/nodes/accessors/NormalNode.js +8 -8
  364. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  365. package/examples/jsm/nodes/accessors/PositionNode.js +11 -5
  366. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  367. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +31 -0
  368. package/examples/jsm/nodes/accessors/SkinningNode.js +8 -1
  369. package/examples/jsm/nodes/accessors/TangentNode.js +95 -0
  370. package/examples/jsm/nodes/core/AttributeNode.js +32 -9
  371. package/examples/jsm/nodes/core/CodeNode.js +3 -3
  372. package/examples/jsm/nodes/core/FunctionCallNode.js +20 -5
  373. package/examples/jsm/nodes/core/FunctionNode.js +2 -2
  374. package/examples/jsm/nodes/core/Node.js +15 -13
  375. package/examples/jsm/nodes/core/NodeBuilder.js +67 -18
  376. package/examples/jsm/nodes/core/NodeFrame.js +2 -2
  377. package/examples/jsm/nodes/core/NodeUtils.js +23 -1
  378. package/examples/jsm/nodes/core/NodeVarying.js +17 -0
  379. package/examples/jsm/nodes/core/VaryingNode.js +56 -0
  380. package/examples/jsm/nodes/core/constants.js +13 -13
  381. package/examples/jsm/nodes/display/BlendModeNode.js +85 -0
  382. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +84 -0
  383. package/examples/jsm/nodes/display/NormalMapNode.js +19 -12
  384. package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
  385. package/examples/jsm/nodes/display/ViewportNode.js +106 -0
  386. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +5 -5
  387. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +3 -3
  388. package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +2 -2
  389. package/examples/jsm/nodes/geometry/RangeNode.js +109 -0
  390. package/examples/jsm/nodes/gpgpu/ComputeNode.js +3 -1
  391. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  392. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -7
  393. package/examples/jsm/nodes/lighting/LightingContextNode.js +4 -4
  394. package/examples/jsm/nodes/loaders/NodeLoader.js +2 -2
  395. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +33 -0
  396. package/examples/jsm/nodes/materials/Materials.js +21 -31
  397. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +70 -0
  398. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +4 -7
  399. package/examples/jsm/nodes/materials/NodeMaterial.js +11 -3
  400. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +28 -17
  401. package/examples/jsm/nodes/materialx/DISCLAIMER.md +199 -0
  402. package/examples/jsm/nodes/materialx/MaterialXNodes.js +59 -0
  403. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +56 -0
  404. package/examples/jsm/nodes/materialx/lib/mx_noise.js +617 -0
  405. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
  406. package/examples/jsm/nodes/math/MathNode.js +7 -17
  407. package/examples/jsm/nodes/math/OperatorNode.js +16 -3
  408. package/examples/jsm/nodes/parsers/GLSLNodeFunction.js +21 -6
  409. package/examples/jsm/nodes/procedural/CheckerNode.js +2 -2
  410. package/examples/jsm/nodes/shadernode/ShaderNode.js +40 -25
  411. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +95 -68
  412. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +49 -6
  413. package/examples/jsm/nodes/utils/ConvertNode.js +18 -12
  414. package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
  415. package/examples/jsm/nodes/utils/JoinNode.js +15 -9
  416. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
  417. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +3 -2
  418. package/examples/jsm/nodes/utils/OscNode.js +2 -2
  419. package/examples/jsm/nodes/utils/RemapNode.js +34 -0
  420. package/examples/jsm/nodes/utils/RotateUVNode.js +32 -0
  421. package/examples/jsm/nodes/utils/SplitNode.js +21 -5
  422. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
  423. package/examples/jsm/nodes/utils/TimerNode.js +23 -3
  424. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
  425. package/examples/jsm/objects/GroundProjectedEnv.js +186 -0
  426. package/examples/jsm/objects/Reflector.js +12 -5
  427. package/examples/jsm/objects/ReflectorForSSRPass.js +3 -5
  428. package/examples/jsm/objects/Refractor.js +12 -6
  429. package/examples/jsm/objects/ShadowMesh.js +8 -2
  430. package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
  431. package/examples/jsm/postprocessing/BloomPass.js +22 -3
  432. package/examples/jsm/postprocessing/BokehPass.js +18 -4
  433. package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
  434. package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
  435. package/examples/jsm/postprocessing/EffectComposer.js +9 -0
  436. package/examples/jsm/postprocessing/FilmPass.js +8 -0
  437. package/examples/jsm/postprocessing/GlitchPass.js +13 -1
  438. package/examples/jsm/postprocessing/HalftonePass.js +8 -0
  439. package/examples/jsm/postprocessing/OutlinePass.js +25 -3
  440. package/examples/jsm/postprocessing/Pass.js +2 -0
  441. package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
  442. package/examples/jsm/postprocessing/SAOPass.js +20 -0
  443. package/examples/jsm/postprocessing/SMAAPass.js +16 -0
  444. package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
  445. package/examples/jsm/postprocessing/SavePass.js +17 -1
  446. package/examples/jsm/postprocessing/ShaderPass.js +8 -0
  447. package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
  448. package/examples/jsm/postprocessing/TexturePass.js +8 -0
  449. package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
  450. package/examples/jsm/renderers/CSS2DRenderer.js +2 -2
  451. package/examples/jsm/renderers/CSS3DRenderer.js +2 -2
  452. package/examples/jsm/renderers/Projector.js +2 -24
  453. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +9 -5
  454. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +363 -231
  455. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +7 -3
  456. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
  457. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
  458. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +68 -3
  459. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +6 -0
  460. package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +6 -0
  461. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  462. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +17 -19
  463. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +16 -14
  464. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +2 -2
  465. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +113 -93
  466. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +5 -3
  467. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +2 -2
  468. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +81 -0
  469. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +63 -36
  470. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  471. package/examples/jsm/shaders/LuminosityShader.js +1 -1
  472. package/examples/jsm/shaders/MMDToonShader.js +2 -4
  473. package/examples/jsm/shaders/ToneMapShader.js +1 -1
  474. package/examples/jsm/shaders/VelocityShader.js +128 -0
  475. package/examples/jsm/utils/BufferGeometryUtils.js +176 -43
  476. package/examples/jsm/utils/GeometryUtils.js +17 -25
  477. package/examples/jsm/utils/PackedPhongMaterial.js +0 -1
  478. package/examples/jsm/utils/SceneUtils.js +117 -12
  479. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  480. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -1
  481. package/examples/jsm/webxr/VRButton.js +1 -7
  482. package/examples/jsm/webxr/XRHandMeshModel.js +8 -3
  483. package/package.json +22 -18
  484. package/src/Three.Legacy.js +262 -36
  485. package/src/Three.js +4 -2
  486. package/src/animation/AnimationAction.js +6 -5
  487. package/src/animation/AnimationClip.js +1 -1
  488. package/src/animation/AnimationMixer.js +1 -1
  489. package/src/animation/AnimationUtils.js +204 -199
  490. package/src/animation/KeyframeTrack.js +1 -1
  491. package/src/animation/PropertyBinding.js +31 -5
  492. package/src/audio/AudioContext.js +5 -5
  493. package/src/cameras/CubeCamera.js +14 -21
  494. package/src/constants.js +2 -4
  495. package/src/core/BufferAttribute.js +81 -111
  496. package/src/core/BufferGeometry.js +3 -41
  497. package/src/core/InstancedBufferAttribute.js +0 -10
  498. package/src/core/InstancedBufferGeometry.js +1 -7
  499. package/src/core/InterleavedBuffer.js +1 -1
  500. package/src/core/InterleavedBufferAttribute.js +57 -8
  501. package/src/core/Object3D.js +22 -5
  502. package/src/core/Uniform.js +0 -7
  503. package/src/core/UniformsGroup.js +92 -0
  504. package/src/extras/DataUtils.js +104 -88
  505. package/src/extras/Earcut.js +67 -67
  506. package/src/extras/core/Path.js +1 -0
  507. package/src/extras/core/ShapePath.js +1 -4
  508. package/src/extras/curves/CatmullRomCurve3.js +4 -2
  509. package/src/geometries/BoxGeometry.js +1 -1
  510. package/src/geometries/CapsuleGeometry.js +1 -1
  511. package/src/geometries/CircleGeometry.js +1 -1
  512. package/src/geometries/ConeGeometry.js +1 -1
  513. package/src/geometries/CylinderGeometry.js +2 -1
  514. package/src/geometries/DodecahedronGeometry.js +1 -1
  515. package/src/geometries/EdgesGeometry.js +5 -4
  516. package/src/geometries/ExtrudeGeometry.js +2 -11
  517. package/src/geometries/IcosahedronGeometry.js +1 -1
  518. package/src/geometries/LatheGeometry.js +2 -2
  519. package/src/geometries/OctahedronGeometry.js +1 -1
  520. package/src/geometries/PlaneGeometry.js +2 -1
  521. package/src/geometries/PolyhedronGeometry.js +2 -2
  522. package/src/geometries/RingGeometry.js +1 -1
  523. package/src/geometries/ShapeGeometry.js +3 -2
  524. package/src/geometries/SphereGeometry.js +2 -1
  525. package/src/geometries/TetrahedronGeometry.js +1 -1
  526. package/src/geometries/TorusGeometry.js +2 -1
  527. package/src/geometries/TorusKnotGeometry.js +2 -1
  528. package/src/geometries/TubeGeometry.js +2 -1
  529. package/src/geometries/WireframeGeometry.js +1 -0
  530. package/src/helpers/ArrowHelper.js +9 -0
  531. package/src/helpers/Box3Helper.js +7 -0
  532. package/src/helpers/BoxHelper.js +7 -1
  533. package/src/helpers/CameraHelper.js +97 -38
  534. package/src/helpers/DirectionalLightHelper.js +6 -1
  535. package/src/helpers/GridHelper.js +7 -0
  536. package/src/helpers/HemisphereLightHelper.js +5 -1
  537. package/src/helpers/PlaneHelper.js +15 -9
  538. package/src/helpers/PointLightHelper.js +2 -1
  539. package/src/helpers/PolarGridHelper.js +25 -14
  540. package/src/helpers/SkeletonHelper.js +7 -0
  541. package/src/helpers/SpotLightHelper.js +5 -2
  542. package/src/lights/LightShadow.js +1 -2
  543. package/src/lights/PointLight.js +2 -2
  544. package/src/lights/SpotLight.js +4 -2
  545. package/src/loaders/FileLoader.js +16 -2
  546. package/src/loaders/LoadingManager.js +1 -1
  547. package/src/loaders/MaterialLoader.js +49 -7
  548. package/src/loaders/ObjectLoader.js +9 -42
  549. package/src/materials/Material.js +2 -34
  550. package/src/materials/Materials.js +0 -27
  551. package/src/materials/MeshLambertMaterial.js +28 -1
  552. package/src/materials/MeshPhysicalMaterial.js +1 -1
  553. package/src/materials/ShaderMaterial.js +3 -7
  554. package/src/math/Color.js +8 -18
  555. package/src/math/MathUtils.js +1 -7
  556. package/src/math/Matrix3.js +54 -25
  557. package/src/math/Matrix4.js +3 -27
  558. package/src/math/Quaternion.js +1 -21
  559. package/src/math/Ray.js +2 -5
  560. package/src/math/Sphere.js +36 -21
  561. package/src/math/Vector2.js +4 -24
  562. package/src/math/Vector3.js +7 -46
  563. package/src/math/Vector4.js +4 -24
  564. package/src/objects/InstancedMesh.js +7 -0
  565. package/src/objects/LOD.js +25 -6
  566. package/src/renderers/WebGL3DRenderTarget.js +1 -1
  567. package/src/renderers/WebGLArrayRenderTarget.js +1 -1
  568. package/src/renderers/WebGLCubeRenderTarget.js +1 -1
  569. package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
  570. package/src/renderers/WebGLRenderTarget.js +1 -1
  571. package/src/renderers/WebGLRenderer.js +119 -69
  572. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +12 -12
  573. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -5
  574. package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -5
  575. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +24 -24
  576. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
  577. package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +1 -1
  578. package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +1 -1
  579. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +2 -1
  580. package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +113 -99
  581. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +34 -13
  582. package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
  583. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +28 -0
  584. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
  585. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +3 -1
  586. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +13 -1
  587. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
  588. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -4
  589. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -4
  590. package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -1
  591. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
  592. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +18 -7
  593. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +8 -3
  594. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +9 -6
  595. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  596. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +14 -10
  597. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +2 -2
  598. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +1 -1
  599. package/src/renderers/shaders/ShaderChunk.js +7 -2
  600. package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
  601. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  602. package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
  603. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +0 -1
  604. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +22 -50
  605. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  606. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +0 -3
  607. package/src/renderers/shaders/ShaderLib.js +50 -36
  608. package/src/renderers/shaders/UniformsLib.js +13 -12
  609. package/src/renderers/shaders/UniformsUtils.js +29 -0
  610. package/src/renderers/webgl/WebGLAttributes.js +2 -0
  611. package/src/renderers/webgl/WebGLBackground.js +17 -9
  612. package/src/renderers/webgl/WebGLLights.js +37 -17
  613. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  614. package/src/renderers/webgl/WebGLMorphtargets.js +0 -20
  615. package/src/renderers/webgl/WebGLProgram.js +6 -11
  616. package/src/renderers/webgl/WebGLPrograms.js +30 -26
  617. package/src/renderers/webgl/WebGLRenderLists.js +5 -4
  618. package/src/renderers/webgl/WebGLRenderStates.js +5 -4
  619. package/src/renderers/webgl/WebGLShaderCache.js +9 -6
  620. package/src/renderers/webgl/WebGLShadowMap.js +13 -16
  621. package/src/renderers/webgl/WebGLState.js +125 -41
  622. package/src/renderers/webgl/WebGLTextures.js +94 -39
  623. package/src/renderers/webgl/WebGLUniforms.js +156 -28
  624. package/src/renderers/webgl/WebGLUniformsGroups.js +372 -0
  625. package/src/renderers/webgl/WebGLUtils.js +3 -1
  626. package/src/renderers/webvr/WebVRManager.js +42 -9
  627. package/src/renderers/webvr/WebVRUtils.js +1 -1
  628. package/src/renderers/webxr/WebXRController.js +91 -50
  629. package/src/renderers/webxr/WebXRManager.js +127 -34
  630. package/src/scenes/Scene.js +24 -3
  631. package/src/textures/CompressedArrayTexture.js +18 -0
  632. package/src/textures/Source.js +1 -1
  633. package/src/textures/Texture.js +2 -1
  634. package/src/utils.js +1 -1
  635. package/examples/js/controls/experimental/CameraControls.js +0 -1048
  636. package/examples/js/libs/lottie_canvas.js +0 -12751
  637. package/examples/js/loaders/KTX2Loader.js +0 -558
  638. package/examples/js/shaders/PixelShader.js +0 -51
  639. package/examples/jsm/controls/experimental/CameraControls.js +0 -1248
  640. package/examples/jsm/nodes/accessors/ReflectNode.js +0 -70
  641. package/examples/jsm/nodes/core/NodeVary.js +0 -14
  642. package/examples/jsm/nodes/core/VaryNode.js +0 -54
  643. package/examples/jsm/package.json +0 -3
  644. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +0 -45
  645. package/examples/jsm/shaders/PixelShader.js +0 -44
  646. package/src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js +0 -122
@@ -10,13 +10,14 @@
10
10
 
11
11
  const _cb = new THREE.Vector3(),
12
12
  _ab = new THREE.Vector3();
13
-
14
13
  class SimplifyModifier {
15
14
 
16
15
  modify( geometry, count ) {
17
16
 
18
17
  geometry = geometry.clone();
19
- const attributes = geometry.attributes; // this modifier can only process indexed and non-indexed geomtries with a position attribute
18
+ const attributes = geometry.attributes;
19
+
20
+ // this modifier can only process indexed and non-indexed geomtries with a position attribute
20
21
 
21
22
  for ( const name in attributes ) {
22
23
 
@@ -24,26 +25,29 @@
24
25
 
25
26
  }
26
27
 
27
- geometry = THREE.BufferGeometryUtils.mergeVertices( geometry ); //
28
+ geometry = THREE.BufferGeometryUtils.mergeVertices( geometry );
29
+
30
+ //
28
31
  // put data of original geometry in different data structures
29
32
  //
30
33
 
31
34
  const vertices = [];
32
- const faces = []; // add vertices
35
+ const faces = [];
33
36
 
34
- const positionAttribute = geometry.getAttribute( 'position' );
37
+ // add vertices
35
38
 
39
+ const positionAttribute = geometry.getAttribute( 'position' );
36
40
  for ( let i = 0; i < positionAttribute.count; i ++ ) {
37
41
 
38
42
  const v = new THREE.Vector3().fromBufferAttribute( positionAttribute, i );
39
43
  const vertex = new Vertex( v );
40
44
  vertices.push( vertex );
41
45
 
42
- } // add faces
46
+ }
43
47
 
48
+ // add faces
44
49
 
45
50
  let index = geometry.getIndex();
46
-
47
51
  if ( index !== null ) {
48
52
 
49
53
  for ( let i = 0; i < index.count; i += 3 ) {
@@ -68,8 +72,9 @@
68
72
 
69
73
  }
70
74
 
71
- } // compute all edge collapse costs
75
+ }
72
76
 
77
+ // compute all edge collapse costs
73
78
 
74
79
  for ( let i = 0, il = vertices.length; i < il; i ++ ) {
75
80
 
@@ -79,11 +84,9 @@
79
84
 
80
85
  let nextVertex;
81
86
  let z = count;
82
-
83
87
  while ( z -- ) {
84
88
 
85
89
  nextVertex = minimumCostEdge( vertices );
86
-
87
90
  if ( ! nextVertex ) {
88
91
 
89
92
  console.log( 'THREE.SimplifyModifier: No next vertex' );
@@ -93,30 +96,35 @@
93
96
 
94
97
  collapse( vertices, faces, nextVertex, nextVertex.collapseNeighbor );
95
98
 
96
- } //
99
+ }
97
100
 
101
+ //
98
102
 
99
103
  const simplifiedGeometry = new THREE.BufferGeometry();
100
104
  const position = [];
101
- index = []; //
105
+ index = [];
106
+
107
+ //
102
108
 
103
109
  for ( let i = 0; i < vertices.length; i ++ ) {
104
110
 
105
111
  const vertex = vertices[ i ].position;
106
- position.push( vertex.x, vertex.y, vertex.z ); // cache final index to GREATLY speed up faces reconstruction
107
-
112
+ position.push( vertex.x, vertex.y, vertex.z );
113
+ // cache final index to GREATLY speed up faces reconstruction
108
114
  vertices[ i ].id = i;
109
115
 
110
- } //
116
+ }
111
117
 
118
+ //
112
119
 
113
120
  for ( let i = 0; i < faces.length; i ++ ) {
114
121
 
115
122
  const face = faces[ i ];
116
123
  index.push( face.v1.id, face.v2.id, face.v3.id );
117
124
 
118
- } //
125
+ }
119
126
 
127
+ //
120
128
 
121
129
  simplifiedGeometry.setAttribute( 'position', new THREE.Float32BufferAttribute( position, 3 ) );
122
130
  simplifiedGeometry.setIndex( index );
@@ -125,7 +133,6 @@
125
133
  }
126
134
 
127
135
  }
128
-
129
136
  function pushIfUnique( array, object ) {
130
137
 
131
138
  if ( array.indexOf( object ) === - 1 ) array.push( object );
@@ -143,33 +150,33 @@
143
150
 
144
151
  // if we collapse edge uv by moving u to v then how
145
152
  // much different will the model change, i.e. the "error".
153
+
146
154
  const edgelength = v.position.distanceTo( u.position );
147
155
  let curvature = 0;
148
- const sideFaces = []; // find the "sides" triangles that are on the edge uv
156
+ const sideFaces = [];
149
157
 
158
+ // find the "sides" triangles that are on the edge uv
150
159
  for ( let i = 0, il = u.faces.length; i < il; i ++ ) {
151
160
 
152
161
  const face = u.faces[ i ];
153
-
154
162
  if ( face.hasVertex( v ) ) {
155
163
 
156
164
  sideFaces.push( face );
157
165
 
158
166
  }
159
167
 
160
- } // use the triangle facing most away from the sides
161
- // to determine our curvature term
162
-
168
+ }
163
169
 
170
+ // use the triangle facing most away from the sides
171
+ // to determine our curvature term
164
172
  for ( let i = 0, il = u.faces.length; i < il; i ++ ) {
165
173
 
166
174
  let minCurvature = 1;
167
175
  const face = u.faces[ i ];
168
-
169
176
  for ( let j = 0; j < sideFaces.length; j ++ ) {
170
177
 
171
- const sideFace = sideFaces[ j ]; // use dot product of face normals.
172
-
178
+ const sideFace = sideFaces[ j ];
179
+ // use dot product of face normals.
173
180
  const dotProd = face.normal.dot( sideFace.normal );
174
181
  minCurvature = Math.min( minCurvature, ( 1.001 - dotProd ) / 2 );
175
182
 
@@ -177,12 +184,11 @@
177
184
 
178
185
  curvature = Math.max( curvature, minCurvature );
179
186
 
180
- } // crude approach in attempt to preserve borders
181
- // though it seems not to be totally correct
182
-
187
+ }
183
188
 
189
+ // crude approach in attempt to preserve borders
190
+ // though it seems not to be totally correct
184
191
  const borders = 0;
185
-
186
192
  if ( sideFaces.length < 2 ) {
187
193
 
188
194
  // we add some arbitrary cost for borders,
@@ -204,6 +210,7 @@
204
210
  // only cache the cost of the least cost edge at this vertex
205
211
  // (in member variable collapse) as well as the value of the
206
212
  // cost (in member variable collapseCost).
213
+
207
214
  if ( v.neighbors.length === 0 ) {
208
215
 
209
216
  // collapse if no neighbors.
@@ -214,12 +221,12 @@
214
221
  }
215
222
 
216
223
  v.collapseCost = 100000;
217
- v.collapseNeighbor = null; // search all neighboring edges for "least cost" edge
224
+ v.collapseNeighbor = null;
218
225
 
226
+ // search all neighboring edges for "least cost" edge
219
227
  for ( let i = 0; i < v.neighbors.length; i ++ ) {
220
228
 
221
229
  const collapseCost = computeEdgeCollapseCost( v, v.neighbors[ i ] );
222
-
223
230
  if ( ! v.collapseNeighbor ) {
224
231
 
225
232
  v.collapseNeighbor = v.neighbors[ i ];
@@ -232,7 +239,6 @@
232
239
 
233
240
  v.costCount ++;
234
241
  v.totalCost += collapseCost;
235
-
236
242
  if ( collapseCost < v.minCost ) {
237
243
 
238
244
  v.collapseNeighbor = v.neighbors[ i ];
@@ -240,17 +246,17 @@
240
246
 
241
247
  }
242
248
 
243
- } // we average the cost of collapsing at this vertex
244
-
249
+ }
245
250
 
246
- v.collapseCost = v.totalCost / v.costCount; // v.collapseCost = v.minCost;
251
+ // we average the cost of collapsing at this vertex
252
+ v.collapseCost = v.totalCost / v.costCount;
253
+ // v.collapseCost = v.minCost;
247
254
 
248
255
  }
249
256
 
250
257
  function removeVertex( v, vertices ) {
251
258
 
252
259
  console.assert( v.faces.length === 0 );
253
-
254
260
  while ( v.neighbors.length ) {
255
261
 
256
262
  const n = v.neighbors.pop();
@@ -267,10 +273,10 @@
267
273
  removeFromArray( faces, f );
268
274
  if ( f.v1 ) removeFromArray( f.v1.faces, f );
269
275
  if ( f.v2 ) removeFromArray( f.v2.faces, f );
270
- if ( f.v3 ) removeFromArray( f.v3.faces, f ); // TODO optimize this!
276
+ if ( f.v3 ) removeFromArray( f.v3.faces, f );
271
277
 
278
+ // TODO optimize this!
272
279
  const vs = [ f.v1, f.v2, f.v3 ];
273
-
274
280
  for ( let i = 0; i < 3; i ++ ) {
275
281
 
276
282
  const v1 = vs[ i ];
@@ -286,7 +292,9 @@
286
292
  function collapse( vertices, faces, u, v ) {
287
293
 
288
294
  // u and v are pointers to vertices of an edge
295
+
289
296
  // Collapse the edge uv by moving vertex u onto v
297
+
290
298
  if ( ! v ) {
291
299
 
292
300
  // u is a vertex all by itself so just delete it..
@@ -296,33 +304,33 @@
296
304
  }
297
305
 
298
306
  const tmpVertices = [];
299
-
300
307
  for ( let i = 0; i < u.neighbors.length; i ++ ) {
301
308
 
302
309
  tmpVertices.push( u.neighbors[ i ] );
303
310
 
304
- } // delete triangles on edge uv:
305
-
311
+ }
306
312
 
313
+ // delete triangles on edge uv:
307
314
  for ( let i = u.faces.length - 1; i >= 0; i -- ) {
308
315
 
309
- if ( u.faces[ i ].hasVertex( v ) ) {
316
+ if ( u.faces[ i ] && u.faces[ i ].hasVertex( v ) ) {
310
317
 
311
318
  removeFace( u.faces[ i ], faces );
312
319
 
313
320
  }
314
321
 
315
- } // update remaining triangles to have v instead of u
316
-
322
+ }
317
323
 
324
+ // update remaining triangles to have v instead of u
318
325
  for ( let i = u.faces.length - 1; i >= 0; i -- ) {
319
326
 
320
327
  u.faces[ i ].replaceVertex( u, v );
321
328
 
322
329
  }
323
330
 
324
- removeVertex( u, vertices ); // recompute the edge collapse costs in neighborhood
331
+ removeVertex( u, vertices );
325
332
 
333
+ // recompute the edge collapse costs in neighborhood
326
334
  for ( let i = 0; i < tmpVertices.length; i ++ ) {
327
335
 
328
336
  computeEdgeCostAtVertex( tmpVertices[ i ] );
@@ -334,8 +342,8 @@
334
342
  function minimumCostEdge( vertices ) {
335
343
 
336
344
  // O(n * n) approach. TODO optimize this
337
- let least = vertices[ 0 ];
338
345
 
346
+ let least = vertices[ 0 ];
339
347
  for ( let i = 0; i < vertices.length; i ++ ) {
340
348
 
341
349
  if ( vertices[ i ].collapseCost < least.collapseCost ) {
@@ -348,8 +356,9 @@
348
356
 
349
357
  return least;
350
358
 
351
- } // we use a triangle class to represent structure of face slightly differently
359
+ }
352
360
 
361
+ // we use a triangle class to represent structure of face slightly differently
353
362
 
354
363
  class Triangle {
355
364
 
@@ -374,29 +383,22 @@
374
383
  v3.addUniqueNeighbor( v2 );
375
384
 
376
385
  }
377
-
378
386
  computeNormal() {
379
387
 
380
388
  const vA = this.v1.position;
381
389
  const vB = this.v2.position;
382
390
  const vC = this.v3.position;
383
-
384
391
  _cb.subVectors( vC, vB );
385
-
386
392
  _ab.subVectors( vA, vB );
387
-
388
393
  _cb.cross( _ab ).normalize();
389
-
390
394
  this.normal.copy( _cb );
391
395
 
392
396
  }
393
-
394
397
  hasVertex( v ) {
395
398
 
396
399
  return v === this.v1 || v === this.v2 || v === this.v3;
397
400
 
398
401
  }
399
-
400
402
  replaceVertex( oldv, newv ) {
401
403
 
402
404
  if ( oldv === this.v1 ) this.v1 = newv; else if ( oldv === this.v2 ) this.v2 = newv; else if ( oldv === this.v3 ) this.v3 = newv;
@@ -419,7 +421,6 @@
419
421
  }
420
422
 
421
423
  }
422
-
423
424
  class Vertex {
424
425
 
425
426
  constructor( v ) {
@@ -428,12 +429,10 @@
428
429
  this.id = - 1; // external use position in vertices list (for e.g. face generation)
429
430
 
430
431
  this.faces = []; // faces vertex is connected
431
-
432
432
  this.neighbors = []; // neighbouring vertices aka "adjacentVertices"
433
- // these will be computed in computeEdgeCostAtVertex()
434
433
 
434
+ // these will be computed in computeEdgeCostAtVertex()
435
435
  this.collapseCost = 0; // cost of collapsing this vertex, the less the better. aka objdist
436
-
437
436
  this.collapseNeighbor = null; // best candinate for collapsing
438
437
 
439
438
  }
@@ -443,14 +442,12 @@
443
442
  pushIfUnique( this.neighbors, vertex );
444
443
 
445
444
  }
446
-
447
445
  removeIfNonNeighbor( n ) {
448
446
 
449
447
  const neighbors = this.neighbors;
450
448
  const faces = this.faces;
451
449
  const offset = neighbors.indexOf( n );
452
450
  if ( offset === - 1 ) return;
453
-
454
451
  for ( let i = 0; i < faces.length; i ++ ) {
455
452
 
456
453
  if ( faces[ i ].hasVertex( n ) ) return;
@@ -12,15 +12,15 @@
12
12
  this.maxIterations = maxIterations;
13
13
 
14
14
  }
15
-
16
15
  modify( geometry ) {
17
16
 
18
17
  if ( geometry.index !== null ) {
19
18
 
20
19
  geometry = geometry.toNonIndexed();
21
20
 
22
- } //
21
+ }
23
22
 
23
+ //
24
24
 
25
25
  const maxIterations = this.maxIterations;
26
26
  const maxEdgeLengthSquared = this.maxEdgeLength * this.maxEdgeLength;
@@ -66,7 +66,6 @@
66
66
  let uv2s2 = uv2s;
67
67
  let iteration = 0;
68
68
  let tessellating = true;
69
-
70
69
  function addTriangle( a, b, c ) {
71
70
 
72
71
  const v1 = vs[ a ];
@@ -75,7 +74,6 @@
75
74
  positions2.push( v1.x, v1.y, v1.z );
76
75
  positions2.push( v2.x, v2.y, v2.z );
77
76
  positions2.push( v3.x, v3.y, v3.z );
78
-
79
77
  if ( hasNormals ) {
80
78
 
81
79
  const n1 = ns[ a ];
@@ -128,7 +126,6 @@
128
126
  tessellating = false;
129
127
  positions = positions2;
130
128
  positions2 = [];
131
-
132
129
  if ( hasNormals ) {
133
130
 
134
131
  normals = normals2;
@@ -162,7 +159,6 @@
162
159
  va.fromArray( positions, i + 0 );
163
160
  vb.fromArray( positions, i + 3 );
164
161
  vc.fromArray( positions, i + 6 );
165
-
166
162
  if ( hasNormals ) {
167
163
 
168
164
  na.fromArray( normals, i + 0 );
@@ -198,11 +194,9 @@
198
194
  const dab = va.distanceToSquared( vb );
199
195
  const dbc = vb.distanceToSquared( vc );
200
196
  const dac = va.distanceToSquared( vc );
201
-
202
197
  if ( dab > maxEdgeLengthSquared || dbc > maxEdgeLengthSquared || dac > maxEdgeLengthSquared ) {
203
198
 
204
199
  tessellating = true;
205
-
206
200
  if ( dab >= dbc && dab >= dac ) {
207
201
 
208
202
  vm.lerpVectors( va, vb, 0.5 );
@@ -247,7 +241,6 @@
247
241
 
248
242
  const geometry2 = new THREE.BufferGeometry();
249
243
  geometry2.setAttribute( 'position', new THREE.Float32BufferAttribute( positions2, 3 ) );
250
-
251
244
  if ( hasNormals ) {
252
245
 
253
246
  geometry2.setAttribute( 'normal', new THREE.Float32BufferAttribute( normals2, 3 ) );
@@ -0,0 +1,181 @@
1
+ ( function () {
2
+
3
+ /**
4
+ * Ground projected env map adapted from @react-three/drei.
5
+ * https://github.com/pmndrs/drei/blob/master/src/core/Environment.tsx
6
+ */
7
+ class GroundProjectedEnv extends THREE.Mesh {
8
+
9
+ constructor( texture, options ) {
10
+
11
+ const isCubeMap = texture.isCubeTexture;
12
+ const w = ( isCubeMap ? texture.image[ 0 ]?.width : texture.image.width ) ?? 1024;
13
+ const cubeSize = w / 4;
14
+ const _lodMax = Math.floor( Math.log2( cubeSize ) );
15
+ const _cubeSize = Math.pow( 2, _lodMax );
16
+ const width = 3 * Math.max( _cubeSize, 16 * 7 );
17
+ const height = 4 * _cubeSize;
18
+ const defines = [ isCubeMap ? '#define ENVMAP_TYPE_CUBE' : '', `#define CUBEUV_TEXEL_WIDTH ${1.0 / width}`, `#define CUBEUV_TEXEL_HEIGHT ${1.0 / height}`, `#define CUBEUV_MAX_MIP ${_lodMax}.0` ];
19
+ const vertexShader = /* glsl */`
20
+ varying vec3 vWorldPosition;
21
+
22
+ void main()
23
+ {
24
+
25
+ vec4 worldPosition = ( modelMatrix * vec4( position, 1.0 ) );
26
+ vWorldPosition = worldPosition.xyz;
27
+
28
+ gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
29
+
30
+ }
31
+ `;
32
+ const fragmentShader = defines.join( '\n' ) + /* glsl */`
33
+ #define ENVMAP_TYPE_CUBE_UV
34
+
35
+ varying vec3 vWorldPosition;
36
+
37
+ uniform float radius;
38
+ uniform float height;
39
+ uniform float angle;
40
+
41
+ #ifdef ENVMAP_TYPE_CUBE
42
+
43
+ uniform samplerCube map;
44
+
45
+ #else
46
+
47
+ uniform sampler2D map;
48
+
49
+ #endif
50
+
51
+ // From: https://www.shadertoy.com/view/4tsBD7
52
+ float diskIntersectWithBackFaceCulling( vec3 ro, vec3 rd, vec3 c, vec3 n, float r )
53
+ {
54
+
55
+ float d = dot ( rd, n );
56
+
57
+ if( d > 0.0 ) { return 1e6; }
58
+
59
+ vec3 o = ro - c;
60
+ float t = - dot( n, o ) / d;
61
+ vec3 q = o + rd * t;
62
+
63
+ return ( dot( q, q ) < r * r ) ? t : 1e6;
64
+
65
+ }
66
+
67
+ // From: https://www.iquilezles.org/www/articles/intersectors/intersectors.htm
68
+ float sphereIntersect( vec3 ro, vec3 rd, vec3 ce, float ra )
69
+ {
70
+
71
+ vec3 oc = ro - ce;
72
+ float b = dot( oc, rd );
73
+ float c = dot( oc, oc ) - ra * ra;
74
+ float h = b * b - c;
75
+
76
+ if( h < 0.0 ) { return -1.0; }
77
+
78
+ h = sqrt( h );
79
+
80
+ return - b + h;
81
+
82
+ }
83
+
84
+ vec3 project()
85
+ {
86
+
87
+ vec3 p = normalize( vWorldPosition );
88
+ vec3 camPos = cameraPosition;
89
+ camPos.y -= height;
90
+
91
+ float intersection = sphereIntersect( camPos, p, vec3( 0.0 ), radius );
92
+ if( intersection > 0.0 ) {
93
+
94
+ vec3 h = vec3( 0.0, - height, 0.0 );
95
+ float intersection2 = diskIntersectWithBackFaceCulling( camPos, p, h, vec3( 0.0, 1.0, 0.0 ), radius );
96
+ p = ( camPos + min( intersection, intersection2 ) * p ) / radius;
97
+
98
+ } else {
99
+
100
+ p = vec3( 0.0, 1.0, 0.0 );
101
+
102
+ }
103
+
104
+ return p;
105
+
106
+ }
107
+
108
+ #include <common>
109
+ #include <cube_uv_reflection_fragment>
110
+
111
+ void main()
112
+ {
113
+
114
+ vec3 projectedWorldPosition = project();
115
+
116
+ #ifdef ENVMAP_TYPE_CUBE
117
+
118
+ vec3 outcolor = textureCube( map, projectedWorldPosition ).rgb;
119
+
120
+ #else
121
+
122
+ vec3 direction = normalize( projectedWorldPosition );
123
+ vec2 uv = equirectUv( direction );
124
+ vec3 outcolor = texture2D( map, uv ).rgb;
125
+
126
+ #endif
127
+
128
+ gl_FragColor = vec4( outcolor, 1.0 );
129
+
130
+ #include <tonemapping_fragment>
131
+ #include <encodings_fragment>
132
+
133
+ }
134
+ `;
135
+ const uniforms = {
136
+ map: {
137
+ value: texture
138
+ },
139
+ height: {
140
+ value: options?.height || 15
141
+ },
142
+ radius: {
143
+ value: options?.radius || 100
144
+ }
145
+ };
146
+ const geometry = new THREE.IcosahedronGeometry( 1, 16 );
147
+ const material = new THREE.ShaderMaterial( {
148
+ uniforms,
149
+ fragmentShader,
150
+ vertexShader,
151
+ side: THREE.DoubleSide
152
+ } );
153
+ super( geometry, material );
154
+
155
+ }
156
+ set radius( radius ) {
157
+
158
+ this.material.uniforms.radius.value = radius;
159
+
160
+ }
161
+ get radius() {
162
+
163
+ return this.material.uniforms.radius.value;
164
+
165
+ }
166
+ set height( height ) {
167
+
168
+ this.material.uniforms.height.value = height;
169
+
170
+ }
171
+ get height() {
172
+
173
+ return this.material.uniforms.height.value;
174
+
175
+ }
176
+
177
+ }
178
+
179
+ THREE.GroundProjectedEnv = GroundProjectedEnv;
180
+
181
+ } )();