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
@@ -1,16 +1,121 @@
1
1
  import {
2
2
  BufferAttribute,
3
3
  BufferGeometry,
4
+ ClampToEdgeWrapping,
4
5
  FileLoader,
5
6
  Group,
6
7
  Loader,
7
8
  Mesh,
8
9
  MeshStandardMaterial,
9
- TextureLoader
10
+ MirroredRepeatWrapping,
11
+ RepeatWrapping,
12
+ sRGBEncoding,
13
+ TextureLoader,
14
+ Object3D,
10
15
  } from 'three';
11
16
 
12
17
  import * as fflate from '../libs/fflate.module.js';
13
18
 
19
+ class USDAParser {
20
+
21
+ parse( text ) {
22
+
23
+ const data = {};
24
+
25
+ const lines = text.split( '\n' );
26
+ const length = lines.length;
27
+
28
+ let current = 0;
29
+ let string = null;
30
+ let target = data;
31
+
32
+ const stack = [ data ];
33
+
34
+ // debugger;
35
+
36
+ function parseNextLine() {
37
+
38
+ const line = lines[ current ];
39
+
40
+ // console.log( line );
41
+
42
+ if ( line.includes( '=' ) ) {
43
+
44
+ const assignment = line.split( '=' );
45
+
46
+ const lhs = assignment[ 0 ].trim();
47
+ const rhs = assignment[ 1 ].trim();
48
+
49
+ if ( rhs.endsWith( '{' ) ) {
50
+
51
+ const group = {};
52
+ stack.push( group );
53
+
54
+ target[ lhs ] = group;
55
+ target = group;
56
+
57
+ } else {
58
+
59
+ target[ lhs ] = rhs;
60
+
61
+ }
62
+
63
+ } else if ( line.endsWith( '{' ) ) {
64
+
65
+ const group = target[ string ] || {};
66
+ stack.push( group );
67
+
68
+ target[ string ] = group;
69
+ target = group;
70
+
71
+ } else if ( line.endsWith( '}' ) ) {
72
+
73
+ stack.pop();
74
+
75
+ if ( stack.length === 0 ) return;
76
+
77
+ target = stack[ stack.length - 1 ];
78
+
79
+ } else if ( line.endsWith( '(' ) ) {
80
+
81
+ const meta = {};
82
+ stack.push( meta );
83
+
84
+ string = line.split( '(' )[ 0 ].trim() || string;
85
+
86
+ target[ string ] = meta;
87
+ target = meta;
88
+
89
+ } else if ( line.endsWith( ')' ) ) {
90
+
91
+ stack.pop();
92
+
93
+ target = stack[ stack.length - 1 ];
94
+
95
+ } else {
96
+
97
+ string = line.trim();
98
+
99
+ }
100
+
101
+ current ++;
102
+
103
+ if ( current < length ) {
104
+
105
+ parseNextLine();
106
+
107
+ }
108
+
109
+ }
110
+
111
+ parseNextLine();
112
+
113
+ return data;
114
+
115
+ }
116
+
117
+ }
118
+
14
119
  class USDZLoader extends Loader {
15
120
 
16
121
  constructor( manager ) {
@@ -56,7 +161,9 @@ class USDZLoader extends Loader {
56
161
 
57
162
  parse( buffer ) {
58
163
 
59
- function createImages( zip ) {
164
+ const parser = new USDAParser();
165
+
166
+ function parseAssets( zip ) {
60
167
 
61
168
  const data = {};
62
169
  const loader = new FileLoader();
@@ -71,6 +178,13 @@ class USDZLoader extends Loader {
71
178
 
72
179
  }
73
180
 
181
+ if ( filename.endsWith( 'usd' ) ) {
182
+
183
+ const text = fflate.strFromU8( zip[ filename ] );
184
+ data[ filename ] = parser.parse( text );
185
+
186
+ }
187
+
74
188
  }
75
189
 
76
190
  return data;
@@ -95,123 +209,86 @@ class USDZLoader extends Loader {
95
209
 
96
210
  // console.log( zip );
97
211
 
98
- const images = createImages( zip );
212
+ const assets = parseAssets( zip );
213
+
214
+ // console.log( assets )
215
+
99
216
  const file = findUSD( zip );
100
217
 
101
218
  if ( file === undefined ) {
102
219
 
103
220
  console.warn( 'THREE.USDZLoader: No usda file found.' );
104
221
 
105
- return {};
222
+ return new Group();
106
223
 
107
224
  }
108
225
 
226
+
109
227
  // Parse file
110
228
 
111
229
  const text = fflate.strFromU8( file );
112
- const lines = text.split( '\n' );
113
- const length = lines.length;
230
+ const root = parser.parse( text );
114
231
 
115
- const data = {};
116
-
117
- let current = 0;
118
- let string = null;
119
- let target = data;
232
+ // Build scene
120
233
 
121
- const stack = [ data ];
234
+ function findMeshGeometry( data ) {
122
235
 
123
- // debugger;
236
+ if ( ! data ) return undefined;
124
237
 
125
- function parseNextLine() {
238
+ if ( 'prepend references' in data ) {
126
239
 
127
- const line = lines[ current ];
240
+ const reference = data[ 'prepend references' ];
241
+ const parts = reference.split( '@' );
242
+ const path = parts[ 1 ].replace( /^.\//, '' );
243
+ const id = parts[ 2 ].replace( /^<\//, '' ).replace( />$/, '' );
128
244
 
129
- // console.log( line );
245
+ return findGeometry( assets[ path ], id );
130
246
 
131
- if ( line.includes( '=' ) ) {
247
+ }
132
248
 
133
- const assignment = line.split( '=' );
249
+ return findGeometry( data );
134
250
 
135
- const lhs = assignment[ 0 ].trim();
136
- const rhs = assignment[ 1 ].trim();
251
+ }
137
252
 
138
- if ( rhs.endsWith( '{' ) ) {
253
+ function findGeometry( data, id ) {
139
254
 
140
- const group = {};
141
- stack.push( group );
255
+ if ( id !== undefined ) {
142
256
 
143
- target[ lhs ] = group;
144
- target = group;
257
+ const def = `def "%{id}"`;
145
258
 
146
- } else {
259
+ if ( def in data ) {
147
260
 
148
- target[ lhs ] = rhs;
261
+ return data[ def ];
149
262
 
150
263
  }
151
264
 
152
- } else if ( line.endsWith( '{' ) ) {
153
-
154
- const group = target[ string ] || {};
155
- stack.push( group );
156
-
157
- target[ string ] = group;
158
- target = group;
159
-
160
- } else if ( line.endsWith( '}' ) ) {
161
-
162
- stack.pop();
163
-
164
- if ( stack.length === 0 ) return;
165
-
166
- target = stack[ stack.length - 1 ];
167
-
168
- } else if ( line.endsWith( '(' ) ) {
169
-
170
- const meta = {};
171
- stack.push( meta );
172
-
173
- string = line.split( '(' )[ 0 ].trim() || string;
174
-
175
- target[ string ] = meta;
176
- target = meta;
177
-
178
- } else if ( line.endsWith( ')' ) ) {
179
-
180
- stack.pop();
181
-
182
- target = stack[ stack.length - 1 ];
183
-
184
- } else {
185
-
186
- string = line.trim();
187
-
188
265
  }
189
266
 
190
- current ++;
267
+ for ( const name in data ) {
191
268
 
192
- if ( current < length ) {
269
+ const object = data[ name ];
193
270
 
194
- parseNextLine();
271
+ if ( name.startsWith( 'def Mesh' ) ) {
195
272
 
196
- }
273
+ // Move points to Mesh
197
274
 
198
- }
275
+ if ( 'point3f[] points' in data ) {
199
276
 
200
- parseNextLine();
277
+ object[ 'point3f[] points' ] = data[ 'point3f[] points' ];
201
278
 
202
- // Build scene
279
+ }
203
280
 
204
- function findGeometry( data ) {
281
+ // Move st to Mesh
205
282
 
206
- for ( const name in data ) {
283
+ if ( 'float2[] primvars:st' in data ) {
207
284
 
208
- const object = data[ name ];
285
+ object[ 'float2[] primvars:st' ] = data[ 'float2[] primvars:st' ];
209
286
 
210
- if ( name.startsWith( 'def Mesh' ) ) {
287
+ }
211
288
 
212
289
  // Move st indices to Mesh
213
290
 
214
- if ( data[ 'int[] primvars:st:indices' ] ) {
291
+ if ( 'int[] primvars:st:indices' in data ) {
215
292
 
216
293
  object[ 'int[] primvars:st:indices' ] = data[ 'int[] primvars:st:indices' ];
217
294
 
@@ -236,29 +313,51 @@ class USDZLoader extends Loader {
236
313
 
237
314
  function buildGeometry( data ) {
238
315
 
239
- const geometry = new BufferGeometry();
240
-
241
- const positions = JSON.parse( data[ 'point3f[] points' ].replace( /[()]*/g, '' ) );
242
- const attribute = new BufferAttribute( new Float32Array( positions ), 3 );
316
+ if ( ! data ) return undefined;
243
317
 
244
- if ( data[ 'int[] faceVertexIndices' ] ) {
318
+ let geometry = new BufferGeometry();
319
+
320
+ if ( 'int[] faceVertexIndices' in data ) {
245
321
 
246
322
  const indices = JSON.parse( data[ 'int[] faceVertexIndices' ] );
247
- geometry.setAttribute( 'position', toFlatBufferAttribute( attribute, indices ) );
323
+ geometry.setIndex( new BufferAttribute( new Uint16Array( indices ), 1 ) );
248
324
 
249
- } else {
325
+ }
326
+
327
+ if ( 'point3f[] points' in data ) {
250
328
 
329
+ const positions = JSON.parse( data[ 'point3f[] points' ].replace( /[()]*/g, '' ) );
330
+ const attribute = new BufferAttribute( new Float32Array( positions ), 3 );
251
331
  geometry.setAttribute( 'position', attribute );
252
332
 
253
333
  }
254
334
 
335
+ if ( 'normal3f[] normals' in data ) {
336
+
337
+ const normals = JSON.parse( data[ 'normal3f[] normals' ].replace( /[()]*/g, '' ) );
338
+ const attribute = new BufferAttribute( new Float32Array( normals ), 3 );
339
+ geometry.setAttribute( 'normal', attribute );
340
+
341
+ } else {
342
+
343
+ geometry.computeVertexNormals();
344
+
345
+ }
346
+
347
+ if ( 'float2[] primvars:st' in data ) {
255
348
 
256
- if ( data[ 'texCoord2f[] primvars:st' ] ) {
349
+ data[ 'texCoord2f[] primvars:st' ] = data[ 'float2[] primvars:st' ];
350
+
351
+ }
352
+
353
+ if ( 'texCoord2f[] primvars:st' in data ) {
257
354
 
258
355
  const uvs = JSON.parse( data[ 'texCoord2f[] primvars:st' ].replace( /[()]*/g, '' ) );
259
356
  const attribute = new BufferAttribute( new Float32Array( uvs ), 2 );
260
357
 
261
- if ( data[ 'int[] primvars:st:indices' ] ) {
358
+ if ( 'int[] primvars:st:indices' in data ) {
359
+
360
+ geometry = geometry.toNonIndexed();
262
361
 
263
362
  const indices = JSON.parse( data[ 'int[] primvars:st:indices' ] );
264
363
  geometry.setAttribute( 'uv', toFlatBufferAttribute( attribute, indices ) );
@@ -271,8 +370,6 @@ class USDZLoader extends Loader {
271
370
 
272
371
  }
273
372
 
274
- geometry.computeVertexNormals();
275
-
276
373
  return geometry;
277
374
 
278
375
  }
@@ -302,22 +399,39 @@ class USDZLoader extends Loader {
302
399
 
303
400
  }
304
401
 
305
- function findMaterial( data ) {
402
+ function findMeshMaterial( data ) {
403
+
404
+ if ( ! data ) return undefined;
405
+
406
+ if ( 'rel material:binding' in data ) {
407
+
408
+ const reference = data[ 'rel material:binding' ];
409
+ const id = reference.replace( /^<\//, '' ).replace( />$/, '' );
410
+ const parts = id.split( '/' );
411
+
412
+ return findMaterial( root, ` "${ parts[ 1 ] }"` );
413
+
414
+ }
415
+
416
+ return findMaterial( data );
417
+
418
+ }
419
+
420
+ function findMaterial( data, id = '' ) {
306
421
 
307
422
  for ( const name in data ) {
308
423
 
309
424
  const object = data[ name ];
310
425
 
311
- if ( name.startsWith( 'def Material' ) ) {
426
+ if ( name.startsWith( 'def Material' + id ) ) {
312
427
 
313
428
  return object;
314
429
 
315
430
  }
316
431
 
317
-
318
432
  if ( typeof object === 'object' ) {
319
433
 
320
- const material = findMaterial( object );
434
+ const material = findMaterial( object, id );
321
435
 
322
436
  if ( material ) return material;
323
437
 
@@ -331,58 +445,184 @@ class USDZLoader extends Loader {
331
445
 
332
446
  const material = new MeshStandardMaterial();
333
447
 
334
- // console.log( data );
448
+ if ( data !== undefined ) {
449
+
450
+ if ( 'def Shader "PreviewSurface"' in data ) {
451
+
452
+ const surface = data[ 'def Shader "PreviewSurface"' ];
453
+
454
+ if ( 'color3f inputs:diffuseColor.connect' in surface ) {
455
+
456
+ const path = surface[ 'color3f inputs:diffuseColor.connect' ];
457
+ const sampler = findTexture( root, /(\w+).output/.exec( path )[ 1 ] );
458
+
459
+ material.map = buildTexture( sampler );
460
+ material.map.encoding = sRGBEncoding;
461
+
462
+ } else if ( 'color3f inputs:diffuseColor' in surface ) {
463
+
464
+ const color = surface[ 'color3f inputs:diffuseColor' ].replace( /[()]*/g, '' );
465
+ material.color.fromArray( JSON.parse( '[' + color + ']' ) );
466
+
467
+ }
468
+
469
+ if ( 'normal3f inputs:normal.connect' in surface ) {
470
+
471
+ const path = surface[ 'normal3f inputs:normal.connect' ];
472
+ const sampler = findTexture( root, /(\w+).output/.exec( path )[ 1 ] );
473
+
474
+ material.normalMap = buildTexture( sampler );
335
475
 
336
- if ( data[ 'def Shader "diffuseColor_texture"' ] ) {
476
+ }
477
+
478
+ if ( 'float inputs:roughness' in surface ) {
479
+
480
+ material.roughness = parseFloat( surface[ 'float inputs:roughness' ] );
481
+
482
+ }
337
483
 
338
- const texture = data[ 'def Shader "diffuseColor_texture"' ];
339
- const file = texture[ 'asset inputs:file' ].replace( /@*/g, '' );
484
+ if ( 'float inputs:metallic' in surface ) {
485
+
486
+ material.metalness = parseFloat( surface[ 'float inputs:metallic' ] );
487
+
488
+ }
489
+
490
+ }
340
491
 
341
- material.map = new TextureLoader().load( images[ file ] );
492
+ if ( 'def Shader "diffuseColor_texture"' in data ) {
493
+
494
+ const sampler = data[ 'def Shader "diffuseColor_texture"' ];
495
+
496
+ material.map = buildTexture( sampler );
497
+ material.map.encoding = sRGBEncoding;
498
+
499
+ }
500
+
501
+ if ( 'def Shader "normal_texture"' in data ) {
502
+
503
+ const sampler = data[ 'def Shader "normal_texture"' ];
504
+
505
+ material.normalMap = buildTexture( sampler );
506
+
507
+ }
342
508
 
343
509
  }
344
510
 
345
- if ( data[ 'def Shader "normal_texture"' ] ) {
511
+ return material;
512
+
513
+ }
514
+
515
+ function findTexture( data, id ) {
516
+
517
+ for ( const name in data ) {
518
+
519
+ const object = data[ name ];
520
+
521
+ if ( name.startsWith( `def Shader "${ id }"` ) ) {
346
522
 
347
- const texture = data[ 'def Shader "normal_texture"' ];
348
- const file = texture[ 'asset inputs:file' ].replace( /@*/g, '' );
523
+ return object;
524
+
525
+ }
526
+
527
+ if ( typeof object === 'object' ) {
349
528
 
350
- material.normalMap = new TextureLoader().load( images[ file ] );
529
+ const texture = findTexture( object, id );
530
+
531
+ if ( texture ) return texture;
532
+
533
+ }
351
534
 
352
535
  }
353
536
 
537
+ }
354
538
 
355
- return material;
539
+ function buildTexture( data ) {
540
+
541
+ if ( 'asset inputs:file' in data ) {
542
+
543
+ const path = data[ 'asset inputs:file' ].replace( /@*/g, '' );
544
+
545
+ const loader = new TextureLoader();
546
+
547
+ const texture = loader.load( assets[ path ] );
548
+
549
+ const map = {
550
+ '"clamp"': ClampToEdgeWrapping,
551
+ '"mirror"': MirroredRepeatWrapping,
552
+ '"repeat"': RepeatWrapping
553
+ };
554
+
555
+ if ( 'token inputs:wrapS' in data ) {
556
+
557
+ texture.wrapS = map[ data[ 'token inputs:wrapS' ] ];
558
+
559
+ }
560
+
561
+ if ( 'token inputs:wrapT' in data ) {
562
+
563
+ texture.wrapT = map[ data[ 'token inputs:wrapT' ] ];
564
+
565
+ }
566
+
567
+ return texture;
568
+
569
+ }
570
+
571
+ return null;
356
572
 
357
573
  }
358
574
 
359
- function buildMesh( data ) {
575
+ function buildObject( data ) {
360
576
 
361
- const geometry = buildGeometry( findGeometry( data ) );
362
- const material = buildMaterial( findMaterial( data ) );
577
+ const geometry = buildGeometry( findMeshGeometry( data ) );
578
+ const material = buildMaterial( findMeshMaterial( data ) );
363
579
 
364
- const mesh = new Mesh( geometry, material );
580
+ const mesh = geometry ? new Mesh( geometry, material ) : new Object3D();
581
+
582
+ if ( 'matrix4d xformOp:transform' in data ) {
583
+
584
+ const array = JSON.parse( '[' + data[ 'matrix4d xformOp:transform' ].replace( /[()]*/g, '' ) + ']' );
585
+
586
+ mesh.matrix.fromArray( array );
587
+ mesh.matrix.decompose( mesh.position, mesh.quaternion, mesh.scale );
588
+
589
+ }
365
590
 
366
591
  return mesh;
367
592
 
368
593
  }
369
594
 
370
- // console.log( data );
595
+ function buildHierarchy( data, group ) {
371
596
 
372
- const group = new Group();
597
+ for ( const name in data ) {
598
+
599
+ if ( name.startsWith( 'def Scope' ) ) {
600
+
601
+ buildHierarchy( data[ name ], group );
373
602
 
374
- for ( const name in data ) {
603
+ } else if ( name.startsWith( 'def Xform' ) ) {
375
604
 
376
- if ( name.startsWith( 'def Xform' ) ) {
605
+ const mesh = buildObject( data[ name ] );
377
606
 
378
- const mesh = buildMesh( data[ name ] );
379
- group.add( mesh );
607
+ if ( /def Xform "(\w+)"/.test( name ) ) {
608
+
609
+ mesh.name = /def Xform "(\w+)"/.exec( name )[ 1 ];
610
+
611
+ }
612
+
613
+ group.add( mesh );
614
+
615
+ buildHierarchy( data[ name ], mesh );
616
+
617
+ }
380
618
 
381
619
  }
382
620
 
383
621
  }
384
622
 
385
- // console.log( group );
623
+ const group = new Group();
624
+
625
+ buildHierarchy( root, group );
386
626
 
387
627
  return group;
388
628
 
@@ -625,6 +625,7 @@ class VRMLLoader extends Loader {
625
625
 
626
626
  switch ( nodeName ) {
627
627
 
628
+ case 'Anchor':
628
629
  case 'Group':
629
630
  case 'Transform':
630
631
  case 'Collision':
@@ -706,7 +707,6 @@ class VRMLLoader extends Loader {
706
707
  build = buildWorldInfoNode( node );
707
708
  break;
708
709
 
709
- case 'Anchor':
710
710
  case 'Billboard':
711
711
 
712
712
  case 'Inline':
@@ -794,10 +794,18 @@ class VRMLLoader extends Loader {
794
794
  parseFieldChildren( fieldValues, object );
795
795
  break;
796
796
 
797
+ case 'description':
798
+ // field not supported
799
+ break;
800
+
797
801
  case 'collide':
798
802
  // field not supported
799
803
  break;
800
804
 
805
+ case 'parameter':
806
+ // field not supported
807
+ break;
808
+
801
809
  case 'rotation':
802
810
  const axis = new Vector3( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );
803
811
  const angle = fieldValues[ 3 ];
@@ -820,6 +828,10 @@ class VRMLLoader extends Loader {
820
828
  // field not supported
821
829
  break;
822
830
 
831
+ case 'url':
832
+ // field not supported
833
+ break;
834
+
823
835
  default:
824
836
  console.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );
825
837
  break;
@@ -122,7 +122,7 @@ class ConvexHull {
122
122
 
123
123
  intersectRay( ray, target ) {
124
124
 
125
- // based on "Fast Ray-Convex Polyhedron Intersection" by Eric Haines, GRAPHICS GEMS II
125
+ // based on "Fast Ray-Convex Polyhedron Intersection" by Eric Haines, GRAPHICS GEMS II
126
126
 
127
127
  const faces = this.faces;
128
128
 
@@ -156,7 +156,7 @@ class ConvexHull {
156
156
 
157
157
  if ( vD > 0 ) {
158
158
 
159
- // plane faces away from the ray, so this plane is a back-face
159
+ // plane faces away from the ray, so this plane is a back-face
160
160
 
161
161
  tFar = Math.min( t, tFar );
162
162
 
@@ -263,7 +263,7 @@ class ConvexHull {
263
263
 
264
264
  }
265
265
 
266
- // Removes all the visible vertices that a given face is able to see which are stored in the 'assigned' vertext list
266
+ // Removes all the visible vertices that a given face is able to see which are stored in the 'assigned' vertex list
267
267
 
268
268
  removeAllVerticesFromFace( face ) {
269
269
 
@@ -1268,4 +1268,4 @@ class VertexList {
1268
1268
 
1269
1269
  }
1270
1270
 
1271
- export { ConvexHull };
1271
+ export { ConvexHull, Face, HalfEdge, VertexNode, VertexList };