super-three 0.144.0 → 0.147.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +735 -387
  3. package/build/three.js +735 -387
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +910 -408
  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 +70 -2
  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
@@ -49,7 +49,7 @@ class Octree {
49
49
 
50
50
  this.box = this.bounds.clone();
51
51
 
52
- // offset small ammount to account for regular grid
52
+ // offset small amount to account for regular grid
53
53
  this.box.min.x -= 0.01;
54
54
  this.box.min.y -= 0.01;
55
55
  this.box.min.z -= 0.01;
@@ -45,6 +45,7 @@ export const NodeList = [
45
45
  {
46
46
  name: 'Slider',
47
47
  icon: 'adjustments-horizontal',
48
+ tags: 'number',
48
49
  nodeClass: SliderEditor
49
50
  },
50
51
  {
@@ -117,6 +118,7 @@ export const NodeList = [
117
118
  {
118
119
  name: 'Blend',
119
120
  icon: 'layers-subtract',
121
+ tags: 'mix',
120
122
  nodeClass: BlendEditor
121
123
  },
122
124
  {
@@ -133,6 +135,7 @@ export const NodeList = [
133
135
  {
134
136
  name: 'Operator',
135
137
  icon: 'math-symbols',
138
+ tags: 'addition, subtration, multiplication, division',
136
139
  nodeClass: OperatorEditor
137
140
  },
138
141
  {
@@ -161,12 +164,14 @@ export const NodeList = [
161
164
  name: 'Trigonometry',
162
165
  icon: 'wave-sine',
163
166
  tip: 'Sin / Cos / Tan / ...',
167
+ tags: 'sin, cos, tan, asin, acos, atan, sine, cosine, tangent, arcsine, arccosine, arctangent',
164
168
  nodeClass: TrigonometryEditor
165
169
  },
166
170
  {
167
171
  name: 'Angle',
168
172
  icon: 'angle',
169
173
  tip: 'Degress / Radians',
174
+ tags: 'degress, radians',
170
175
  nodeClass: AngleEditor
171
176
  },
172
177
  {
@@ -303,6 +308,13 @@ export class NodeEditor extends EventDispatcher {
303
308
  this.canvas = canvas;
304
309
  this.domElement = domElement;
305
310
 
311
+ this._preview = false;
312
+
313
+ this.search = null;
314
+
315
+ this.menu = null;
316
+ this.previewMenu = null;
317
+
306
318
  this.nodesContext = null;
307
319
  this.examplesContext = null;
308
320
 
@@ -315,21 +327,26 @@ export class NodeEditor extends EventDispatcher {
315
327
 
316
328
  }
317
329
 
330
+ setSize( width, height ) {
331
+
332
+ this.canvas.setSize( width, height );
333
+
334
+ return this;
335
+
336
+ }
337
+
318
338
  centralizeNode( node ) {
319
339
 
320
340
  const canvas = this.canvas;
321
- const canvasRect = canvas.rect;
322
-
323
341
  const nodeRect = node.dom.getBoundingClientRect();
324
342
 
325
- const defaultOffsetX = nodeRect.width;
326
- const defaultOffsetY = nodeRect.height;
327
-
328
343
  node.setPosition(
329
- ( canvas.relativeX + ( canvasRect.width / 2 ) ) - defaultOffsetX,
330
- ( canvas.relativeY + ( canvasRect.height / 2 ) ) - defaultOffsetY
344
+ ( ( canvas.width / 2 ) - canvas.scrollLeft ) - nodeRect.width,
345
+ ( ( canvas.height / 2 ) - canvas.scrollTop ) - nodeRect.height
331
346
  );
332
347
 
348
+ return this;
349
+
333
350
  }
334
351
 
335
352
  add( node ) {
@@ -359,9 +376,47 @@ export class NodeEditor extends EventDispatcher {
359
376
 
360
377
  }
361
378
 
379
+ set preview( value ) {
380
+
381
+ if ( this._preview === value ) return;
382
+
383
+ if ( value ) {
384
+
385
+ this.menu.dom.remove();
386
+ this.canvas.dom.remove();
387
+ this.search.dom.remove();
388
+
389
+ this.domElement.append( this.previewMenu.dom );
390
+
391
+ } else {
392
+
393
+ this.canvas.focusSelected = false;
394
+
395
+ this.domElement.append( this.menu.dom );
396
+ this.domElement.append( this.canvas.dom );
397
+ this.domElement.append( this.search.dom );
398
+
399
+ this.previewMenu.dom.remove();
400
+
401
+ }
402
+
403
+ this._preview = value;
404
+
405
+ }
406
+
407
+ get preview() {
408
+
409
+ return this._preview;
410
+
411
+ }
412
+
362
413
  newProject() {
363
414
 
364
- this.canvas.clear();
415
+ const canvas = this.canvas;
416
+ canvas.clear();
417
+ canvas.scrollLeft = 0;
418
+ canvas.scrollTop = 0;
419
+ canvas.zoom = 1;
365
420
 
366
421
  this.dispatchEvent( { type: 'new' } );
367
422
 
@@ -426,13 +481,23 @@ export class NodeEditor extends EventDispatcher {
426
481
  _initMenu() {
427
482
 
428
483
  const menu = new CircleMenu();
484
+ const previewMenu = new CircleMenu();
485
+
486
+ menu.setAlign( 'top left' );
487
+ previewMenu.setAlign( 'top left' );
429
488
 
489
+ const previewButton = new ButtonInput().setIcon( 'ti ti-3d-cube-sphere' ).setToolTip( 'Preview' );
430
490
  const menuButton = new ButtonInput().setIcon( 'ti ti-apps' ).setToolTip( 'Add' );
431
491
  const examplesButton = new ButtonInput().setIcon( 'ti ti-file-symlink' ).setToolTip( 'Examples' );
432
492
  const newButton = new ButtonInput().setIcon( 'ti ti-file' ).setToolTip( 'New' );
433
493
  const openButton = new ButtonInput().setIcon( 'ti ti-upload' ).setToolTip( 'Open' );
434
494
  const saveButton = new ButtonInput().setIcon( 'ti ti-download' ).setToolTip( 'Save' );
435
495
 
496
+ const editorButton = new ButtonInput().setIcon( 'ti ti-subtask' ).setToolTip( 'Editor' );
497
+
498
+ previewButton.onClick( () => this.preview = true );
499
+ editorButton.onClick( () => this.preview = false );
500
+
436
501
  menuButton.onClick( () => this.nodesContext.open() );
437
502
  examplesButton.onClick( () => this.examplesContext.open() );
438
503
 
@@ -486,15 +551,19 @@ export class NodeEditor extends EventDispatcher {
486
551
 
487
552
  } );
488
553
 
489
- menu.add( examplesButton )
490
- .add( menuButton )
554
+ menu.add( previewButton )
491
555
  .add( newButton )
556
+ .add( examplesButton )
492
557
  .add( openButton )
493
- .add( saveButton );
558
+ .add( saveButton )
559
+ .add( menuButton );
560
+
561
+ previewMenu.add( editorButton );
494
562
 
495
563
  this.domElement.append( menu.dom );
496
564
 
497
565
  this.menu = menu;
566
+ this.previewMenu = previewMenu;
498
567
 
499
568
  }
500
569
 
@@ -541,7 +610,6 @@ export class NodeEditor extends EventDispatcher {
541
610
  addExample( basicContext, 'Animate UV' );
542
611
  addExample( basicContext, 'Fake top light' );
543
612
  addExample( basicContext, 'Oscillator color' );
544
- addExample( basicContext, 'Matcap' );
545
613
 
546
614
  addExample( advancedContext, 'Rim' );
547
615
 
@@ -571,11 +639,18 @@ export class NodeEditor extends EventDispatcher {
571
639
  this.add( node );
572
640
 
573
641
  this.centralizeNode( node );
642
+ this.canvas.select( node );
574
643
 
575
644
  } );
576
645
 
577
646
  search.add( button );
578
647
 
648
+ if ( item.tags !== undefined ) {
649
+
650
+ search.setTag( button, item.tags );
651
+
652
+ }
653
+
579
654
  }
580
655
 
581
656
  if ( item.children ) {
@@ -652,6 +727,7 @@ export class NodeEditor extends EventDispatcher {
652
727
  this.add( node );
653
728
 
654
729
  this.centralizeNode( node );
730
+ this.canvas.select( node );
655
731
 
656
732
  } );
657
733
 
@@ -675,6 +751,8 @@ export class NodeEditor extends EventDispatcher {
675
751
 
676
752
  } );
677
753
 
754
+ this.search = search;
755
+
678
756
  this.domElement.append( search.dom );
679
757
 
680
758
  }
@@ -698,6 +776,7 @@ export class NodeEditor extends EventDispatcher {
698
776
  } else {
699
777
 
700
778
  this.centralizeNode( node );
779
+ this.canvas.select( node );
701
780
 
702
781
  }
703
782
 
@@ -34,6 +34,12 @@ export class BaseNode extends ObjectNode {
34
34
 
35
35
  }
36
36
 
37
+ getColor() {
38
+
39
+ return ( this.getColorValueFromValue( this.value ) || '#777777' ) + 'BB';
40
+
41
+ }
42
+
37
43
  serialize( data ) {
38
44
 
39
45
  super.serialize( data );
@@ -64,15 +70,16 @@ export class BaseNode extends ObjectNode {
64
70
 
65
71
  if ( value.isMaterial === true ) {
66
72
 
67
- return 'forestgreen';
73
+ //return 'forestgreen';
74
+ return '#228b22';
68
75
 
69
76
  } else if ( value.isObject3D === true ) {
70
77
 
71
- return 'orange';
78
+ return '#ffa500';
72
79
 
73
80
  } else if ( value.isDataFile === true ) {
74
81
 
75
- return 'aqua';
82
+ return '#00ffff';
76
83
 
77
84
  }
78
85
 
@@ -1,7 +1,6 @@
1
1
  import { ColorInput, SliderInput, LabelElement } from '../../libs/flow.module.js';
2
2
  import { BaseNode } from '../core/BaseNode.js';
3
3
  import { MeshBasicNodeMaterial } from 'three/nodes';
4
- import { MathUtils } from 'three';
5
4
 
6
5
  export class BasicMaterialEditor extends BaseNode {
7
6
 
@@ -65,23 +64,21 @@ export class BasicMaterialEditor extends BaseNode {
65
64
 
66
65
  this.updateTransparent();
67
66
 
68
- // TODO: Fix on NodeMaterial System
69
- material.customProgramCacheKey = () => {
70
-
71
- return MathUtils.generateUUID();
72
-
73
- };
74
-
75
67
  }
76
68
 
77
69
  updateTransparent() {
78
70
 
79
71
  const { material, opacity } = this;
80
72
 
81
- material.transparent = opacity.getLinkedObject() || material.opacity < 1 ? true : false;
73
+ const transparent = opacity.getLinkedObject() || material.opacity < 1 ? true : false;
74
+ const needsUpdate = transparent !== material.transparent;
75
+
76
+ material.transparent = transparent;
82
77
 
83
78
  opacity.setIcon( material.transparent ? 'ti ti-layers-intersect' : 'ti ti-layers-subtract' );
84
79
 
80
+ if ( needsUpdate === true ) material.dispose();
81
+
85
82
  }
86
83
 
87
84
  }
@@ -1,7 +1,6 @@
1
1
  import { ColorInput, SliderInput, LabelElement } from '../../libs/flow.module.js';
2
2
  import { BaseNode } from '../core/BaseNode.js';
3
3
  import { MeshStandardNodeMaterial } from 'three/nodes';
4
- import * as THREE from 'three';
5
4
 
6
5
  export class StandardMaterialEditor extends BaseNode {
7
6
 
@@ -99,23 +98,21 @@ export class StandardMaterialEditor extends BaseNode {
99
98
 
100
99
  this.updateTransparent();
101
100
 
102
- // TODO: Fix on NodeMaterial System
103
- material.customProgramCacheKey = () => {
104
-
105
- return THREE.MathUtils.generateUUID();
106
-
107
- };
108
-
109
101
  }
110
102
 
111
103
  updateTransparent() {
112
104
 
113
105
  const { material, opacity } = this;
114
106
 
115
- material.transparent = opacity.getLinkedObject() || material.opacity < 1 ? true : false;
107
+ const transparent = opacity.getLinkedObject() || material.opacity < 1 ? true : false;
108
+ const needsUpdate = transparent !== material.transparent;
109
+
110
+ material.transparent = transparent;
116
111
 
117
112
  opacity.setIcon( material.transparent ? 'ti ti-layers-intersect' : 'ti ti-layers-subtract' );
118
113
 
114
+ if ( needsUpdate === true ) material.dispose();
115
+
119
116
  }
120
117
 
121
118
  }
@@ -14,9 +14,9 @@ export class AngleEditor extends BaseNode {
14
14
  super( 'Angle', 1, node, 175 );
15
15
 
16
16
  const optionsField = new SelectInput( [
17
- { name: 'Degrees to Radians', value: MathNode.RAD },
18
- { name: 'Radians to Degrees', value: MathNode.DEG }
19
- ], MathNode.RAD ).onChange( () => {
17
+ { name: 'Degrees to Radians', value: MathNode.RADIANS },
18
+ { name: 'Radians to Degrees', value: MathNode.DEGREES }
19
+ ], MathNode.RADIANS ).onChange( () => {
20
20
 
21
21
  node.method = optionsField.getValue();
22
22
 
@@ -1,4 +1,4 @@
1
- import { SelectInput, LabelElement } from '../../libs/flow.module.js';
1
+ import { SelectInput, Element, LabelElement } from '../../libs/flow.module.js';
2
2
  import { BaseNode } from '../core/BaseNode.js';
3
3
  import { MathNode, UniformNode } from 'three/nodes';
4
4
 
@@ -31,7 +31,7 @@ export class InvertEditor extends BaseNode {
31
31
 
32
32
  } );
33
33
 
34
- this.add( new LabelElement( 'Method' ).add( optionsField ) )
34
+ this.add( new Element().add( optionsField ) )
35
35
  .add( input );
36
36
 
37
37
  }
@@ -16,7 +16,8 @@ export class MeshEditor extends Object3DEditor {
16
16
 
17
17
  this.material = null;
18
18
 
19
- this.defaultMaterial = null;
19
+ this.meshMaterial = null;
20
+ this.defaultMeshMaterial = null;
20
21
 
21
22
  this._initMaterial();
22
23
 
@@ -34,9 +35,9 @@ export class MeshEditor extends Object3DEditor {
34
35
 
35
36
  _initMaterial() {
36
37
 
37
- const materialElement = new LabelElement( 'Material' ).setInputColor( 'forestgreen' ).setInput( 1 );
38
+ const material = new LabelElement( 'Material' ).setInputColor( 'forestgreen' ).setInput( 1 );
38
39
 
39
- materialElement.onValid( ( source, target, stage ) => {
40
+ material.onValid( ( source, target, stage ) => {
40
41
 
41
42
  const object = target.getObject();
42
43
 
@@ -56,13 +57,15 @@ export class MeshEditor extends Object3DEditor {
56
57
 
57
58
  } ).onConnect( () => {
58
59
 
59
- this.material = materialElement.getLinkedObject() || this.defaultMaterial;
60
+ this.meshMaterial = material.getLinkedObject() || this.defaultMeshMaterial;
60
61
 
61
62
  this.update();
62
63
 
63
64
  } );
64
65
 
65
- this.add( materialElement );
66
+ this.add( material );
67
+
68
+ this.material = material;
66
69
 
67
70
  }
68
71
 
@@ -74,7 +77,7 @@ export class MeshEditor extends Object3DEditor {
74
77
 
75
78
  if ( mesh ) {
76
79
 
77
- mesh.material = this.material || this.defaultMaterial;
80
+ mesh.material = this.meshMaterial || this.defaultMeshMaterial;
78
81
 
79
82
  }
80
83
 
@@ -84,7 +87,7 @@ export class MeshEditor extends Object3DEditor {
84
87
 
85
88
  super.updateDefault();
86
89
 
87
- this.defaultMaterial = this.mesh.material;
90
+ this.defaultMeshMaterial = this.mesh.material;
88
91
 
89
92
  }
90
93
 
@@ -92,7 +95,7 @@ export class MeshEditor extends Object3DEditor {
92
95
 
93
96
  super.restoreDefault();
94
97
 
95
- this.mesh.material = this.defaultMaterial;
98
+ this.mesh.material = this.defaultMeshMaterial;
96
99
 
97
100
  }
98
101
 
@@ -65,6 +65,8 @@ export class PreviewEditor extends BaseNode {
65
65
  const previewElement = new Element();
66
66
  previewElement.dom.style[ 'padding-top' ] = 0;
67
67
  previewElement.dom.style[ 'padding-bottom' ] = 0;
68
+ previewElement.dom.style[ 'padding-left' ] = 0;
69
+ previewElement.dom.style[ 'padding-right' ] = '14px';
68
70
 
69
71
  const sceneInput = new SelectInput( [
70
72
  { name: 'Box', value: 'box' },
@@ -86,6 +88,8 @@ export class PreviewEditor extends BaseNode {
86
88
  previewElement.dom.append( canvas );
87
89
  previewElement.setHeight( height );
88
90
 
91
+ previewElement.dom.addEventListener( 'wheel', e => e.stopPropagation() );
92
+
89
93
  const renderer = new WebGLRenderer( {
90
94
  canvas,
91
95
  alpha: true
@@ -26,6 +26,7 @@ import VarNode from './core/VarNode.js';
26
26
  import VaryingNode from './core/VaryingNode.js';
27
27
 
28
28
  // accessors
29
+ import BitangentNode from './accessors/BitangentNode.js';
29
30
  import BufferNode from './accessors/BufferNode.js';
30
31
  import CameraNode from './accessors/CameraNode.js';
31
32
  import CubeTextureNode from './accessors/CubeTextureNode.js';
@@ -41,6 +42,7 @@ import PositionNode from './accessors/PositionNode.js';
41
42
  import ReferenceNode from './accessors/ReferenceNode.js';
42
43
  import ReflectVectorNode from './accessors/ReflectVectorNode.js';
43
44
  import SkinningNode from './accessors/SkinningNode.js';
45
+ import TangentNode from './accessors/TangentNode.js';
44
46
  import TextureNode from './accessors/TextureNode.js';
45
47
  import UVNode from './accessors/UVNode.js';
46
48
  import UserDataNode from './accessors/UserDataNode.js';
@@ -52,11 +54,14 @@ import RangeNode from './geometry/RangeNode.js';
52
54
  import ComputeNode from './gpgpu/ComputeNode.js';
53
55
 
54
56
  // display
57
+ import BlendModeNode from './display/BlendModeNode.js';
55
58
  import ColorAdjustmentNode from './display/ColorAdjustmentNode.js';
56
59
  import ColorSpaceNode from './display/ColorSpaceNode.js';
57
60
  import FrontFacingNode from './display/FrontFacingNode.js';
58
61
  import NormalMapNode from './display/NormalMapNode.js';
62
+ import PosterizeNode from './display/PosterizeNode.js';
59
63
  import ToneMappingNode from './display/ToneMappingNode.js';
64
+ import ViewportNode from './display/ViewportNode.js';
60
65
 
61
66
  // math
62
67
  import MathNode from './math/MathNode.js';
@@ -76,14 +81,17 @@ import AnalyticLightNode from './lighting/AnalyticLightNode.js';
76
81
  // utils
77
82
  import ArrayElementNode from './utils/ArrayElementNode.js';
78
83
  import ConvertNode from './utils/ConvertNode.js';
84
+ import EquirectUVNode from './utils/EquirectUVNode.js';
79
85
  import JoinNode from './utils/JoinNode.js';
80
86
  import MatcapUVNode from './utils/MatcapUVNode.js';
81
87
  import MaxMipLevelNode from './utils/MaxMipLevelNode.js';
82
88
  import OscNode from './utils/OscNode.js';
89
+ import RemapNode from './utils/RemapNode.js';
83
90
  import RotateUVNode from './utils/RotateUVNode.js';
84
91
  import SplitNode from './utils/SplitNode.js';
85
92
  import SpriteSheetUVNode from './utils/SpriteSheetUVNode.js';
86
93
  import TimerNode from './utils/TimerNode.js';
94
+ import TriplanarTexturesNode from './utils/TriplanarTexturesNode.js';
87
95
 
88
96
  // loaders
89
97
  import NodeLoader from './loaders/NodeLoader.js';
@@ -110,8 +118,11 @@ export * from './materials/Materials.js';
110
118
  // shader node
111
119
  export * from './shadernode/ShaderNodeElements.js';
112
120
 
121
+ // extensions
122
+ export * from './materialx/MaterialXNodes.js';
123
+
113
124
  // shader stages
114
- export { defaultShaderStages } from './core/NodeBuilder.js';
125
+ export { defaultShaderStages } from './core/NodeBuilder.js';
115
126
 
116
127
  const nodeLib = {
117
128
  // core
@@ -148,6 +159,7 @@ const nodeLib = {
148
159
  ComputeNode,
149
160
 
150
161
  // accessors
162
+ BitangentNode,
151
163
  BufferNode,
152
164
  CameraNode,
153
165
  CubeTextureNode,
@@ -163,16 +175,20 @@ const nodeLib = {
163
175
  ReferenceNode,
164
176
  ReflectVectorNode,
165
177
  SkinningNode,
178
+ TangentNode,
166
179
  TextureNode,
167
180
  UVNode,
168
181
  UserDataNode,
169
182
 
170
183
  // display
184
+ BlendModeNode,
171
185
  ColorAdjustmentNode,
172
186
  ColorSpaceNode,
173
187
  FrontFacingNode,
174
188
  NormalMapNode,
189
+ PosterizeNode,
175
190
  ToneMappingNode,
191
+ ViewportNode,
176
192
 
177
193
  // math
178
194
  MathNode,
@@ -192,14 +208,17 @@ const nodeLib = {
192
208
  // utils
193
209
  ArrayElementNode,
194
210
  ConvertNode,
211
+ EquirectUVNode,
195
212
  JoinNode,
196
213
  MatcapUVNode,
197
214
  MaxMipLevelNode,
198
215
  OscNode,
216
+ RemapNode,
199
217
  RotateUVNode,
200
218
  SplitNode,
201
219
  SpriteSheetUVNode,
202
220
  TimerNode,
221
+ TriplanarTexturesNode,
203
222
 
204
223
  // procedural
205
224
  CheckerNode,
@@ -215,7 +234,7 @@ const nodeLib = {
215
234
 
216
235
  // parsers
217
236
  WGSLNodeParser,
218
- GLSLNodeParser,
237
+ GLSLNodeParser
219
238
 
220
239
  };
221
240
 
@@ -260,6 +279,7 @@ export {
260
279
  ComputeNode,
261
280
 
262
281
  // accessors
282
+ BitangentNode,
263
283
  BufferNode,
264
284
  CameraNode,
265
285
  CubeTextureNode,
@@ -275,16 +295,20 @@ export {
275
295
  ReferenceNode,
276
296
  ReflectVectorNode,
277
297
  SkinningNode,
298
+ TangentNode,
278
299
  TextureNode,
279
300
  UVNode,
280
301
  UserDataNode,
281
302
 
282
303
  // display
304
+ BlendModeNode,
283
305
  ColorAdjustmentNode,
284
306
  ColorSpaceNode,
285
307
  FrontFacingNode,
286
308
  NormalMapNode,
309
+ PosterizeNode,
287
310
  ToneMappingNode,
311
+ ViewportNode,
288
312
 
289
313
  // math
290
314
  MathNode,
@@ -304,14 +328,17 @@ export {
304
328
  // utils
305
329
  ArrayElementNode,
306
330
  ConvertNode,
331
+ EquirectUVNode,
307
332
  JoinNode,
308
333
  MatcapUVNode,
309
334
  MaxMipLevelNode,
310
335
  OscNode,
336
+ RemapNode,
311
337
  RotateUVNode,
312
338
  SplitNode,
313
339
  SpriteSheetUVNode,
314
340
  TimerNode,
341
+ TriplanarTexturesNode,
315
342
 
316
343
  // procedural
317
344
  CheckerNode,
@@ -327,5 +354,5 @@ export {
327
354
 
328
355
  // parsers
329
356
  WGSLNodeParser,
330
- GLSLNodeParser,
357
+ GLSLNodeParser
331
358
  };
@@ -0,0 +1,62 @@
1
+ import Node from '../core/Node.js';
2
+ import VaryingNode from '../core/VaryingNode.js';
3
+ import OperatorNode from '../math/OperatorNode.js';
4
+ import MathNode from '../math/MathNode.js';
5
+ import SplitNode from '../utils/SplitNode.js';
6
+ import NormalNode from './NormalNode.js';
7
+ import TangentNode from './TangentNode.js';
8
+
9
+ class BitangentNode extends Node {
10
+
11
+ static GEOMETRY = 'geometry';
12
+ static LOCAL = 'local';
13
+ static VIEW = 'view';
14
+ static WORLD = 'world';
15
+
16
+ constructor( scope = BitangentNode.LOCAL ) {
17
+
18
+ super( 'vec3' );
19
+
20
+ this.scope = scope;
21
+
22
+ }
23
+
24
+ getHash( /*builder*/ ) {
25
+
26
+ return `bitangent-${this.scope}`;
27
+
28
+ }
29
+
30
+ generate( builder ) {
31
+
32
+ const scope = this.scope;
33
+
34
+ const crossNormalTangent = new MathNode( MathNode.CROSS, new NormalNode( scope ), new TangentNode( scope ) );
35
+ const tangentW = new SplitNode( new TangentNode( TangentNode.GEOMETRY ), 'w' );
36
+ const vertexNode = new SplitNode( new OperatorNode( '*', crossNormalTangent, tangentW ), 'xyz' );
37
+
38
+ const outputNode = new MathNode( MathNode.NORMALIZE, new VaryingNode( vertexNode ) );
39
+
40
+ return outputNode.build( builder, this.getNodeType( builder ) );
41
+
42
+ }
43
+
44
+ serialize( data ) {
45
+
46
+ super.serialize( data );
47
+
48
+ data.scope = this.scope;
49
+
50
+ }
51
+
52
+ deserialize( data ) {
53
+
54
+ super.deserialize( data );
55
+
56
+ this.scope = data.scope;
57
+
58
+ }
59
+
60
+ }
61
+
62
+ export default BitangentNode;