super-three 0.144.0 → 0.147.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +737 -388
  3. package/build/three.js +737 -388
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +911 -409
  6. package/examples/js/animation/AnimationClipCreator.js +0 -8
  7. package/examples/js/animation/CCDIKSolver.js +50 -67
  8. package/examples/js/animation/MMDAnimationHelper.js +66 -137
  9. package/examples/js/animation/MMDPhysics.js +70 -134
  10. package/examples/js/cameras/CinematicCamera.js +33 -22
  11. package/examples/js/controls/ArcballControls.js +138 -405
  12. package/examples/js/controls/DragControls.js +8 -33
  13. package/examples/js/controls/FirstPersonControls.js +32 -54
  14. package/examples/js/controls/FlyControls.js +29 -55
  15. package/examples/js/controls/OrbitControls.js +125 -99
  16. package/examples/js/controls/PointerLockControls.js +5 -14
  17. package/examples/js/controls/TrackballControls.js +33 -86
  18. package/examples/js/controls/TransformControls.js +85 -170
  19. package/examples/js/csm/CSM.js +4 -39
  20. package/examples/js/csm/CSMFrustum.js +3 -9
  21. package/examples/js/csm/CSMHelper.js +24 -4
  22. package/examples/js/csm/CSMShader.js +2 -6
  23. package/examples/js/curves/CurveExtras.js +27 -27
  24. package/examples/js/curves/NURBSCurve.js +4 -16
  25. package/examples/js/curves/NURBSSurface.js +3 -9
  26. package/examples/js/curves/NURBSUtils.js +8 -45
  27. package/examples/js/effects/AnaglyphEffect.js +4 -18
  28. package/examples/js/effects/AsciiEffect.js +32 -31
  29. package/examples/js/effects/OutlineEffect.js +26 -30
  30. package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
  31. package/examples/js/effects/PeppersGhostEffect.js +12 -39
  32. package/examples/js/effects/StereoEffect.js +0 -4
  33. package/examples/js/environments/RoomEnvironment.js +12 -10
  34. package/examples/js/exporters/ColladaExporter.js +48 -65
  35. package/examples/js/exporters/DRACOExporter.js +22 -22
  36. package/examples/js/exporters/EXRExporter.js +15 -18
  37. package/examples/js/exporters/GLTFExporter.js +141 -317
  38. package/examples/js/exporters/MMDExporter.js +5 -12
  39. package/examples/js/exporters/OBJExporter.js +42 -33
  40. package/examples/js/exporters/PLYExporter.js +38 -33
  41. package/examples/js/exporters/STLExporter.js +5 -7
  42. package/examples/js/exporters/USDZExporter.js +113 -27
  43. package/examples/js/geometries/BoxLineGeometry.js +0 -1
  44. package/examples/js/geometries/ConvexGeometry.js +11 -6
  45. package/examples/js/geometries/DecalGeometry.js +53 -20
  46. package/examples/js/geometries/LightningStrike.js +54 -67
  47. package/examples/js/geometries/ParametricGeometries.js +8 -7
  48. package/examples/js/geometries/ParametricGeometry.js +25 -12
  49. package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
  50. package/examples/js/geometries/TeapotGeometry.js +54 -50
  51. package/examples/js/geometries/TextGeometry.js +6 -4
  52. package/examples/js/helpers/LightProbeHelper.js +1 -2
  53. package/examples/js/helpers/OctreeHelper.js +22 -20
  54. package/examples/js/helpers/PositionalAudioHelper.js +8 -6
  55. package/examples/js/helpers/RectAreaLightHelper.js +6 -7
  56. package/examples/js/helpers/VertexNormalsHelper.js +15 -13
  57. package/examples/js/helpers/VertexTangentsHelper.js +15 -9
  58. package/examples/js/helpers/ViewHelper.js +31 -16
  59. package/examples/js/interactive/HTMLMesh.js +25 -39
  60. package/examples/js/interactive/InteractiveGroup.js +9 -14
  61. package/examples/js/interactive/SelectionBox.js +3 -70
  62. package/examples/js/interactive/SelectionHelper.js +0 -8
  63. package/examples/js/lights/LightProbeGenerator.js +32 -39
  64. package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
  65. package/examples/js/lines/LineGeometry.js +3 -5
  66. package/examples/js/lines/LineMaterial.js +4 -11
  67. package/examples/js/lines/LineSegments2.js +40 -89
  68. package/examples/js/lines/LineSegmentsGeometry.js +7 -28
  69. package/examples/js/lines/Wireframe.js +2 -7
  70. package/examples/js/lines/WireframeGeometry2.js +3 -1
  71. package/examples/js/loaders/3DMLoader.js +58 -155
  72. package/examples/js/loaders/3MFLoader.js +72 -106
  73. package/examples/js/loaders/AMFLoader.js +0 -25
  74. package/examples/js/loaders/BVHLoader.js +44 -43
  75. package/examples/js/loaders/BasisTextureLoader.js +16 -46
  76. package/examples/js/loaders/ColladaLoader.js +228 -359
  77. package/examples/js/loaders/DDSLoader.js +24 -25
  78. package/examples/js/loaders/DRACOLoader.js +29 -66
  79. package/examples/js/loaders/EXRLoader.js +67 -164
  80. package/examples/js/loaders/FBXLoader.js +287 -441
  81. package/examples/js/loaders/FontLoader.js +6 -15
  82. package/examples/js/loaders/GCodeLoader.js +15 -16
  83. package/examples/js/loaders/GLTFLoader.js +409 -706
  84. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
  85. package/examples/js/loaders/KMZLoader.js +3 -7
  86. package/examples/js/loaders/KTXLoader.js +12 -30
  87. package/examples/js/loaders/LDrawLoader.js +178 -289
  88. package/examples/js/loaders/LUT3dlLoader.js +7 -11
  89. package/examples/js/loaders/LUTCubeLoader.js +0 -8
  90. package/examples/js/loaders/LWOLoader.js +59 -124
  91. package/examples/js/loaders/LogLuvLoader.js +27 -77
  92. package/examples/js/loaders/LottieLoader.js +4 -4
  93. package/examples/js/loaders/MD2Loader.js +26 -27
  94. package/examples/js/loaders/MDDLoader.js +6 -10
  95. package/examples/js/loaders/MMDLoader.js +180 -189
  96. package/examples/js/loaders/MTLLoader.js +18 -47
  97. package/examples/js/loaders/NRRDLoader.js +44 -84
  98. package/examples/js/loaders/OBJLoader.js +50 -65
  99. package/examples/js/loaders/PCDLoader.js +34 -29
  100. package/examples/js/loaders/PDBLoader.js +17 -13
  101. package/examples/js/loaders/PLYLoader.js +62 -48
  102. package/examples/js/loaders/PRWMLoader.js +11 -22
  103. package/examples/js/loaders/PVRLoader.js +7 -16
  104. package/examples/js/loaders/RGBELoader.js +36 -61
  105. package/examples/js/loaders/RGBMLoader.js +26 -87
  106. package/examples/js/loaders/STLLoader.js +20 -27
  107. package/examples/js/loaders/SVGLoader.js +361 -233
  108. package/examples/js/loaders/TDSLoader.js +81 -118
  109. package/examples/js/loaders/TGALoader.js +39 -41
  110. package/examples/js/loaders/TIFFLoader.js +0 -1
  111. package/examples/js/loaders/TTFLoader.js +0 -8
  112. package/examples/js/loaders/TiltLoader.js +14 -15
  113. package/examples/js/loaders/VOXLoader.js +8 -16
  114. package/examples/js/loaders/VRMLLoader.js +243 -340
  115. package/examples/js/loaders/VTKLoader.js +101 -118
  116. package/examples/js/loaders/XYZLoader.js +2 -4
  117. package/examples/js/loaders/lwo/IFFParser.js +55 -136
  118. package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
  119. package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
  120. package/examples/js/materials/MeshGouraudMaterial.js +15 -13
  121. package/examples/js/math/Capsule.js +0 -17
  122. package/examples/js/math/ColorConverter.js +3 -3
  123. package/examples/js/math/ConvexHull.js +185 -141
  124. package/examples/js/math/ImprovedNoise.js +1 -1
  125. package/examples/js/math/Lut.js +8 -15
  126. package/examples/js/math/MeshSurfaceSampler.js +6 -28
  127. package/examples/js/math/OBB.js +90 -49
  128. package/examples/js/math/Octree.js +2 -57
  129. package/examples/js/math/SimplexNoise.js +74 -88
  130. package/examples/js/misc/ConvexObjectBreaker.js +37 -48
  131. package/examples/js/misc/GPUComputationRenderer.js +26 -16
  132. package/examples/js/misc/Gyroscope.js +5 -9
  133. package/examples/js/misc/MD2Character.js +14 -23
  134. package/examples/js/misc/MD2CharacterComplex.js +73 -54
  135. package/examples/js/misc/MorphAnimMesh.js +0 -6
  136. package/examples/js/misc/MorphBlendMesh.js +3 -30
  137. package/examples/js/misc/ProgressiveLightMap.js +47 -43
  138. package/examples/js/misc/RollerCoaster.js +17 -24
  139. package/examples/js/misc/TubePainter.js +18 -12
  140. package/examples/js/misc/Volume.js +16 -45
  141. package/examples/js/misc/VolumeSlice.js +14 -24
  142. package/examples/js/modifiers/CurveModifier.js +19 -21
  143. package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
  144. package/examples/js/modifiers/SimplifyModifier.js +56 -59
  145. package/examples/js/modifiers/TessellateModifier.js +2 -9
  146. package/examples/js/objects/GroundProjectedEnv.js +2 -14
  147. package/examples/js/objects/Lensflare.js +47 -38
  148. package/examples/js/objects/LightningStorm.js +10 -13
  149. package/examples/js/objects/MarchingCubes.js +80 -59
  150. package/examples/js/objects/Reflector.js +22 -20
  151. package/examples/js/objects/ReflectorForSSRPass.js +19 -23
  152. package/examples/js/objects/Refractor.js +52 -30
  153. package/examples/js/objects/ShadowMesh.js +1 -2
  154. package/examples/js/objects/Sky.js +2 -7
  155. package/examples/js/objects/Water.js +23 -18
  156. package/examples/js/objects/Water2.js +20 -19
  157. package/examples/js/physics/AmmoPhysics.js +23 -20
  158. package/examples/js/physics/OimoPhysics.js +19 -17
  159. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
  160. package/examples/js/postprocessing/AfterimagePass.js +19 -12
  161. package/examples/js/postprocessing/BloomPass.js +38 -17
  162. package/examples/js/postprocessing/BokehPass.js +29 -12
  163. package/examples/js/postprocessing/ClearPass.js +1 -6
  164. package/examples/js/postprocessing/CubeTexturePass.js +12 -9
  165. package/examples/js/postprocessing/DotScreenPass.js +7 -5
  166. package/examples/js/postprocessing/EffectComposer.js +25 -32
  167. package/examples/js/postprocessing/FilmPass.js +7 -5
  168. package/examples/js/postprocessing/GlitchPass.js +10 -11
  169. package/examples/js/postprocessing/HalftonePass.js +9 -9
  170. package/examples/js/postprocessing/LUTPass.js +2 -15
  171. package/examples/js/postprocessing/MaskPass.js +20 -17
  172. package/examples/js/postprocessing/OutlinePass.js +45 -36
  173. package/examples/js/postprocessing/Pass.js +11 -14
  174. package/examples/js/postprocessing/RenderPass.js +3 -7
  175. package/examples/js/postprocessing/RenderPixelatedPass.js +215 -0
  176. package/examples/js/postprocessing/SAOPass.js +40 -32
  177. package/examples/js/postprocessing/SMAAPass.js +34 -17
  178. package/examples/js/postprocessing/SSAARenderPass.js +14 -14
  179. package/examples/js/postprocessing/SSAOPass.js +56 -42
  180. package/examples/js/postprocessing/SSRPass.js +78 -61
  181. package/examples/js/postprocessing/SavePass.js +14 -6
  182. package/examples/js/postprocessing/ShaderPass.js +9 -8
  183. package/examples/js/postprocessing/TAARenderPass.js +11 -9
  184. package/examples/js/postprocessing/TexturePass.js +7 -4
  185. package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
  186. package/examples/js/renderers/CSS2DRenderer.js +2 -21
  187. package/examples/js/renderers/CSS3DRenderer.js +3 -24
  188. package/examples/js/renderers/Projector.js +29 -85
  189. package/examples/js/renderers/SVGRenderer.js +4 -50
  190. package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
  191. package/examples/js/shaders/AfterimageShader.js +3 -6
  192. package/examples/js/shaders/BasicShader.js +3 -6
  193. package/examples/js/shaders/BleachBypassShader.js +3 -6
  194. package/examples/js/shaders/BlendShader.js +3 -6
  195. package/examples/js/shaders/BokehShader.js +3 -6
  196. package/examples/js/shaders/BokehShader2.js +4 -13
  197. package/examples/js/shaders/BrightnessContrastShader.js +3 -6
  198. package/examples/js/shaders/ColorCorrectionShader.js +2 -6
  199. package/examples/js/shaders/ColorifyShader.js +2 -6
  200. package/examples/js/shaders/ConvolutionShader.js +5 -10
  201. package/examples/js/shaders/CopyShader.js +3 -6
  202. package/examples/js/shaders/DOFMipMapShader.js +3 -6
  203. package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
  204. package/examples/js/shaders/DigitalGlitch.js +3 -6
  205. package/examples/js/shaders/DotScreenShader.js +2 -6
  206. package/examples/js/shaders/FXAAShader.js +1 -3
  207. package/examples/js/shaders/FilmShader.js +3 -6
  208. package/examples/js/shaders/FocusShader.js +3 -6
  209. package/examples/js/shaders/FreiChenShader.js +2 -6
  210. package/examples/js/shaders/GammaCorrectionShader.js +3 -6
  211. package/examples/js/shaders/GodRaysShader.js +11 -24
  212. package/examples/js/shaders/HalftoneShader.js +3 -6
  213. package/examples/js/shaders/HorizontalBlurShader.js +3 -6
  214. package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
  215. package/examples/js/shaders/HueSaturationShader.js +3 -6
  216. package/examples/js/shaders/KaleidoShader.js +3 -6
  217. package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
  218. package/examples/js/shaders/LuminosityShader.js +3 -6
  219. package/examples/js/shaders/MMDToonShader.js +2 -8
  220. package/examples/js/shaders/MirrorShader.js +3 -6
  221. package/examples/js/shaders/NormalMapShader.js +2 -6
  222. package/examples/js/shaders/RGBShiftShader.js +3 -6
  223. package/examples/js/shaders/SAOShader.js +2 -6
  224. package/examples/js/shaders/SMAAShader.js +6 -18
  225. package/examples/js/shaders/SSAOShader.js +2 -6
  226. package/examples/js/shaders/SSRShader.js +6 -18
  227. package/examples/js/shaders/SepiaShader.js +3 -6
  228. package/examples/js/shaders/SobelOperatorShader.js +2 -6
  229. package/examples/js/shaders/TechnicolorShader.js +3 -6
  230. package/examples/js/shaders/ToneMapShader.js +3 -6
  231. package/examples/js/shaders/ToonShader.js +8 -24
  232. package/examples/js/shaders/TriangleBlurShader.js +2 -6
  233. package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
  234. package/examples/js/shaders/VelocityShader.js +126 -0
  235. package/examples/js/shaders/VerticalBlurShader.js +3 -6
  236. package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
  237. package/examples/js/shaders/VignetteShader.js +3 -6
  238. package/examples/js/shaders/VolumeShader.js +2 -6
  239. package/examples/js/shaders/WaterRefractionShader.js +2 -6
  240. package/examples/js/textures/FlakesTexture.js +0 -1
  241. package/examples/js/utils/BufferGeometryUtils.js +236 -170
  242. package/examples/js/utils/CameraUtils.js +5 -20
  243. package/examples/js/utils/GPUStatsPanel.js +3 -12
  244. package/examples/js/utils/GeometryCompressionUtils.js +19 -44
  245. package/examples/js/utils/GeometryUtils.js +13 -18
  246. package/examples/js/utils/LDrawUtils.js +8 -11
  247. package/examples/js/utils/PackedPhongMaterial.js +6 -4
  248. package/examples/js/utils/SceneUtils.js +117 -6
  249. package/examples/js/utils/ShadowMapViewer.js +17 -14
  250. package/examples/js/utils/SkeletonUtils.js +13 -27
  251. package/examples/js/utils/UVsDebug.js +20 -12
  252. package/examples/js/utils/WorkerPool.js +1 -11
  253. package/examples/jsm/animation/CCDIKSolver.js +27 -3
  254. package/examples/jsm/animation/MMDPhysics.js +25 -0
  255. package/examples/jsm/capabilities/WebGPU.js +3 -1
  256. package/examples/jsm/controls/FirstPersonControls.js +20 -20
  257. package/examples/jsm/controls/FlyControls.js +16 -17
  258. package/examples/jsm/controls/OrbitControls.js +44 -4
  259. package/examples/jsm/controls/TrackballControls.js +14 -2
  260. package/examples/jsm/controls/TransformControls.js +1 -1
  261. package/examples/jsm/csm/CSM.js +1 -0
  262. package/examples/jsm/csm/CSMHelper.js +30 -0
  263. package/examples/jsm/exporters/GLTFExporter.js +0 -79
  264. package/examples/jsm/exporters/USDZExporter.js +93 -1
  265. package/examples/jsm/helpers/OctreeHelper.js +22 -8
  266. package/examples/jsm/helpers/VertexNormalsHelper.js +7 -1
  267. package/examples/jsm/helpers/VertexTangentsHelper.js +7 -0
  268. package/examples/jsm/helpers/ViewHelper.js +24 -0
  269. package/examples/jsm/interactive/HTMLMesh.js +5 -6
  270. package/examples/jsm/interactive/InteractiveGroup.js +4 -2
  271. package/examples/jsm/libs/flow.module.js +610 -160
  272. package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
  273. package/examples/jsm/lines/LineSegments2.js +4 -0
  274. package/examples/jsm/loaders/3DMLoader.js +1 -2
  275. package/examples/jsm/loaders/ColladaLoader.js +28 -0
  276. package/examples/jsm/loaders/FBXLoader.js +18 -2
  277. package/examples/jsm/loaders/GLTFLoader.js +269 -428
  278. package/examples/jsm/loaders/KTX2Loader.js +68 -29
  279. package/examples/jsm/loaders/LDrawLoader.js +14 -13
  280. package/examples/jsm/loaders/LottieLoader.js +4 -2
  281. package/examples/jsm/loaders/MaterialXLoader.js +728 -0
  282. package/examples/jsm/loaders/PCDLoader.js +1 -1
  283. package/examples/jsm/loaders/PLYLoader.js +68 -16
  284. package/examples/jsm/loaders/SVGLoader.js +227 -14
  285. package/examples/jsm/loaders/USDZLoader.js +351 -111
  286. package/examples/jsm/loaders/VRMLLoader.js +13 -1
  287. package/examples/jsm/math/ConvexHull.js +4 -4
  288. package/examples/jsm/math/Octree.js +1 -1
  289. package/examples/jsm/node-editor/NodeEditor.js +91 -12
  290. package/examples/jsm/node-editor/core/BaseNode.js +10 -3
  291. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +6 -9
  292. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +6 -9
  293. package/examples/jsm/node-editor/math/AngleEditor.js +3 -3
  294. package/examples/jsm/node-editor/math/InvertEditor.js +2 -2
  295. package/examples/jsm/node-editor/scene/MeshEditor.js +11 -8
  296. package/examples/jsm/node-editor/utils/PreviewEditor.js +4 -0
  297. package/examples/jsm/nodes/Nodes.js +30 -3
  298. package/examples/jsm/nodes/accessors/BitangentNode.js +62 -0
  299. package/examples/jsm/nodes/accessors/NormalNode.js +6 -6
  300. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  301. package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
  302. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  303. package/examples/jsm/nodes/accessors/SkinningNode.js +8 -1
  304. package/examples/jsm/nodes/accessors/TangentNode.js +95 -0
  305. package/examples/jsm/nodes/core/AttributeNode.js +31 -8
  306. package/examples/jsm/nodes/core/Node.js +1 -1
  307. package/examples/jsm/nodes/core/NodeBuilder.js +55 -6
  308. package/examples/jsm/nodes/core/NodeFrame.js +2 -2
  309. package/examples/jsm/nodes/core/NodeVarying.js +7 -4
  310. package/examples/jsm/nodes/core/VaryingNode.js +6 -4
  311. package/examples/jsm/nodes/core/constants.js +13 -13
  312. package/examples/jsm/nodes/display/BlendModeNode.js +85 -0
  313. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -12
  314. package/examples/jsm/nodes/display/NormalMapNode.js +19 -12
  315. package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
  316. package/examples/jsm/nodes/display/ViewportNode.js +106 -0
  317. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +5 -5
  318. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +3 -3
  319. package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +2 -2
  320. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  321. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  322. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
  323. package/examples/jsm/nodes/materials/Materials.js +9 -7
  324. package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
  325. package/examples/jsm/nodes/materialx/{Disclaimer.md → DISCLAIMER.md} +1 -1
  326. package/examples/jsm/nodes/materialx/MaterialXNodes.js +59 -0
  327. package/examples/jsm/nodes/materialx/{functions/lib → lib}/mx_hsv.js +1 -1
  328. package/examples/jsm/nodes/materialx/{functions/lib → lib}/mx_noise.js +13 -3
  329. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
  330. package/examples/jsm/nodes/math/MathNode.js +5 -5
  331. package/examples/jsm/nodes/math/OperatorNode.js +16 -3
  332. package/examples/jsm/nodes/shadernode/ShaderNode.js +35 -20
  333. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +87 -63
  334. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +29 -0
  335. package/examples/jsm/nodes/utils/ConvertNode.js +15 -14
  336. package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
  337. package/examples/jsm/nodes/utils/JoinNode.js +8 -2
  338. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
  339. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  340. package/examples/jsm/nodes/utils/OscNode.js +2 -2
  341. package/examples/jsm/nodes/utils/RemapNode.js +34 -0
  342. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
  343. package/examples/jsm/nodes/utils/TimerNode.js +21 -1
  344. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
  345. package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
  346. package/examples/jsm/postprocessing/BloomPass.js +22 -3
  347. package/examples/jsm/postprocessing/BokehPass.js +18 -4
  348. package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
  349. package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
  350. package/examples/jsm/postprocessing/EffectComposer.js +9 -0
  351. package/examples/jsm/postprocessing/FilmPass.js +8 -0
  352. package/examples/jsm/postprocessing/GlitchPass.js +13 -1
  353. package/examples/jsm/postprocessing/HalftonePass.js +8 -0
  354. package/examples/jsm/postprocessing/OutlinePass.js +21 -1
  355. package/examples/jsm/postprocessing/Pass.js +2 -0
  356. package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
  357. package/examples/jsm/postprocessing/SAOPass.js +20 -0
  358. package/examples/jsm/postprocessing/SMAAPass.js +16 -0
  359. package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
  360. package/examples/jsm/postprocessing/SavePass.js +17 -1
  361. package/examples/jsm/postprocessing/ShaderPass.js +8 -0
  362. package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
  363. package/examples/jsm/postprocessing/TexturePass.js +8 -0
  364. package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
  365. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +56 -35
  366. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
  367. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
  368. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
  369. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
  370. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +41 -9
  371. package/examples/jsm/shaders/MMDToonShader.js +0 -2
  372. package/examples/jsm/shaders/VelocityShader.js +128 -0
  373. package/examples/jsm/utils/BufferGeometryUtils.js +174 -42
  374. package/examples/jsm/utils/SceneUtils.js +129 -4
  375. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  376. package/examples/jsm/webxr/XRHandMeshModel.js +8 -3
  377. package/package.json +13 -13
  378. package/src/Three.js +1 -0
  379. package/src/animation/PropertyBinding.js +7 -0
  380. package/src/audio/AudioContext.js +5 -5
  381. package/src/cameras/CubeCamera.js +14 -14
  382. package/src/constants.js +1 -1
  383. package/src/core/InstancedBufferGeometry.js +1 -7
  384. package/src/core/InterleavedBufferAttribute.js +4 -4
  385. package/src/extras/Earcut.js +67 -67
  386. package/src/geometries/PolyhedronGeometry.js +1 -1
  387. package/src/geometries/ShapeGeometry.js +1 -1
  388. package/src/helpers/ArrowHelper.js +9 -0
  389. package/src/helpers/Box3Helper.js +7 -0
  390. package/src/helpers/BoxHelper.js +7 -1
  391. package/src/helpers/DirectionalLightHelper.js +5 -1
  392. package/src/helpers/GridHelper.js +7 -0
  393. package/src/helpers/HemisphereLightHelper.js +4 -1
  394. package/src/helpers/PlaneHelper.js +9 -0
  395. package/src/helpers/PointLightHelper.js +2 -1
  396. package/src/helpers/PolarGridHelper.js +7 -0
  397. package/src/helpers/SkeletonHelper.js +7 -0
  398. package/src/helpers/SpotLightHelper.js +4 -2
  399. package/src/lights/LightShadow.js +1 -2
  400. package/src/lights/PointLight.js +2 -2
  401. package/src/lights/SpotLight.js +2 -2
  402. package/src/loaders/FileLoader.js +4 -1
  403. package/src/loaders/ObjectLoader.js +5 -1
  404. package/src/materials/Material.js +1 -1
  405. package/src/materials/MeshPhysicalMaterial.js +1 -1
  406. package/src/math/Color.js +5 -5
  407. package/src/math/Matrix3.js +53 -18
  408. package/src/math/Ray.js +2 -5
  409. package/src/math/Sphere.js +36 -21
  410. package/src/objects/InstancedMesh.js +7 -0
  411. package/src/objects/LOD.js +25 -6
  412. package/src/renderers/WebGL3DRenderTarget.js +1 -1
  413. package/src/renderers/WebGLArrayRenderTarget.js +1 -1
  414. package/src/renderers/WebGLCubeRenderTarget.js +1 -1
  415. package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
  416. package/src/renderers/WebGLRenderTarget.js +1 -1
  417. package/src/renderers/WebGLRenderer.js +36 -62
  418. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
  419. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
  420. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
  421. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
  422. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
  423. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -4
  424. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
  425. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +2 -2
  426. package/src/renderers/shaders/ShaderChunk.js +3 -0
  427. package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
  428. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  429. package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
  430. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +0 -3
  431. package/src/renderers/shaders/ShaderLib.js +20 -6
  432. package/src/renderers/shaders/UniformsLib.js +1 -1
  433. package/src/renderers/shaders/UniformsUtils.js +15 -0
  434. package/src/renderers/webgl/WebGLAttributes.js +2 -0
  435. package/src/renderers/webgl/WebGLBackground.js +15 -7
  436. package/src/renderers/webgl/WebGLLights.js +0 -4
  437. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  438. package/src/renderers/webgl/WebGLShadowMap.js +3 -1
  439. package/src/renderers/webgl/WebGLState.js +78 -41
  440. package/src/renderers/webgl/WebGLTextures.js +94 -39
  441. package/src/renderers/webgl/WebGLUniforms.js +152 -24
  442. package/src/renderers/webgl/WebGLUtils.js +1 -1
  443. package/src/renderers/webxr/WebXRController.js +46 -13
  444. package/src/renderers/webxr/WebXRManager.js +71 -3
  445. package/src/scenes/Scene.js +8 -0
  446. package/src/textures/CompressedArrayTexture.js +18 -0
  447. package/src/textures/Texture.js +2 -1
  448. package/examples/js/libs/lottie_canvas.js +0 -12751
  449. package/examples/js/shaders/PixelShader.js +0 -51
  450. package/examples/jsm/shaders/PixelShader.js +0 -44
