@needle-tools/three 0.145.4 → 0.146.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +32586 -35951
  3. package/build/three.js +32600 -35965
  4. package/build/three.min.js +6 -7
  5. package/build/three.module.js +1547 -1154
  6. package/examples/js/animation/AnimationClipCreator.js +0 -8
  7. package/examples/js/animation/CCDIKSolver.js +49 -66
  8. package/examples/js/animation/MMDAnimationHelper.js +66 -137
  9. package/examples/js/animation/MMDPhysics.js +70 -134
  10. package/examples/js/cameras/CinematicCamera.js +33 -22
  11. package/examples/js/controls/ArcballControls.js +138 -405
  12. package/examples/js/controls/DragControls.js +8 -33
  13. package/examples/js/controls/FirstPersonControls.js +32 -54
  14. package/examples/js/controls/FlyControls.js +29 -55
  15. package/examples/js/controls/OrbitControls.js +85 -95
  16. package/examples/js/controls/PointerLockControls.js +5 -14
  17. package/examples/js/controls/TrackballControls.js +33 -86
  18. package/examples/js/controls/TransformControls.js +84 -169
  19. package/examples/js/csm/CSM.js +4 -39
  20. package/examples/js/csm/CSMFrustum.js +3 -9
  21. package/examples/js/csm/CSMHelper.js +24 -4
  22. package/examples/js/csm/CSMShader.js +2 -6
  23. package/examples/js/curves/CurveExtras.js +27 -27
  24. package/examples/js/curves/NURBSCurve.js +4 -16
  25. package/examples/js/curves/NURBSSurface.js +3 -9
  26. package/examples/js/curves/NURBSUtils.js +8 -45
  27. package/examples/js/effects/AnaglyphEffect.js +4 -18
  28. package/examples/js/effects/AsciiEffect.js +32 -31
  29. package/examples/js/effects/OutlineEffect.js +26 -30
  30. package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
  31. package/examples/js/effects/PeppersGhostEffect.js +12 -39
  32. package/examples/js/effects/StereoEffect.js +0 -4
  33. package/examples/js/environments/RoomEnvironment.js +12 -10
  34. package/examples/js/exporters/ColladaExporter.js +48 -65
  35. package/examples/js/exporters/DRACOExporter.js +22 -22
  36. package/examples/js/exporters/EXRExporter.js +15 -18
  37. package/examples/js/exporters/GLTFExporter.js +143 -261
  38. package/examples/js/exporters/MMDExporter.js +5 -12
  39. package/examples/js/exporters/OBJExporter.js +42 -33
  40. package/examples/js/exporters/PLYExporter.js +38 -33
  41. package/examples/js/exporters/STLExporter.js +5 -7
  42. package/examples/js/exporters/USDZExporter.js +110 -25
  43. package/examples/js/geometries/BoxLineGeometry.js +0 -1
  44. package/examples/js/geometries/ConvexGeometry.js +11 -6
  45. package/examples/js/geometries/DecalGeometry.js +53 -20
  46. package/examples/js/geometries/LightningStrike.js +54 -67
  47. package/examples/js/geometries/ParametricGeometries.js +8 -7
  48. package/examples/js/geometries/ParametricGeometry.js +25 -12
  49. package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
  50. package/examples/js/geometries/TeapotGeometry.js +54 -50
  51. package/examples/js/geometries/TextGeometry.js +6 -4
  52. package/examples/js/helpers/LightProbeHelper.js +1 -2
  53. package/examples/js/helpers/OctreeHelper.js +22 -20
  54. package/examples/js/helpers/PositionalAudioHelper.js +8 -6
  55. package/examples/js/helpers/RectAreaLightHelper.js +6 -7
  56. package/examples/js/helpers/VertexNormalsHelper.js +15 -13
  57. package/examples/js/helpers/VertexTangentsHelper.js +15 -9
  58. package/examples/js/helpers/ViewHelper.js +31 -16
  59. package/examples/js/interactive/HTMLMesh.js +22 -33
  60. package/examples/js/interactive/InteractiveGroup.js +6 -12
  61. package/examples/js/interactive/SelectionBox.js +3 -70
  62. package/examples/js/interactive/SelectionHelper.js +0 -8
  63. package/examples/js/lights/LightProbeGenerator.js +32 -39
  64. package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
  65. package/examples/js/lines/LineGeometry.js +3 -5
  66. package/examples/js/lines/LineMaterial.js +4 -11
  67. package/examples/js/lines/LineSegments2.js +38 -89
  68. package/examples/js/lines/LineSegmentsGeometry.js +7 -28
  69. package/examples/js/lines/Wireframe.js +2 -7
  70. package/examples/js/lines/WireframeGeometry2.js +3 -1
  71. package/examples/js/loaders/3DMLoader.js +58 -155
  72. package/examples/js/loaders/3MFLoader.js +72 -106
  73. package/examples/js/loaders/AMFLoader.js +0 -25
  74. package/examples/js/loaders/BVHLoader.js +44 -43
  75. package/examples/js/loaders/BasisTextureLoader.js +16 -46
  76. package/examples/js/loaders/ColladaLoader.js +201 -359
  77. package/examples/js/loaders/DDSLoader.js +24 -25
  78. package/examples/js/loaders/DRACOLoader.js +29 -66
  79. package/examples/js/loaders/EXRLoader.js +67 -164
  80. package/examples/js/loaders/FBXLoader.js +286 -441
  81. package/examples/js/loaders/FontLoader.js +6 -15
  82. package/examples/js/loaders/GCodeLoader.js +15 -16
  83. package/examples/js/loaders/GLTFLoader.js +354 -405
  84. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
  85. package/examples/js/loaders/KMZLoader.js +3 -7
  86. package/examples/js/loaders/KTXLoader.js +12 -30
  87. package/examples/js/loaders/LDrawLoader.js +178 -289
  88. package/examples/js/loaders/LUT3dlLoader.js +7 -11
  89. package/examples/js/loaders/LUTCubeLoader.js +0 -8
  90. package/examples/js/loaders/LWOLoader.js +59 -124
  91. package/examples/js/loaders/LogLuvLoader.js +27 -77
  92. package/examples/js/loaders/LottieLoader.js +4 -4
  93. package/examples/js/loaders/MD2Loader.js +26 -27
  94. package/examples/js/loaders/MDDLoader.js +6 -10
  95. package/examples/js/loaders/MMDLoader.js +180 -189
  96. package/examples/js/loaders/MTLLoader.js +18 -47
  97. package/examples/js/loaders/MaterialXLoader.js +392 -0
  98. package/examples/js/loaders/NRRDLoader.js +44 -84
  99. package/examples/js/loaders/OBJLoader.js +50 -65
  100. package/examples/js/loaders/PCDLoader.js +34 -29
  101. package/examples/js/loaders/PDBLoader.js +17 -13
  102. package/examples/js/loaders/PLYLoader.js +9 -39
  103. package/examples/js/loaders/PRWMLoader.js +11 -22
  104. package/examples/js/loaders/PVRLoader.js +7 -16
  105. package/examples/js/loaders/RGBELoader.js +36 -61
  106. package/examples/js/loaders/RGBMLoader.js +26 -87
  107. package/examples/js/loaders/STLLoader.js +20 -27
  108. package/examples/js/loaders/SVGLoader.js +361 -233
  109. package/examples/js/loaders/TDSLoader.js +81 -118
  110. package/examples/js/loaders/TGALoader.js +39 -41
  111. package/examples/js/loaders/TIFFLoader.js +0 -1
  112. package/examples/js/loaders/TTFLoader.js +0 -8
  113. package/examples/js/loaders/TiltLoader.js +14 -15
  114. package/examples/js/loaders/VOXLoader.js +8 -16
  115. package/examples/js/loaders/VRMLLoader.js +243 -340
  116. package/examples/js/loaders/VTKLoader.js +101 -118
  117. package/examples/js/loaders/XYZLoader.js +2 -4
  118. package/examples/js/loaders/lwo/IFFParser.js +55 -136
  119. package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
  120. package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
  121. package/examples/js/materials/MeshGouraudMaterial.js +15 -13
  122. package/examples/js/math/Capsule.js +0 -17
  123. package/examples/js/math/ColorConverter.js +3 -3
  124. package/examples/js/math/ConvexHull.js +183 -139
  125. package/examples/js/math/ImprovedNoise.js +1 -1
  126. package/examples/js/math/Lut.js +8 -15
  127. package/examples/js/math/MeshSurfaceSampler.js +6 -28
  128. package/examples/js/math/OBB.js +90 -49
  129. package/examples/js/math/Octree.js +2 -57
  130. package/examples/js/math/SimplexNoise.js +74 -88
  131. package/examples/js/misc/ConvexObjectBreaker.js +37 -48
  132. package/examples/js/misc/GPUComputationRenderer.js +14 -18
  133. package/examples/js/misc/Gyroscope.js +5 -9
  134. package/examples/js/misc/MD2Character.js +14 -23
  135. package/examples/js/misc/MD2CharacterComplex.js +73 -54
  136. package/examples/js/misc/MorphAnimMesh.js +0 -6
  137. package/examples/js/misc/MorphBlendMesh.js +3 -30
  138. package/examples/js/misc/ProgressiveLightMap.js +47 -43
  139. package/examples/js/misc/RollerCoaster.js +17 -24
  140. package/examples/js/misc/TubePainter.js +18 -12
  141. package/examples/js/misc/Volume.js +16 -45
  142. package/examples/js/misc/VolumeSlice.js +14 -24
  143. package/examples/js/modifiers/CurveModifier.js +19 -21
  144. package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
  145. package/examples/js/modifiers/SimplifyModifier.js +56 -59
  146. package/examples/js/modifiers/TessellateModifier.js +2 -9
  147. package/examples/js/objects/GroundProjectedEnv.js +2 -14
  148. package/examples/js/objects/Lensflare.js +47 -38
  149. package/examples/js/objects/LightningStorm.js +10 -13
  150. package/examples/js/objects/MarchingCubes.js +80 -59
  151. package/examples/js/objects/Reflector.js +22 -20
  152. package/examples/js/objects/ReflectorForSSRPass.js +19 -23
  153. package/examples/js/objects/Refractor.js +52 -30
  154. package/examples/js/objects/ShadowMesh.js +1 -2
  155. package/examples/js/objects/Sky.js +2 -7
  156. package/examples/js/objects/Water.js +23 -18
  157. package/examples/js/objects/Water2.js +20 -19
  158. package/examples/js/physics/AmmoPhysics.js +23 -20
  159. package/examples/js/physics/OimoPhysics.js +19 -17
  160. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
  161. package/examples/js/postprocessing/AfterimagePass.js +19 -12
  162. package/examples/js/postprocessing/BloomPass.js +38 -17
  163. package/examples/js/postprocessing/BokehPass.js +29 -12
  164. package/examples/js/postprocessing/ClearPass.js +1 -6
  165. package/examples/js/postprocessing/CubeTexturePass.js +12 -9
  166. package/examples/js/postprocessing/DotScreenPass.js +7 -5
  167. package/examples/js/postprocessing/EffectComposer.js +25 -32
  168. package/examples/js/postprocessing/FilmPass.js +7 -5
  169. package/examples/js/postprocessing/GlitchPass.js +10 -11
  170. package/examples/js/postprocessing/HalftonePass.js +9 -9
  171. package/examples/js/postprocessing/LUTPass.js +2 -15
  172. package/examples/js/postprocessing/MaskPass.js +20 -17
  173. package/examples/js/postprocessing/OutlinePass.js +45 -36
  174. package/examples/js/postprocessing/Pass.js +11 -14
  175. package/examples/js/postprocessing/RenderPass.js +3 -7
  176. package/examples/js/postprocessing/SAOPass.js +40 -32
  177. package/examples/js/postprocessing/SMAAPass.js +34 -17
  178. package/examples/js/postprocessing/SSAARenderPass.js +14 -14
  179. package/examples/js/postprocessing/SSAOPass.js +56 -42
  180. package/examples/js/postprocessing/SSRPass.js +78 -61
  181. package/examples/js/postprocessing/SavePass.js +14 -6
  182. package/examples/js/postprocessing/ShaderPass.js +9 -8
  183. package/examples/js/postprocessing/TAARenderPass.js +11 -9
  184. package/examples/js/postprocessing/TexturePass.js +7 -4
  185. package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
  186. package/examples/js/renderers/CSS2DRenderer.js +2 -21
  187. package/examples/js/renderers/CSS3DRenderer.js +3 -24
  188. package/examples/js/renderers/Projector.js +29 -85
  189. package/examples/js/renderers/SVGRenderer.js +4 -50
  190. package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
  191. package/examples/js/shaders/AfterimageShader.js +3 -6
  192. package/examples/js/shaders/BasicShader.js +3 -6
  193. package/examples/js/shaders/BleachBypassShader.js +3 -6
  194. package/examples/js/shaders/BlendShader.js +3 -6
  195. package/examples/js/shaders/BokehShader.js +3 -6
  196. package/examples/js/shaders/BokehShader2.js +4 -13
  197. package/examples/js/shaders/BrightnessContrastShader.js +3 -6
  198. package/examples/js/shaders/ColorCorrectionShader.js +2 -6
  199. package/examples/js/shaders/ColorifyShader.js +2 -6
  200. package/examples/js/shaders/ConvolutionShader.js +5 -10
  201. package/examples/js/shaders/CopyShader.js +3 -6
  202. package/examples/js/shaders/DOFMipMapShader.js +3 -6
  203. package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
  204. package/examples/js/shaders/DigitalGlitch.js +3 -6
  205. package/examples/js/shaders/DotScreenShader.js +2 -6
  206. package/examples/js/shaders/FXAAShader.js +1 -3
  207. package/examples/js/shaders/FilmShader.js +3 -6
  208. package/examples/js/shaders/FocusShader.js +3 -6
  209. package/examples/js/shaders/FreiChenShader.js +2 -6
  210. package/examples/js/shaders/GammaCorrectionShader.js +3 -6
  211. package/examples/js/shaders/GodRaysShader.js +11 -24
  212. package/examples/js/shaders/HalftoneShader.js +3 -6
  213. package/examples/js/shaders/HorizontalBlurShader.js +3 -6
  214. package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
  215. package/examples/js/shaders/HueSaturationShader.js +3 -6
  216. package/examples/js/shaders/KaleidoShader.js +3 -6
  217. package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
  218. package/examples/js/shaders/LuminosityShader.js +3 -6
  219. package/examples/js/shaders/MMDToonShader.js +2 -6
  220. package/examples/js/shaders/MirrorShader.js +3 -6
  221. package/examples/js/shaders/NormalMapShader.js +2 -6
  222. package/examples/js/shaders/RGBShiftShader.js +3 -6
  223. package/examples/js/shaders/SAOShader.js +2 -6
  224. package/examples/js/shaders/SMAAShader.js +6 -18
  225. package/examples/js/shaders/SSAOShader.js +2 -6
  226. package/examples/js/shaders/SSRShader.js +6 -18
  227. package/examples/js/shaders/SepiaShader.js +3 -6
  228. package/examples/js/shaders/SobelOperatorShader.js +2 -6
  229. package/examples/js/shaders/TechnicolorShader.js +3 -6
  230. package/examples/js/shaders/ToneMapShader.js +3 -6
  231. package/examples/js/shaders/ToonShader.js +8 -24
  232. package/examples/js/shaders/TriangleBlurShader.js +2 -6
  233. package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
  234. package/examples/js/shaders/VelocityShader.js +126 -0
  235. package/examples/js/shaders/VerticalBlurShader.js +3 -6
  236. package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
  237. package/examples/js/shaders/VignetteShader.js +3 -6
  238. package/examples/js/shaders/VolumeShader.js +2 -6
  239. package/examples/js/shaders/WaterRefractionShader.js +2 -6
  240. package/examples/js/textures/FlakesTexture.js +0 -1
  241. package/examples/js/utils/BufferGeometryUtils.js +234 -168
  242. package/examples/js/utils/CameraUtils.js +5 -20
  243. package/examples/js/utils/GPUStatsPanel.js +3 -12
  244. package/examples/js/utils/GeometryCompressionUtils.js +19 -44
  245. package/examples/js/utils/GeometryUtils.js +13 -18
  246. package/examples/js/utils/LDrawUtils.js +8 -11
  247. package/examples/js/utils/PackedPhongMaterial.js +6 -4
  248. package/examples/js/utils/SceneUtils.js +117 -6
  249. package/examples/js/utils/ShadowMapViewer.js +17 -14
  250. package/examples/js/utils/SkeletonUtils.js +13 -27
  251. package/examples/js/utils/UVsDebug.js +20 -12
  252. package/examples/js/utils/WorkerPool.js +1 -11
  253. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  254. package/examples/jsm/capabilities/WebGPU.js +3 -1
  255. package/examples/jsm/controls/OrbitControls.js +44 -4
  256. package/examples/jsm/exporters/GLTFExporter.js +17 -131
  257. package/examples/jsm/exporters/USDZExporter.js +75 -19
  258. package/examples/jsm/interactive/HTMLMesh.js +2 -0
  259. package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
  260. package/examples/jsm/loaders/3DMLoader.js +1 -2
  261. package/examples/jsm/loaders/ColladaLoader.js +28 -0
  262. package/examples/jsm/loaders/FBXLoader.js +16 -2
  263. package/examples/jsm/loaders/GLTFLoader.js +204 -377
  264. package/examples/jsm/loaders/KTX2Loader.js +68 -29
  265. package/examples/jsm/loaders/LDrawLoader.js +14 -13
  266. package/examples/jsm/loaders/LottieLoader.js +4 -2
  267. package/examples/jsm/loaders/MaterialXLoader.js +728 -0
  268. package/examples/jsm/loaders/PCDLoader.js +1 -1
  269. package/examples/jsm/loaders/PLYLoader.js +68 -16
  270. package/examples/jsm/loaders/SVGLoader.js +227 -14
  271. package/examples/jsm/loaders/USDZLoader.js +31 -16
  272. package/examples/jsm/nodes/Nodes.js +14 -2
  273. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  274. package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
  275. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  276. package/examples/jsm/nodes/accessors/SkinningNode.js +1 -1
  277. package/examples/jsm/nodes/core/Node.js +1 -1
  278. package/examples/jsm/nodes/core/NodeBuilder.js +36 -4
  279. package/examples/jsm/nodes/core/NodeFrame.js +2 -2
  280. package/examples/jsm/nodes/core/NodeVarying.js +7 -4
  281. package/examples/jsm/nodes/core/VaryingNode.js +6 -4
  282. package/examples/jsm/nodes/core/constants.js +13 -13
  283. package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
  284. package/examples/jsm/nodes/display/ViewportNode.js +106 -0
  285. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  286. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  287. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
  288. package/examples/jsm/nodes/materials/Materials.js +9 -7
  289. package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
  290. package/examples/jsm/nodes/materialx/MaterialXNodes.js +6 -2
  291. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
  292. package/examples/jsm/nodes/math/MathNode.js +5 -0
  293. package/examples/jsm/nodes/math/OperatorNode.js +6 -1
  294. package/examples/jsm/nodes/shadernode/ShaderNode.js +26 -13
  295. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +2 -0
  296. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +18 -0
  297. package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
  298. package/examples/jsm/nodes/utils/JoinNode.js +8 -2
  299. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
  300. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  301. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
  302. package/examples/jsm/nodes/utils/TimerNode.js +1 -1
  303. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
  304. package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
  305. package/examples/jsm/postprocessing/BloomPass.js +22 -3
  306. package/examples/jsm/postprocessing/BokehPass.js +18 -4
  307. package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
  308. package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
  309. package/examples/jsm/postprocessing/EffectComposer.js +9 -0
  310. package/examples/jsm/postprocessing/FilmPass.js +8 -0
  311. package/examples/jsm/postprocessing/GlitchPass.js +13 -1
  312. package/examples/jsm/postprocessing/HalftonePass.js +8 -0
  313. package/examples/jsm/postprocessing/OutlinePass.js +10 -0
  314. package/examples/jsm/postprocessing/Pass.js +2 -0
  315. package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
  316. package/examples/jsm/postprocessing/SAOPass.js +20 -0
  317. package/examples/jsm/postprocessing/SMAAPass.js +16 -0
  318. package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
  319. package/examples/jsm/postprocessing/SavePass.js +17 -1
  320. package/examples/jsm/postprocessing/ShaderPass.js +8 -0
  321. package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
  322. package/examples/jsm/postprocessing/TexturePass.js +8 -0
  323. package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
  324. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +39 -16
  325. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
  326. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
  327. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
  328. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
  329. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +35 -5
  330. package/examples/jsm/shaders/MMDToonShader.js +0 -2
  331. package/examples/jsm/shaders/VelocityShader.js +128 -0
  332. package/examples/jsm/utils/BufferGeometryUtils.js +130 -6
  333. package/examples/jsm/utils/SceneUtils.js +129 -4
  334. package/examples/jsm/utils/TextureUtils.js +85 -0
  335. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  336. package/examples/jsm/webxr/XRHandMeshModel.js +6 -3
  337. package/package.json +11 -12
  338. package/src/Three.js +1 -0
  339. package/src/audio/AudioContext.js +5 -5
  340. package/src/cameras/CubeCamera.js +14 -14
  341. package/src/constants.js +1 -1
  342. package/src/core/InstancedBufferGeometry.js +1 -7
  343. package/src/extras/Earcut.js +67 -67
  344. package/src/helpers/DirectionalLightHelper.js +5 -1
  345. package/src/helpers/HemisphereLightHelper.js +4 -1
  346. package/src/helpers/PointLightHelper.js +2 -1
  347. package/src/helpers/SpotLightHelper.js +4 -2
  348. package/src/lights/PointLight.js +2 -2
  349. package/src/lights/SpotLight.js +2 -2
  350. package/src/loaders/FileLoader.js +4 -1
  351. package/src/loaders/ObjectLoader.js +5 -1
  352. package/src/materials/Material.js +1 -1
  353. package/src/math/Color.js +5 -5
  354. package/src/math/Matrix3.js +53 -18
  355. package/src/math/Ray.js +2 -5
  356. package/src/math/Sphere.js +19 -26
  357. package/src/objects/InstancedMesh.js +7 -0
  358. package/src/objects/LOD.js +25 -6
  359. package/src/renderers/WebGL3DRenderTarget.js +1 -1
  360. package/src/renderers/WebGLArrayRenderTarget.js +1 -1
  361. package/src/renderers/WebGLCubeRenderTarget.js +1 -1
  362. package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
  363. package/src/renderers/WebGLRenderTarget.js +1 -1
  364. package/src/renderers/WebGLRenderer.js +36 -62
  365. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
  366. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
  367. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
  369. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
  370. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
  371. package/src/renderers/shaders/ShaderChunk.js +3 -0
  372. package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
  373. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  374. package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
  375. package/src/renderers/shaders/ShaderLib.js +20 -6
  376. package/src/renderers/shaders/UniformsLib.js +1 -1
  377. package/src/renderers/shaders/UniformsUtils.js +15 -0
  378. package/src/renderers/webgl/WebGLAttributes.js +2 -0
  379. package/src/renderers/webgl/WebGLBackground.js +15 -7
  380. package/src/renderers/webgl/WebGLLights.js +0 -4
  381. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  382. package/src/renderers/webgl/WebGLShadowMap.js +3 -1
  383. package/src/renderers/webgl/WebGLState.js +31 -1
  384. package/src/renderers/webgl/WebGLTextures.js +71 -18
  385. package/src/renderers/webgl/WebGLUniforms.js +116 -20
  386. package/src/renderers/webgl/WebGLUtils.js +1 -1
  387. package/src/renderers/webxr/WebXRController.js +46 -13
  388. package/src/renderers/webxr/WebXRManager.js +85 -3
  389. package/src/scenes/Scene.js +8 -0
  390. package/src/textures/CompressedArrayTexture.js +18 -0
  391. package/examples/js/libs/lottie_canvas.js +0 -12751
  392. package/examples/js/shaders/PixelShader.js +0 -51
  393. package/examples/jsm/shaders/PixelShader.js +0 -44
