super-three 0.144.0 → 0.147.1

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 (450) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +737 -388
  3. package/build/three.js +737 -388
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +911 -409
  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 +70 -134
  10. package/examples/js/cameras/CinematicCamera.js +33 -22
  11. package/examples/js/controls/ArcballControls.js +138 -405
  12. package/examples/js/controls/DragControls.js +8 -33
  13. package/examples/js/controls/FirstPersonControls.js +32 -54
  14. package/examples/js/controls/FlyControls.js +29 -55
  15. package/examples/js/controls/OrbitControls.js +125 -99
  16. package/examples/js/controls/PointerLockControls.js +5 -14
  17. package/examples/js/controls/TrackballControls.js +33 -86
  18. package/examples/js/controls/TransformControls.js +85 -170
  19. package/examples/js/csm/CSM.js +4 -39
  20. package/examples/js/csm/CSMFrustum.js +3 -9
  21. package/examples/js/csm/CSMHelper.js +24 -4
  22. package/examples/js/csm/CSMShader.js +2 -6
  23. package/examples/js/curves/CurveExtras.js +27 -27
  24. package/examples/js/curves/NURBSCurve.js +4 -16
  25. package/examples/js/curves/NURBSSurface.js +3 -9
  26. package/examples/js/curves/NURBSUtils.js +8 -45
  27. package/examples/js/effects/AnaglyphEffect.js +4 -18
  28. package/examples/js/effects/AsciiEffect.js +32 -31
  29. package/examples/js/effects/OutlineEffect.js +26 -30
  30. package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
  31. package/examples/js/effects/PeppersGhostEffect.js +12 -39
  32. package/examples/js/effects/StereoEffect.js +0 -4
  33. package/examples/js/environments/RoomEnvironment.js +12 -10
  34. package/examples/js/exporters/ColladaExporter.js +48 -65
  35. package/examples/js/exporters/DRACOExporter.js +22 -22
  36. package/examples/js/exporters/EXRExporter.js +15 -18
  37. package/examples/js/exporters/GLTFExporter.js +141 -317
  38. package/examples/js/exporters/MMDExporter.js +5 -12
  39. package/examples/js/exporters/OBJExporter.js +42 -33
  40. package/examples/js/exporters/PLYExporter.js +38 -33
  41. package/examples/js/exporters/STLExporter.js +5 -7
  42. package/examples/js/exporters/USDZExporter.js +113 -27
  43. package/examples/js/geometries/BoxLineGeometry.js +0 -1
  44. package/examples/js/geometries/ConvexGeometry.js +11 -6
  45. package/examples/js/geometries/DecalGeometry.js +53 -20
  46. package/examples/js/geometries/LightningStrike.js +54 -67
  47. package/examples/js/geometries/ParametricGeometries.js +8 -7
  48. package/examples/js/geometries/ParametricGeometry.js +25 -12
  49. package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
  50. package/examples/js/geometries/TeapotGeometry.js +54 -50
  51. package/examples/js/geometries/TextGeometry.js +6 -4
  52. package/examples/js/helpers/LightProbeHelper.js +1 -2
  53. package/examples/js/helpers/OctreeHelper.js +22 -20
  54. package/examples/js/helpers/PositionalAudioHelper.js +8 -6
  55. package/examples/js/helpers/RectAreaLightHelper.js +6 -7
  56. package/examples/js/helpers/VertexNormalsHelper.js +15 -13
  57. package/examples/js/helpers/VertexTangentsHelper.js +15 -9
  58. package/examples/js/helpers/ViewHelper.js +31 -16
  59. package/examples/js/interactive/HTMLMesh.js +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 +0 -8
  63. package/examples/js/lights/LightProbeGenerator.js +32 -39
  64. package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
  65. package/examples/js/lines/LineGeometry.js +3 -5
  66. package/examples/js/lines/LineMaterial.js +4 -11
  67. package/examples/js/lines/LineSegments2.js +40 -89
  68. package/examples/js/lines/LineSegmentsGeometry.js +7 -28
  69. package/examples/js/lines/Wireframe.js +2 -7
  70. package/examples/js/lines/WireframeGeometry2.js +3 -1
  71. package/examples/js/loaders/3DMLoader.js +58 -155
  72. package/examples/js/loaders/3MFLoader.js +72 -106
  73. package/examples/js/loaders/AMFLoader.js +0 -25
  74. package/examples/js/loaders/BVHLoader.js +44 -43
  75. package/examples/js/loaders/BasisTextureLoader.js +16 -46
  76. package/examples/js/loaders/ColladaLoader.js +228 -359
  77. package/examples/js/loaders/DDSLoader.js +24 -25
  78. package/examples/js/loaders/DRACOLoader.js +29 -66
  79. package/examples/js/loaders/EXRLoader.js +67 -164
  80. package/examples/js/loaders/FBXLoader.js +287 -441
  81. package/examples/js/loaders/FontLoader.js +6 -15
  82. package/examples/js/loaders/GCodeLoader.js +15 -16
  83. package/examples/js/loaders/GLTFLoader.js +409 -706
  84. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
  85. package/examples/js/loaders/KMZLoader.js +3 -7
  86. package/examples/js/loaders/KTXLoader.js +12 -30
  87. package/examples/js/loaders/LDrawLoader.js +178 -289
  88. package/examples/js/loaders/LUT3dlLoader.js +7 -11
  89. package/examples/js/loaders/LUTCubeLoader.js +0 -8
  90. package/examples/js/loaders/LWOLoader.js +59 -124
  91. package/examples/js/loaders/LogLuvLoader.js +27 -77
  92. package/examples/js/loaders/LottieLoader.js +4 -4
  93. package/examples/js/loaders/MD2Loader.js +26 -27
  94. package/examples/js/loaders/MDDLoader.js +6 -10
  95. package/examples/js/loaders/MMDLoader.js +180 -189
  96. package/examples/js/loaders/MTLLoader.js +18 -47
  97. package/examples/js/loaders/NRRDLoader.js +44 -84
  98. package/examples/js/loaders/OBJLoader.js +50 -65
  99. package/examples/js/loaders/PCDLoader.js +34 -29
  100. package/examples/js/loaders/PDBLoader.js +17 -13
  101. package/examples/js/loaders/PLYLoader.js +62 -48
  102. package/examples/js/loaders/PRWMLoader.js +11 -22
  103. package/examples/js/loaders/PVRLoader.js +7 -16
  104. package/examples/js/loaders/RGBELoader.js +36 -61
  105. package/examples/js/loaders/RGBMLoader.js +26 -87
  106. package/examples/js/loaders/STLLoader.js +20 -27
  107. package/examples/js/loaders/SVGLoader.js +361 -233
  108. package/examples/js/loaders/TDSLoader.js +81 -118
  109. package/examples/js/loaders/TGALoader.js +39 -41
  110. package/examples/js/loaders/TIFFLoader.js +0 -1
  111. package/examples/js/loaders/TTFLoader.js +0 -8
  112. package/examples/js/loaders/TiltLoader.js +14 -15
  113. package/examples/js/loaders/VOXLoader.js +8 -16
  114. package/examples/js/loaders/VRMLLoader.js +243 -340
  115. package/examples/js/loaders/VTKLoader.js +101 -118
  116. package/examples/js/loaders/XYZLoader.js +2 -4
  117. package/examples/js/loaders/lwo/IFFParser.js +55 -136
  118. package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
  119. package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
  120. package/examples/js/materials/MeshGouraudMaterial.js +15 -13
  121. package/examples/js/math/Capsule.js +0 -17
  122. package/examples/js/math/ColorConverter.js +3 -3
  123. package/examples/js/math/ConvexHull.js +185 -141
  124. package/examples/js/math/ImprovedNoise.js +1 -1
  125. package/examples/js/math/Lut.js +8 -15
  126. package/examples/js/math/MeshSurfaceSampler.js +6 -28
  127. package/examples/js/math/OBB.js +90 -49
  128. package/examples/js/math/Octree.js +2 -57
  129. package/examples/js/math/SimplexNoise.js +74 -88
  130. package/examples/js/misc/ConvexObjectBreaker.js +37 -48
  131. package/examples/js/misc/GPUComputationRenderer.js +26 -16
  132. package/examples/js/misc/Gyroscope.js +5 -9
  133. package/examples/js/misc/MD2Character.js +14 -23
  134. package/examples/js/misc/MD2CharacterComplex.js +73 -54
  135. package/examples/js/misc/MorphAnimMesh.js +0 -6
  136. package/examples/js/misc/MorphBlendMesh.js +3 -30
  137. package/examples/js/misc/ProgressiveLightMap.js +47 -43
  138. package/examples/js/misc/RollerCoaster.js +17 -24
  139. package/examples/js/misc/TubePainter.js +18 -12
  140. package/examples/js/misc/Volume.js +16 -45
  141. package/examples/js/misc/VolumeSlice.js +14 -24
  142. package/examples/js/modifiers/CurveModifier.js +19 -21
  143. package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
  144. package/examples/js/modifiers/SimplifyModifier.js +56 -59
  145. package/examples/js/modifiers/TessellateModifier.js +2 -9
  146. package/examples/js/objects/GroundProjectedEnv.js +2 -14
  147. package/examples/js/objects/Lensflare.js +47 -38
  148. package/examples/js/objects/LightningStorm.js +10 -13
  149. package/examples/js/objects/MarchingCubes.js +80 -59
  150. package/examples/js/objects/Reflector.js +22 -20
  151. package/examples/js/objects/ReflectorForSSRPass.js +19 -23
  152. package/examples/js/objects/Refractor.js +52 -30
  153. package/examples/js/objects/ShadowMesh.js +1 -2
  154. package/examples/js/objects/Sky.js +2 -7
  155. package/examples/js/objects/Water.js +23 -18
  156. package/examples/js/objects/Water2.js +20 -19
  157. package/examples/js/physics/AmmoPhysics.js +23 -20
  158. package/examples/js/physics/OimoPhysics.js +19 -17
  159. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
  160. package/examples/js/postprocessing/AfterimagePass.js +19 -12
  161. package/examples/js/postprocessing/BloomPass.js +38 -17
  162. package/examples/js/postprocessing/BokehPass.js +29 -12
  163. package/examples/js/postprocessing/ClearPass.js +1 -6
  164. package/examples/js/postprocessing/CubeTexturePass.js +12 -9
  165. package/examples/js/postprocessing/DotScreenPass.js +7 -5
  166. package/examples/js/postprocessing/EffectComposer.js +25 -32
  167. package/examples/js/postprocessing/FilmPass.js +7 -5
  168. package/examples/js/postprocessing/GlitchPass.js +10 -11
  169. package/examples/js/postprocessing/HalftonePass.js +9 -9
  170. package/examples/js/postprocessing/LUTPass.js +2 -15
  171. package/examples/js/postprocessing/MaskPass.js +20 -17
  172. package/examples/js/postprocessing/OutlinePass.js +45 -36
  173. package/examples/js/postprocessing/Pass.js +11 -14
  174. package/examples/js/postprocessing/RenderPass.js +3 -7
  175. package/examples/js/postprocessing/RenderPixelatedPass.js +215 -0
  176. package/examples/js/postprocessing/SAOPass.js +40 -32
  177. package/examples/js/postprocessing/SMAAPass.js +34 -17
  178. package/examples/js/postprocessing/SSAARenderPass.js +14 -14
  179. package/examples/js/postprocessing/SSAOPass.js +56 -42
  180. package/examples/js/postprocessing/SSRPass.js +78 -61
  181. package/examples/js/postprocessing/SavePass.js +14 -6
  182. package/examples/js/postprocessing/ShaderPass.js +9 -8
  183. package/examples/js/postprocessing/TAARenderPass.js +11 -9
  184. package/examples/js/postprocessing/TexturePass.js +7 -4
  185. package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
  186. package/examples/js/renderers/CSS2DRenderer.js +2 -21
  187. package/examples/js/renderers/CSS3DRenderer.js +3 -24
  188. package/examples/js/renderers/Projector.js +29 -85
  189. package/examples/js/renderers/SVGRenderer.js +4 -50
  190. package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
  191. package/examples/js/shaders/AfterimageShader.js +3 -6
  192. package/examples/js/shaders/BasicShader.js +3 -6
  193. package/examples/js/shaders/BleachBypassShader.js +3 -6
  194. package/examples/js/shaders/BlendShader.js +3 -6
  195. package/examples/js/shaders/BokehShader.js +3 -6
  196. package/examples/js/shaders/BokehShader2.js +4 -13
  197. package/examples/js/shaders/BrightnessContrastShader.js +3 -6
  198. package/examples/js/shaders/ColorCorrectionShader.js +2 -6
  199. package/examples/js/shaders/ColorifyShader.js +2 -6
  200. package/examples/js/shaders/ConvolutionShader.js +5 -10
  201. package/examples/js/shaders/CopyShader.js +3 -6
  202. package/examples/js/shaders/DOFMipMapShader.js +3 -6
  203. package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
  204. package/examples/js/shaders/DigitalGlitch.js +3 -6
  205. package/examples/js/shaders/DotScreenShader.js +2 -6
  206. package/examples/js/shaders/FXAAShader.js +1 -3
  207. package/examples/js/shaders/FilmShader.js +3 -6
  208. package/examples/js/shaders/FocusShader.js +3 -6
  209. package/examples/js/shaders/FreiChenShader.js +2 -6
  210. package/examples/js/shaders/GammaCorrectionShader.js +3 -6
  211. package/examples/js/shaders/GodRaysShader.js +11 -24
  212. package/examples/js/shaders/HalftoneShader.js +3 -6
  213. package/examples/js/shaders/HorizontalBlurShader.js +3 -6
  214. package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
  215. package/examples/js/shaders/HueSaturationShader.js +3 -6
  216. package/examples/js/shaders/KaleidoShader.js +3 -6
  217. package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
  218. package/examples/js/shaders/LuminosityShader.js +3 -6
  219. package/examples/js/shaders/MMDToonShader.js +2 -8
  220. package/examples/js/shaders/MirrorShader.js +3 -6
  221. package/examples/js/shaders/NormalMapShader.js +2 -6
  222. package/examples/js/shaders/RGBShiftShader.js +3 -6
  223. package/examples/js/shaders/SAOShader.js +2 -6
  224. package/examples/js/shaders/SMAAShader.js +6 -18
  225. package/examples/js/shaders/SSAOShader.js +2 -6
  226. package/examples/js/shaders/SSRShader.js +6 -18
  227. package/examples/js/shaders/SepiaShader.js +3 -6
  228. package/examples/js/shaders/SobelOperatorShader.js +2 -6
  229. package/examples/js/shaders/TechnicolorShader.js +3 -6
  230. package/examples/js/shaders/ToneMapShader.js +3 -6
  231. package/examples/js/shaders/ToonShader.js +8 -24
  232. package/examples/js/shaders/TriangleBlurShader.js +2 -6
  233. package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
  234. package/examples/js/shaders/VelocityShader.js +126 -0
  235. package/examples/js/shaders/VerticalBlurShader.js +3 -6
  236. package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
  237. package/examples/js/shaders/VignetteShader.js +3 -6
  238. package/examples/js/shaders/VolumeShader.js +2 -6
  239. package/examples/js/shaders/WaterRefractionShader.js +2 -6
  240. package/examples/js/textures/FlakesTexture.js +0 -1
  241. package/examples/js/utils/BufferGeometryUtils.js +236 -170
  242. package/examples/js/utils/CameraUtils.js +5 -20
  243. package/examples/js/utils/GPUStatsPanel.js +3 -12
  244. package/examples/js/utils/GeometryCompressionUtils.js +19 -44
  245. package/examples/js/utils/GeometryUtils.js +13 -18
  246. package/examples/js/utils/LDrawUtils.js +8 -11
  247. package/examples/js/utils/PackedPhongMaterial.js +6 -4
  248. package/examples/js/utils/SceneUtils.js +117 -6
  249. package/examples/js/utils/ShadowMapViewer.js +17 -14
  250. package/examples/js/utils/SkeletonUtils.js +13 -27
  251. package/examples/js/utils/UVsDebug.js +20 -12
  252. package/examples/js/utils/WorkerPool.js +1 -11
  253. package/examples/jsm/animation/CCDIKSolver.js +27 -3
  254. package/examples/jsm/animation/MMDPhysics.js +25 -0
  255. package/examples/jsm/capabilities/WebGPU.js +3 -1
  256. package/examples/jsm/controls/FirstPersonControls.js +20 -20
  257. package/examples/jsm/controls/FlyControls.js +16 -17
  258. package/examples/jsm/controls/OrbitControls.js +44 -4
  259. package/examples/jsm/controls/TrackballControls.js +14 -2
  260. package/examples/jsm/controls/TransformControls.js +1 -1
  261. package/examples/jsm/csm/CSM.js +1 -0
  262. package/examples/jsm/csm/CSMHelper.js +30 -0
  263. package/examples/jsm/exporters/GLTFExporter.js +0 -79
  264. package/examples/jsm/exporters/USDZExporter.js +93 -1
  265. package/examples/jsm/helpers/OctreeHelper.js +22 -8
  266. package/examples/jsm/helpers/VertexNormalsHelper.js +7 -1
  267. package/examples/jsm/helpers/VertexTangentsHelper.js +7 -0
  268. package/examples/jsm/helpers/ViewHelper.js +24 -0
  269. package/examples/jsm/interactive/HTMLMesh.js +5 -6
  270. package/examples/jsm/interactive/InteractiveGroup.js +4 -2
  271. package/examples/jsm/libs/flow.module.js +610 -160
  272. package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
  273. package/examples/jsm/lines/LineSegments2.js +4 -0
  274. package/examples/jsm/loaders/3DMLoader.js +1 -2
  275. package/examples/jsm/loaders/ColladaLoader.js +28 -0
  276. package/examples/jsm/loaders/FBXLoader.js +18 -2
  277. package/examples/jsm/loaders/GLTFLoader.js +269 -428
  278. package/examples/jsm/loaders/KTX2Loader.js +68 -29
  279. package/examples/jsm/loaders/LDrawLoader.js +14 -13
  280. package/examples/jsm/loaders/LottieLoader.js +4 -2
  281. package/examples/jsm/loaders/MaterialXLoader.js +728 -0
  282. package/examples/jsm/loaders/PCDLoader.js +1 -1
  283. package/examples/jsm/loaders/PLYLoader.js +68 -16
  284. package/examples/jsm/loaders/SVGLoader.js +227 -14
  285. package/examples/jsm/loaders/USDZLoader.js +351 -111
  286. package/examples/jsm/loaders/VRMLLoader.js +13 -1
  287. package/examples/jsm/math/ConvexHull.js +4 -4
  288. package/examples/jsm/math/Octree.js +1 -1
  289. package/examples/jsm/node-editor/NodeEditor.js +91 -12
  290. package/examples/jsm/node-editor/core/BaseNode.js +10 -3
  291. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +6 -9
  292. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +6 -9
  293. package/examples/jsm/node-editor/math/AngleEditor.js +3 -3
  294. package/examples/jsm/node-editor/math/InvertEditor.js +2 -2
  295. package/examples/jsm/node-editor/scene/MeshEditor.js +11 -8
  296. package/examples/jsm/node-editor/utils/PreviewEditor.js +4 -0
  297. package/examples/jsm/nodes/Nodes.js +30 -3
  298. package/examples/jsm/nodes/accessors/BitangentNode.js +62 -0
  299. package/examples/jsm/nodes/accessors/NormalNode.js +6 -6
  300. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  301. package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
  302. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  303. package/examples/jsm/nodes/accessors/SkinningNode.js +8 -1
  304. package/examples/jsm/nodes/accessors/TangentNode.js +95 -0
  305. package/examples/jsm/nodes/core/AttributeNode.js +31 -8
  306. package/examples/jsm/nodes/core/Node.js +1 -1
  307. package/examples/jsm/nodes/core/NodeBuilder.js +55 -6
  308. package/examples/jsm/nodes/core/NodeFrame.js +2 -2
  309. package/examples/jsm/nodes/core/NodeVarying.js +7 -4
  310. package/examples/jsm/nodes/core/VaryingNode.js +6 -4
  311. package/examples/jsm/nodes/core/constants.js +13 -13
  312. package/examples/jsm/nodes/display/BlendModeNode.js +85 -0
  313. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -12
  314. package/examples/jsm/nodes/display/NormalMapNode.js +19 -12
  315. package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
  316. package/examples/jsm/nodes/display/ViewportNode.js +106 -0
  317. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +5 -5
  318. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +3 -3
  319. package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +2 -2
  320. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  321. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  322. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
  323. package/examples/jsm/nodes/materials/Materials.js +9 -7
  324. package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
  325. package/examples/jsm/nodes/materialx/{Disclaimer.md → DISCLAIMER.md} +1 -1
  326. package/examples/jsm/nodes/materialx/MaterialXNodes.js +59 -0
  327. package/examples/jsm/nodes/materialx/{functions/lib → lib}/mx_hsv.js +1 -1
  328. package/examples/jsm/nodes/materialx/{functions/lib → lib}/mx_noise.js +13 -3
  329. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
  330. package/examples/jsm/nodes/math/MathNode.js +5 -5
  331. package/examples/jsm/nodes/math/OperatorNode.js +16 -3
  332. package/examples/jsm/nodes/shadernode/ShaderNode.js +35 -20
  333. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +87 -63
  334. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +29 -0
  335. package/examples/jsm/nodes/utils/ConvertNode.js +15 -14
  336. package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
  337. package/examples/jsm/nodes/utils/JoinNode.js +8 -2
  338. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
  339. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  340. package/examples/jsm/nodes/utils/OscNode.js +2 -2
  341. package/examples/jsm/nodes/utils/RemapNode.js +34 -0
  342. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
  343. package/examples/jsm/nodes/utils/TimerNode.js +21 -1
  344. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
  345. package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
  346. package/examples/jsm/postprocessing/BloomPass.js +22 -3
  347. package/examples/jsm/postprocessing/BokehPass.js +18 -4
  348. package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
  349. package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
  350. package/examples/jsm/postprocessing/EffectComposer.js +9 -0
  351. package/examples/jsm/postprocessing/FilmPass.js +8 -0
  352. package/examples/jsm/postprocessing/GlitchPass.js +13 -1
  353. package/examples/jsm/postprocessing/HalftonePass.js +8 -0
  354. package/examples/jsm/postprocessing/OutlinePass.js +21 -1
  355. package/examples/jsm/postprocessing/Pass.js +2 -0
  356. package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
  357. package/examples/jsm/postprocessing/SAOPass.js +20 -0
  358. package/examples/jsm/postprocessing/SMAAPass.js +16 -0
  359. package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
  360. package/examples/jsm/postprocessing/SavePass.js +17 -1
  361. package/examples/jsm/postprocessing/ShaderPass.js +8 -0
  362. package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
  363. package/examples/jsm/postprocessing/TexturePass.js +8 -0
  364. package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
  365. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +56 -35
  366. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
  367. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
  368. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
  369. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
  370. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +41 -9
  371. package/examples/jsm/shaders/MMDToonShader.js +0 -2
  372. package/examples/jsm/shaders/VelocityShader.js +128 -0
  373. package/examples/jsm/utils/BufferGeometryUtils.js +174 -42
  374. package/examples/jsm/utils/SceneUtils.js +129 -4
  375. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  376. package/examples/jsm/webxr/XRHandMeshModel.js +8 -3
  377. package/package.json +13 -13
  378. package/src/Three.js +1 -0
  379. package/src/animation/PropertyBinding.js +7 -0
  380. package/src/audio/AudioContext.js +5 -5
  381. package/src/cameras/CubeCamera.js +14 -14
  382. package/src/constants.js +1 -1
  383. package/src/core/InstancedBufferGeometry.js +1 -7
  384. package/src/core/InterleavedBufferAttribute.js +4 -4
  385. package/src/extras/Earcut.js +67 -67
  386. package/src/geometries/PolyhedronGeometry.js +1 -1
  387. package/src/geometries/ShapeGeometry.js +1 -1
  388. package/src/helpers/ArrowHelper.js +9 -0
  389. package/src/helpers/Box3Helper.js +7 -0
  390. package/src/helpers/BoxHelper.js +7 -1
  391. package/src/helpers/DirectionalLightHelper.js +5 -1
  392. package/src/helpers/GridHelper.js +7 -0
  393. package/src/helpers/HemisphereLightHelper.js +4 -1
  394. package/src/helpers/PlaneHelper.js +9 -0
  395. package/src/helpers/PointLightHelper.js +2 -1
  396. package/src/helpers/PolarGridHelper.js +7 -0
  397. package/src/helpers/SkeletonHelper.js +7 -0
  398. package/src/helpers/SpotLightHelper.js +4 -2
  399. package/src/lights/LightShadow.js +1 -2
  400. package/src/lights/PointLight.js +2 -2
  401. package/src/lights/SpotLight.js +2 -2
  402. package/src/loaders/FileLoader.js +4 -1
  403. package/src/loaders/ObjectLoader.js +5 -1
  404. package/src/materials/Material.js +1 -1
  405. package/src/materials/MeshPhysicalMaterial.js +1 -1
  406. package/src/math/Color.js +5 -5
  407. package/src/math/Matrix3.js +53 -18
  408. package/src/math/Ray.js +2 -5
  409. package/src/math/Sphere.js +36 -21
  410. package/src/objects/InstancedMesh.js +7 -0
  411. package/src/objects/LOD.js +25 -6
  412. package/src/renderers/WebGL3DRenderTarget.js +1 -1
  413. package/src/renderers/WebGLArrayRenderTarget.js +1 -1
  414. package/src/renderers/WebGLCubeRenderTarget.js +1 -1
  415. package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
  416. package/src/renderers/WebGLRenderTarget.js +1 -1
  417. package/src/renderers/WebGLRenderer.js +36 -62
  418. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
  419. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
  420. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
  421. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
  422. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
  423. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -4
  424. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
  425. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +2 -2
  426. package/src/renderers/shaders/ShaderChunk.js +3 -0
  427. package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
  428. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  429. package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
  430. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +0 -3
  431. package/src/renderers/shaders/ShaderLib.js +20 -6
  432. package/src/renderers/shaders/UniformsLib.js +1 -1
  433. package/src/renderers/shaders/UniformsUtils.js +15 -0
  434. package/src/renderers/webgl/WebGLAttributes.js +2 -0
  435. package/src/renderers/webgl/WebGLBackground.js +15 -7
  436. package/src/renderers/webgl/WebGLLights.js +0 -4
  437. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  438. package/src/renderers/webgl/WebGLShadowMap.js +3 -1
  439. package/src/renderers/webgl/WebGLState.js +78 -41
  440. package/src/renderers/webgl/WebGLTextures.js +94 -39
  441. package/src/renderers/webgl/WebGLUniforms.js +152 -24
  442. package/src/renderers/webgl/WebGLUtils.js +1 -1
  443. package/src/renderers/webxr/WebXRController.js +46 -13
  444. package/src/renderers/webxr/WebXRManager.js +71 -3
  445. package/src/scenes/Scene.js +8 -0
  446. package/src/textures/CompressedArrayTexture.js +18 -0
  447. package/src/textures/Texture.js +2 -1
  448. package/examples/js/libs/lottie_canvas.js +0 -12751
  449. package/examples/js/shaders/PixelShader.js +0 -51
  450. package/examples/jsm/shaders/PixelShader.js +0 -44