@@ -14,6 +14,7 @@ import VarNode from '../core/VarNode.js';
14
14
  import VaryingNode from '../core/VaryingNode.js';
15
15
 
16
16
  // accessors
17
+ import BitangentNode from '../accessors/BitangentNode.js';
17
18
  import BufferNode from '../accessors/BufferNode.js';
18
19
  import CameraNode from '../accessors/CameraNode.js';
19
20
  import MaterialNode from '../accessors/MaterialNode.js';
@@ -25,6 +26,7 @@ import PointUVNode from '../accessors/PointUVNode.js';
25
26
  import PositionNode from '../accessors/PositionNode.js';
26
27
  import ReferenceNode from '../accessors/ReferenceNode.js';
27
28
  import StorageBufferNode from '../accessors/StorageBufferNode.js';
29
+ import TangentNode from '../accessors/TangentNode.js';
28
30
  import TextureNode from '../accessors/TextureNode.js';
29
31
  import UserDataNode from '../accessors/UserDataNode.js';
30
32
  import UVNode from '../accessors/UVNode.js';
@@ -114,6 +116,8 @@ export const fn = ( code, includes ) => func( code, includes ).call;
114
116
  export const attribute = ( name, nodeType ) => nodeObject( new AttributeNode( name, nodeType ) );
