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
@@ -10,8 +10,8 @@ class NormalNode extends Node {
10
10
 
11
11
  static GEOMETRY = 'geometry';
12
12
  static LOCAL = 'local';
13
- static WORLD = 'world';
14
13
  static VIEW = 'view';
14
+ static WORLD = 'world';
15
15
 
16
16
  constructor( scope = NormalNode.LOCAL ) {
17
17
 
@@ -43,18 +43,18 @@ class NormalNode extends Node {
43
43
 
44
44
  } else if ( scope === NormalNode.VIEW ) {
45
45
 
46
- const vertexNormalNode = new OperatorNode( '*', new ModelNode( ModelNode.NORMAL_MATRIX ), new NormalNode( NormalNode.LOCAL ) );
47
- outputNode = new MathNode( MathNode.NORMALIZE, new VaryingNode( vertexNormalNode ) );
46
+ const vertexNode = new OperatorNode( '*', new ModelNode( ModelNode.NORMAL_MATRIX ), new NormalNode( NormalNode.LOCAL ) );
47
+ outputNode = new MathNode( MathNode.NORMALIZE, new VaryingNode( vertexNode ) );
48
48
 
49
49
  } else if ( scope === NormalNode.WORLD ) {
50
50
 
51
51
  // To use INVERSE_TRANSFORM_DIRECTION only inverse the param order like this: MathNode( ..., Vector, Matrix );
52
- const vertexNormalNode = new MathNode( MathNode.TRANSFORM_DIRECTION, new NormalNode( NormalNode.VIEW ), new CameraNode( CameraNode.VIEW_MATRIX ) );
53
- outputNode = new MathNode( MathNode.NORMALIZE, new VaryingNode( vertexNormalNode ) );
52
+ const vertexNode = new MathNode( MathNode.TRANSFORM_DIRECTION, new NormalNode( NormalNode.VIEW ), new CameraNode( CameraNode.VIEW_MATRIX ) );
53
+ outputNode = new MathNode( MathNode.NORMALIZE, new VaryingNode( vertexNode ) );
54
54
 
55
55
  }
56
56
 
57
- return outputNode.build( builder );
57
+ return outputNode.build( builder, this.getNodeType( builder ) );
58
58
 
59
59
  }
60
60
 
@@ -18,7 +18,7 @@ class Object3DNode extends Node {
18
18
  this.scope = scope;
19
19
  this.object3d = object3d;
20
20
 
21
- this.updateType = NodeUpdateType.Object;
21
+ this.updateType = NodeUpdateType.OBJECT;
22
22
 
23
23
  this._uniformNode = new UniformNode( null );
24
24
 
@@ -10,6 +10,7 @@ class PositionNode extends Node {
10
10
  static GEOMETRY = 'geometry';
11
11
  static LOCAL = 'local';
12
12
  static WORLD = 'world';
13
+ static WORLD_DIRECTION = 'worldDirection';
13
14
  static VIEW = 'view';
14
15
  static VIEW_DIRECTION = 'viewDirection';
15
16
 
@@ -56,6 +57,11 @@ class PositionNode extends Node {
56
57
  const vertexPositionNode = new MathNode( MathNode.NEGATE, new PositionNode( PositionNode.VIEW ) );
57
58
  outputNode = new MathNode( MathNode.NORMALIZE, new VaryingNode( vertexPositionNode ) );
58
59
 
60
+ } else if ( scope === PositionNode.WORLD_DIRECTION ) {
61
+
62
+ const vertexPositionNode = new MathNode( MathNode.NEGATE, new PositionNode( PositionNode.WORLD ) );
63
+ outputNode = new MathNode( MathNode.NORMALIZE, new VaryingNode( vertexPositionNode ) );
64
+
59
65
  }
60
66
 
61
67
  return outputNode.build( builder, this.getNodeType( builder ) );
@@ -16,7 +16,7 @@ class ReferenceNode extends Node {
16
16
 
17
17
  this.node = null;
18
18
 
19
- this.updateType = NodeUpdateType.Object;
19
+ this.updateType = NodeUpdateType.OBJECT;
20
20
 
21
21
  this.setNodeType( uniformType );
22
22
 
@@ -7,6 +7,7 @@ import {
7
7
  uniform,
8
8
  positionLocal,
9
9
  normalLocal,
10
+ tangentLocal,
10
11
  assign,
11
12
  element,
12
13
  add,
@@ -56,6 +57,12 @@ const Skinning = new ShaderNode( ( inputs, builder ) => {
56
57
  assign( positionLocal, skinPosition ).build( builder );
57
58
  assign( normalLocal, skinNormal ).build( builder );
58
59
 
60
+ if ( builder.hasGeometryAttribute( 'tangent' ) ) {
61
+
62
+ assign( tangentLocal, skinNormal ).build( builder );
63
+
64
+ }
65
+
59
66
  } );
60
67
 
61
68
  class SkinningNode extends Node {
@@ -66,7 +73,7 @@ class SkinningNode extends Node {
66
73
 
67
74
  this.skinnedMesh = skinnedMesh;
68
75
 
69
- this.updateType = NodeUpdateType.Object;
76
+ this.updateType = NodeUpdateType.OBJECT;
70
77
 
71
78
  //
72
79
 
@@ -0,0 +1,95 @@
1
+ import Node from '../core/Node.js';
2
+ import AttributeNode from '../core/AttributeNode.js';
3
+ import VaryingNode from '../core/VaryingNode.js';
4
+ import ModelNode from '../accessors/ModelNode.js';
5
+ import CameraNode from '../accessors/CameraNode.js';
6
+ import OperatorNode from '../math/OperatorNode.js';
7
+ import MathNode from '../math/MathNode.js';
8
+ import SplitNode from '../utils/SplitNode.js';
9
+
10
+ class TangentNode extends Node {
11
+
12
+ static GEOMETRY = 'geometry';
13
+ static LOCAL = 'local';
14
+ static VIEW = 'view';
15
+ static WORLD = 'world';
16
+
17
+ constructor( scope = TangentNode.LOCAL ) {
18
+
19
+ super();
20
+
21
+ this.scope = scope;
22
+
23
+ }
24
+
25
+ getHash( /*builder*/ ) {
26
+
27
+ return `tangent-${this.scope}`;
28
+
29
+ }
30
+
31
+ getNodeType() {
32
+
33
+ const scope = this.scope;
34
+
35
+ if ( scope === TangentNode.GEOMETRY ) {
36
+
37
+ return 'vec4';
38
+
39
+ }
40
+
41
+ return 'vec3';
42
+
43
+ }
44
+
45
+
46
+ generate( builder ) {
47
+
48
+ const scope = this.scope;
49
+
50
+ let outputNode = null;
51
+
52
+ if ( scope === TangentNode.GEOMETRY ) {
53
+
54
+ outputNode = new AttributeNode( 'tangent', 'vec4' );
55
+
56
+ } else if ( scope === TangentNode.LOCAL ) {
57
+
58
+ outputNode = new VaryingNode( new SplitNode( new TangentNode( TangentNode.GEOMETRY ), 'xyz' ) );
59
+
60
+ } else if ( scope === TangentNode.VIEW ) {
61
+
62
+ const vertexNode = new SplitNode( new OperatorNode( '*', new ModelNode( ModelNode.VIEW_MATRIX ), new TangentNode( TangentNode.LOCAL ) ), 'xyz' );
63
+
64
+ outputNode = new MathNode( MathNode.NORMALIZE, new VaryingNode( vertexNode ) );
65
+
66
+ } else if ( scope === TangentNode.WORLD ) {
67
+
68
+ const vertexNode = new MathNode( MathNode.TRANSFORM_DIRECTION, new TangentNode( TangentNode.VIEW ), new CameraNode( CameraNode.VIEW_MATRIX ) );
69
+ outputNode = new MathNode( MathNode.NORMALIZE, new VaryingNode( vertexNode ) );
70
+
71
+ }
72
+
73
+ return outputNode.build( builder, this.getNodeType( builder ) );
74
+
75
+ }
76
+
77
+ serialize( data ) {
78
+
79
+ super.serialize( data );
80
+
81
+ data.scope = this.scope;
82
+
83
+ }
84
+
85
+ deserialize( data ) {
86
+
87
+ super.deserialize( data );
88
+
89
+ this.scope = data.scope;
90
+
91
+ }
92
+
93
+ }
94
+
95
+ export default TangentNode;
@@ -19,14 +19,23 @@ class AttributeNode extends Node {
19
19
 
20
20
  getNodeType( builder ) {
21
21
 
22
+ const attributeName = this.getAttributeName( builder );
23
+
22
24
  let nodeType = super.getNodeType( builder );
23
25
 
24
26
  if ( nodeType === null ) {
25
27
 
26
- const attributeName = this.getAttributeName( builder );
27
- const attribute = builder.geometry.getAttribute( attributeName );
28
+ if ( builder.hasGeometryAttribute( attributeName ) ) {
29
+
30
+ const attribute = builder.geometry.getAttribute( attributeName );
31
+
32
+ nodeType = builder.getTypeFromLength( attribute.itemSize );
28
33
 
29
- nodeType = builder.getTypeFromLength( attribute.itemSize );
34
+ } else {
35
+
36
+ nodeType = 'float';
37
+
38
+ }
30
39
 
31
40
  }
32
41
 
@@ -50,17 +59,31 @@ class AttributeNode extends Node {
50
59
 
51
60
  generate( builder ) {
52
61
 
53
- const attribute = builder.getAttribute( this.getAttributeName( builder ), this.getNodeType( builder ) );
62
+ const attributeName = this.getAttributeName( builder );
63
+ const nodeType = this.getNodeType( builder );
64
+ const geometryAttribute = builder.hasGeometryAttribute( attributeName );
65
+
66
+ if ( geometryAttribute === true ) {
67
+
68
+ const nodeAttribute = builder.getAttribute( attributeName, nodeType );
69
+
70
+ if ( builder.isShaderStage( 'vertex' ) ) {
71
+
72
+ return nodeAttribute.name;
73
+
74
+ } else {
75
+
76
+ const nodeVarying = new VaryingNode( this );
54
77
 
55
- if ( builder.isShaderStage( 'vertex' ) ) {
78
+ return nodeVarying.build( builder, nodeAttribute.type );
56
79
 
57
- return attribute.name;
80
+ }
58
81
 
59
82
  } else {
60
83
 
61
- const nodeVarying = new VaryingNode( this );
84
+ console.warn( `Attribute "${ attributeName }" not found.` );
62
85
 
63
- return nodeVarying.build( builder, attribute.type );
86
+ return builder.getConst( nodeType );
64
87
 
65
88
  }
66
89
 
@@ -12,7 +12,7 @@ class Node {
12
12
 
13
13
  this.nodeType = nodeType;
14
14
 
15
- this.updateType = NodeUpdateType.None;
15
+ this.updateType = NodeUpdateType.NONE;
16
16
 
17
17
  this.uuid = MathUtils.generateUUID();
18
18
 
@@ -6,14 +6,13 @@ import NodeCode from './NodeCode.js';
6
6
  import NodeKeywords from './NodeKeywords.js';
7
7
  import { NodeUpdateType } from './constants.js';
8
8
 
9
- import { REVISION, LinearEncoding } from 'three';
9
+ import { REVISION, LinearEncoding, Color, Vector2, Vector3, Vector4 } from 'three';
10
10
 
11
11
  export const defaultShaderStages = [ 'fragment', 'vertex' ];
12
12
  export const shaderStages = [ ...defaultShaderStages, 'compute' ];
13
13
  export const vector = [ 'x', 'y', 'z', 'w' ];
14
14
 
15
15
  const typeFromLength = new Map();
16
- typeFromLength.set( 1, 'float' );
17
16
  typeFromLength.set( 2, 'vec2' );
18
17
  typeFromLength.set( 3, 'vec3' );
19
18
  typeFromLength.set( 4, 'vec4' );
@@ -117,7 +116,7 @@ class NodeBuilder {
117
116
 
118
117
  const updateType = node.getUpdateType( this );
119
118
 
120
- if ( updateType !== NodeUpdateType.None ) {
119
+ if ( updateType !== NodeUpdateType.NONE ) {
121
120
 
122
121
  this.updateNodes.push( node );
123
122
 
@@ -181,6 +180,18 @@ class NodeBuilder {
181
180
 
182
181
  }
183
182
 
183
+ getFragCoord() {
184
+
185
+ console.warn( 'Abstract function.' );
186
+
187
+ }
188
+
189
+ isFlipY() {
190
+
191
+ return false;
192
+
193
+ }
194
+
184
195
  getTexture( /* textureProperty, uvSnippet */ ) {
185
196
 
186
197
  console.warn( 'Abstract function.' );
@@ -206,7 +217,18 @@ class NodeBuilder {
206
217
  }
207
218
 
208
219
  // @TODO: rename to .generateConst()
209
- getConst( type, value ) {
220
+ getConst( type, value = null ) {
221
+
222
+ if ( value === null ) {
223
+
224
+ if ( type === 'float' || type === 'int' || type === 'uint' ) value = 0;
225
+ else if ( type === 'bool' ) value = false;
226
+ else if ( type === 'color' ) value = new Color();
227
+ else if ( type === 'vec2' ) value = new Vector2();
228
+ else if ( type === 'vec3' ) value = new Vector3();
229
+ else if ( type === 'vec4' ) value = new Vector4();
230
+
231
+ }
210
232
 
211
233
  if ( type === 'float' ) return toFloat( value );
212
234
  if ( type === 'int' ) return `${ Math.round( value ) }`;
@@ -254,6 +276,12 @@ class NodeBuilder {
254
276
 
255
277
  }
256
278
 
279
+ hasGeometryAttribute( name ) {
280
+
281
+ return this.geometry?.getAttribute( name ) !== undefined;
282
+
283
+ }
284
+
257
285
  getAttribute( name, type ) {
258
286
 
259
287
  const attributes = this.attributes;
@@ -336,6 +364,8 @@ class NodeBuilder {
336
364
 
337
365
  type = this.getVectorType( type );
338
366
 
367
+ if ( type === 'float' || type === 'bool' || type === 'int' || type === 'uint' ) return type;
368
+
339
369
  const componentType = /(b|i|u|)(vec|mat)([2-4])/.exec( type );
340
370
 
341
371
  if ( componentType === null ) return null;
@@ -357,9 +387,12 @@ class NodeBuilder {
357
387
 
358
388
  }
359
389
 
360
- getTypeFromLength( length ) {
390
+ getTypeFromLength( length, componentType = 'float' ) {
361
391
 
362
- return typeFromLength.get( length );
392
+ if ( length === 1 ) return componentType;
393
+ const baseType = typeFromLength.get( length );
394
+ const prefix = componentType === 'float' ? '' : componentType[ 0 ];
395
+ return prefix + baseType;
363
396
 
364
397
  }
365
398
 
@@ -383,6 +416,22 @@ class NodeBuilder {
383
416
 
384
417
  }
385
418
 
419
+ changeComponentType( type, newComponentType ) {
420
+
421
+ return this.getTypeFromLength( this.getTypeLength( type ), newComponentType );
422
+
423
+ }
424
+
425
+ getIntegerType( type ) {
426
+
427
+ const componentType = this.getComponentType( type );
428
+
429
+ if ( componentType === 'int' || componentType === 'uint' ) return type;
430
+
431
+ return this.changeComponentType( type, 'int' );
432
+
433
+ }
434
+
386
435
  getDataFromNode( node, shaderStage = this.shaderStage ) {
387
436
 
388
437
  let nodeData = this.nodesData.get( node );
@@ -22,7 +22,7 @@ class NodeFrame {
22
22
 
23
23
  updateNode( node ) {
24
24
 
25
- if ( node.updateType === NodeUpdateType.Frame ) {
25
+ if ( node.updateType === NodeUpdateType.FRAME ) {
26
26
 
27
27
  if ( this.updateMap.get( node ) !== this.frameId ) {
28
28
 
@@ -32,7 +32,7 @@ class NodeFrame {
32
32
 
33
33
  }
34
34
 
35
- } else if ( node.updateType === NodeUpdateType.Object ) {
35
+ } else if ( node.updateType === NodeUpdateType.OBJECT ) {
36
36
 
37
37
  node.update( this );
38
38
 
@@ -1,11 +1,14 @@
1
- class NodeVarying {
1
+ import NodeVar from './NodeVar.js';
2
+
3
+ class NodeVarying extends NodeVar {
2
4
 
3
5
  constructor( name, type ) {
4
6
 
5
- this.isNodeVarying = true;
7
+ super( name, type );
6
8
 
7
- this.name = name;
8
- this.type = type;
9
+ this.needsInterpolation = false;
10
+
11
+ this.isNodeVarying = true;
9
12
 
10
13
  }
11
14
 
@@ -28,22 +28,24 @@ class VaryingNode extends Node {
28
28
 
29
29
  generate( builder ) {
30
30
 
31
+ const { name, node } = this;
31
32
  const type = this.getNodeType( builder );
32
- const node = this.node;
33
- const name = this.name;
34
33
 
35
34
  const nodeVarying = builder.getVaryingFromNode( this, type );
36
35
 
36
+ // this property can be used to check if the varying can be optimized for a var
37
+ nodeVarying.needsInterpolation ||= builder.shaderStage === 'fragment';
38
+
37
39
  if ( name !== null ) {
38
40
 
39
41
  nodeVarying.name = name;
40
42
 
41
43
  }
42
44
 
43
- const propertyName = builder.getPropertyName( nodeVarying, NodeShaderStage.Vertex );
45
+ const propertyName = builder.getPropertyName( nodeVarying, NodeShaderStage.VERTEX );
44
46
 
45
47
  // force node run in vertex stage
46
- builder.flowNodeFromShaderStage( NodeShaderStage.Vertex, node, type, propertyName );
48
+ builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, node, type, propertyName );
47
49
 
48
50
  return builder.getPropertyName( nodeVarying );
49
51
 
@@ -1,21 +1,21 @@
1
1
  export const NodeShaderStage = {
2
- Vertex: 'vertex',
3
- Fragment: 'fragment'
2
+ VERTEX: 'vertex',
3
+ FRAGMENT: 'fragment'
4
4
  };
5
5
 
6
6
  export const NodeUpdateType = {
7
- None: 'none',
8
- Frame: 'frame',
9
- Object: 'object'
7
+ NONE: 'none',
8
+ FRAME: 'frame',
9
+ OBJECT: 'object'
10
10
  };
11
11
 
12
12
  export const NodeType = {
13
- Boolean: 'bool',
14
- Integer: 'int',
15
- Float: 'float',
16
- Vector2: 'vec2',
17
- Vector3: 'vec3',
18
- Vector4: 'vec4',
19
- Matrix3: 'mat3',
20
- Matrix4: 'mat4'
13
+ BOOLEAN: 'bool',
14
+ INTEGER: 'int',
15
+ FLOAT: 'float',
16
+ VECTOR2: 'vec2',
17
+ VECTOR3: 'vec3',
18
+ VECTOR4: 'vec4',
19
+ MATRIX3: 'mat3',
20
+ MATRIX4: 'mat4'
21
21
  };
@@ -0,0 +1,85 @@
1
+ import TempNode from '../core/Node.js';
2
+ import { ShaderNode, EPSILON, vec3, sub, mul, div, cond, lessThan, equal, max } from '../shadernode/ShaderNodeBaseElements.js';
3
+
4
+ export const BurnNode = new ShaderNode( ( { base, blend } ) => {
5
+
6
+ const fn = ( c ) => cond( lessThan( blend[ c ], EPSILON ), blend[ c ], max( sub( 1.0, div( sub( 1.0, base[ c ] ), blend[ c ] ) ), 0 ) );
7
+
8
+ return vec3( fn( 'x' ), fn( 'y' ), fn( 'z' ) );
9
+
10
+ } );
11
+
12
+ export const DodgeNode = new ShaderNode( ( { base, blend } ) => {
13
+
14
+ const fn = ( c ) => cond( equal( blend[ c ], 1.0 ), blend[ c ], max( div( base[ c ], sub( 1.0, blend[ c ] ) ), 0 ) );
15
+
16
+ return vec3( fn( 'x' ), fn( 'y' ), fn( 'z' ) );
17
+
18
+ } );
19
+
20
+ export const ScreenNode = new ShaderNode( ( { base, blend } ) => {
21
+
22
+ const fn = ( c ) => sub( 1.0, mul( sub( 1.0, base[ c ] ), sub( 1.0, blend[ c ] ) ) );
23
+
24
+ return vec3( fn( 'x' ), fn( 'y' ), fn( 'z' ) );
25
+
26
+ } );
27
+
28
+ export const OverlayNode = new ShaderNode( ( { base, blend } ) => {
29
+
30
+ const fn = ( c ) => cond( lessThan( base[ c ], 0.5 ), mul( 2.0, base[ c ], blend[ c ] ), sub( 1.0, mul( sub( 1.0, base[ c ] ), sub( 1.0, blend[ c ] ) ) ) );
31
+
32
+ return vec3( fn( 'x' ), fn( 'y' ), fn( 'z' ) );
33
+
34
+ } );
35
+
36
+ class BlendModeNode extends TempNode {
37
+
38
+ static BURN = 'burn';
39
+ static DODGE = 'dodge';
40
+ static SCREEN = 'screen';
41
+ static OVERLAY = 'overlay';
42
+
43
+ constructor( blendMode, baseNode, blendNode ) {
44
+
45
+ super();
46
+
47
+ this.blendMode = blendMode;
48
+
49
+ this.baseNode = baseNode;
50
+ this.blendNode = blendNode;
51
+
52
+ }
53
+
54
+ construct() {
55
+
56
+ const { blendMode, baseNode, blendNode } = this;
57
+ const params = { base: baseNode, blend: blendNode };
58
+
59
+ let outputNode = null;
60
+
61
+ if ( blendMode === BlendModeNode.BURN ) {
62
+
63
+ outputNode = BurnNode.call( params );
64
+
65
+ } else if ( blendMode === BlendModeNode.DODGE ) {
66
+
67
+ outputNode = DodgeNode.call( params );
68
+
69
+ } else if ( blendMode === BlendModeNode.SCREEN ) {
70
+
71
+ outputNode = ScreenNode.call( params );
72
+
73
+ } else if ( blendMode === BlendModeNode.OVERLAY ) {
74
+
75
+ outputNode = OverlayNode.call( params );
76
+
77
+ }
78
+
79
+ return outputNode;
80
+
81
+ }
82
+
83
+ }
84
+
85
+ export default BlendModeNode;
@@ -1,19 +1,9 @@
1
1
  import TempNode from '../core/TempNode.js';
2
- import { ShaderNode, vec3, mat3, add, sub, mul, max, div, dot, float, mix, cos, sin, atan2, sqrt } from '../shadernode/ShaderNodeBaseElements.js';
3
-
4
- const luminanceNode = new ShaderNode( ( { color } ) => {
5
-
6
- const LUMA = vec3( 0.2125, 0.7154, 0.0721 );
7
-
8
- return dot( color, LUMA );
9
-
10
- } );
2
+ import { ShaderNode, vec3, mat3, add, sub, mul, max, div, float, mix, cos, sin, atan2, sqrt, luminance } from '../shadernode/ShaderNodeBaseElements.js';
11
3
 
12
4
  const saturationNode = new ShaderNode( ( { color, adjustment } ) => {
13
5
 
14
- const intensityNode = luminanceNode.call( { color } );
15
-
16
- return mix( intensityNode, color, adjustment );
6
+ return mix( luminance( color ), color, adjustment );
17
7
 
18
8
  } );
19
9
 
@@ -1,6 +1,5 @@
1
1
  import TempNode from '../core/TempNode.js';
2
- import ModelNode from '../accessors/ModelNode.js';
3
- import { ShaderNode, positionView, normalView, uv, vec3, add, sub, mul, dFdx, dFdy, cross, max, dot, normalize, inversesqrt, faceDirection } from '../shadernode/ShaderNodeBaseElements.js';
2
+ import { ShaderNode, positionView, normalView, uv, vec3, add, sub, mul, dFdx, dFdy, cross, max, dot, normalize, inversesqrt, faceDirection, modelNormalMatrix, TBNViewMatrix } from '../shadernode/ShaderNodeBaseElements.js';
4
3
 
5
4
  import { TangentSpaceNormalMap, ObjectSpaceNormalMap } from 'three';
6
5
 
@@ -44,7 +43,7 @@ class NormalMapNode extends TempNode {
44
43
 
45
44
  }
46
45
 
47
- construct() {
46
+ construct( builder ) {
48
47
 
49
48
  const { normalMapType, scaleNode } = this;
50
49
 
@@ -62,18 +61,26 @@ class NormalMapNode extends TempNode {
62
61
 
63
62
  if ( normalMapType === ObjectSpaceNormalMap ) {
64
63
 
65
- const vertexNormalNode = mul( new ModelNode( ModelNode.NORMAL_MATRIX ), normalMap );
66
-
67
- outputNode = normalize( vertexNormalNode );
64
+ outputNode = normalize( mul( modelNormalMatrix, normalMap ) );
68
65
 
69
66
  } else if ( normalMapType === TangentSpaceNormalMap ) {
70
67
 
71
- outputNode = perturbNormal2ArbNode.call( {
72
- eye_pos: positionView,
73
- surf_norm: normalView,
74
- mapN: normalMap,
75
- uv: uv()
76
- } );
68
+ const tangent = builder.hasGeometryAttribute( 'tangent' );
69
+
70
+ if ( tangent === true ) {
71
+
72
+ outputNode = normalize( mul( TBNViewMatrix, normalMap ) );
73
+
74
+ } else {
75
+
76
+ outputNode = perturbNormal2ArbNode.call( {
77
+ eye_pos: positionView,
78
+ surf_norm: normalView,
79
+ mapN: normalMap,
80
+ uv: uv()
81
+ } );
82
+
83
+ }
77
84
 
78
85
  }
79
86
 
@@ -0,0 +1,25 @@
1
+ import TempNode from '../core/Node.js';
2
+ import { mul, floor, reciprocal } from '../shadernode/ShaderNodeBaseElements.js';
3
+
4
+ class PosterizeNode extends TempNode {
5
+
6
+ constructor( sourceNode, stepsNode ) {
7
+
8
+ super();
9
+
10
+ this.sourceNode = sourceNode;
11
+ this.stepsNode = stepsNode;
12
+
13
+ }
14
+
15
+ construct() {
16
+
17
+ const { sourceNode, stepsNode } = this;
18
+
19
+ return mul( floor( mul( sourceNode, stepsNode ) ), reciprocal( stepsNode ) );
20
+
21
+ }
22
+
23
+ }
24
+
25
+ export default PosterizeNode;