@@ -7,7 +7,6 @@
7
7
  super( manager );
8
8
 
9
9
  }
10
-
11
10
  load( url, onLoad, onProgress, onError ) {
12
11
 
13
12
  const scope = this;
@@ -39,8 +38,9 @@
39
38
 
40
39
  }, onProgress, onError );
41
40
 
42
- } // Based on CanvasMol PDB parser
41
+ }
43
42
 
43
+ // Based on CanvasMol PDB parser
44
44
 
45
45
  parse( text ) {
46
46
 
@@ -65,18 +65,17 @@
65
65
  function parseBond( start, length, satom, i ) {
66
66
 
67
67
  const eatom = parseInt( lines[ i ].slice( start, start + length ) );
68
-
69
68
  if ( eatom ) {
70
69
 
71
70
  const h = hash( satom, eatom );
72
-
73
71
  if ( _bhash[ h ] === undefined ) {
74
72
 
75
73
  _bonds.push( [ satom - 1, eatom - 1, 1 ] );
76
-
77
74
  _bhash[ h ] = _bonds.length - 1;
78
75
 
79
- } else { // doesn't really work as almost all PDBs
76
+ } else {
77
+
78
+ // doesn't really work as almost all PDBs
80
79
  // have just normal bonds appearing multiple
81
80
  // times instead of being double/triple bonds
82
81
  // bonds[bhash[h]][2] += 1;
@@ -99,7 +98,9 @@
99
98
  const geometryBonds = build.geometryBonds;
100
99
  const verticesAtoms = [];
101
100
  const colorsAtoms = [];
102
- const verticesBonds = []; // atoms
101
+ const verticesBonds = [];
102
+
103
+ // atoms
103
104
 
104
105
  for ( let i = 0, l = atoms.length; i < l; i ++ ) {
105
106
 
@@ -113,8 +114,9 @@
113
114
  const b = atom[ 3 ][ 2 ] / 255;
114
115
  colorsAtoms.push( r, g, b );
115
116
 
116
- } // bonds
117
+ }
117
118
 
119
+ // bonds
118
120
 
119
121
  for ( let i = 0, l = _bonds.length; i < l; i ++ ) {
120
122
 
@@ -132,8 +134,9 @@
132
134
  z = endAtom[ 2 ];
133
135
  verticesBonds.push( x, y, z );
134
136
 
135
- } // build geometry
137
+ }
136
138
 
139
+ // build geometry
137
140
 
138
141
  geometryAtoms.setAttribute( 'position', new THREE.Float32BufferAttribute( verticesAtoms, 3 ) );
139
142
  geometryAtoms.setAttribute( 'color', new THREE.Float32BufferAttribute( colorsAtoms, 3 ) );
@@ -265,10 +268,11 @@
265
268
  const atoms = [];
266
269
  const _bonds = [];
267
270
  const _bhash = {};
268
- const _atomMap = {}; // parse
271
+ const _atomMap = {};
269
272
 
270
- const lines = text.split( '\n' );
273
+ // parse
271
274
 
275
+ const lines = text.split( '\n' );
272
276
  for ( let i = 0, l = lines.length; i < l; i ++ ) {
273
277
 
274
278
  if ( lines[ i ].slice( 0, 4 ) === 'ATOM' || lines[ i ].slice( 0, 6 ) === 'HETATM' ) {
@@ -278,7 +282,6 @@
278
282
  const z = parseFloat( lines[ i ].slice( 46, 53 ) );
279
283
  const index = parseInt( lines[ i ].slice( 6, 11 ) ) - 1;
280
284
  let e = trim( lines[ i ].slice( 76, 78 ) ).toLowerCase();
281
-
282
285
  if ( e === '' ) {
283
286
 
284
287
  e = trim( lines[ i ].slice( 12, 14 ) ).toLowerCase();
@@ -299,8 +302,9 @@
299
302
 
300
303
  }
301
304
 
302
- } // build and return geometry
305
+ }
303
306
 
307
+ // build and return geometry
304
308
 
305
309
  return buildGeometry();
306
310
 
@@ -24,19 +24,28 @@
24
24
  * diffuse_blue: 'blue'
25
25
  * } );