115
117
  export const property = ( name, nodeOrType ) => nodeObject( new PropertyNode( name, getConstNodeType( nodeOrType ) ) );
116
118
 
119
+ export const convert = ( node, types ) => nodeObject( new ConvertNode( nodeObject( node ), types ) );
120
+
117
121
  export const bypass = nodeProxy( BypassNode );
118
122
  export const code = nodeProxy( CodeNode );
119
123
  export const context = nodeProxy( ContextNode );
@@ -124,65 +128,6 @@ export const label = nodeProxy( VarNode );
124
128
  export const temp = label;
125
129
  export const varying = nodeProxy( VaryingNode );
126
130
 
127
- // accesors
128
-
129
- export const buffer = ( value, nodeOrType, count ) => nodeObject( new BufferNode( value, getConstNodeType( nodeOrType ), count ) );
130
- export const storage = ( value, nodeOrType, count ) => nodeObject( new StorageBufferNode( value, getConstNodeType( nodeOrType ), count ) );
131
-
132
- export const cameraProjectionMatrix = nodeImmutable( CameraNode, CameraNode.PROJECTION_MATRIX );
133
- export const cameraViewMatrix = nodeImmutable( CameraNode, CameraNode.VIEW_MATRIX );
134
- export const cameraNormalMatrix = nodeImmutable( CameraNode, CameraNode.NORMAL_MATRIX );
135
- export const cameraWorldMatrix = nodeImmutable( CameraNode, CameraNode.WORLD_MATRIX );
136
- export const cameraPosition = nodeImmutable( CameraNode, CameraNode.POSITION );
137
-
138
- export const materialAlphaTest = nodeImmutable( MaterialNode, MaterialNode.ALPHA_TEST );
139
- export const materialColor = nodeImmutable( MaterialNode, MaterialNode.COLOR );
140
- export const materialEmissive = nodeImmutable( MaterialNode, MaterialNode.EMISSIVE );
141
- export const materialOpacity = nodeImmutable( MaterialNode, MaterialNode.OPACITY );
142
- //export const materialSpecular = nodeImmutable( MaterialNode, MaterialNode.SPECULAR );
143
- export const materialRoughness = nodeImmutable( MaterialNode, MaterialNode.ROUGHNESS );
144
- export const materialMetalness = nodeImmutable( MaterialNode, MaterialNode.METALNESS );
145
- export const materialRotation = nodeImmutable( MaterialNode, MaterialNode.ROTATION );
146
-
147
- export const diffuseColor = nodeImmutable( PropertyNode, 'DiffuseColor', 'vec4' );
148
- export const roughness = nodeImmutable( PropertyNode, 'Roughness', 'float' );
149
- export const metalness = nodeImmutable( PropertyNode, 'Metalness', 'float' );
150
- export const alphaTest = nodeImmutable( PropertyNode, 'AlphaTest', 'float' );
151
- export const specularColor = nodeImmutable( PropertyNode, 'SpecularColor', 'color' );
152
-
153
- export const reference = ( name, nodeOrType, object ) => nodeObject( new ReferenceNode( name, getConstNodeType( nodeOrType ), object ) );
154
- export const materialReference = ( name, nodeOrType, material ) => nodeObject( new MaterialReferenceNode( name, getConstNodeType( nodeOrType ), material ) );
155
- export const userData = ( name, inputType, userData ) => nodeObject( new UserDataNode( name, inputType, userData ) );
156
-
157
- export const modelViewProjection = nodeProxy( ModelViewProjectionNode );
158
-
159
- export const normalGeometry = nodeImmutable( NormalNode, NormalNode.GEOMETRY );
160
- export const normalLocal = nodeImmutable( NormalNode, NormalNode.LOCAL );
161
- export const normalWorld = nodeImmutable( NormalNode, NormalNode.WORLD );
162
- export const normalView = nodeImmutable( NormalNode, NormalNode.VIEW );
163
- export const transformedNormalView = nodeImmutable( VarNode, normalView, 'TransformedNormalView' );
164
-
165
- export const modelViewMatrix = nodeImmutable( ModelNode, ModelNode.VIEW_MATRIX );
166
- export const modelNormalMatrix = nodeImmutable( ModelNode, ModelNode.NORMAL_MATRIX );
167
- export const modelWorldMatrix = nodeImmutable( ModelNode, ModelNode.WORLD_MATRIX );
168
- export const modelPosition = nodeImmutable( ModelNode, ModelNode.POSITION );
169
- export const modelViewPosition = nodeImmutable( ModelNode, ModelNode.VIEW_POSITION );
170
-
171
- export const positionGeometry = nodeImmutable( PositionNode, PositionNode.GEOMETRY );
172
- export const positionLocal = nodeImmutable( PositionNode, PositionNode.LOCAL );
173
- export const positionWorld = nodeImmutable( PositionNode, PositionNode.WORLD );
174
- export const positionView = nodeImmutable( PositionNode, PositionNode.VIEW );
175
- export const positionViewDirection = nodeImmutable( PositionNode, PositionNode.VIEW_DIRECTION );
176
-
177
- export const texture = nodeProxy( TextureNode );
178
- export const sampler = ( texture ) => nodeObject( new ConvertNode( texture.isNode === true ? texture : new TextureNode( texture ), 'sampler' ) );
179
- export const uv = ( ...params ) => nodeObject( new UVNode( ...params ) );
180
- export const pointUV = nodeImmutable( PointUVNode );
181
-
182
- // gpgpu
183
-
184
- export const compute = ( node, count, workgroupSize ) => nodeObject( new ComputeNode( nodeObject( node ), count, workgroupSize ) );
185
-
186
131
  // math
