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
@@ -24,52 +24,37 @@
24
24
  * @param {Vector3} bottomRightCorner
25
25
  * @param {Vector3} topLeftCorner
26
26
  * @param {boolean} estimateViewFrustum */
27
-
28
-
29
27
  function frameCorners( camera, bottomLeftCorner, bottomRightCorner, topLeftCorner, estimateViewFrustum = false ) {
30
28
 
31
29
  const pa = bottomLeftCorner,
32
30
  pb = bottomRightCorner,
33
31
  pc = topLeftCorner;
34
32
  const pe = camera.position; // eye position
35
-
36
33
  const n = camera.near; // distance of near clipping plane
37
-
38
34
  const f = camera.far; //distance of far clipping plane
39
35
 
40
36
  _vr.copy( pb ).sub( pa ).normalize();
41
-
42
37
  _vu.copy( pc ).sub( pa ).normalize();
43
-
44
38
  _vn.crossVectors( _vr, _vu ).normalize();
45
-
46
39
  _va.copy( pa ).sub( pe ); // from pe to pa
47
-
48
-
49
40
  _vb.copy( pb ).sub( pe ); // from pe to pb
50
-
51
-
52
41
  _vc.copy( pc ).sub( pe ); // from pe to pc
53
42
 
54
-
55
43
  const d = - _va.dot( _vn ); // distance from eye to screen
56
-
57
44
  const l = _vr.dot( _va ) * n / d; // distance to left screen edge
58
-
59
45
  const r = _vr.dot( _vb ) * n / d; // distance to right screen edge
60
-
61
46
  const b = _vu.dot( _va ) * n / d; // distance to bottom screen edge
62
-
63
47
  const t = _vu.dot( _vc ) * n / d; // distance to top screen edge
64
- // Set the camera rotation to match the focal plane to the corners' plane
65
48
 
49
+ // Set the camera rotation to match the focal plane to the corners' plane
66
50
  _quat.setFromUnitVectors( _vec.set( 0, 1, 0 ), _vu );
51
+ camera.quaternion.setFromUnitVectors( _vec.set( 0, 0, 1 ).applyQuaternion( _quat ), _vn ).multiply( _quat );
67
52
 
68
- camera.quaternion.setFromUnitVectors( _vec.set( 0, 0, 1 ).applyQuaternion( _quat ), _vn ).multiply( _quat ); // Set the off-axis projection matrix to match the corners
69
-
53
+ // Set the off-axis projection matrix to match the corners
70
54
  camera.projectionMatrix.set( 2.0 * n / ( r - l ), 0.0, ( r + l ) / ( r - l ), 0.0, 0.0, 2.0 * n / ( t - b ), ( t + b ) / ( t - b ), 0.0, 0.0, 0.0, ( f + n ) / ( n - f ), 2.0 * f * n / ( n - f ), 0.0, 0.0, - 1.0, 0.0 );
71
- camera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert(); // FoV estimation to fix frustum culling
55
+ camera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();
72
56
 
57
+ // FoV estimation to fix frustum culling
73
58
  if ( estimateViewFrustum ) {
74
59
 
75
60
  // Set fieldOfView to a conservative estimate
@@ -1,7 +1,7 @@
1
1
  ( function () {
2
2
 
3
+ // https://www.khronos.org/registry/webgl/extensions/EXT_disjoint_timer_query/
3
4
  // https://www.khronos.org/registry/webgl/extensions/EXT_disjoint_timer_query_webgl2/
4
-
5
5
  class GPUStatsPanel extends Stats.Panel {
6
6
 
7
7
  constructor( context, name = 'GPU MS' ) {
@@ -9,12 +9,10 @@
9
9
  super( name, '#f90', '#210' );
10
10
  let isWebGL2 = true;
11
11
  let extension = context.getExtension( 'EXT_disjoint_timer_query_webgl2' );
12
-
13
12
  if ( extension === null ) {
14
13
 
15
14
  isWebGL2 = false;
16
15
  extension = context.getExtension( 'EXT_disjoint_timer_query' );
17
-
18
16
  if ( extension === null ) {
19
17
 
20
18
  console.warn( 'GPUStatsPanel: disjoint_time_query extension not available.' );
@@ -27,21 +25,18 @@
27
25
  this.extension = extension;
28
26
  this.maxTime = 30;
29
27
  this.activeQueries = 0;
30
-
31
28
  this.startQuery = function () {
32
29
 
33
30
  const gl = this.context;
34
31
  const ext = this.extension;
35
-
36
32
  if ( ext === null ) {
37
33
 
38
34
  return;
39
35
 
40
- } // create the query object
41
-
36
+ }
42
37
 
38
+ // create the query object
43
39
  let query;
44
-
45
40
  if ( isWebGL2 ) {
46
41
 
47
42
  query = gl.createQuery();
@@ -55,12 +50,10 @@
55
50
  }
56
51
 
57
52
  this.activeQueries ++;
58
-
59
53
  const checkQuery = () => {
60
54
 
61
55
  // check if the query is available and valid
62
56
  let available, disjoint, ns;
63
-
64
57
  if ( isWebGL2 ) {
65
58
 
66
59
  available = gl.getQueryParameter( query, gl.QUERY_RESULT_AVAILABLE );
@@ -76,7 +69,6 @@
76
69
  }
77
70
 
78
71
  const ms = ns * 1e-6;
79
-
80
72
  if ( available ) {
81
73
 
82
74
  // update the display if it is valid
@@ -106,7 +98,6 @@
106
98
  // finish the query measurement
107
99
  const ext = this.extension;
108
100
  const gl = this.context;
109
-
110
101
  if ( ext === null ) {
111
102
 
112
103
  return;
@@ -6,6 +6,7 @@
6
6
  * @link https://github.com/tsherif/mesh-quantization-example
7
7
  *
8
8
  */
9
+
9
10
  /**
10
11
  * Make the input mesh.geometry's normal attribute encoded and compressed by 3 different methods.
11
12
  * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the normal data.
@@ -14,7 +15,6 @@
14
15
  * @param {String} encodeMethod "DEFAULT" || "OCT1Byte" || "OCT2Byte" || "ANGLES"
15
16
  *
16
17
  */
17
-
18
18
  function compressNormals( mesh, encodeMethod ) {
19
19
 
20
20
  if ( ! mesh.geometry ) {
@@ -24,7 +24,6 @@
24
24
  }
25
25
 
26
26
  const normal = mesh.geometry.attributes.normal;
27
-
28
27
  if ( ! normal ) {
29
28
 
30
29
  console.error( 'Geometry must contain normal attribute. ' );
@@ -32,7 +31,6 @@
32
31
  }
33
32
 
34
33
  if ( normal.isPacked ) return;
35
-
36
34
  if ( normal.itemSize != 3 ) {
37
35
 
38
36
  console.error( 'normal.itemSize is not 3, which cannot be encoded. ' );
@@ -42,12 +40,10 @@
42
40
  const array = normal.array;
43
41
  const count = normal.count;
44
42
  let result;
45
-
46
43
  if ( encodeMethod == 'DEFAULT' ) {
47
44
 
48
45
  // TODO: Add 1 byte to the result, making the encoded length to be 4 bytes.
49
46
  result = new Uint8Array( count * 3 );
50
-
51
47
  for ( let idx = 0; idx < array.length; idx += 3 ) {
52
48
 
53
49
  const encoded = defaultEncode( array[ idx ], array[ idx + 1 ], array[ idx + 2 ], 1 );
@@ -67,8 +63,8 @@
67
63
  * As it makes vertex data not aligned to a 4 byte boundary which may harm some WebGL implementations and sometimes the normal distortion is visible
68
64
  * Please refer to @zeux 's comments in https://github.com/mrdoob/three.js/pull/18208
69
65
  */
70
- result = new Int8Array( count * 2 );
71
66
 
67
+ result = new Int8Array( count * 2 );
72
68
  for ( let idx = 0; idx < array.length; idx += 3 ) {
73
69
 
74
70
  const encoded = octEncodeBest( array[ idx ], array[ idx + 1 ], array[ idx + 2 ], 1 );
@@ -83,7 +79,6 @@
83
79
  } else if ( encodeMethod == 'OCT2Byte' ) {
84
80
 
85
81
  result = new Int16Array( count * 2 );
86
-
87
82
  for ( let idx = 0; idx < array.length; idx += 3 ) {
88
83
 
89
84
  const encoded = octEncodeBest( array[ idx ], array[ idx + 1 ], array[ idx + 2 ], 2 );
@@ -98,7 +93,6 @@
98
93
  } else if ( encodeMethod == 'ANGLES' ) {
99
94
 
100
95
  result = new Uint16Array( count * 2 );
101
-
102
96
  for ( let idx = 0; idx < array.length; idx += 3 ) {
103
97
 
104
98
  const encoded = anglesEncode( array[ idx ], array[ idx + 1 ], array[ idx + 2 ] );
@@ -118,8 +112,9 @@
118
112
 
119
113
  mesh.geometry.attributes.normal.needsUpdate = true;
120
114
  mesh.geometry.attributes.normal.isPacked = true;
121
- mesh.geometry.attributes.normal.packingMethod = encodeMethod; // modify material
115
+ mesh.geometry.attributes.normal.packingMethod = encodeMethod;
122
116
 
117
+ // modify material
123
118
  if ( ! ( mesh.material instanceof THREE.PackedPhongMaterial ) ) {
124
119
 
125
120
  mesh.material = new THREE.PackedPhongMaterial().copy( mesh.material );
@@ -151,6 +146,7 @@
151
146
  }
152
147
 
153
148
  }
149
+
154
150
  /**
155
151
  * Make the input mesh.geometry's position attribute encoded and compressed.
156
152
  * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the position data.
@@ -158,8 +154,6 @@
158
154
  * @param {THREE.Mesh} mesh
159
155
  *
160
156
  */
161
-
162
-
163
157
  function compressPositions( mesh ) {
164
158
 
165
159
  if ( ! mesh.geometry ) {
@@ -169,7 +163,6 @@
169
163
  }
170
164
 
171
165
  const position = mesh.geometry.attributes.position;
172
-
173
166
  if ( ! position ) {
174
167
 
175
168
  console.error( 'Geometry must contain position attribute. ' );
@@ -177,7 +170,6 @@
177
170
  }
178
171
 
179
172
  if ( position.isPacked ) return;
180
-
181
173
  if ( position.itemSize != 3 ) {
182
174
 
183
175
  console.error( 'position.itemSize is not 3, which cannot be packed. ' );
@@ -188,15 +180,17 @@
188
180
  const encodingBytes = 2;
189
181
  const result = quantizedEncode( array, encodingBytes );
190
182
  const quantized = result.quantized;
191
- const decodeMat = result.decodeMat; // IMPORTANT: calculate original geometry bounding info first, before updating packed positions
183
+ const decodeMat = result.decodeMat;
192
184
 
185
+ // IMPORTANT: calculate original geometry bounding info first, before updating packed positions
193
186
  if ( mesh.geometry.boundingBox == null ) mesh.geometry.computeBoundingBox();
194
187
  if ( mesh.geometry.boundingSphere == null ) mesh.geometry.computeBoundingSphere();
195
188
  mesh.geometry.setAttribute( 'position', new THREE.BufferAttribute( quantized, 3 ) );
196
189
  mesh.geometry.attributes.position.isPacked = true;
197
190
  mesh.geometry.attributes.position.needsUpdate = true;
198
- mesh.geometry.attributes.position.bytes = quantized.length * encodingBytes; // modify material
191
+ mesh.geometry.attributes.position.bytes = quantized.length * encodingBytes;
199
192
 
193
+ // modify material
200
194
  if ( ! ( mesh.material instanceof THREE.PackedPhongMaterial ) ) {
201
195
 
202
196
  mesh.material = new THREE.PackedPhongMaterial().copy( mesh.material );
@@ -208,6 +202,7 @@
208
202
  mesh.material.uniforms.quantizeMatPos.needsUpdate = true;
209
203
 
210
204
  }
205
+
211
206
  /**
212
207
  * Make the input mesh.geometry's uv attribute encoded and compressed.
213
208
  * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the uv data.
@@ -215,8 +210,6 @@
215
210
  * @param {THREE.Mesh} mesh
216
211
  *
217
212
  */
218
-
219
-
220
213
  function compressUvs( mesh ) {
221
214
 
222
215
  if ( ! mesh.geometry ) {
@@ -226,7 +219,6 @@
226
219
  }
227
220
 
228
221
  const uvs = mesh.geometry.attributes.uv;
229
-
230
222
  if ( ! uvs ) {
231
223
 
232
224
  console.error( 'Geometry must contain uv attribute. ' );
@@ -239,7 +231,6 @@
239
231
  max: - Infinity
240
232
  };
241
233
  const array = uvs.array;
242
-
243
234
  for ( let i = 0; i < array.length; i ++ ) {
244
235
 
245
236
  range.min = Math.min( range.min, array[ i ] );
@@ -248,12 +239,10 @@
248
239
  }
249
240
 
250
241
  let result;
251
-
252
242
  if ( range.min >= - 1.0 && range.max <= 1.0 ) {
253
243
 
254
244
  // use default encoding method
255
245
  result = new Uint16Array( array.length );
256
-
257
246
  for ( let i = 0; i < array.length; i += 2 ) {
258
247
 
259
248
  const encoded = defaultEncode( array[ i ], array[ i + 1 ], 0, 2 );
@@ -266,7 +255,6 @@
266
255
  mesh.geometry.attributes.uv.isPacked = true;
267
256
  mesh.geometry.attributes.uv.needsUpdate = true;
268
257
  mesh.geometry.attributes.uv.bytes = result.length * 2;
269
-
270
258
  if ( ! ( mesh.material instanceof THREE.PackedPhongMaterial ) ) {
271
259
 
272
260
  mesh.material = new THREE.PackedPhongMaterial().copy( mesh.material );
@@ -283,7 +271,6 @@
283
271
  mesh.geometry.attributes.uv.isPacked = true;
284
272
  mesh.geometry.attributes.uv.needsUpdate = true;
285
273
  mesh.geometry.attributes.uv.bytes = result.quantized.length * 2;
286
-
287
274
  if ( ! ( mesh.material instanceof THREE.PackedPhongMaterial ) ) {
288
275
 
289
276
  mesh.material = new THREE.PackedPhongMaterial().copy( mesh.material );
@@ -296,8 +283,9 @@
296
283
 
297
284
  }
298
285
 
299
- } // Encoding functions
286
+ }
300
287
 
288
+ // Encoding functions
301
289
 
302
290
  function defaultEncode( x, y, z, bytes ) {
303
291
 
@@ -321,30 +309,30 @@
321
309
 
322
310
  }
323
311
 
324
- } // for `Angles` encoding
325
-
312
+ }
326
313
 
314
+ // for `Angles` encoding
327
315
  function anglesEncode( x, y, z ) {
328
316
 
329
317
  const normal0 = parseInt( 0.5 * ( 1.0 + Math.atan2( y, x ) / Math.PI ) * 65535 );
330
318
  const normal1 = parseInt( 0.5 * ( 1.0 + z ) * 65535 );
331
319
  return new Uint16Array( [ normal0, normal1 ] );
332
320
 
333
- } // for `Octahedron` encoding
334
-
321
+ }
335
322
 
323
+ // for `Octahedron` encoding
336
324
  function octEncodeBest( x, y, z, bytes ) {
337
325
 
338
- let oct, dec, best, currentCos, bestCos; // Test various combinations of ceil and floor
339
- // to minimize rounding errors
326
+ let oct, dec, best, currentCos, bestCos;
340
327
 
328
+ // Test various combinations of ceil and floor
329
+ // to minimize rounding errors
341
330
  best = oct = octEncodeVec3( x, y, z, 'floor', 'floor' );
342
331
  dec = octDecodeVec2( oct );
343
332
  bestCos = dot( x, y, z, dec );
344
333
  oct = octEncodeVec3( x, y, z, 'ceil', 'floor' );
345
334
  dec = octDecodeVec2( oct );
346
335
  currentCos = dot( x, y, z, dec );
347
-
348
336
  if ( currentCos > bestCos ) {
349
337
 
350
338
  best = oct;
@@ -355,7 +343,6 @@
355
343
  oct = octEncodeVec3( x, y, z, 'floor', 'ceil' );
356
344
  dec = octDecodeVec2( oct );
357
345
  currentCos = dot( x, y, z, dec );
358
-
359
346
  if ( currentCos > bestCos ) {
360
347
 
361
348
  best = oct;
@@ -366,7 +353,6 @@
366
353
  oct = octEncodeVec3( x, y, z, 'ceil', 'ceil' );
367
354
  dec = octDecodeVec2( oct );
368
355
  currentCos = dot( x, y, z, dec );
369
-
370
356
  if ( currentCos > bestCos ) {
371
357
 
372
358
  best = oct;
@@ -374,12 +360,10 @@
374
360
  }
375
361
 
376
362
  return best;
377
-
378
363
  function octEncodeVec3( x0, y0, z0, xfunc, yfunc ) {
379
364
 
380
365
  let x = x0 / ( Math.abs( x0 ) + Math.abs( y0 ) + Math.abs( z0 ) );
381
366
  let y = y0 / ( Math.abs( x0 ) + Math.abs( y0 ) + Math.abs( z0 ) );
382
-
383
367
  if ( z < 0 ) {
384
368
 
385
369
  const tempx = ( 1 - Math.abs( y ) ) * ( x >= 0 ? 1 : - 1 );
@@ -387,7 +371,6 @@
387
371
  x = tempx;
388
372
  y = tempy;
389
373
  let diff = 1 - Math.abs( x ) - Math.abs( y );
390
-
391
374
  if ( diff > 0 ) {
392
375
 
393
376
  diff += 0.001;
@@ -416,7 +399,6 @@
416
399
 
417
400
  let x = oct[ 0 ];
418
401
  let y = oct[ 1 ];
419
-
420
402
  if ( bytes == 1 ) {
421
403
 
422
404
  x /= x < 0 ? 127 : 128;
@@ -430,7 +412,6 @@
430
412
  }
431
413
 
432
414
  const z = 1 - Math.abs( x ) - Math.abs( y );
433
-
434
415
  if ( z < 0 ) {
435
416
 
436
417
  const tmpx = x;
@@ -455,7 +436,6 @@
455
436
  function quantizedEncode( array, bytes ) {
456
437
 
457
438
  let quantized, segments;
458
-
459
439
  if ( bytes == 1 ) {
460
440
 
461
441
  quantized = new Uint8Array( array.length );
@@ -477,7 +457,6 @@
477
457
  const max = new Float32Array( 3 );
478
458
  min[ 0 ] = min[ 1 ] = min[ 2 ] = Number.MAX_VALUE;
479
459
  max[ 0 ] = max[ 1 ] = max[ 2 ] = - Number.MAX_VALUE;
480
-
481
460
  for ( let i = 0; i < array.length; i += 3 ) {
482
461
 
483
462
  min[ 0 ] = Math.min( min[ 0 ], array[ i + 0 ] );
@@ -495,7 +474,6 @@
495
474
  decodeMat.elements[ 14 ] = min[ 2 ];
496
475
  decodeMat.transpose();
497
476
  const multiplier = new Float32Array( [ max[ 0 ] !== min[ 0 ] ? segments / ( max[ 0 ] - min[ 0 ] ) : 0, max[ 1 ] !== min[ 1 ] ? segments / ( max[ 1 ] - min[ 1 ] ) : 0, max[ 2 ] !== min[ 2 ] ? segments / ( max[ 2 ] - min[ 2 ] ) : 0 ] );
498
-
499
477
  for ( let i = 0; i < array.length; i += 3 ) {
500
478
 
501
479
  quantized[ i + 0 ] = Math.floor( ( array[ i + 0 ] - min[ 0 ] ) * multiplier[ 0 ] );
@@ -514,7 +492,6 @@
514
492
  function quantizedEncodeUV( array, bytes ) {
515
493
 
516
494
  let quantized, segments;
517
-
518
495
  if ( bytes == 1 ) {
519
496
 
520
497
  quantized = new Uint8Array( array.length );
@@ -536,7 +513,6 @@
536
513
  const max = new Float32Array( 2 );
537
514
  min[ 0 ] = min[ 1 ] = Number.MAX_VALUE;
538
515
  max[ 0 ] = max[ 1 ] = - Number.MAX_VALUE;
539
-
540
516
  for ( let i = 0; i < array.length; i += 2 ) {
541
517
 
542
518
  min[ 0 ] = Math.min( min[ 0 ], array[ i + 0 ] );
@@ -551,7 +527,6 @@
551
527
  decodeMat.elements[ 7 ] = min[ 1 ];
552
528
  decodeMat.transpose();
553
529
  const multiplier = new Float32Array( [ max[ 0 ] !== min[ 0 ] ? segments / ( max[ 0 ] - min[ 0 ] ) : 0, max[ 1 ] !== min[ 1 ] ? segments / ( max[ 1 ] - min[ 1 ] ) : 0 ] );
554
-
555
530
  for ( let i = 0; i < array.length; i += 2 ) {
556
531
 
557
532
  quantized[ i + 0 ] = Math.floor( ( array[ i + 0 ] - min[ 0 ] ) * multiplier[ 0 ] );
@@ -14,29 +14,24 @@
14
14
  * @param v2 Corner index +X, +Z.
15
15
  * @param v3 Corner index +X, -Z.
16
16
  */
17
-
18
17
  function hilbert2D( center = new THREE.Vector3( 0, 0, 0 ), size = 10, iterations = 1, v0 = 0, v1 = 1, v2 = 2, v3 = 3 ) {
19
18
 
20
19
  const half = size / 2;
21
20
  const vec_s = [ new THREE.Vector3( center.x - half, center.y, center.z - half ), new THREE.Vector3( center.x - half, center.y, center.z + half ), new THREE.Vector3( center.x + half, center.y, center.z + half ), new THREE.Vector3( center.x + half, center.y, center.z - half ) ];
22
- const vec = [ vec_s[ v0 ], vec_s[ v1 ], vec_s[ v2 ], vec_s[ v3 ] ]; // Recurse iterations
21
+ const vec = [ vec_s[ v0 ], vec_s[ v1 ], vec_s[ v2 ], vec_s[ v3 ] ];
23
22
 
23
+ // Recurse iterations
24
24
  if ( 0 <= -- iterations ) {
25
25
 
26
- const tmp = [];
27
- Array.prototype.push.apply( tmp, hilbert2D( vec[ 0 ], half, iterations, v0, v3, v2, v1 ) );
28
- Array.prototype.push.apply( tmp, hilbert2D( vec[ 1 ], half, iterations, v0, v1, v2, v3 ) );
29
- Array.prototype.push.apply( tmp, hilbert2D( vec[ 2 ], half, iterations, v0, v1, v2, v3 ) );
30
- Array.prototype.push.apply( tmp, hilbert2D( vec[ 3 ], half, iterations, v2, v1, v0, v3 ) ); // Return recursive call
31
-
32
- return tmp;
33
-
34
- } // Return complete Hilbert Curve.
26
+ return [ ...hilbert2D( vec[ 0 ], half, iterations, v0, v3, v2, v1 ), ...hilbert2D( vec[ 1 ], half, iterations, v0, v1, v2, v3 ), ...hilbert2D( vec[ 2 ], half, iterations, v0, v1, v2, v3 ), ...hilbert2D( vec[ 3 ], half, iterations, v2, v1, v0, v3 ) ];
35
27
 
28
+ }
36
29
 
30
+ // Return complete Hilbert Curve.
37
31
  return vec;
38
32
 
39
33
  }
34
+
40
35
  /**
41
36
  * Generates 3D-Coordinates in a very fast way.
42
37
  *
@@ -55,35 +50,25 @@
55
50
  * @param v6 Corner index +X, +Y, +Z.
56
51
  * @param v7 Corner index +X, +Y, -Z.
57
52
  */
58
-
59
-
60
53
  function hilbert3D( center = new THREE.Vector3( 0, 0, 0 ), size = 10, iterations = 1, v0 = 0, v1 = 1, v2 = 2, v3 = 3, v4 = 4, v5 = 5, v6 = 6, v7 = 7 ) {
61
54
 
62
55
  // Default Vars
63
56
  const half = size / 2;
64
57
  const vec_s = [ new THREE.Vector3( center.x - half, center.y + half, center.z - half ), new THREE.Vector3( center.x - half, center.y + half, center.z + half ), new THREE.Vector3( center.x - half, center.y - half, center.z + half ), new THREE.Vector3( center.x - half, center.y - half, center.z - half ), new THREE.Vector3( center.x + half, center.y - half, center.z - half ), new THREE.Vector3( center.x + half, center.y - half, center.z + half ), new THREE.Vector3( center.x + half, center.y + half, center.z + half ), new THREE.Vector3( center.x + half, center.y + half, center.z - half ) ];
65
- const vec = [ vec_s[ v0 ], vec_s[ v1 ], vec_s[ v2 ], vec_s[ v3 ], vec_s[ v4 ], vec_s[ v5 ], vec_s[ v6 ], vec_s[ v7 ] ]; // Recurse iterations
58
+ const vec = [ vec_s[ v0 ], vec_s[ v1 ], vec_s[ v2 ], vec_s[ v3 ], vec_s[ v4 ], vec_s[ v5 ], vec_s[ v6 ], vec_s[ v7 ] ];
66
59
 
60
+ // Recurse iterations
67
61
  if ( -- iterations >= 0 ) {
68
62
 
69
- const tmp = [];
70
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 0 ], half, iterations, v0, v3, v4, v7, v6, v5, v2, v1 ) );
71
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 1 ], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3 ) );
72
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 2 ], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3 ) );
73
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 3 ], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5 ) );
74
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 4 ], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5 ) );
75
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 5 ], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7 ) );
76
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 6 ], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7 ) );
77
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 7 ], half, iterations, v6, v5, v2, v1, v0, v3, v4, v7 ) ); // Return recursive call
78
-
79
- return tmp;
80
-
81
- } // Return complete Hilbert Curve.
63
+ return [ ...hilbert3D( vec[ 0 ], half, iterations, v0, v3, v4, v7, v6, v5, v2, v1 ), ...hilbert3D( vec[ 1 ], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3 ), ...hilbert3D( vec[ 2 ], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3 ), ...hilbert3D( vec[ 3 ], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5 ), ...hilbert3D( vec[ 4 ], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5 ), ...hilbert3D( vec[ 5 ], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7 ), ...hilbert3D( vec[ 6 ], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7 ), ...hilbert3D( vec[ 7 ], half, iterations, v6, v5, v2, v1, v0, v3, v4, v7 ) ];
82
64
 
65
+ }
83
66
 
67
+ // Return complete Hilbert Curve.
84
68
  return vec;
85
69
 
86
70
  }
71
+
87
72
  /**
88
73
  * Generates a Gosper curve (lying in the XY plane)
89
74
  *
@@ -91,23 +76,18 @@
91
76
  *
92
77
  * @param size The size of a single gosper island.
93
78
  */
94
-
95
-
96
79
  function gosper( size = 1 ) {
97
80
 
98
81
  function fractalize( config ) {
99
82
 
100
83
  let output;
101
84
  let input = config.axiom;
102
-
103
85
  for ( let i = 0, il = config.steps; 0 <= il ? i < il : i > il; 0 <= il ? i ++ : i -- ) {
104
86
 
105
87
  output = '';
106
-
107
88
  for ( let j = 0, jl = input.length; j < jl; j ++ ) {
108
89
 
109
90
  const char = input[ j ];
110
-
111
91
  if ( char in config.rules ) {
112
92
 
113
93
  output += config.rules[ char ];
@@ -135,11 +115,9 @@
135
115
  let angle = 0;
136
116
  const path = [ 0, 0, 0 ];
137
117
  const fractal = config.fractal;
138
-
139
118
  for ( let i = 0, l = fractal.length; i < l; i ++ ) {
140
119
 
141
120
  const char = fractal[ i ];
142
-
143
121
  if ( char === '+' ) {
144
122
 
145
123
  angle += config.angle;
@@ -160,8 +138,9 @@
160
138
 
161
139
  return path;
162
140
 
163
- } //
141
+ }
164
142
 
143
+ //
165
144
 
166
145
  const gosper = fractalize( {
167
146
  axiom: 'A',
@@ -175,8 +154,8 @@
175
154
  fractal: gosper,
176
155
  size: size,
177
156
  angle: Math.PI / 3 // 60 degrees
178
-
179
157
  } );
158
+
180
159
  return points;
181
160
 
182
161
  }
@@ -7,9 +7,11 @@
7
7
  // Merges geometries in object by materials and returns new object. Use on not indexed geometries.
8
8
  // The object buffers reference the old object ones.
9
9
  // Special treatment is done to the conditional lines generated by LDrawLoader.
10
+
10
11
  function extractGroup( geometry, group, elementSize, isConditionalLine ) {
11
12
 
12
13
  // Extracts a group from a geometry as a new geometry (with attribute buffers referencing original buffers)
14
+
13
15
  const newGeometry = new THREE.BufferGeometry();
14
16
  const originalPositions = geometry.getAttribute( 'position' ).array;
15
17
  const originalNormals = elementSize === 3 ? geometry.getAttribute( 'normal' ).array : null;
@@ -20,7 +22,6 @@
20
22
  const normals = originalNormals !== null ? originalNormals.subarray( vertStart, vertEnd ) : null;
21
23
  newGeometry.setAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) );
22
24
  if ( normals !== null ) newGeometry.setAttribute( 'normal', new THREE.BufferAttribute( normals, 3 ) );
23
-
24
25
  if ( isConditionalLine ) {
25
26
 
26
27
  const controlArray0 = geometry.getAttribute( 'control0' ).array.subarray( vertStart, vertEnd );
@@ -39,7 +40,6 @@
39
40
  function addGeometry( mat, geometry, geometries ) {
40
41
 
41
42
  const geoms = geometries[ mat.uuid ];
42
-
43
43
  if ( ! geoms ) {
44
44
 
45
45
  geometries[ mat.uuid ] = {
@@ -58,11 +58,11 @@
58
58
  function permuteAttribute( attribute, elemSize ) {
59
59
 
60
60
  // Permutes first two vertices of each attribute element
61
+
61
62
  if ( ! attribute ) return;
62
63
  const verts = attribute.array;
63
64
  const numVerts = Math.floor( verts.length / 3 );
64
65
  let offset = 0;
65
-
66
66
  for ( let i = 0; i < numVerts; i ++ ) {
67
67
 
68
68
  const x = verts[ offset ];
@@ -78,8 +78,9 @@
78
78
 
79
79
  }
80
80
 
81
- } // Traverse the object hierarchy collecting geometries and transforming them to world space
81
+ }
82
82
 
83
+ // Traverse the object hierarchy collecting geometries and transforming them to world space
83
84
 
84
85
  const meshGeometries = {};
85
86
  const linesGeometries = {};
@@ -93,7 +94,6 @@
93
94
  const elemSize = c.isMesh ? 3 : 2;
94
95
  const geometry = c.geometry.clone();
95
96
  const matrixIsInverted = c.matrixWorld.determinant() < 0;
96
-
97
97
  if ( matrixIsInverted ) {
98
98
 
99
99
  permuteAttribute( geometry.attributes.position, elemSize );
@@ -102,7 +102,6 @@
102
102
  }
103
103
 
104
104
  geometry.applyMatrix4( c.matrixWorld );
105
-
106
105
  if ( c.isConditionalLine ) {
107
106
 
108
107
  geometry.attributes.control0.applyMatrix4( c.matrixWorld );
@@ -113,7 +112,6 @@
113
112
  }
114
113
 
115
114
  const geometries = c.isMesh ? meshGeometries : c.isConditionalLine ? condLinesGeometries : linesGeometries;
116
-
117
115
  if ( Array.isArray( c.material ) ) {
118
116
 
119
117
  for ( const groupIndex in geometry.groups ) {
@@ -133,11 +131,12 @@
133
131
 
134
132
  }
135
133
 
136
- } ); // Create object with merged geometries
134
+ } );
135
+
136
+ // Create object with merged geometries
137
137
 
138
138
  const mergedObject = new THREE.Group();
139
139
  const meshMaterialsIds = Object.keys( meshGeometries );
140
-
141
140
  for ( const meshMaterialsId of meshMaterialsIds ) {
142
141
 
143
142
  const meshGeometry = meshGeometries[ meshMaterialsId ];
@@ -147,7 +146,6 @@
147
146
  }
148
147
 
149
148
  const linesMaterialsIds = Object.keys( linesGeometries );
150
-
151
149
  for ( const linesMaterialsId of linesMaterialsIds ) {
152
150
 
153
151
  const lineGeometry = linesGeometries[ linesMaterialsId ];
@@ -157,7 +155,6 @@
157
155
  }
158
156
 
159
157
  const condLinesMaterialsIds = Object.keys( condLinesGeometries );
160
-
161
158
  for ( const condLinesMaterialsId of condLinesMaterialsIds ) {
162
159
 
163
160
  const condLineGeometry = condLinesGeometries[ condLinesMaterialsId ];