26
26
  *
27
+ * Custom properties outside of the defaults for position, uv, normal
28
+ * and color attributes can be added using the setCustomPropertyMapping method.
29
+ * For example, the following maps the element properties “custom_property_a”
30
+ * and “custom_property_b” to an attribute “customAttribute” with an item size of 2.
31
+ * Attribute item sizes are set from the number of element properties in the property array.
32
+ *
33
+ * loader.setCustomPropertyMapping( {
34
+ * customAttribute: ['custom_property_a', 'custom_property_b'],
35
+ * } );
36
+ *
27
37
  */
28
38
 
29
39
  const _color = new THREE.Color();
30
-
31
40
  class PLYLoader extends THREE.Loader {
32
41
 
33
42
  constructor( manager ) {
34
43
 
35
44
  super( manager );
36
45
  this.propertyNameMapping = {};
46
+ this.customPropertyMapping = {};
37
47
 
38
48
  }
39
-
40
49
  load( url, onLoad, onProgress, onError ) {
41
50
 
42
51
  const scope = this;
@@ -70,13 +79,16 @@
70
79
  }, onProgress, onError );
71
80
 
72
81
  }
73
-
74
82
  setPropertyNameMapping( mapping ) {
75
83
 
76
84
  this.propertyNameMapping = mapping;
77
85
 
78
86
  }