187
132
 
188
133
  export const EPSILON = float( 1e-6 );
@@ -235,8 +180,8 @@ export const negate = nodeProxy( MathNode, MathNode.NEGATE );
235
180
  export const invert = nodeProxy( MathNode, MathNode.INVERT );
236
181
  export const dFdx = nodeProxy( MathNode, MathNode.DFDX );
237
182
  export const dFdy = nodeProxy( MathNode, MathNode.DFDY );
238
- export const saturate = nodeProxy( MathNode, MathNode.SATURATE );
239
183
  export const round = nodeProxy( MathNode, MathNode.ROUND );
184
+ export const reciprocal = nodeProxy( MathNode, MathNode.RECIPROCAL );
240
185
 
241
186
  export const atan2 = nodeProxy( MathNode, MathNode.ATAN2 );
242
187
  export const min = nodeProxy( MathNode, MathNode.MIN );
@@ -254,11 +199,86 @@ export const pow4 = nodeProxy( MathNode, MathNode.POW, 4 );
254
199
  export const transformDirection = nodeProxy( MathNode, MathNode.TRANSFORM_DIRECTION );
255
200
 
256
201
  export const mix = nodeProxy( MathNode, MathNode.MIX );
257
- export const clamp = nodeProxy( MathNode, MathNode.CLAMP );
202
+ export const clamp = ( value, low = 0, high = 1 ) => nodeObject( new MathNode( MathNode.CLAMP, nodeObject( value ), nodeObject( low ), nodeObject( high ) ) );
258
203
  export const refract = nodeProxy( MathNode, MathNode.REFRACT );