@@ -123,7 +123,7 @@ class PCDLoader extends Loader {
123
123
 
124
124
  // remove comments
125
125
 
126
- PCDheader.str = PCDheader.str.replace( /\#.*/gi, '' );
126
+ PCDheader.str = PCDheader.str.replace( /#.*/gi, '' );
127
127
 
128
128
  // parse
129
129
 
@@ -31,6 +31,16 @@ import {
31
31
  * diffuse_blue: 'blue'
32
32
  * } );
33
33
  *
34
+ * Custom properties outside of the defaults for position, uv, normal
35
+ * and color attributes can be added using the setCustomPropertyMapping method.
36
+ * For example, the following maps the element properties “custom_property_a”
37
+ * and “custom_property_b” to an attribute “customAttribute” with an item size of 2.
38
+ * Attribute item sizes are set from the number of element properties in the property array.
39
+ *
40
+ * loader.setCustomPropertyMapping( {
41
+ * customAttribute: ['custom_property_a', 'custom_property_b'],
42
+ * } );
43
+ *
34
44
  */
35
45
 
36
46
  const _color = new Color();
@@ -42,6 +52,7 @@ class PLYLoader extends Loader {
42
52
  super( manager );
43
53
 
44
54
  this.propertyNameMapping = {};
55
+ this.customPropertyMapping = {};
45
56
 
46
57
  }
47
58
 
@@ -86,6 +97,12 @@ class PLYLoader extends Loader {
86
97
 
87
98
  }
88
99
 
100
+ setCustomPropertyNameMapping( mapping ) {
101
+
102
+ this.customPropertyMapping = mapping;
103
+
104
+ }
105
+
89
106
  parse( data ) {
90
107
 
91
108
  function parseHeader( data ) {
@@ -260,18 +277,32 @@ class PLYLoader extends Loader {
260
277
 
261
278
  }
262
279
 
280
+ function createBuffer() {
281
+
282
+ const buffer = {
283
+ indices: [],
284
+ vertices: [],
285
+ normals: [],
286
+ uvs: [],
287
+ faceVertexUvs: [],
288
+ colors: [],
289
+ };
290
+
291
+ for ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {
292
+
293
+ buffer[ customProperty ] = [];
294
+
295
+ }
296
+
297
+ return buffer;
298
+
299
+ }
300
+
263
301
  function parseASCII( data, header ) {
264
302
 
265
303
  // PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)
266
304
 
267
- const buffer = {
268
- indices: [],
269
- vertices: [],
270
- normals: [],
271
- uvs: [],
272
- faceVertexUvs: [],
273
- colors: []
274
- };
305
+ const buffer = createBuffer();
275
306
 
276
307
  let result;
277
308
 
@@ -357,6 +388,24 @@ class PLYLoader extends Loader {
357
388
 
358
389
  }
359
390
 
391
+ // custom buffer data
392
+
393
+ for ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {
394
+
395
+ if ( buffer[ customProperty ].length > 0 ) {
396
+
397
+ geometry.setAttribute(
398
+ customProperty,
399
+ new Float32BufferAttribute(
400
+ buffer[ customProperty ],
401
+ scope.customPropertyMapping[ customProperty ].length
402
+ )
403
+ );
404
+
405
+ }
406
+
407
+ }
408
+
360
409
  geometry.computeBoundingSphere();
361
410
 
362
411
  return geometry;
@@ -419,6 +468,16 @@ class PLYLoader extends Loader {
419
468
 
420
469
  }
421
470
 
471
+ for ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {
472
+
473
+ for ( const elementProperty of scope.customPropertyMapping[ customProperty ] ) {
474
+
475
+ buffer[ customProperty ].push( element[ elementProperty ] );
476
+
477
+ }
478
+
479
+ }
480
+
422
481
  } else if ( elementName === 'face' ) {
423
482
 
424
483
  const vertex_indices = element.vertex_indices || element.vertex_index; // issue #9338
@@ -506,14 +565,7 @@ class PLYLoader extends Loader {
506
565
 
507
566
  function parseBinary( data, header ) {
508
567
 
509
- const buffer = {
510
- indices: [],
511
- vertices: [],
512
- normals: [],
513
- uvs: [],
514
- faceVertexUvs: [],
515
- colors: []
516
- };
568
+ const buffer = createBuffer();
517
569
 
518
570
  const little_endian = ( header.format === 'binary_little_endian' );
519
571
  const body = new DataView( data, header.headerLength );
@@ -1482,7 +1482,7 @@ class SVGLoader extends Loader {
1482
1482
  let cy = 0;
1483
1483
 
1484
1484
  // Angle
1485
- angle = - array[ 0 ] * Math.PI / 180;
1485
+ angle = array[ 0 ] * Math.PI / 180;
1486
1486
 
1487
1487
  if ( array.length >= 3 ) {
1488
1488
 
@@ -1493,10 +1493,10 @@ class SVGLoader extends Loader {
1493
1493
  }
1494
1494
 
1495
1495
  // Rotate around center (cx, cy)
1496
- tempTransform1.identity().translate( - cx, - cy );
1497
- tempTransform2.identity().rotate( angle );
1496
+ tempTransform1.makeTranslation( - cx, - cy );
1497
+ tempTransform2.makeRotation( angle );
1498
1498
  tempTransform3.multiplyMatrices( tempTransform2, tempTransform1 );
1499
- tempTransform1.identity().translate( cx, cy );
1499
+ tempTransform1.makeTranslation( cx, cy );
1500
1500
  currentTransform.multiplyMatrices( tempTransform1, tempTransform3 );
1501
1501
 
1502
1502
  }
@@ -1588,7 +1588,120 @@ class SVGLoader extends Loader {
1588
1588
 
1589
1589
  }
1590
1590
 
1591
- const isRotated = isTransformRotated( m );
1591
+ function transfEllipseGeneric( curve ) {
1592
+
1593
+ // For math description see:
1594
+ // https://math.stackexchange.com/questions/4544164
1595
+
1596
+ const a = curve.xRadius;
1597
+ const b = curve.yRadius;
1598
+
1599
+ const cosTheta = Math.cos( curve.aRotation );
1600
+ const sinTheta = Math.sin( curve.aRotation );
1601
+
1602
+ const v1 = new Vector3( a * cosTheta, a * sinTheta, 0 );
1603
+ const v2 = new Vector3( -b * sinTheta, b * cosTheta, 0 );
1604
+
1605
+ const f1 = v1.applyMatrix3( m );
1606
+ const f2 = v2.applyMatrix3( m );
1607
+
1608
+ const mF = tempTransform0.set(
1609
+ f1.x, f2.x, 0,
1610
+ f1.y, f2.y, 0,
1611
+ 0, 0, 1,
1612
+ );
1613
+
1614
+ const mFInv = tempTransform1.copy( mF ).invert();
1615
+ const mFInvT = tempTransform2.copy( mFInv ).transpose();
1616
+ const mQ = mFInvT.multiply( mFInv );
1617
+ const mQe = mQ.elements;
1618
+
1619
+ const ed = eigenDecomposition( mQe[0], mQe[1], mQe[4] );
1620
+ const rt1sqrt = Math.sqrt( ed.rt1 );
1621
+ const rt2sqrt = Math.sqrt( ed.rt2 );
1622
+
1623
+ curve.xRadius = 1 / rt1sqrt;
1624
+ curve.yRadius = 1 / rt2sqrt;
1625
+ curve.aRotation = Math.atan2( ed.sn, ed.cs );
1626
+
1627
+ const isFullEllipse =
1628
+ ( curve.aEndAngle - curve.aStartAngle ) % ( 2 * Math.PI ) < Number.EPSILON;
1629
+
1630
+ // Do not touch angles of a full ellipse because after transformation they
1631
+ // would converge to a sinle value effectively removing the whole curve
1632
+
1633
+ if ( !isFullEllipse ) {
1634
+
1635
+ const mDsqrt = tempTransform1.set(
1636
+ rt1sqrt, 0, 0,
1637
+ 0, rt2sqrt, 0,
1638
+ 0, 0, 1,
1639
+ );
1640
+
1641
+ const mRT = tempTransform2.set(
1642
+ ed.cs, ed.sn, 0,
1643
+ -ed.sn, ed.cs, 0,
1644
+ 0, 0, 1,
1645
+ );
1646
+
1647
+ const mDRF = mDsqrt.multiply( mRT ).multiply( mF );
1648
+
1649
+ const transformAngle = phi => {
1650
+
1651
+ const { x: cosR, y: sinR } =
1652
+ new Vector3( Math.cos( phi ), Math.sin( phi ), 0 ).applyMatrix3( mDRF );
1653
+
1654
+ return Math.atan2( sinR, cosR );
1655
+
1656
+ }
1657
+
1658
+ curve.aStartAngle = transformAngle( curve.aStartAngle );
1659
+ curve.aEndAngle = transformAngle( curve.aEndAngle );
1660
+
1661
+ if ( isTransformFlipped( m ) ) {
1662
+
1663
+ curve.aClockwise = !curve.aClockwise;
1664
+
1665
+ }
1666
+
1667
+ }
1668
+
1669
+ }
1670
+
1671
+ function transfEllipseNoSkew( curve ) {
1672
+
1673
+ // Faster shortcut if no skew is applied
1674
+ // (e.g, a euclidean transform of a group containing the ellipse)
1675
+
1676
+ const sx = getTransformScaleX( m );
1677
+ const sy = getTransformScaleY( m );
1678
+
1679
+ curve.xRadius *= sx;
1680
+ curve.yRadius *= sy;
1681
+
1682
+ // Extract rotation angle from the matrix of form:
1683
+ //
1684
+ // | cosθ sx -sinθ sy |
1685
+ // | sinθ sx cosθ sy |
1686
+ //
1687
+ // Remembering that tanθ = sinθ / cosθ; and that
1688
+ // `sx`, `sy`, or both might be zero.
1689
+ const theta =
1690
+ sx > Number.EPSILON
1691
+ ? Math.atan2( m.elements[ 1 ], m.elements[ 0 ] )
1692
+ : Math.atan2( - m.elements[ 3 ], m.elements[ 4 ] );
1693
+
1694
+ curve.aRotation += theta;
1695
+
1696
+ if ( isTransformFlipped( m ) ) {
1697
+
1698
+ curve.aStartAngle *= -1;
1699
+ curve.aEndAngle *= -1;
1700
+ curve.aClockwise = !curve.aClockwise;
1701
+
1702
+ }
1703
+
1704
+ }
1592
1705
 
1593
1706
  const subPaths = path.subPaths;
1594
1707
 
@@ -1621,19 +1734,24 @@ class SVGLoader extends Loader {
1621
1734
 
1622
1735
  } else if ( curve.isEllipseCurve ) {
1623
1736
 
1624
- if ( isRotated ) {
1625
-
1626
- console.warn( 'SVGLoader: Elliptic arc or ellipse rotation or skewing is not implemented.' );
1627
-
1628
- }
1737
+ // Transform ellipse center point
1629
1738
 
1630
1739
  tempV2.set( curve.aX, curve.aY );
1631
1740
  transfVec2( tempV2 );
1632
1741
  curve.aX = tempV2.x;
1633
1742
  curve.aY = tempV2.y;
1634
1743
 
1635
- curve.xRadius *= getTransformScaleX( m );
1636
- curve.yRadius *= getTransformScaleY( m );
1744
+ // Transform ellipse shape parameters
1745
+
1746
+ if ( isTransformSkewed( m ) ) {
1747
+
1748
+ transfEllipseGeneric( curve );
1749
+
1750
+ } else {
1751
+
1752
+ transfEllipseNoSkew( curve );
1753
+
1754
+ }
1637
1755
 
1638
1756
  }
1639
1757
 
@@ -1643,9 +1761,25 @@ class SVGLoader extends Loader {
1643
1761
 
1644
1762
  }
1645
1763
 
1646
- function isTransformRotated( m ) {
1764
+ function isTransformFlipped( m ) {
1765
+
1766
+ const te = m.elements;
1767
+ return te[ 0 ] * te[ 4 ] - te[ 1 ] * te[ 3 ] < 0;
1768
+
1769
+ }
1770
+
1771
+ function isTransformSkewed( m ) {
1772
+
1773
+ const te = m.elements;
1774
+ const basisDot = te[ 0 ] * te[ 3 ] + te[ 1 ] * te[ 4 ];
1775
+
1776
+ // Shortcut for trivial rotations and transformations
1777
+ if ( basisDot === 0 ) return false;
1778
+
1779
+ const sx = getTransformScaleX( m );
1780
+ const sy = getTransformScaleY( m );
1647
1781
 
1648
- return m.elements[ 1 ] !== 0 || m.elements[ 3 ] !== 0;
1782
+ return Math.abs( basisDot / ( sx * sy ) ) > Number.EPSILON;
1649
1783
 
1650
1784
  }
1651
1785
 
@@ -1663,6 +1797,85 @@ class SVGLoader extends Loader {
1663
1797
 
1664
1798
  }
1665
1799
 
1800
+ // Calculates the eigensystem of a real symmetric 2x2 matrix
1801
+ // [ A B ]
1802
+ // [ B C ]
1803
+ // in the form
1804
+ // [ A B ] = [ cs -sn ] [ rt1 0 ] [ cs sn ]
1805
+ // [ B C ] [ sn cs ] [ 0 rt2 ] [ -sn cs ]
1806
+ // where rt1 >= rt2.
1807
+ //
1808
+ // Adapted from: https://www.mpi-hd.mpg.de/personalhomes/globes/3x3/index.html
1809
+ // -> Algorithms for real symmetric matrices -> Analytical (2x2 symmetric)
1810
+ function eigenDecomposition( A, B, C ) {
1811
+
1812
+ let rt1, rt2, cs, sn, t;
1813
+ const sm = A + C;
1814
+ const df = A - C;
1815
+ const rt = Math.sqrt( df * df + 4 * B * B );
1816
+
1817
+ if ( sm > 0 ) {
1818
+
1819
+ rt1 = 0.5 * ( sm + rt );
1820
+ t = 1 / rt1;
1821
+ rt2 = A * t * C - B * t * B;
1822
+
1823
+ } else if ( sm < 0 ) {
1824
+
1825
+ rt2 = 0.5 * ( sm - rt );
1826
+
1827
+ } else {
1828
+
1829
+ // This case needs to be treated separately to avoid div by 0
1830
+
1831
+ rt1 = 0.5 * rt;
1832
+ rt2 = -0.5 * rt;
1833
+
1834
+ }
1835
+
1836
+ // Calculate eigenvectors
1837
+
1838
+ if ( df > 0 ) {
1839
+
1840
+ cs = df + rt;
1841
+
1842
+ } else {
1843
+
1844
+ cs = df - rt;
1845
+
1846
+ }
1847
+
1848
+ if ( Math.abs( cs ) > 2 * Math.abs( B ) ) {
1849
+
1850
+ t = -2 * B / cs;
1851
+ sn = 1 / Math.sqrt( 1 + t * t );
1852
+ cs = t * sn;
1853
+
1854
+ } else if ( Math.abs( B ) === 0 ) {
1855
+
1856
+ cs = 1;
1857
+ sn = 0;
1858
+
1859
+ } else {
1860
+
1861
+ t = -0.5 * cs / B;
1862
+ cs = 1 / Math.sqrt( 1 + t * t );
1863
+ sn = t * cs;
1864
+
1865
+ }
1866
+
1867
+ if ( df > 0 ) {
1868
+
1869
+ t = cs;
1870
+ cs = -sn;
1871
+ sn = t;
1872
+
1873
+ }
1874
+
1875
+ return { rt1, rt2, cs, sn };
1876
+
1877
+ }
1878
+
1666
1879
  //
1667
1880
 
1668
1881
  const paths = [];
@@ -11,6 +11,7 @@ import {
11
11
  RepeatWrapping,
12
12
  sRGBEncoding,
13
13
  TextureLoader,
14
+ Object3D,
14
15
  } from 'three';
15
16
 
16
17
  import * as fflate from '../libs/fflate.module.js';
@@ -206,7 +207,7 @@ class USDZLoader extends Loader {
206
207
 
207
208
  const zip = fflate.unzipSync( new Uint8Array( buffer ) ); // eslint-disable-line no-undef
208
209
 
209
- console.log( zip );
210
+ // console.log( zip );
210
211
 
211
212
  const assets = parseAssets( zip );
212
213
 
@@ -232,6 +233,8 @@ class USDZLoader extends Loader {
232
233
 
233
234
  function findMeshGeometry( data ) {
234
235
 
236
+ if ( ! data ) return undefined;
237
+
235
238
  if ( 'prepend references' in data ) {
236
239
 
237
240
  const reference = data[ 'prepend references' ];
@@ -310,6 +313,8 @@ class USDZLoader extends Loader {
310
313
 
311
314
  function buildGeometry( data ) {
312
315
 
316
+ if ( ! data ) return undefined;
317
+
313
318
  let geometry = new BufferGeometry();
314
319
 
315
320
  if ( 'int[] faceVertexIndices' in data ) {
@@ -364,7 +369,7 @@ class USDZLoader extends Loader {
364
369
  }
365
370
 
366
371
  }
367
-
372
+
368
373
  return geometry;
369
374
 
370
375
  }
@@ -396,6 +401,8 @@ class USDZLoader extends Loader {
396
401
 
397
402
  function findMeshMaterial( data ) {
398
403
 
404
+ if ( ! data ) return undefined;
405
+
399
406
  if ( 'rel material:binding' in data ) {
400
407
 
401
408
  const reference = data[ 'rel material:binding' ];
@@ -525,7 +532,7 @@ class USDZLoader extends Loader {
525
532
 
526
533
  }
527
534
 
528
- }
535
+ }
529
536
 
530
537
  }
531
538
 
@@ -565,16 +572,16 @@ class USDZLoader extends Loader {
565
572
 
566
573
  }
567
574
 
568
- function buildMesh( data ) {
575
+ function buildObject( data ) {
569
576
 
570
577
  const geometry = buildGeometry( findMeshGeometry( data ) );
571
578
  const material = buildMaterial( findMeshMaterial( data ) );
572
579
 
573
- const mesh = new Mesh( geometry, material );
580
+ const mesh = geometry && material ? new Mesh( geometry, material ) : new Object3D();
574
581
 
575
582
  if ( 'matrix4d xformOp:transform' in data ) {
576
583
 
577
- const array = JSON.parse( '[' + data[ 'matrix4d xformOp:transform' ].replace( /[()]*/g, '' ) + ']' );
584
+ const array = JSON.parse( '[' + data[ 'matrix4d xformOp:transform' ].replace( /[()]*/g, '' ) + ']' );
578
585
 
579
586
  mesh.matrix.fromArray( array );
580
587
  mesh.matrix.decompose( mesh.position, mesh.quaternion, mesh.scale );
@@ -585,29 +592,37 @@ class USDZLoader extends Loader {
585
592
 
586
593
  }
587
594
 
588
- // console.log( data );
595
+ function buildHierarchy( data, group ) {
589
596
 
590
- const group = new Group();
597
+ for ( const name in data ) {
591
598
 
592
- for ( const name in root ) {
599
+ if ( name.startsWith( 'def Scope' ) ) {
593
600
 
594
- if ( name.startsWith( 'def Xform' ) ) {
601
+ buildHierarchy( data[ name ], group );
595
602
 
596
- const mesh = buildMesh( root[ name ] );
603
+ } else if ( name.startsWith( 'def Xform' ) ) {
597
604
 
598
- if ( /def Xform "(\w+)"/.test( name ) ) {
605
+ const mesh = buildObject( data[ name ] );
599
606
 
600
- mesh.name = /def Xform "(\w+)"/.exec( name )[ 1 ];
607
+ if ( /def Xform "(\w+)"/.test( name ) ) {
601
608
 
602
- }
609
+ mesh.name = /def Xform "(\w+)"/.exec( name )[ 1 ];
603
610
 
604
- group.add( mesh );
611
+ }
612
+
613
+ group.add( mesh );
614
+
615
+ buildHierarchy( data[ name ], mesh );
616
+
617
+ }
605
618
 
606
619
  }
607
620
 
608
621
  }
609
622
 
610
- // console.log( group );
623
+ const group = new Group();
624
+
625
+ buildHierarchy( root, group );
611
626
 
612
627
  return group;
613
628
 
@@ -59,7 +59,9 @@ import ColorAdjustmentNode from './display/ColorAdjustmentNode.js';
59
59
  import ColorSpaceNode from './display/ColorSpaceNode.js';
60
60
  import FrontFacingNode from './display/FrontFacingNode.js';
61
61
  import NormalMapNode from './display/NormalMapNode.js';
62
+ import PosterizeNode from './display/PosterizeNode.js';
62
63
  import ToneMappingNode from './display/ToneMappingNode.js';
64
+ import ViewportNode from './display/ViewportNode.js';
63
65
 
64
66
  // math
65
67
  import MathNode from './math/MathNode.js';
@@ -79,6 +81,7 @@ import AnalyticLightNode from './lighting/AnalyticLightNode.js';
79
81
  // utils
80
82
  import ArrayElementNode from './utils/ArrayElementNode.js';
81
83
  import ConvertNode from './utils/ConvertNode.js';
84
+ import EquirectUVNode from './utils/EquirectUVNode.js';
82
85
  import JoinNode from './utils/JoinNode.js';
83
86
  import MatcapUVNode from './utils/MatcapUVNode.js';
84
87
  import MaxMipLevelNode from './utils/MaxMipLevelNode.js';
@@ -88,6 +91,7 @@ import RotateUVNode from './utils/RotateUVNode.js';
88
91
  import SplitNode from './utils/SplitNode.js';
89
92
  import SpriteSheetUVNode from './utils/SpriteSheetUVNode.js';
90
93
  import TimerNode from './utils/TimerNode.js';
94
+ import TriplanarTexturesNode from './utils/TriplanarTexturesNode.js';
91
95
 
92
96
  // loaders
93
97
  import NodeLoader from './loaders/NodeLoader.js';
@@ -182,7 +186,9 @@ const nodeLib = {
182
186
  ColorSpaceNode,
183
187
  FrontFacingNode,
184
188
  NormalMapNode,
189
+ PosterizeNode,
185
190
  ToneMappingNode,
191
+ ViewportNode,
186
192
 
187
193
  // math
188
194
  MathNode,
@@ -202,6 +208,7 @@ const nodeLib = {
202
208
  // utils
203
209
  ArrayElementNode,
204
210
  ConvertNode,
211
+ EquirectUVNode,
205
212
  JoinNode,
206
213
  MatcapUVNode,
207
214
  MaxMipLevelNode,
@@ -211,6 +218,7 @@ const nodeLib = {
211
218
  SplitNode,
212
219
  SpriteSheetUVNode,
213
220
  TimerNode,
221
+ TriplanarTexturesNode,
214
222
 
215
223
  // procedural
216
224
  CheckerNode,
@@ -226,7 +234,7 @@ const nodeLib = {
226
234
 
227
235
  // parsers
228
236
  WGSLNodeParser,
229
- GLSLNodeParser,
237
+ GLSLNodeParser
230
238
 
231
239
  };
232
240
 
@@ -298,7 +306,9 @@ export {
298
306
  ColorSpaceNode,
299
307
  FrontFacingNode,
300
308
  NormalMapNode,
309
+ PosterizeNode,
301
310
  ToneMappingNode,
311
+ ViewportNode,
302
312
 
303
313
  // math
304
314
  MathNode,
@@ -318,6 +328,7 @@ export {
318
328
  // utils
319
329
  ArrayElementNode,
320
330
  ConvertNode,
331
+ EquirectUVNode,
321
332
  JoinNode,
322
333
  MatcapUVNode,
323
334
  MaxMipLevelNode,
@@ -327,6 +338,7 @@ export {
327
338
  SplitNode,
328
339
  SpriteSheetUVNode,
329
340
  TimerNode,
341
+ TriplanarTexturesNode,
330
342
 
331
343
  // procedural
332
344
  CheckerNode,
@@ -342,5 +354,5 @@ export {
342
354
 
343
355
  // parsers
344
356
  WGSLNodeParser,
345
- GLSLNodeParser,
357
+ GLSLNodeParser
346
358
  };
@@ -18,7 +18,7 @@ class Object3DNode extends Node {
18
18
  this.scope = scope;
19
19
  this.object3d = object3d;
20
20
 
21
- this.updateType = NodeUpdateType.Object;
21
+ this.updateType = NodeUpdateType.OBJECT;
22
22
 
23
23
  this._uniformNode = new UniformNode( null );
24
24
 
@@ -10,6 +10,7 @@ class PositionNode extends Node {
10
10
  static GEOMETRY = 'geometry';
11
11
  static LOCAL = 'local';
12
12
  static WORLD = 'world';
13
+ static WORLD_DIRECTION = 'worldDirection';
13
14
  static VIEW = 'view';
14
15
  static VIEW_DIRECTION = 'viewDirection';
15
16
 
@@ -56,6 +57,11 @@ class PositionNode extends Node {
56
57
  const vertexPositionNode = new MathNode( MathNode.NEGATE, new PositionNode( PositionNode.VIEW ) );
57
58
  outputNode = new MathNode( MathNode.NORMALIZE, new VaryingNode( vertexPositionNode ) );
58
59
 
60
+ } else if ( scope === PositionNode.WORLD_DIRECTION ) {
61
+
62
+ const vertexPositionNode = new MathNode( MathNode.NEGATE, new PositionNode( PositionNode.WORLD ) );
63
+ outputNode = new MathNode( MathNode.NORMALIZE, new VaryingNode( vertexPositionNode ) );
64
+
59
65
  }
60
66
 
61
67
  return outputNode.build( builder, this.getNodeType( builder ) );
@@ -16,7 +16,7 @@ class ReferenceNode extends Node {
16
16
 
17
17
  this.node = null;
18
18
 
19
- this.updateType = NodeUpdateType.Object;
19
+ this.updateType = NodeUpdateType.OBJECT;
20
20
 
21
21
  this.setNodeType( uniformType );
22
22
 
@@ -73,7 +73,7 @@ class SkinningNode extends Node {
73
73
 
74
74
  this.skinnedMesh = skinnedMesh;
75
75
 
76
- this.updateType = NodeUpdateType.Object;
76
+ this.updateType = NodeUpdateType.OBJECT;
77
77
 
78
78
  //
79
79