87
+ setCustomPropertyNameMapping( mapping ) {
88
+
89
+ this.customPropertyMapping = mapping;
79
90
 
91
+ }
80
92
  parse( data ) {
81
93
 
82
94
  function parseHeader( data ) {
@@ -85,7 +97,6 @@
85
97
  let headerText = '';
86
98
  let headerLength = 0;
87
99
  const result = patternHeader.exec( data );
88
-
89
100
  if ( result !== null ) {
90
101
 
91
102
  headerText = result[ 1 ];
@@ -101,13 +112,11 @@
101
112
  };
102
113
  const lines = headerText.split( /\r\n|\r|\n/ );
103
114
  let currentElement;
104
-
105
115
  function make_ply_element_property( propertValues, propertyNameMapping ) {
106
116
 
107
117
  const property = {
108
118
  type: propertValues[ 0 ]
109
119
  };
110
-
111
120
  if ( property.type === 'list' ) {
112
121
 
113
122
  property.name = propertValues[ 3 ];
@@ -138,18 +147,15 @@
138
147
  const lineValues = line.split( /\s+/ );
139
148
  const lineType = lineValues.shift();
140
149
  line = lineValues.join( ' ' );
141
-
142
150
  switch ( lineType ) {
143
151
 
144
152
  case 'format':
145
153
  header.format = lineValues[ 0 ];
146
154
  header.version = lineValues[ 1 ];
147
155
  break;
148
-
149
156
  case 'comment':
150
157
  header.comments.push( line );
151
158
  break;
152
-
153
159
  case 'element':
154
160
  if ( currentElement !== undefined ) {
155
161
 
@@ -162,15 +168,12 @@
162
168
  currentElement.count = parseInt( lineValues[ 1 ] );
163
169
  currentElement.properties = [];
164
170
  break;
165
-
166
171
  case 'property':
167
172
  currentElement.properties.push( make_ply_element_property( lineValues, scope.propertyNameMapping ) );
168
173
  break;
169
-
170
174
  case 'obj_info':
171
175
  header.objInfo = line;
172
176
  break;
173
-
174
177
  default:
175
178
  console.log( 'unhandled', lineType, lineValues );
176
179
 
@@ -205,7 +208,6 @@
205
208
  case 'int32':
206
209
  case 'uint32':
207
210
  return parseInt( n );
208
-
209
211
  case 'float':
210
212
  case 'double':
211
213
  case 'float32':
@@ -220,14 +222,12 @@
220
222
 
221
223
  const values = line.split( /\s+/ );
222
224
  const element = {};
223
-
224
225
  for ( let i = 0; i < properties.length; i ++ ) {
225
226
 
226
227
  if ( properties[ i ].type === 'list' ) {
227
228
 
228
229
  const list = [];
229
230
  const n = parseASCIINumber( values.shift(), properties[ i ].countType );
230
-
231
231
  for ( let j = 0; j < n; j ++ ) {
232
232
 
233
233
  list.push( parseASCIINumber( values.shift(), properties[ i ].itemType ) );
@@ -248,9 +248,8 @@
248
248
 
249
249
  }
250
250
 
251
- function parseASCII( data, header ) {
251
+ function createBuffer() {
252
252
 
253
- // PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)
254
253
  const buffer = {
255
254
  indices: [],
256
255
  vertices: [],
@@ -259,10 +258,24 @@
259
258
  faceVertexUvs: [],
260
259
  colors: []
261
260
  };
261
+ for ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {
262
+
263
+ buffer[ customProperty ] = [];
264
+
265
+ }
266
+
267
+ return buffer;
268
+
269
+ }
270
+
271
+ function parseASCII( data, header ) {
272
+
273
+ // PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)
274
+
275
+ const buffer = createBuffer();
262
276
  let result;
263
277
  const patternBody = /end_header\s([\s\S]*)$/;
264
278
  let body = '';
265
-
266
279
  if ( ( result = patternBody.exec( data ) ) !== null ) {
267
280
 
268
281
  body = result[ 1 ];
@@ -272,12 +285,10 @@
272
285
  const lines = body.split( /\r\n|\r|\n/ );
273
286
  let currentElement = 0;
274
287
  let currentElementCount = 0;
275
-
276
288
  for ( let i = 0; i < lines.length; i ++ ) {
277
289
 
278
290
  let line = lines[ i ];
279
291
  line = line.trim();
280
-
281
292
  if ( line === '' ) {
282
293
 
283
294
  continue;
@@ -303,7 +314,9 @@
303
314
 
304
315
  function postProcess( buffer ) {
305
316
 
306
- let geometry = new THREE.BufferGeometry(); // mandatory buffer data
317
+ let geometry = new THREE.BufferGeometry();
318
+
319
+ // mandatory buffer data
307
320
 
308
321
  if ( buffer.indices.length > 0 ) {
309
322
 
@@ -311,7 +324,9 @@
311
324
 
312
325
  }
313
326
 
314
- geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( buffer.vertices, 3 ) ); // optional buffer data
327
+ geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( buffer.vertices, 3 ) );
328
+
329
+ // optional buffer data
315
330
 
316
331
  if ( buffer.normals.length > 0 ) {
317
332
 
@@ -338,6 +353,18 @@
338
353
 
339
354
  }
340
355
 
356
+ // custom buffer data
357
+
358
+ for ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {
359
+
360
+ if ( buffer[ customProperty ].length > 0 ) {
361
+
362
+ geometry.setAttribute( customProperty, new THREE.Float32BufferAttribute( buffer[ customProperty ], scope.customPropertyMapping[ customProperty ].length ) );
363
+
364
+ }
365
+
366
+ }
367
+
341
368
  geometry.computeBoundingSphere();
342
369
  return geometry;
343
370
 
@@ -369,11 +396,9 @@
369
396
  const attrR = findAttrName( [ 'red', 'diffuse_red', 'r', 'diffuse_r' ] );
370
397
  const attrG = findAttrName( [ 'green', 'diffuse_green', 'g', 'diffuse_g' ] );
371
398
  const attrB = findAttrName( [ 'blue', 'diffuse_blue', 'b', 'diffuse_b' ] );
372
-
373
399
  if ( elementName === 'vertex' ) {
374
400
 
375
401
  buffer.vertices.push( element[ attrX ], element[ attrY ], element[ attrZ ] );
376
-
377
402
  if ( attrNX !== null && attrNY !== null && attrNZ !== null ) {
378
403
 
379
404
  buffer.normals.push( element[ attrNX ], element[ attrNY ], element[ attrNZ ] );
@@ -389,21 +414,27 @@
389
414
  if ( attrR !== null && attrG !== null && attrB !== null ) {
390
415
 
391
416
  _color.setRGB( element[ attrR ] / 255.0, element[ attrG ] / 255.0, element[ attrB ] / 255.0 ).convertSRGBToLinear();
392
-
393
417
  buffer.colors.push( _color.r, _color.g, _color.b );
394
418
 
395
419
  }
396
420
 
421
+ for ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {
422
+
423
+ for ( const elementProperty of scope.customPropertyMapping[ customProperty ] ) {
424
+
425
+ buffer[ customProperty ].push( element[ elementProperty ] );
426
+
427
+ }
428
+
429
+ }
430
+
397
431
  } else if ( elementName === 'face' ) {
398
432
 
399
433
  const vertex_indices = element.vertex_indices || element.vertex_index; // issue #9338
400
-
401
434
  const texcoord = element.texcoord;
402
-
403
435
  if ( vertex_indices.length === 3 ) {
404
436
 
405
437
  buffer.indices.push( vertex_indices[ 0 ], vertex_indices[ 1 ], vertex_indices[ 2 ] );
406
-
407
438
  if ( texcoord && texcoord.length === 6 ) {
408
439
 
409
440
  buffer.faceVertexUvs.push( texcoord[ 0 ], texcoord[ 1 ] );
@@ -431,31 +462,24 @@
431
462
  case 'int8':
432
463
  case 'char':
433
464
  return [ dataview.getInt8( at ), 1 ];
434
-
435
465
  case 'uint8':
436
466
  case 'uchar':
437
467
  return [ dataview.getUint8( at ), 1 ];
438
-
439
468
  case 'int16':
440
469
  case 'short':
441
470
  return [ dataview.getInt16( at, little_endian ), 2 ];
442
-
443
471
  case 'uint16':
444
472
  case 'ushort':
445
473
  return [ dataview.getUint16( at, little_endian ), 2 ];
446
-
447
474
  case 'int32':
448
475
  case 'int':
449
476
  return [ dataview.getInt32( at, little_endian ), 4 ];
450
-
451
477
  case 'uint32':
452
478
  case 'uint':
453
479
  return [ dataview.getUint32( at, little_endian ), 4 ];
454
-
455
480
  case 'float32':
456
481
  case 'float':
457
482
  return [ dataview.getFloat32( at, little_endian ), 4 ];
458
-
459
483
  case 'float64':
460
484
  case 'double':
461
485
  return [ dataview.getFloat64( at, little_endian ), 8 ];
@@ -469,7 +493,6 @@
469
493
  const element = {};
470
494
  let result,
471
495
  read = 0;
472
-
473
496
  for ( let i = 0; i < properties.length; i ++ ) {
474
497
 
475
498
  if ( properties[ i ].type === 'list' ) {
@@ -478,7 +501,6 @@
478
501
  result = binaryRead( dataview, at + read, properties[ i ].countType, little_endian );
479
502
  const n = result[ 0 ];
480
503
  read += result[ 1 ];
481
-
482
504
  for ( let j = 0; j < n; j ++ ) {
483
505
 
484
506
  result = binaryRead( dataview, at + read, properties[ i ].itemType, little_endian );
@@ -505,19 +527,11 @@
505
527
 
506
528
  function parseBinary( data, header ) {
507
529
 
508
- const buffer = {
509
- indices: [],
510
- vertices: [],
511
- normals: [],
512
- uvs: [],
513
- faceVertexUvs: [],
514
- colors: []
515
- };
530
+ const buffer = createBuffer();
516
531
  const little_endian = header.format === 'binary_little_endian';
517
532
  const body = new DataView( data, header.headerLength );
518
533
  let result,
519
534
  loc = 0;
520
-
521
535
  for ( let currentElement = 0; currentElement < header.elements.length; currentElement ++ ) {
522
536
 
523
537
  for ( let currentElementCount = 0; currentElementCount < header.elements[ currentElement ].count; currentElementCount ++ ) {
@@ -533,12 +547,12 @@
533
547
 
534
548
  return postProcess( buffer );
535
549
 
536
- } //
550
+ }
537
551
 
552
+ //
538
553
 
539
554
  let geometry;
540
555
  const scope = this;
541
-
542
556
  if ( data instanceof ArrayBuffer ) {
543
557
 
544
558
  const text = THREE.LoaderUtils.decodeText( new Uint8Array( data ) );
@@ -5,11 +5,11 @@
5
5
  */
6
6
 
7
7
  let bigEndianPlatform = null;
8
+
8
9
  /**
9
10
  * Check if the endianness of the platform is big-endian (most significant bit first)
10
11
  * @returns {boolean} True if big-endian, false if little-endian
11
12
  */
12
-
13
13
  function isBigEndianPlatform() {
14
14
 
15
15
  if ( bigEndianPlatform === null ) {
@@ -18,20 +18,19 @@
18
18
  uint8Array = new Uint8Array( buffer ),
19
19
  uint16Array = new Uint16Array( buffer );
20
20
  uint8Array[ 0 ] = 0xAA; // set first byte
21
-
22
21
  uint8Array[ 1 ] = 0xBB; // set second byte
23
-
24
22
  bigEndianPlatform = uint16Array[ 0 ] === 0xAABB;
25
23
 
26
24
  }
27
25
 
28
26
  return bigEndianPlatform;
29
27
 
30
- } // match the values defined in the spec to the TypedArray types
31
-
28
+ }
32
29
 
33
- const InvertedEncodingTypes = [ null, Float32Array, null, Int8Array, Int16Array, null, Int32Array, Uint8Array, Uint16Array, null, Uint32Array ]; // define the method to use on a DataView, corresponding the TypedArray type
30
+ // match the values defined in the spec to the TypedArray types
31
+ const InvertedEncodingTypes = [ null, Float32Array, null, Int8Array, Int16Array, null, Int32Array, Uint8Array, Uint16Array, null, Uint32Array ];
34
32
 
33
+ // define the method to use on a DataView, corresponding the TypedArray type
35
34
  const getMethods = {
36
35
  Uint16Array: 'getUint16',
37
36
  Uint32Array: 'getUint32',
@@ -40,12 +39,10 @@
40
39
  Float32Array: 'getFloat32',
41
40
  Float64Array: 'getFloat64'
42
41
  };
43
-
44
42
  function copyFromBuffer( sourceArrayBuffer, viewType, position, length, fromBigEndian ) {
45
43
 
46
44
  const bytesPerElement = viewType.BYTES_PER_ELEMENT;
47
45
  let result;
48
-
49
46
  if ( fromBigEndian === isBigEndianPlatform() || bytesPerElement === 1 ) {
50
47
 
51
48
  result = new viewType( sourceArrayBuffer, position, length );
@@ -56,7 +53,6 @@
56
53
  getMethod = getMethods[ viewType.name ],
57
54
  littleEndian = ! fromBigEndian;
58
55
  result = new viewType( length );
59
-
60
56
  for ( let i = 0; i < length; i ++ ) {
61
57
 
62
58
  result[ i ] = readView[ getMethod ]( i * bytesPerElement, littleEndian );
@@ -80,7 +76,6 @@
80
76
  attributesNumber = flags & 0x1F;
81
77
  let valuesNumber = 0,
82
78
  indicesNumber = 0;
83
-
84
79
  if ( bigEndian ) {
85
80
 
86
81
  valuesNumber = ( array[ 2 ] << 16 ) + ( array[ 3 ] << 8 ) + array[ 4 ];
@@ -92,8 +87,8 @@
92
87
  indicesNumber = array[ 5 ] + ( array[ 6 ] << 8 ) + ( array[ 7 ] << 16 );
93
88
 
94
89
  }
95
- /** PRELIMINARY CHECKS **/
96
90
 
91
+ /** PRELIMINARY CHECKS **/
97
92
 
98
93
  if ( version === 0 ) {
99
94
 
@@ -118,21 +113,18 @@
118
113
  }
119
114
 
120
115
  }
121
- /** PARSING **/
122
116
 
117
+ /** PARSING **/
123
118
 
124
119
  let pos = 8;
125
120
  const attributes = {};
126
-
127
121
  for ( let i = 0; i < attributesNumber; i ++ ) {
128
122
 
129
123
  let attributeName = '';
130
-
131
124
  while ( pos < array.length ) {
132
125
 
133
126
  const char = array[ pos ];
134
127
  pos ++;
135
-
136
128
  if ( char === 0 ) {
137
129
 
138
130
  break;
@@ -150,8 +142,9 @@
150
142
  const cardinality = ( flags >> 4 & 0x03 ) + 1;
151
143
  const encodingType = flags & 0x0F;
152
144
  const arrayType = InvertedEncodingTypes[ encodingType ];
153
- pos ++; // padding to next multiple of 4
145
+ pos ++;
154
146
 
147
+ // padding to next multiple of 4
155
148
  pos = Math.ceil( pos / 4 ) * 4;
156
149
  const values = copyFromBuffer( buffer, arrayType, pos, cardinality * valuesNumber, bigEndian );
157
150
  pos += arrayType.BYTES_PER_ELEMENT * cardinality * valuesNumber;
@@ -165,7 +158,6 @@
165
158
 
166
159
  pos = Math.ceil( pos / 4 ) * 4;
167
160
  let indices = null;
168
-
169
161
  if ( indexedGeometry ) {
170
162
 
171
163
  indices = copyFromBuffer( buffer, indicesType === 1 ? Uint32Array : Uint16Array, pos, indicesNumber, bigEndian );
@@ -178,8 +170,9 @@
178
170
  indices: indices
179
171
  };
180
172
 
181
- } // Define the public interface
173
+ }
182
174
 
175
+ // Define the public interface
183
176
 
184
177
  class PRWMLoader extends THREE.Loader {
185
178
 
@@ -188,7 +181,6 @@
188
181
  super( manager );
189
182
 
190
183
  }
191
-
192
184
  load( url, onLoad, onProgress, onError ) {
193
185
 
194
186
  const scope = this;
@@ -223,13 +215,11 @@
223
215
  }, onProgress, onError );
224
216
 
225
217
  }
226
-
227
218
  parse( arrayBuffer ) {
228
219
 
229
220
  const data = decodePrwm( arrayBuffer ),
230
221
  attributesKey = Object.keys( data.attributes ),
231
222
  bufferGeometry = new THREE.BufferGeometry();
232
-
233
223
  for ( let i = 0; i < attributesKey.length; i ++ ) {
234
224
 
235
225
  const attribute = data.attributes[ attributesKey[ i ] ];
@@ -246,7 +236,6 @@
246
236
  return bufferGeometry;
247
237
 
248
238
  }
249
-
250
239
  static isBigEndianPlatform() {
251
240
 
252
241
  return isBigEndianPlatform();
@@ -13,7 +13,6 @@
13
13
  super( manager );
14
14
 
15
15
  }
16
-
17
16
  parse( buffer, loadMipmaps ) {
18
17
 
19
18
  const headerLengthInt = 13;
@@ -23,15 +22,16 @@
23
22
  header: header,
24
23
  loadMipmaps: loadMipmaps
25
24
  };
26
-
27
25
  if ( header[ 0 ] === 0x03525650 ) {
28
26
 
29
27
  // PVR v3
28
+
30
29
  return _parseV3( pvrDatas );
31
30
 
32
31
  } else if ( header[ 11 ] === 0x21525650 ) {
33
32
 
34
33
  // PVR v2
34
+
35
35
  return _parseV2( pvrDatas );
36
36
 
37
37
  } else {
@@ -43,7 +43,6 @@
43
43
  }
44
44
 
45
45
  }
46
-
47
46
  function _parseV3( pvrDatas ) {
48
47
 
49
48
  const header = pvrDatas.header;
@@ -55,7 +54,6 @@
55
54
  // numSurfs = header[ 9 ],
56
55
  numFaces = header[ 10 ],
57
56
  numMipmaps = header[ 11 ];
58
-
59
57
  switch ( pixelFormat ) {
60
58
 
61
59
  case 0:
@@ -63,25 +61,21 @@
63
61
  bpp = 2;
64
62
  format = THREE.RGB_PVRTC_2BPPV1_Format;
65
63
  break;
66
-
67
64
  case 1:
68
65
  // PVRTC 2bpp RGBA
69
66
  bpp = 2;
70
67
  format = THREE.RGBA_PVRTC_2BPPV1_Format;
71
68
  break;
72
-
73
69
  case 2:
74
70
  // PVRTC 4bpp RGB
75
71
  bpp = 4;
76
72
  format = THREE.RGB_PVRTC_4BPPV1_Format;
77
73
  break;
78
-
79
74
  case 3:
80
75
  // PVRTC 4bpp RGBA
81
76
  bpp = 4;
82
77
  format = THREE.RGBA_PVRTC_4BPPV1_Format;
83
78
  break;
84
-
85
79
  default:
86
80
  console.error( 'THREE.PVRLoader: Unsupported PVR format:', pixelFormat );
87
81
 
@@ -120,9 +114,7 @@
120
114
  PVRTC_4 = 25;
121
115
  const formatFlags = flags & TYPE_MASK;
122
116
  let bpp, format;
123
-
124
117
  const _hasAlpha = bitmaskAlpha > 0;
125
-
126
118
  if ( formatFlags === PVRTC_4 ) {
127
119
 
128
120
  format = _hasAlpha ? THREE.RGBA_PVRTC_4BPPV1_Format : THREE.RGB_PVRTC_4BPPV1_Format;
@@ -145,9 +137,10 @@
145
137
  pvrDatas.width = width;
146
138
  pvrDatas.height = height;
147
139
  pvrDatas.numSurfaces = numSurfs;
148
- pvrDatas.numMipmaps = numMipmaps + 1; // guess cubemap type seems tricky in v2
149
- // it juste a pvr containing 6 surface (no explicit cubemap type)
140
+ pvrDatas.numMipmaps = numMipmaps + 1;
150
141
 
142
+ // guess cubemap type seems tricky in v2
143
+ // it juste a pvr containing 6 surface (no explicit cubemap type)
151
144
  pvrDatas.isCubemap = numSurfs === 6;
152
145
  return _extract( pvrDatas );
153
146
 
@@ -173,7 +166,6 @@
173
166
  heightBlocks = 0;
174
167
  const bpp = pvrDatas.bpp,
175
168
  numSurfs = pvrDatas.numSurfaces;
176
-
177
169
  if ( bpp === 2 ) {
178
170
 
179
171
  blockWidth = 8;
@@ -189,18 +181,17 @@
189
181
  blockSize = blockWidth * blockHeight * bpp / 8;
190
182
  pvr.mipmaps.length = pvrDatas.numMipmaps * numSurfs;
191
183
  let mipLevel = 0;
192
-
193
184
  while ( mipLevel < pvrDatas.numMipmaps ) {
194
185
 
195
186
  const sWidth = pvrDatas.width >> mipLevel,
196
187
  sHeight = pvrDatas.height >> mipLevel;
197
188
  widthBlocks = sWidth / blockWidth;
198
- heightBlocks = sHeight / blockHeight; // Clamp to minimum number of blocks
189
+ heightBlocks = sHeight / blockHeight;
199
190
 
191
+ // Clamp to minimum number of blocks
200
192
  if ( widthBlocks < 2 ) widthBlocks = 2;
201
193
  if ( heightBlocks < 2 ) heightBlocks = 2;
202
194
  dataSize = widthBlocks * heightBlocks * blockSize;
203
-
204
195
  for ( let surfIndex = 0; surfIndex < numSurfs; surfIndex ++ ) {
205
196
 
206
197
  const byteArray = new Uint8Array( buffer, dataOffset, dataSize );