259
204
  export const smoothstep = nodeProxy( MathNode, MathNode.SMOOTHSTEP );
260
205
  export const faceforward = nodeProxy( MathNode, MathNode.FACEFORWARD );
261
206
 
207
+ // accessors
208
+
209
+ export const buffer = ( value, nodeOrType, count ) => nodeObject( new BufferNode( value, getConstNodeType( nodeOrType ), count ) );
210
+ export const storage = ( value, nodeOrType, count ) => nodeObject( new StorageBufferNode( value, getConstNodeType( nodeOrType ), count ) );
211
+
212
+ export const cameraProjectionMatrix = nodeImmutable( CameraNode, CameraNode.PROJECTION_MATRIX );
213
+ export const cameraViewMatrix = nodeImmutable( CameraNode, CameraNode.VIEW_MATRIX );
214
+ export const cameraNormalMatrix = nodeImmutable( CameraNode, CameraNode.NORMAL_MATRIX );
215
+ export const cameraWorldMatrix = nodeImmutable( CameraNode, CameraNode.WORLD_MATRIX );
216
+ export const cameraPosition = nodeImmutable( CameraNode, CameraNode.POSITION );
217
+
218
+ export const materialAlphaTest = nodeImmutable( MaterialNode, MaterialNode.ALPHA_TEST );
219
+ export const materialColor = nodeImmutable( MaterialNode, MaterialNode.COLOR );
220
+ export const materialEmissive = nodeImmutable( MaterialNode, MaterialNode.EMISSIVE );
221
+ export const materialOpacity = nodeImmutable( MaterialNode, MaterialNode.OPACITY );
222
+ //export const materialSpecular = nodeImmutable( MaterialNode, MaterialNode.SPECULAR );
223
+ export const materialRoughness = nodeImmutable( MaterialNode, MaterialNode.ROUGHNESS );
224
+ export const materialMetalness = nodeImmutable( MaterialNode, MaterialNode.METALNESS );
225
+ export const materialRotation = nodeImmutable( MaterialNode, MaterialNode.ROTATION );
226
+
227
+ export const diffuseColor = nodeImmutable( PropertyNode, 'DiffuseColor', 'vec4' );
228
+ export const roughness = nodeImmutable( PropertyNode, 'Roughness', 'float' );
229
+ export const metalness = nodeImmutable( PropertyNode, 'Metalness', 'float' );
230
+ export const alphaTest = nodeImmutable( PropertyNode, 'AlphaTest', 'float' );
231
+ export const specularColor = nodeImmutable( PropertyNode, 'SpecularColor', 'color' );
232
+
233
+ export const reference = ( name, nodeOrType, object ) => nodeObject( new ReferenceNode( name, getConstNodeType( nodeOrType ), object ) );
234
+ export const materialReference = ( name, nodeOrType, material ) => nodeObject( new MaterialReferenceNode( name, getConstNodeType( nodeOrType ), material ) );
235
+ export const userData = ( name, inputType, userData ) => nodeObject( new UserDataNode( name, inputType, userData ) );
236
+
237
+ export const modelViewProjection = nodeProxy( ModelViewProjectionNode );
238
+
239
+ export const normalGeometry = nodeImmutable( NormalNode, NormalNode.GEOMETRY );
240
+ export const normalLocal = nodeImmutable( NormalNode, NormalNode.LOCAL );
241
+ export const normalView = nodeImmutable( NormalNode, NormalNode.VIEW );
242
+ export const normalWorld = nodeImmutable( NormalNode, NormalNode.WORLD );
243
+ export const transformedNormalView = nodeImmutable( VarNode, normalView, 'TransformedNormalView' );
244
+ export const transformedNormalWorld = normalize( transformDirection( transformedNormalView, cameraViewMatrix ) );
245
+
246
+ export const tangentGeometry = nodeImmutable( TangentNode, TangentNode.GEOMETRY );
247
+ export const tangentLocal = nodeImmutable( TangentNode, TangentNode.LOCAL );
248
+ export const tangentView = nodeImmutable( TangentNode, TangentNode.VIEW );
249
+ export const tangentWorld = nodeImmutable( TangentNode, TangentNode.WORLD );
250
+ export const transformedTangentView = nodeImmutable( VarNode, tangentView, 'TransformedTangentView' );
251
+ export const transformedTangentWorld = normalize( transformDirection( transformedTangentView, cameraViewMatrix ) );
252
+
253
+ export const bitangentGeometry = nodeImmutable( BitangentNode, BitangentNode.GEOMETRY );
254
+ export const bitangentLocal = nodeImmutable( BitangentNode, BitangentNode.LOCAL );
255
+ export const bitangentView = nodeImmutable( BitangentNode, BitangentNode.VIEW );
256
+ export const bitangentWorld = nodeImmutable( BitangentNode, BitangentNode.WORLD );
257
+ export const transformedBitangentView = normalize( mul( cross( transformedNormalView, transformedTangentView ), tangentGeometry.w ) );
258
+ export const transformedBitangentWorld = normalize( transformDirection( transformedBitangentView, cameraViewMatrix ) );
259
+
260
+ export const modelViewMatrix = nodeImmutable( ModelNode, ModelNode.VIEW_MATRIX );
261
+ export const modelNormalMatrix = nodeImmutable( ModelNode, ModelNode.NORMAL_MATRIX );
262
+ export const modelWorldMatrix = nodeImmutable( ModelNode, ModelNode.WORLD_MATRIX );
263
+ export const modelPosition = nodeImmutable( ModelNode, ModelNode.POSITION );
264
+ export const modelViewPosition = nodeImmutable( ModelNode, ModelNode.VIEW_POSITION );
265
+
266
+ export const positionGeometry = nodeImmutable( PositionNode, PositionNode.GEOMETRY );
267
+ export const positionLocal = nodeImmutable( PositionNode, PositionNode.LOCAL );
268
+ export const positionWorld = nodeImmutable( PositionNode, PositionNode.WORLD );
269
+ export const positionWorldDirection = nodeImmutable( PositionNode, PositionNode.WORLD_DIRECTION );
270
+ export const positionView = nodeImmutable( PositionNode, PositionNode.VIEW );
271
+ export const positionViewDirection = nodeImmutable( PositionNode, PositionNode.VIEW_DIRECTION );
272
+
273
+ export const texture = nodeProxy( TextureNode );
274
+ export const sampler = ( texture ) => nodeObject( new ConvertNode( texture.isNode === true ? texture : new TextureNode( texture ), 'sampler' ) );
275
+ export const uv = ( ...params ) => nodeObject( new UVNode( ...params ) );
276
+ export const pointUV = nodeImmutable( PointUVNode );
277
+
278
+ // gpgpu
279
+
280
+ export const compute = ( node, count, workgroupSize ) => nodeObject( new ComputeNode( nodeObject( node ), count, workgroupSize ) );
281
+
262
282
  // display
263
283
 
264
284
  export const frontFacing = nodeImmutable( FrontFacingNode );
@@ -273,5 +293,9 @@ export const element = nodeProxy( ArrayElementNode );
273
293
 
274
294
  // miscellaneous
275
295
 
276
- export const dotNV = saturate( dot( transformedNormalView, positionViewDirection ) );
277
- export const transformedNormalWorld = normalize( transformDirection( transformedNormalView, cameraViewMatrix ) );
296
+ export const lumaCoeffs = vec3( 0.2125, 0.7154, 0.0721 );
297
+
298
+ export const luminance = ( color, luma = lumaCoeffs ) => dot( color, luma );
299
+ export const difference = ( a, b ) => abs( sub( a, b ) );
300
+ export const dotNV = clamp( dot( transformedNormalView, positionViewDirection ) );
301
+ export const TBNViewMatrix = mat3( tangentView, bitangentView, normalView );
@@ -5,10 +5,13 @@ import ReflectVectorNode from '../accessors/ReflectVectorNode.js';
5
5
  import SkinningNode from '../accessors/SkinningNode.js';
6
6
 
7
7
  // display
8
+ import BlendModeNode from '../display/BlendModeNode.js';
8
9
  import ColorAdjustmentNode from '../display/ColorAdjustmentNode.js';
9
10
  import ColorSpaceNode from '../display/ColorSpaceNode.js';
10
11
  import NormalMapNode from '../display/NormalMapNode.js';
12
+ import PosterizeNode from '../display/PosterizeNode.js';
11
13
  import ToneMappingNode from '../display/ToneMappingNode.js';
14
+ import ViewportNode from '../display/ViewportNode.js';
12
15
 
13
16
  // lighting
14
17
  import LightsNode from '../lighting/LightsNode.js';
@@ -16,12 +19,15 @@ import LightsNode from '../lighting/LightsNode.js';
16
19
  import LightingContextNode from '../lighting/LightingContextNode.js';
17
20
 
18
21
  // utils
22
+ import EquirectUVNode from '../utils/EquirectUVNode.js';
19
23
  import MatcapUVNode from '../utils/MatcapUVNode.js';
20
24
  import MaxMipLevelNode from '../utils/MaxMipLevelNode.js';
21
25
  import OscNode from '../utils/OscNode.js';
26
+ import RemapNode from '../utils/RemapNode.js';
22
27
  import RotateUVNode from '../utils/RotateUVNode.js';
23
28
  import SpriteSheetUVNode from '../utils/SpriteSheetUVNode.js';
24
29
  import TimerNode from '../utils/TimerNode.js';
30
+ import TriplanarTexturesNode from '../utils/TriplanarTexturesNode.js';
25
31
 
26
32
  // geometry
27
33
  import RangeNode from '../geometry/RangeNode.js';
@@ -72,6 +78,11 @@ export const skinning = nodeProxy( SkinningNode );
72
78
 
73
79
  // display
74
80
 
81
+ export const burn = nodeProxy( BlendModeNode, BlendModeNode.BURN );
82
+ export const dodge = nodeProxy( BlendModeNode, BlendModeNode.DODGE );
83
+ export const overlay = nodeProxy( BlendModeNode, BlendModeNode.OVERLAY );
84
+ export const screen = nodeProxy( BlendModeNode, BlendModeNode.SCREEN );
85
+
75
86
  export const saturation = nodeProxy( ColorAdjustmentNode, ColorAdjustmentNode.SATURATION );
76
87
  export const vibrance = nodeProxy( ColorAdjustmentNode, ColorAdjustmentNode.VIBRANCE );
77
88
  export const hue = nodeProxy( ColorAdjustmentNode, ColorAdjustmentNode.HUE );
@@ -80,6 +91,15 @@ export const colorSpace = ( node, encoding ) => nodeObject( new ColorSpaceNode(
80
91
  export const normalMap = nodeProxy( NormalMapNode );
81
92
  export const toneMapping = ( mapping, exposure, color ) => nodeObject( new ToneMappingNode( mapping, nodeObject( exposure ), nodeObject( color ) ) );
82
93
 
94
+ export const posterize = nodeProxy( PosterizeNode );
95
+
96
+ export const viewportCoordinate = nodeImmutable( ViewportNode, ViewportNode.COORDINATE );
97
+ export const viewportResolution = nodeImmutable( ViewportNode, ViewportNode.RESOLUTION );
98
+ export const viewportTopLeft = nodeImmutable( ViewportNode, ViewportNode.TOP_LEFT );
99
+ export const viewportBottomLeft = nodeImmutable( ViewportNode, ViewportNode.BOTTOM_LEFT );
100
+ export const viewportTopRight = nodeImmutable( ViewportNode, ViewportNode.TOP_RIGHT );
101
+ export const viewportBottomRight = nodeImmutable( ViewportNode, ViewportNode.BOTTOM_RIGHT );
102
+
83
103
  // lighting
84
104
 
85
105
  //export const lighting = nodeProxy( LightingNode ); // abstract
@@ -90,6 +110,8 @@ export const lightingContext = nodeProxy( LightingContextNode );
90
110
  // utils
91
111
 
92
112
  export const matcapUV = nodeImmutable( MatcapUVNode );
113
+ export const equirectUV = nodeProxy( EquirectUVNode );
114
+
93
115
  export const maxMipLevel = nodeProxy( MaxMipLevelNode );
94
116
 
95
117
  export const oscSine = nodeProxy( OscNode, OscNode.SINE );
@@ -97,6 +119,9 @@ export const oscSquare = nodeProxy( OscNode, OscNode.SQUARE );
97
119
  export const oscTriangle = nodeProxy( OscNode, OscNode.TRIANGLE );
98
120
  export const oscSawtooth = nodeProxy( OscNode, OscNode.SAWTOOTH );
99
121
 
122
+ export const remap = nodeProxy( RemapNode, null, null, { doClamp: false } );
123
+ export const remapClamp = nodeProxy( RemapNode );
124
+
100
125
  export const rotateUV = nodeProxy( RotateUVNode );
101
126
 
102
127
  export const spritesheetUV = nodeProxy( SpriteSheetUVNode );
@@ -105,6 +130,10 @@ export const spritesheetUV = nodeProxy( SpriteSheetUVNode );
105
130
  export const timerLocal = ( timeScale, value = 0 ) => nodeObject( new TimerNode( TimerNode.LOCAL, timeScale, value ) );
106
131
  export const timerGlobal = ( timeScale, value = 0 ) => nodeObject( new TimerNode( TimerNode.GLOBAL, timeScale, value ) );
107
132
  export const timerDelta = ( timeScale, value = 0 ) => nodeObject( new TimerNode( TimerNode.DELTA, timeScale, value ) );
133
+ export const frameId = nodeImmutable( TimerNode, TimerNode.FRAME );
134
+
135
+ export const triplanarTextures = nodeProxy( TriplanarTexturesNode );
136
+ export const triplanarTexture = ( texture, ...params ) => triplanarTextures( texture, texture, texture, ...params );
108
137
 
109
138
  // geometry
110
139
 
@@ -11,31 +11,32 @@ class ConvertNode extends Node {
11
11
 
12
12
  }
13
13
 
14
- getNodeType( /*builder*/ ) {
14
+ getNodeType( builder ) {
15
15
 
16
- return this.convertTo;
16
+ const requestType = this.node.getNodeType( builder );
17
17
 
18
- }
18
+ let convertTo = null;
19
19
 
20
- generate( builder, output ) {
20
+ for ( const overloadingType of this.convertTo.split( '|' ) ) {
21
21
 
22
- const convertTo = this.convertTo;
23
- const node = this.node;
24
- const type = this.getNodeType( builder );
22
+ if ( convertTo === null || builder.getTypeLength( requestType ) === builder.getTypeLength( overloadingType ) ) {
25
23
 
26
- let snippet = null;
24
+ convertTo = overloadingType;
27
25
 
28
- if ( builder.isReference( convertTo ) === false ) {
26
+ }
29
27
 
30
- const nodeSnippet = node.build( builder, convertTo );
28
+ }
31
29
 
32
- snippet = builder.format( nodeSnippet, type, convertTo );
30
+ return convertTo;
33
31
 
34
- } else {
32
+ }
35
33
 
36
- snippet = node.build( builder, convertTo );
34
+ generate( builder, output ) {
37
35
 
38
- }
36
+ const node = this.node;
37
+ const type = this.getNodeType( builder );
38
+
39
+ const snippet = node.build( builder, type );
39
40
 
40
41
  return builder.format( snippet, type, output );
41
42
 
@@ -0,0 +1,27 @@
1
+ import TempNode from '../core/TempNode.js';
2
+ import { nodeObject, vec2, add, mul, atan2, asin, clamp, positionWorldDirection } from '../shadernode/ShaderNodeElements.js';
3
+
4
+ class EquirectUVNode extends TempNode {
5
+
6
+ constructor( dirNode = positionWorldDirection ) {
7
+
8
+ super( 'vec2' );
9
+
10
+ this.dirNode = dirNode;
11
+
12
+ }
13
+
14
+ construct() {
15
+
16
+ const dir = nodeObject( this.dirNode );
17
+
18
+ const u = add( mul( atan2( dir.z, dir.x ), 1 / ( Math.PI * 2 ) ), 0.5 );
19
+ const v = add( mul( asin( clamp( dir.y, - 1.0, 1.0 ) ), 1 / Math.PI ), 0.5 );
20
+
21
+ return vec2( u, v );
22
+
23
+ }
24
+
25
+ }
26
+
27
+ export default EquirectUVNode;
@@ -2,9 +2,9 @@ import TempNode from '../core/Node.js';
2
2
 
3
3
  class JoinNode extends TempNode {
4
4
 
5
- constructor( nodes = [] ) {
5
+ constructor( nodes = [], nodeType = null ) {
6
6
 
7
- super();
7
+ super( nodeType );
8
8
 
9
9
  this.nodes = nodes;
10
10
 
@@ -12,6 +12,12 @@ class JoinNode extends TempNode {
12
12
 
13
13
  getNodeType( builder ) {
14
14
 
15
+ if ( this.nodeType !== null ) {
16
+
17
+ return builder.getVectorType( this.nodeType );
18
+
19
+ }
20
+
15
21
  return builder.getTypeFromLength( this.nodes.reduce( ( count, cur ) => count + builder.getTypeLength( cur.getNodeType( builder ) ), 0 ) );
16
22
 
17
23
  }
@@ -9,14 +9,12 @@ class MatcapUVNode extends TempNode {
9
9
 
10
10
  }
11
11
 
12
- generate( builder ) {
12
+ construct() {
13
13
 
14
14
  const x = normalize( vec3( positionViewDirection.z, 0, negate( positionViewDirection.x ) ) );
15
15
  const y = cross( positionViewDirection, x );
16
16
 
17
- const uv = add( mul( vec2( dot( x, transformedNormalView ), dot( y, transformedNormalView ) ), 0.495 ), 0.5 );
18
-
19
- return uv.build( builder, this.getNodeType( builder ) );
17
+ return add( mul( vec2( dot( x, transformedNormalView ), dot( y, transformedNormalView ) ), 0.495 ), 0.5 );
20
18
 
21
19
  }
22
20
 
@@ -9,7 +9,7 @@ class MaxMipLevelNode extends UniformNode {
9
9
 
10
10
  this.texture = texture;
11
11
 
12
- this.updateType = NodeUpdateType.Frame;
12
+ this.updateType = NodeUpdateType.FRAME;
13
13
 
14
14
  }
15
15
 
@@ -24,7 +24,7 @@ class OscNode extends Node {
24
24
 
25
25
  }
26
26
 
27
- generate( builder ) {
27
+ construct() {
28
28
 
29
29
  const method = this.method;
30
30
  const timeNode = this.timeNode;
@@ -49,7 +49,7 @@ class OscNode extends Node {
49
49
 
50
50
  }
51
51
 
52
- return outputNode.build( builder );
52
+ return outputNode;
53
53
 
54
54
  }
55
55
 
@@ -0,0 +1,34 @@
1
+ import Node from '../core/Node.js';
2
+ import { add, sub, div, mul, clamp } from '../shadernode/ShaderNodeBaseElements.js';
3
+
4
+ class RemapNode extends Node {
5
+
6
+ constructor( node, inLowNode, inHighNode, outLowNode, outHighNode ) {
7
+
8
+ super();
9
+
10
+ this.node = node;
11
+ this.inLowNode = inLowNode;
12
+ this.inHighNode = inHighNode;
13
+ this.outLowNode = outLowNode;
14
+ this.outHighNode = outHighNode;
15
+
16
+ this.doClamp = true;
17
+
18
+ }
19
+
20
+ construct() {
21
+
22
+ const { node, inLowNode, inHighNode, outLowNode, outHighNode, doClamp } = this;
23
+
24
+ let t = div( sub( node, inLowNode ), sub( inHighNode, inLowNode ) );
25
+
26
+ if ( doClamp === true ) t = clamp( t );
27
+
28
+ return add( mul( sub( outHighNode, outLowNode ), t ), outLowNode );
29
+
30
+ }
31
+
32
+ }
33
+
34
+ export default RemapNode;
@@ -18,20 +18,18 @@ class SpriteSheetUVNode extends Node {
18
18
 
19
19
  }
20
20
 
21
- generate( builder ) {
21
+ construct() {
22
22
 
23
- const count = this.countNode;
24
- const uv = this.uvNode;
25
- const frame = this.frameNode;
23
+ const { frameNode, uvNode, countNode } = this;
26
24
 
27
25
  const one = new ConstNode( 1 );
28
26
 
29
- const width = new SplitNode( count, 'x' );
30
- const height = new SplitNode( count, 'y' );
27
+ const width = new SplitNode( countNode, 'x' );
28
+ const height = new SplitNode( countNode, 'y' );
31
29
 
32
30
  const total = new OperatorNode( '*', width, height );
33
31
 
34
- const roundFrame = new MathNode( MathNode.FLOOR, new MathNode( MathNode.MOD, frame, total ) );
32
+ const roundFrame = new MathNode( MathNode.FLOOR, new MathNode( MathNode.MOD, frameNode, total ) );
35
33
 
36
34
  const frameNum = new OperatorNode( '+', roundFrame, one );
37
35
 
@@ -39,17 +37,17 @@ class SpriteSheetUVNode extends Node {
39
37
  const row = new MathNode( MathNode.CEIL, new OperatorNode( '/', frameNum, width ) );
40
38
  const rowInv = new OperatorNode( '-', height, row );
41
39
 
42
- const scale = new OperatorNode( '/', one, count );
40
+ const scale = new OperatorNode( '/', one, countNode );
43
41
 
44
42
  const uvFrameOffset = new JoinNode( [
45
43
  new OperatorNode( '*', cell, new SplitNode( scale, 'x' ) ),
46
44
  new OperatorNode( '*', rowInv, new SplitNode( scale, 'y' ) )
47
45
  ] );
48
46
 
49
- const uvScale = new OperatorNode( '*', uv, scale );
47
+ const uvScale = new OperatorNode( '*', uvNode, scale );
50
48
  const uvFrame = new OperatorNode( '+', uvScale, uvFrameOffset );
51
49
 
52
- return uvFrame.build( builder, this.getNodeType( builder ) );
50
+ return uvFrame;
53
51
 
54
52
  }
55
53
 
@@ -6,6 +6,7 @@ class TimerNode extends UniformNode {
6
6
  static LOCAL = 'local';
7
7
  static GLOBAL = 'global';
8
8
  static DELTA = 'delta';
9
+ static FRAME = 'frame';
9
10
 
10
11
  constructor( scope = TimerNode.LOCAL, scale = 1, value = 0 ) {
11
12
 
@@ -14,10 +15,25 @@ class TimerNode extends UniformNode {
14
15
  this.scope = scope;
15
16
  this.scale = scale;
16
17
 
17
- this.updateType = NodeUpdateType.Frame;
18
+ this.updateType = NodeUpdateType.FRAME;
18
19
 
19
20
  }
21
+ /*
22
+ @TODO:
23
+ getNodeType( builder ) {
20
24
 
25
+ const scope = this.scope;
26
+
27
+ if ( scope === TimerNode.FRAME ) {
28
+
29
+ return 'uint';
30
+
31
+ }
32
+
33
+ return 'float';
34
+
35
+ }
36
+ */
21
37
  update( frame ) {
22
38
 
23
39
  const scope = this.scope;
@@ -31,6 +47,10 @@ class TimerNode extends UniformNode {
31
47
 
32
48
  this.value = frame.deltaTime * scale;
33
49
 
50
+ } else if ( scope === TimerNode.FRAME ) {
51
+
52
+ this.value = frame.frameId;
53
+
34
54
  } else {
35
55
 
36
56
  // global
@@ -0,0 +1,51 @@
1
+ import Node from '../core/Node.js';
2
+ import { float, vec3, add, mul, div, dot, normalize, abs, texture, positionWorld, normalWorld } from '../shadernode/ShaderNodeBaseElements.js';
3
+
4
+ class TriplanarTexturesNode extends Node {
5
+
6
+ constructor( textureXNode, textureYNode = null, textureZNode = null, scaleNode = float( 1 ), positionNode = positionWorld, normalNode = normalWorld ) {
7
+
8
+ super( 'vec4' );
9
+
10
+ this.textureXNode = textureXNode;
11
+ this.textureYNode = textureYNode;
12
+ this.textureZNode = textureZNode;
13
+
14
+ this.scaleNode = scaleNode;
15
+
16
+ this.positionNode = positionNode;
17
+ this.normalNode = normalNode;
18
+
19
+ }
20
+
21
+ construct() {
22
+
23
+ const { textureXNode, textureYNode, textureZNode, scaleNode, positionNode, normalNode } = this;
24
+
25
+ // Ref: https://github.com/keijiro/StandardTriplanar
26
+
27
+ // Blending factor of triplanar mapping
28
+ let bf = normalize( abs( normalNode ) );
29
+ bf = div( bf, dot( bf, vec3( 1.0 ) ) );
30
+
31
+ // Triplanar mapping
32
+ const tx = mul( positionNode.yz, scaleNode );
33
+ const ty = mul( positionNode.zx, scaleNode );
34
+ const tz = mul( positionNode.xy, scaleNode );
35
+
36
+ // Base color
37
+ const textureX = textureXNode.value;
38
+ const textureY = textureYNode !== null ? textureYNode.value : textureX;
39
+ const textureZ = textureZNode !== null ? textureZNode.value : textureX;
40
+
41
+ const cx = mul( texture( textureX, tx ), bf.x );
42
+ const cy = mul( texture( textureY, ty ), bf.y );
43
+ const cz = mul( texture( textureZ, tz ), bf.z );
44
+
45
+ return add( cx, cy, cz );
46
+
47
+ }
48
+
49
+ }
50
+
51
+ export default TriplanarTexturesNode;
@@ -30,7 +30,7 @@ class AfterimagePass extends Pass {
30
30
  magFilter: NearestFilter,
31
31
  } );
32
32
 
33
- this.shaderMaterial = new ShaderMaterial( {
33
+ this.compFsMaterial = new ShaderMaterial( {
34
34
 
35
35
  uniforms: this.uniforms,
36
36
  vertexShader: this.shader.vertexShader,
@@ -38,10 +38,10 @@ class AfterimagePass extends Pass {
38
38
 
39
39
  } );
40
40
 
41
- this.compFsQuad = new FullScreenQuad( this.shaderMaterial );
41
+ this.compFsQuad = new FullScreenQuad( this.compFsMaterial );
42
42
 
43
- const material = new MeshBasicMaterial();
44
- this.copyFsQuad = new FullScreenQuad( material );
43
+ this.copyFsMaterial = new MeshBasicMaterial();
44
+ this.copyFsQuad = new FullScreenQuad( this.copyFsMaterial );
45
45
 
46
46
  }
47
47
 
@@ -85,6 +85,19 @@ class AfterimagePass extends Pass {
85
85
 
86
86
  }
87
87
 
88
+ dispose() {
89
+
90
+ this.textureComp.dispose();
91
+ this.textureOld.dispose();
92
+
93
+ this.compFsMaterial.dispose();
94
+ this.copyFsMaterial.dispose();
95
+
96
+ this.compFsQuad.dispose();
97
+ this.copyFsQuad.dispose();
98
+
99
+ }
100
+
88
101
  }
89
102
 
90
103
  export { AfterimagePass };