super-three 0.133.4 → 0.136.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 (409) hide show
  1. package/LICENSE +1 -1
  2. package/build/three.js +2285 -1983
  3. package/build/three.min.js +1 -1
  4. package/build/three.module.js +5983 -5358
  5. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  6. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  7. package/examples/fonts/open-sans/open-sans.css +9 -0
  8. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  9. package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
  10. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  11. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  12. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  13. package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
  14. package/examples/js/animation/CCDIKSolver.js +0 -1
  15. package/examples/js/animation/MMDPhysics.js +2 -4
  16. package/examples/js/cameras/CinematicCamera.js +2 -7
  17. package/examples/js/controls/ArcballControls.js +99 -72
  18. package/examples/js/controls/DragControls.js +7 -0
  19. package/examples/js/controls/OrbitControls.js +5 -36
  20. package/examples/js/controls/TrackballControls.js +3 -2
  21. package/examples/js/controls/TransformControls.js +24 -1
  22. package/examples/js/csm/CSM.js +2 -2
  23. package/examples/js/csm/CSMFrustum.js +133 -0
  24. package/examples/js/curves/CurveExtras.js +0 -2
  25. package/examples/js/effects/AsciiEffect.js +2 -9
  26. package/examples/js/exporters/GLTFExporter.js +148 -64
  27. package/examples/js/exporters/MMDExporter.js +1 -1
  28. package/examples/js/exporters/USDZExporter.js +45 -26
  29. package/examples/js/geometries/ConvexGeometry.js +1 -1
  30. package/examples/js/geometries/TeapotGeometry.js +0 -1
  31. package/examples/js/interactive/SelectionBox.js +2 -0
  32. package/examples/js/interactive/SelectionHelper.js +22 -7
  33. package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
  34. package/examples/js/lines/LineMaterial.js +58 -20
  35. package/examples/js/lines/LineSegments2.js +29 -24
  36. package/examples/js/loaders/3DMLoader.js +24 -11
  37. package/examples/js/loaders/3MFLoader.js +2 -2
  38. package/examples/js/loaders/AMFLoader.js +0 -2
  39. package/examples/js/loaders/BasisTextureLoader.js +1 -0
  40. package/examples/js/loaders/ColladaLoader.js +61 -4
  41. package/examples/js/loaders/EXRLoader.js +201 -272
  42. package/examples/js/loaders/FBXLoader.js +4 -5
  43. package/examples/js/loaders/GLTFLoader.js +98 -35
  44. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -10
  45. package/examples/js/loaders/KTX2Loader.js +23 -2
  46. package/examples/js/loaders/KTXLoader.js +1 -1
  47. package/examples/js/loaders/LDrawLoader.js +1169 -901
  48. package/examples/js/loaders/LUT3dlLoader.js +19 -10
  49. package/examples/js/loaders/LUTCubeLoader.js +5 -4
  50. package/examples/js/loaders/LWOLoader.js +8 -6
  51. package/examples/js/loaders/LogLuvLoader.js +766 -0
  52. package/examples/js/loaders/MMDLoader.js +0 -1
  53. package/examples/js/loaders/NRRDLoader.js +9 -2
  54. package/examples/js/loaders/OBJLoader.js +0 -2
  55. package/examples/js/loaders/PLYLoader.js +33 -8
  56. package/examples/js/loaders/RGBELoader.js +8 -22
  57. package/examples/js/loaders/RGBMLoader.js +56 -6
  58. package/examples/js/loaders/SVGLoader.js +12 -6
  59. package/examples/js/loaders/TDSLoader.js +237 -271
  60. package/examples/js/loaders/VOXLoader.js +1 -0
  61. package/examples/js/loaders/VRMLLoader.js +11 -22
  62. package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
  63. package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
  64. package/examples/js/math/ConvexHull.js +7 -13
  65. package/examples/js/math/ImprovedNoise.js +1 -1
  66. package/examples/js/misc/GPUComputationRenderer.js +3 -1
  67. package/examples/js/misc/Volume.js +2 -2
  68. package/examples/js/modifiers/CurveModifier.js +8 -7
  69. package/examples/js/modifiers/EdgeSplitModifier.js +1 -1
  70. package/examples/js/modifiers/SimplifyModifier.js +1 -1
  71. package/examples/js/objects/Lensflare.js +2 -10
  72. package/examples/js/objects/MarchingCubes.js +42 -128
  73. package/examples/js/objects/Reflector.js +8 -13
  74. package/examples/js/objects/ReflectorForSSRPass.js +0 -10
  75. package/examples/js/objects/Refractor.js +8 -13
  76. package/examples/js/objects/Sky.js +1 -1
  77. package/examples/js/objects/Water.js +3 -15
  78. package/examples/js/objects/Water2.js +4 -7
  79. package/examples/js/postprocessing/GlitchPass.js +6 -5
  80. package/examples/js/postprocessing/SMAAPass.js +2 -9
  81. package/examples/js/postprocessing/SSAOPass.js +10 -21
  82. package/examples/js/postprocessing/SavePass.js +1 -5
  83. package/examples/js/renderers/CSS2DRenderer.js +4 -4
  84. package/examples/js/renderers/CSS3DRenderer.js +4 -4
  85. package/examples/js/shaders/ConvolutionShader.js +0 -1
  86. package/examples/js/shaders/DigitalGlitch.js +3 -3
  87. package/examples/js/shaders/FXAAShader.js +1 -1
  88. package/examples/js/shaders/FilmShader.js +1 -1
  89. package/examples/js/shaders/GammaCorrectionShader.js +1 -1
  90. package/examples/js/shaders/HorizontalBlurShader.js +1 -2
  91. package/examples/js/shaders/MMDToonShader.js +0 -1
  92. package/examples/js/shaders/SSAOShader.js +1 -1
  93. package/examples/js/shaders/SSRShader.js +1 -1
  94. package/examples/js/shaders/SSRrShader.js +1 -1
  95. package/examples/js/shaders/VerticalBlurShader.js +1 -2
  96. package/examples/js/utils/GeometryUtils.js +1 -1
  97. package/examples/jsm/animation/CCDIKSolver.js +0 -1
  98. package/examples/jsm/animation/MMDPhysics.js +1 -3
  99. package/examples/jsm/cameras/CinematicCamera.js +2 -5
  100. package/examples/jsm/{WebGL.js → capabilities/WebGL.js} +2 -2
  101. package/examples/jsm/{renderers/webgpu → capabilities}/WebGPU.js +1 -1
  102. package/examples/jsm/controls/ArcballControls.js +80 -77
  103. package/examples/jsm/controls/DragControls.js +7 -0
  104. package/examples/jsm/controls/OrbitControls.js +9 -51
  105. package/examples/jsm/controls/TrackballControls.js +1 -1
  106. package/examples/jsm/controls/TransformControls.js +24 -1
  107. package/examples/jsm/csm/CSM.js +3 -3
  108. package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
  109. package/examples/jsm/curves/CurveExtras.js +0 -2
  110. package/examples/jsm/effects/AsciiEffect.js +2 -9
  111. package/examples/jsm/exporters/GLTFExporter.js +169 -99
  112. package/examples/jsm/exporters/MMDExporter.js +1 -1
  113. package/examples/jsm/exporters/USDZExporter.js +47 -26
  114. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  115. package/examples/jsm/geometries/TeapotGeometry.js +0 -1
  116. package/examples/jsm/interactive/SelectionBox.js +1 -0
  117. package/examples/jsm/interactive/SelectionHelper.js +19 -7
  118. package/examples/jsm/libs/flow.module.js +3338 -0
  119. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  120. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  121. package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
  122. package/examples/jsm/lines/LineMaterial.js +59 -23
  123. package/examples/jsm/lines/LineSegments2.js +22 -18
  124. package/examples/jsm/loaders/3DMLoader.js +18 -12
  125. package/examples/jsm/loaders/3MFLoader.js +2 -2
  126. package/examples/jsm/loaders/AMFLoader.js +0 -2
  127. package/examples/jsm/loaders/BasisTextureLoader.js +7 -0
  128. package/examples/jsm/loaders/ColladaLoader.js +61 -4
  129. package/examples/jsm/loaders/EXRLoader.js +200 -306
  130. package/examples/jsm/loaders/FBXLoader.js +4 -5
  131. package/examples/jsm/loaders/GLTFLoader.js +102 -40
  132. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -17
  133. package/examples/jsm/loaders/KTX2Loader.js +30 -2
  134. package/examples/jsm/loaders/KTXLoader.js +1 -1
  135. package/examples/jsm/loaders/LDrawLoader.js +1159 -898
  136. package/examples/jsm/loaders/LUT3dlLoader.js +19 -12
  137. package/examples/jsm/loaders/LUTCubeLoader.js +5 -5
  138. package/examples/jsm/loaders/LWOLoader.js +8 -6
  139. package/examples/jsm/loaders/LogLuvLoader.js +606 -0
  140. package/examples/jsm/loaders/MMDLoader.js +0 -1
  141. package/examples/jsm/loaders/NRRDLoader.js +10 -2
  142. package/examples/jsm/loaders/OBJLoader.js +0 -2
  143. package/examples/jsm/loaders/PLYLoader.js +34 -8
  144. package/examples/jsm/loaders/RGBELoader.js +7 -28
  145. package/examples/jsm/loaders/RGBMLoader.js +62 -8
  146. package/examples/jsm/loaders/SVGLoader.js +15 -7
  147. package/examples/jsm/loaders/TDSLoader.js +236 -275
  148. package/examples/jsm/loaders/VOXLoader.js +1 -0
  149. package/examples/jsm/loaders/VRMLLoader.js +11 -23
  150. package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
  151. package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
  152. package/examples/jsm/math/ConvexHull.js +7 -13
  153. package/examples/jsm/math/ImprovedNoise.js +1 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
  155. package/examples/jsm/misc/Volume.js +2 -2
  156. package/examples/jsm/modifiers/CurveModifier.js +9 -8
  157. package/examples/jsm/modifiers/EdgeSplitModifier.js +1 -1
  158. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  159. package/examples/jsm/node-editor/NodeEditor.js +455 -0
  160. package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
  161. package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
  162. package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
  163. package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
  164. package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
  165. package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
  166. package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
  167. package/examples/jsm/node-editor/examples/rim.json +1 -0
  168. package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
  169. package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
  170. package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
  171. package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
  172. package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
  173. package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
  174. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +108 -0
  175. package/examples/jsm/node-editor/math/DotEditor.js +36 -0
  176. package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
  177. package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
  178. package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
  179. package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
  180. package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
  181. package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
  182. package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
  183. package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
  184. package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
  185. package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
  186. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
  187. package/examples/jsm/nodes/materials/nodes/StandardNode.js +7 -6
  188. package/examples/jsm/nodes/math/MathNode.js +12 -0
  189. package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
  190. package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
  191. package/examples/jsm/nodes/utils/ColorSpaceNode.js +5 -177
  192. package/examples/jsm/objects/Lensflare.js +5 -16
  193. package/examples/jsm/objects/MarchingCubes.js +46 -152
  194. package/examples/jsm/objects/Reflector.js +8 -16
  195. package/examples/jsm/objects/ReflectorForSSRPass.js +0 -12
  196. package/examples/jsm/objects/Refractor.js +8 -16
  197. package/examples/jsm/objects/Sky.js +1 -1
  198. package/examples/jsm/objects/Water.js +3 -18
  199. package/examples/jsm/objects/Water2.js +4 -8
  200. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
  201. package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
  202. package/examples/jsm/postprocessing/BloomPass.js +1 -1
  203. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  204. package/examples/jsm/postprocessing/ClearPass.js +1 -1
  205. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
  206. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  207. package/examples/jsm/postprocessing/EffectComposer.js +3 -3
  208. package/examples/jsm/postprocessing/FilmPass.js +1 -1
  209. package/examples/jsm/postprocessing/GlitchPass.js +10 -7
  210. package/examples/jsm/postprocessing/HalftonePass.js +1 -1
  211. package/examples/jsm/postprocessing/MaskPass.js +1 -1
  212. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  213. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  214. package/examples/jsm/postprocessing/SAOPass.js +2 -2
  215. package/examples/jsm/postprocessing/SMAAPass.js +3 -12
  216. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
  217. package/examples/jsm/postprocessing/SSAOPass.js +15 -26
  218. package/examples/jsm/postprocessing/SSRPass.js +1 -1
  219. package/examples/jsm/postprocessing/SSRrPass.js +1 -1
  220. package/examples/jsm/postprocessing/SavePass.js +2 -4
  221. package/examples/jsm/postprocessing/ShaderPass.js +1 -1
  222. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  223. package/examples/jsm/postprocessing/TexturePass.js +1 -1
  224. package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
  225. package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
  226. package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
  227. package/examples/jsm/renderers/nodes/Nodes.js +17 -13
  228. package/examples/jsm/renderers/nodes/ShaderNode.js +229 -49
  229. package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
  230. package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
  231. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
  232. package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
  233. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
  234. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
  235. package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
  236. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
  237. package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
  238. package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
  239. package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
  240. package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
  241. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
  242. package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
  243. package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
  244. package/examples/jsm/renderers/nodes/core/Node.js +32 -10
  245. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
  246. package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
  247. package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
  248. package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
  249. package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
  250. package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
  251. package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
  252. package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
  253. package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
  254. package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
  255. package/examples/jsm/renderers/nodes/core/constants.js +2 -0
  256. package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +43 -63
  257. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
  258. package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
  259. package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
  260. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
  261. package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
  262. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +13 -10
  263. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
  264. package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
  265. package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
  266. package/examples/jsm/renderers/nodes/math/MathNode.js +91 -37
  267. package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
  268. package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
  269. package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
  270. package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
  271. package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
  272. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
  273. package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
  274. package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
  275. package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
  276. package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
  277. package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
  278. package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
  279. package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
  280. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
  281. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +192 -95
  282. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
  283. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
  284. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
  285. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +10 -9
  286. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
  287. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  288. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
  289. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
  290. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +44 -65
  291. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +13 -31
  292. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
  293. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +35 -29
  294. package/examples/jsm/renderers/webgpu/constants.js +2 -2
  295. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +459 -95
  296. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  297. package/examples/jsm/shaders/ConvolutionShader.js +0 -1
  298. package/examples/jsm/shaders/DigitalGlitch.js +3 -3
  299. package/examples/jsm/shaders/FXAAShader.js +1 -1
  300. package/examples/jsm/shaders/FilmShader.js +1 -1
  301. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  302. package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
  303. package/examples/jsm/shaders/MMDToonShader.js +0 -1
  304. package/examples/jsm/shaders/SSAOShader.js +1 -1
  305. package/examples/jsm/shaders/SSRShader.js +1 -1
  306. package/examples/jsm/shaders/SSRrShader.js +1 -1
  307. package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
  308. package/examples/jsm/utils/GeometryUtils.js +1 -1
  309. package/examples/jsm/utils/LDrawUtils.js +195 -0
  310. package/examples/jsm/utils/WorkerPool.js +11 -11
  311. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
  312. package/examples/jsm/webxr/VRButton.js +24 -0
  313. package/examples/jsm/webxr/XREstimatedLight.js +2 -0
  314. package/package.json +27 -18
  315. package/src/Three.Legacy.js +18 -0
  316. package/src/Three.js +1 -3
  317. package/src/animation/AnimationMixer.js +1 -0
  318. package/src/cameras/CubeCamera.js +2 -0
  319. package/src/cameras/StereoCamera.js +8 -7
  320. package/src/constants.js +3 -23
  321. package/src/core/Layers.js +7 -1
  322. package/src/core/Object3D.js +3 -1
  323. package/src/extras/ImageUtils.js +63 -0
  324. package/src/extras/PMREMGenerator.js +49 -185
  325. package/src/extras/core/Interpolations.js +1 -1
  326. package/src/geometries/LatheGeometry.js +70 -47
  327. package/src/helpers/CameraHelper.js +1 -1
  328. package/src/loaders/FileLoader.js +98 -144
  329. package/src/loaders/ImageLoader.js +9 -4
  330. package/src/loaders/LoaderUtils.js +26 -0
  331. package/src/loaders/MaterialLoader.js +8 -5
  332. package/src/loaders/ObjectLoader.js +2 -0
  333. package/src/materials/Material.js +8 -8
  334. package/src/materials/MeshPhysicalMaterial.js +20 -14
  335. package/src/math/Color.js +1 -39
  336. package/src/math/MathUtils.js +5 -16
  337. package/src/math/Quaternion.js +1 -1
  338. package/src/math/Ray.js +2 -2
  339. package/src/math/Sphere.js +10 -1
  340. package/src/objects/Skeleton.js +1 -0
  341. package/src/renderers/WebGLCubeRenderTarget.js +0 -2
  342. package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
  343. package/src/renderers/WebGLRenderer.js +106 -199
  344. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
  345. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
  346. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
  347. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +0 -2
  348. package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -78
  349. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  350. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -2
  351. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
  352. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
  353. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  354. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
  355. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +28 -2
  356. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +10 -3
  357. package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +1 -2
  358. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  359. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  360. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +9 -8
  361. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -3
  362. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -3
  363. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -1
  364. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -2
  365. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +23 -5
  366. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
  367. package/src/renderers/shaders/ShaderLib.js +8 -6
  368. package/src/renderers/shaders/UniformsLib.js +1 -2
  369. package/src/renderers/webgl/WebGLCapabilities.js +0 -2
  370. package/src/renderers/webgl/WebGLCubeMaps.js +0 -4
  371. package/src/renderers/webgl/WebGLCubeUVMaps.js +29 -16
  372. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  373. package/src/renderers/webgl/WebGLMaterials.js +27 -15
  374. package/src/renderers/webgl/WebGLMorphtargets.js +13 -0
  375. package/src/renderers/webgl/WebGLProgram.js +12 -37
  376. package/src/renderers/webgl/WebGLPrograms.js +192 -70
  377. package/src/renderers/webgl/WebGLRenderLists.js +4 -14
  378. package/src/renderers/webgl/WebGLShaderCache.js +120 -0
  379. package/src/renderers/webgl/WebGLShadowMap.js +14 -5
  380. package/src/renderers/webgl/WebGLState.js +157 -17
  381. package/src/renderers/webgl/WebGLTextures.js +442 -83
  382. package/src/renderers/webgl/WebGLUniforms.js +45 -1
  383. package/src/renderers/webgl/WebGLUtils.js +86 -28
  384. package/src/renderers/webxr/WebXRManager.js +77 -109
  385. package/src/scenes/Scene.js +1 -1
  386. package/src/textures/DataTexture.js +0 -2
  387. package/src/textures/DataTexture2DArray.js +0 -2
  388. package/src/textures/DataTexture3D.js +0 -2
  389. package/src/textures/FramebufferTexture.js +25 -0
  390. package/src/textures/Texture.js +8 -1
  391. package/src/textures/VideoTexture.js +1 -3
  392. package/examples/js/WebGL.js +0 -90
  393. package/examples/js/controls/DeviceOrientationControls.js +0 -147
  394. package/examples/js/libs/dat.gui.min.js +0 -14
  395. package/examples/js/utils/RoughnessMipmapper.js +0 -278
  396. package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
  397. package/examples/jsm/libs/dat.gui.module.js +0 -3575
  398. package/examples/jsm/libs/glslang.js +0 -78
  399. package/examples/jsm/libs/glslang.wasm +0 -0
  400. package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
  401. package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
  402. package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
  403. package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
  404. package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
  405. package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
  406. package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
  407. package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
  408. package/examples/jsm/utils/RoughnessMipmapper.js +0 -300
  409. package/src/extras/objects/ImmediateRenderObject.js +0 -31
@@ -1,3 +1,7 @@
1
+ // core
2
+ import PropertyNode from './core/PropertyNode.js';
3
+ import VarNode from './core/VarNode.js';
4
+
1
5
  // inputs
2
6
  import ColorNode from './inputs/ColorNode.js';
3
7
  import FloatNode from './inputs/FloatNode.js';
@@ -5,11 +9,18 @@ import Vector2Node from './inputs/Vector2Node.js';
5
9
  import Vector3Node from './inputs/Vector3Node.js';
6
10
  import Vector4Node from './inputs/Vector4Node.js';
7
11
 
12
+ // accessors
13
+ import PositionNode from './accessors/PositionNode.js';
14
+ import NormalNode from './accessors/NormalNode.js';
15
+
8
16
  // math
9
- import MathNode from './math/MathNode.js';
10
17
  import OperatorNode from './math/OperatorNode.js';
18
+ import CondNode from './math/CondNode.js';
19
+ import MathNode from './math/MathNode.js';
11
20
 
12
21
  // utils
22
+ import ArrayElementNode from './utils/ArrayElementNode.js';
23
+ import ConvertNode from './utils/ConvertNode.js';
13
24
  import JoinNode from './utils/JoinNode.js';
14
25
  import SplitNode from './utils/SplitNode.js';
15
26
 
@@ -18,17 +29,35 @@ import { Vector2, Vector3, Vector4, Color } from 'three';
18
29
 
19
30
  const NodeHandler = {
20
31
 
21
- get: function ( node, prop ) {
32
+ construct( NodeClosure, params ) {
33
+
34
+ const inputs = params.shift();
35
+
36
+ return NodeClosure( ShaderNodeObjects( inputs ), ...params );
22
37
 
23
- // Split Properties Pass
38
+ },
39
+
40
+ get: function ( node, prop ) {
24
41
 
25
42
  if ( typeof prop === 'string' && node[ prop ] === undefined ) {
26
43
 
27
- const splitProps = prop.match( /^[xyzw]{1,4}$/ );
44
+ if ( /^[xyzwrgbastpq]{1,4}$/.test( prop ) === true ) {
28
45
 
29
- if ( splitProps !== null ) {
46
+ // accessing properties ( swizzle )
30
47
 
31
- return ShaderNodeObject( new SplitNode( node, splitProps[ 0 ] ) );
48
+ prop = prop
49
+ .replace( /r|s/g, 'x' )
50
+ .replace( /g|t/g, 'y' )
51
+ .replace( /b|p/g, 'z' )
52
+ .replace( /a|q/g, 'w' );
53
+
54
+ return ShaderNodeObject( new SplitNode( node, prop ) );
55
+
56
+ } else if ( /^\d+$/.test( prop ) === true ) {
57
+
58
+ // accessing array
59
+
60
+ return ShaderNodeObject( new ArrayElementNode( node, new FloatNode( Number( prop ) ).setConst( true ) ) );
32
61
 
33
62
  }
34
63
 
@@ -40,7 +69,9 @@ const NodeHandler = {
40
69
 
41
70
  };
42
71
 
43
- export const ShaderNodeObject = ( obj ) => {
72
+ const nodeObjects = new WeakMap();
73
+
74
+ const ShaderNodeObject = ( obj ) => {
44
75
 
45
76
  const type = typeof obj;
46
77
 
@@ -52,16 +83,17 @@ export const ShaderNodeObject = ( obj ) => {
52
83
 
53
84
  if ( obj.isNode === true ) {
54
85
 
55
- const node = obj;
86
+ let nodeObject = nodeObjects.get( obj );
56
87
 
57
- if ( node.isProxyNode !== true ) {
88
+ if ( nodeObject === undefined ) {
58
89
 
59
- node.isProxyNode = true;
60
-
61
- return new Proxy( node, NodeHandler );
90
+ nodeObject = new Proxy( obj, NodeHandler );
91
+ nodeObjects.set( obj, nodeObject );
62
92
 
63
93
  }
64
94
 
95
+ return nodeObject;
96
+
65
97
  }
66
98
 
67
99
  }
@@ -70,7 +102,19 @@ export const ShaderNodeObject = ( obj ) => {
70
102
 
71
103
  };
72
104
 
73
- export const ShaderNodeArray = ( array ) => {
105
+ const ShaderNodeObjects = ( objects ) => {
106
+
107
+ for ( const name in objects ) {
108
+
109
+ objects[ name ] = ShaderNodeObject( objects[ name ] );
110
+
111
+ }
112
+
113
+ return objects;
114
+
115
+ };
116
+
117
+ const ShaderNodeArray = ( array ) => {
74
118
 
75
119
  const len = array.length;
76
120
 
@@ -84,29 +128,57 @@ export const ShaderNodeArray = ( array ) => {
84
128
 
85
129
  };
86
130
 
87
- export const ShaderNodeScript = ( jsFunc ) => {
131
+ const ShaderNodeProxy = ( NodeClass, scope = null, factor = null ) => {
88
132
 
89
- return ( ...params ) => {
133
+ if ( scope === null ) {
90
134
 
91
- ShaderNodeArray( params );
135
+ return ( ...params ) => {
92
136
 
93
- return ShaderNodeObject( jsFunc( ...params ) );
137
+ return ShaderNodeObject( new NodeClass( ...ShaderNodeArray( params ) ) );
94
138
 
95
- };
139
+ };
140
+
141
+ } else if ( factor === null ) {
142
+
143
+ return ( ...params ) => {
144
+
145
+ return ShaderNodeObject( new NodeClass( scope, ...ShaderNodeArray( params ) ) );
146
+
147
+ };
148
+
149
+ } else {
150
+
151
+ factor = ShaderNodeObject( factor );
152
+
153
+ return ( ...params ) => {
154
+
155
+ return ShaderNodeObject( new NodeClass( scope, ...ShaderNodeArray( params ), factor ) );
156
+
157
+ };
158
+
159
+ }
96
160
 
97
161
  };
98
162
 
99
- export const ShaderNode = ( obj ) => {
163
+ const ShaderNodeScript = function ( jsFunc ) {
100
164
 
101
- return ShaderNodeScript( obj );
165
+ return ( inputs, builder ) => {
166
+
167
+ ShaderNodeObjects( inputs );
168
+
169
+ return ShaderNodeObject( jsFunc( inputs, builder ) );
170
+
171
+ };
102
172
 
103
173
  };
104
174
 
175
+ export const ShaderNode = new Proxy( ShaderNodeScript, NodeHandler );
176
+
105
177
  //
106
178
  // Node Material Shader Syntax
107
179
  //
108
180
 
109
- export const uniform = ShaderNodeScript( ( inputNode ) => {
181
+ export const uniform = new ShaderNode( ( inputNode ) => {
110
182
 
111
183
  inputNode.setConst( false );
112
184
 
@@ -114,80 +186,188 @@ export const uniform = ShaderNodeScript( ( inputNode ) => {
114
186
 
115
187
  } );
116
188
 
189
+ export const nodeObject = ( val ) => {
190
+
191
+ return ShaderNodeObject( val );
192
+
193
+ };
194
+
117
195
  export const float = ( val ) => {
118
196
 
119
- return ShaderNodeObject( new FloatNode( val ).setConst( true ) );
197
+ return nodeObject( new FloatNode( val ).setConst( true ) );
120
198
 
121
199
  };
122
200
 
123
201
  export const color = ( ...params ) => {
124
202
 
125
- return ShaderNodeObject( new ColorNode( new Color( ...params ) ).setConst( true ) );
203
+ return nodeObject( new ColorNode( new Color( ...params ) ).setConst( true ) );
126
204
 
127
205
  };
128
206
 
129
207
  export const join = ( ...params ) => {
130
208
 
131
- return ShaderNodeObject( new JoinNode( ShaderNodeArray( params ) ) );
209
+ return nodeObject( new JoinNode( ShaderNodeArray( params ) ) );
132
210
 
133
211
  };
134
212
 
135
- export const vec2 = ( ...params ) => {
213
+ export const cond = ( ...params ) => {
136
214
 
137
- return ShaderNodeObject( new Vector2Node( new Vector2( ...params ) ).setConst( true ) );
215
+ return nodeObject( new CondNode( ...ShaderNodeArray( params ) ) );
138
216
 
139
217
  };
140
218
 
141
- export const vec3 = ( ...params ) => {
219
+ export const vec2 = ( ...params ) => {
142
220
 
143
- return ShaderNodeObject( new Vector3Node( new Vector3( ...params ) ).setConst( true ) );
221
+ if ( params[ 0 ]?.isNode === true ) {
144
222
 
145
- };
223
+ return nodeObject( new ConvertNode( params[ 0 ], 'vec2' ) );
146
224
 
147
- export const vec4 = ( ...params ) => {
225
+ } else {
148
226
 
149
- return ShaderNodeObject( new Vector4Node( new Vector4( ...params ) ).setConst( true ) );
227
+ // Providing one scalar value: This value is used for all components
150
228
 
151
- };
229
+ if ( params.length === 1 ) {
152
230
 
153
- export const add = ( ...params ) => {
231
+ params[ 1 ] = params[ 0 ];
154
232
 
155
- return ShaderNodeObject( new OperatorNode( '+', ...ShaderNodeArray( params ) ) );
233
+ }
234
+
235
+ return nodeObject( new Vector2Node( new Vector2( ...params ) ).setConst( true ) );
236
+
237
+ }
156
238
 
157
239
  };
158
240
 
159
- export const sub = ( ...params ) => {
241
+ export const vec3 = ( ...params ) => {
160
242
 
161
- return new OperatorNode( '-', ...ShaderNodeArray( params ) );
243
+ if ( params[ 0 ]?.isNode === true ) {
162
244
 
163
- };
245
+ return nodeObject( new ConvertNode( params[ 0 ], 'vec3' ) );
164
246
 
165
- export const mul = ( ...params ) => {
247
+ } else {
166
248
 
167
- return ShaderNodeObject( new OperatorNode( '*', ...ShaderNodeArray( params ) ) );
249
+ // Providing one scalar value: This value is used for all components
168
250
 
169
- };
251
+ if ( params.length === 1 ) {
170
252
 
171
- export const div = ( ...params ) => {
253
+ params[ 1 ] = params[ 2 ] = params[ 0 ];
254
+
255
+ }
172
256
 
173
- return ShaderNodeObject( new OperatorNode( '/', ...ShaderNodeArray( params ) ) );
257
+ return nodeObject( new Vector3Node( new Vector3( ...params ) ).setConst( true ) );
258
+
259
+ }
174
260
 
175
261
  };
176
262
 
177
- export const floor = ( ...params ) => {
263
+ export const vec4 = ( ...params ) => {
178
264
 
179
- return ShaderNodeObject( new MathNode( 'floor', ...ShaderNodeArray( params ) ) );
265
+ if ( params[ 0 ]?.isNode === true ) {
180
266
 
181
- };
267
+ return nodeObject( new ConvertNode( params[ 0 ], 'vec4' ) );
182
268
 
183
- export const mod = ( ...params ) => {
269
+ } else {
184
270
 
185
- return ShaderNodeObject( new MathNode( 'mod', ...ShaderNodeArray( params ) ) );
271
+ // Providing one scalar value: This value is used for all components
272
+
273
+ if ( params.length === 1 ) {
274
+
275
+ params[ 1 ] = params[ 2 ] = params[ 3 ] = params[ 0 ];
276
+
277
+ }
278
+
279
+ return nodeObject( new Vector4Node( new Vector4( ...params ) ).setConst( true ) );
280
+
281
+ }
186
282
 
187
283
  };
188
284
 
189
- export const sign = ( ...params ) => {
285
+ export const addTo = ( varNode, ...params ) => {
190
286
 
191
- return ShaderNodeObject( new MathNode( 'sign', ...ShaderNodeArray( params ) ) );
287
+ varNode.node = add( varNode.node, ...ShaderNodeArray( params ) );
288
+
289
+ return nodeObject( varNode );
192
290
 
193
291
  };
292
+
293
+ export const add = ShaderNodeProxy( OperatorNode, '+' );
294
+ export const sub = ShaderNodeProxy( OperatorNode, '-' );
295
+ export const mul = ShaderNodeProxy( OperatorNode, '*' );
296
+ export const div = ShaderNodeProxy( OperatorNode, '/' );
297
+ export const equal = ShaderNodeProxy( OperatorNode, '==' );
298
+ export const assign = ShaderNodeProxy( OperatorNode, '=' );
299
+ export const greaterThan = ShaderNodeProxy( OperatorNode, '>' );
300
+ export const lessThanEqual = ShaderNodeProxy( OperatorNode, '<=' );
301
+ export const and = ShaderNodeProxy( OperatorNode, '&&' );
302
+
303
+ export const element = ShaderNodeProxy( ArrayElementNode );
304
+
305
+ export const normalGeometry = new NormalNode( NormalNode.GEOMETRY );
306
+ export const normalLocal = new NormalNode( NormalNode.LOCAL );
307
+ export const normalWorld = new NormalNode( NormalNode.WORLD );
308
+ export const normalView = new NormalNode( NormalNode.VIEW );
309
+ export const transformedNormalView = new VarNode( new NormalNode( NormalNode.VIEW ), 'TransformedNormalView', 'vec3' );
310
+
311
+ export const positionLocal = new PositionNode( PositionNode.LOCAL );
312
+ export const positionWorld = new PositionNode( PositionNode.WORLD );
313
+ export const positionView = new PositionNode( PositionNode.VIEW );
314
+ export const positionViewDirection = new PositionNode( PositionNode.VIEW_DIRECTION );
315
+
316
+ export const PI = float( 3.141592653589793 );
317
+ export const PI2 = float( 6.283185307179586 );
318
+ export const PI_HALF = float( 1.5707963267948966 );
319
+ export const RECIPROCAL_PI = float( 0.3183098861837907 );
320
+ export const RECIPROCAL_PI2 = float( 0.15915494309189535 );
321
+ export const EPSILON = float( 1e-6 );
322
+
323
+ export const diffuseColor = new PropertyNode( 'DiffuseColor', 'vec4' );
324
+ export const roughness = new PropertyNode( 'Roughness', 'float' );
325
+ export const metalness = new PropertyNode( 'Metalness', 'float' );
326
+ export const alphaTest = new PropertyNode( 'AlphaTest', 'float' );
327
+ export const specularColor = new PropertyNode( 'SpecularColor', 'color' );
328
+
329
+ export const abs = ShaderNodeProxy( MathNode, 'abs' );
330
+ export const acos = ShaderNodeProxy( MathNode, 'acos' );
331
+ export const asin = ShaderNodeProxy( MathNode, 'asin' );
332
+ export const atan = ShaderNodeProxy( MathNode, 'atan' );
333
+ export const ceil = ShaderNodeProxy( MathNode, 'ceil' );
334
+ export const clamp = ShaderNodeProxy( MathNode, 'clamp' );
335
+ export const cos = ShaderNodeProxy( MathNode, 'cos' );
336
+ export const cross = ShaderNodeProxy( MathNode, 'cross' );
337
+ export const degrees = ShaderNodeProxy( MathNode, 'degrees' );
338
+ export const dFdx = ShaderNodeProxy( MathNode, 'dFdx' );
339
+ export const dFdy = ShaderNodeProxy( MathNode, 'dFdy' );
340
+ export const distance = ShaderNodeProxy( MathNode, 'distance' );
341
+ export const dot = ShaderNodeProxy( MathNode, 'dot' );
342
+ export const exp = ShaderNodeProxy( MathNode, 'exp' );
343
+ export const exp2 = ShaderNodeProxy( MathNode, 'exp2' );
344
+ export const faceforward = ShaderNodeProxy( MathNode, 'faceforward' );
345
+ export const floor = ShaderNodeProxy( MathNode, 'floor' );
346
+ export const fract = ShaderNodeProxy( MathNode, 'fract' );
347
+ export const invert = ShaderNodeProxy( MathNode, 'invert' );
348
+ export const inversesqrt = ShaderNodeProxy( MathNode, 'inversesqrt' );
349
+ export const length = ShaderNodeProxy( MathNode, 'length' );
350
+ export const log = ShaderNodeProxy( MathNode, 'log' );
351
+ export const log2 = ShaderNodeProxy( MathNode, 'log2' );
352
+ export const max = ShaderNodeProxy( MathNode, 'max' );
353
+ export const min = ShaderNodeProxy( MathNode, 'min' );
354
+ export const mix = ShaderNodeProxy( MathNode, 'mix' );
355
+ export const mod = ShaderNodeProxy( MathNode, 'mod' );
356
+ export const negate = ShaderNodeProxy( MathNode, 'negate' );
357
+ export const normalize = ShaderNodeProxy( MathNode, 'normalize' );
358
+ export const pow = ShaderNodeProxy( MathNode, 'pow' );
359
+ export const pow2 = ShaderNodeProxy( MathNode, 'pow', 2 );
360
+ export const pow3 = ShaderNodeProxy( MathNode, 'pow', 3 );
361
+ export const pow4 = ShaderNodeProxy( MathNode, 'pow', 4 );
362
+ export const radians = ShaderNodeProxy( MathNode, 'radians' );
363
+ export const reflect = ShaderNodeProxy( MathNode, 'reflect' );
364
+ export const refract = ShaderNodeProxy( MathNode, 'refract' );
365
+ export const round = ShaderNodeProxy( MathNode, 'round' );
366
+ export const saturate = ShaderNodeProxy( MathNode, 'saturate' );
367
+ export const sign = ShaderNodeProxy( MathNode, 'sign' );
368
+ export const sin = ShaderNodeProxy( MathNode, 'sin' );
369
+ export const smoothstep = ShaderNodeProxy( MathNode, 'smoothstep' );
370
+ export const sqrt = ShaderNodeProxy( MathNode, 'sqrt' );
371
+ export const step = ShaderNodeProxy( MathNode, 'step' );
372
+ export const tan = ShaderNodeProxy( MathNode, 'tan' );
373
+ export const transformDirection = ShaderNodeProxy( MathNode, 'transformDirection' );
@@ -22,7 +22,7 @@ class MaterialNode extends Node {
22
22
  getNodeType( builder ) {
23
23
 
24
24
  const scope = this.scope;
25
- const material = builder.getContextValue( 'material' );
25
+ const material = builder.context.material;
26
26
 
27
27
  if ( scope === MaterialNode.COLOR ) {
28
28
 
@@ -46,7 +46,7 @@ class MaterialNode extends Node {
46
46
 
47
47
  generate( builder, output ) {
48
48
 
49
- const material = builder.getContextValue( 'material' );
49
+ const material = builder.context.material;
50
50
  const scope = this.scope;
51
51
 
52
52
  let node = null;
@@ -85,15 +85,15 @@ class MaterialNode extends Node {
85
85
 
86
86
  } else if ( scope === MaterialNode.SPECULAR ) {
87
87
 
88
- const specularTintNode = new MaterialReferenceNode( 'specularTint', 'color' );
88
+ const specularColorNode = new MaterialReferenceNode( 'specularColor', 'color' );
89
89
 
90
- if ( material.specularTintMap !== null && material.specularTintMap !== undefined && material.specularTintMap.isTexture === true ) {
90
+ if ( material.specularColorMap !== null && material.specularColorMap !== undefined && material.specularColorMap.isTexture === true ) {
91
91
 
92
- node = new OperatorNode( '*', specularTintNode, new MaterialReferenceNode( 'specularTintMap', 'texture' ) );
92
+ node = new OperatorNode( '*', specularColorNode, new MaterialReferenceNode( 'specularColorMap', 'texture' ) );
93
93
 
94
94
  } else {
95
95
 
96
- node = specularTintNode;
96
+ node = specularColorNode;
97
97
 
98
98
  }
99
99
 
@@ -12,16 +12,16 @@ class ModelViewProjectionNode extends Node {
12
12
 
13
13
  this.position = position;
14
14
 
15
- this._mvpMatrix = new OperatorNode( '*', new CameraNode( CameraNode.PROJECTION_MATRIX ), new ModelNode( ModelNode.VIEW_MATRIX ) );
16
-
17
15
  }
18
16
 
19
17
  generate( builder ) {
20
18
 
21
- const mvpSnipped = this._mvpMatrix.build( builder );
22
- const positionSnipped = this.position.build( builder, 'vec3' );
19
+ const position = this.position;
20
+
21
+ const mvpMatrix = new OperatorNode( '*', new CameraNode( CameraNode.PROJECTION_MATRIX ), new ModelNode( ModelNode.VIEW_MATRIX ) );
22
+ const mvpNode = new OperatorNode( '*', mvpMatrix, position );
23
23
 
24
- return `( ${mvpSnipped} * vec4( ${positionSnipped}, 1.0 ) )`;
24
+ return mvpNode.build( builder );
25
25
 
26
26
  }
27
27
 
@@ -5,10 +5,10 @@ import ModelNode from '../accessors/ModelNode.js';
5
5
  import CameraNode from '../accessors/CameraNode.js';
6
6
  import OperatorNode from '../math/OperatorNode.js';
7
7
  import MathNode from '../math/MathNode.js';
8
- import { inverseTransformDirection } from '../functions/MathFunctions.js';
9
8
 
10
9
  class NormalNode extends Node {
11
10
 
11
+ static GEOMETRY = 'geometry';
12
12
  static LOCAL = 'local';
13
13
  static WORLD = 'world';
14
14
  static VIEW = 'view';
@@ -21,16 +21,26 @@ class NormalNode extends Node {
21
21
 
22
22
  }
23
23
 
24
+ getHash( /*builder*/ ) {
25
+
26
+ return `normal-${this.scope}`;
27
+
28
+ }
29
+
24
30
  generate( builder ) {
25
31
 
26
32
  const scope = this.scope;
27
33
 
28
34
  let outputNode = null;
29
35
 
30
- if ( scope === NormalNode.LOCAL ) {
36
+ if ( scope === NormalNode.GEOMETRY ) {
31
37
 
32
38
  outputNode = new AttributeNode( 'normal', 'vec3' );
33
39
 
40
+ } else if ( scope === NormalNode.LOCAL ) {
41
+
42
+ outputNode = new VaryNode( new NormalNode( NormalNode.GEOMETRY ) );
43
+
34
44
  } else if ( scope === NormalNode.VIEW ) {
35
45
 
36
46
  const vertexNormalNode = new OperatorNode( '*', new ModelNode( ModelNode.NORMAL_MATRIX ), new NormalNode( NormalNode.LOCAL ) );
@@ -38,7 +48,8 @@ class NormalNode extends Node {
38
48
 
39
49
  } else if ( scope === NormalNode.WORLD ) {
40
50
 
41
- const vertexNormalNode = inverseTransformDirection.call( { dir: new NormalNode( NormalNode.VIEW ), matrix: new CameraNode( CameraNode.VIEW_MATRIX ) } );
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 ) );
42
53
  outputNode = new MathNode( MathNode.NORMALIZE, new VaryNode( vertexNormalNode ) );
43
54
 
44
55
  }
@@ -6,11 +6,9 @@ class PointUVNode extends Node {
6
6
 
7
7
  super( 'vec2' );
8
8
 
9
- Object.defineProperty( this, 'isPointUVNode', { value: true } );
10
-
11
9
  }
12
10
 
13
- generate( builder ) {
11
+ generate( /*builder*/ ) {
14
12
 
15
13
  return 'vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y )';
16
14
 
@@ -18,4 +16,6 @@ class PointUVNode extends Node {
18
16
 
19
17
  }
20
18
 
19
+ PointUVNode.prototype.isPointUVNode = true;
20
+
21
21
  export default PointUVNode;
@@ -4,10 +4,10 @@ import VaryNode from '../core/VaryNode.js';
4
4
  import ModelNode from '../accessors/ModelNode.js';
5
5
  import MathNode from '../math/MathNode.js';
6
6
  import OperatorNode from '../math/OperatorNode.js';
7
- import { transformDirection } from '../functions/MathFunctions.js';
8
7
 
9
8
  class PositionNode extends Node {
10
9
 
10
+ static GEOMETRY = 'geometry';
11
11
  static LOCAL = 'local';
12
12
  static WORLD = 'world';
13
13
  static VIEW = 'view';
@@ -21,19 +21,29 @@ class PositionNode extends Node {
21
21
 
22
22
  }
23
23
 
24
+ getHash( /*builder*/ ) {
25
+
26
+ return `position-${this.scope}`;
27
+
28
+ }
29
+
24
30
  generate( builder ) {
25
31
 
26
32
  const scope = this.scope;
27
33
 
28
34
  let outputNode = null;
29
35
 
30
- if ( scope === PositionNode.LOCAL ) {
31
-
36
+ if ( scope === PositionNode.GEOMETRY ) {
37
+
32
38
  outputNode = new AttributeNode( 'position', 'vec3' );
33
-
39
+
40
+ } else if ( scope === PositionNode.LOCAL ) {
41
+
42
+ outputNode = new VaryNode( new PositionNode( PositionNode.GEOMETRY ) );
43
+
34
44
  } else if ( scope === PositionNode.WORLD ) {
35
45
 
36
- const vertexPositionNode = transformDirection.call( { dir: new PositionNode( PositionNode.LOCAL ), matrix: new ModelNode( ModelNode.WORLD_MATRIX ) } );
46
+ const vertexPositionNode = new MathNode( MathNode.TRANSFORM_DIRECTION, new ModelNode( ModelNode.WORLD_MATRIX ), new PositionNode( PositionNode.LOCAL ) );
37
47
  outputNode = new VaryNode( vertexPositionNode );
38
48
 
39
49
  } else if ( scope === PositionNode.VIEW ) {
@@ -0,0 +1,107 @@
1
+ import Node from '../core/Node.js';
2
+ import AttributeNode from '../core/AttributeNode.js';
3
+ import PositionNode from '../accessors/PositionNode.js';
4
+ import NormalNode from '../accessors/NormalNode.js';
5
+ import Matrix4Node from '../inputs/Matrix4Node.js';
6
+ import BufferNode from '../inputs/BufferNode.js';
7
+
8
+ import { ShaderNode, assign, element, add, mul, transformDirection } from '../ShaderNode.js';
9
+
10
+ import { NodeUpdateType } from '../core/constants.js';
11
+
12
+ const Skinning = new ShaderNode( ( inputs, builder ) => {
13
+
14
+ const { position, normal, index, weight, bindMatrix, bindMatrixInverse, boneMatrices } = inputs;
15
+
16
+ const boneMatX = element( boneMatrices, index.x );
17
+ const boneMatY = element( boneMatrices, index.y );
18
+ const boneMatZ = element( boneMatrices, index.z );
19
+ const boneMatW = element( boneMatrices, index.w );
20
+
21
+ // POSITION
22
+
23
+ const skinVertex = mul( bindMatrix, position );
24
+
25
+ const skinned = add(
26
+ mul( mul( boneMatX, skinVertex ), weight.x ),
27
+ mul( mul( boneMatY, skinVertex ), weight.y ),
28
+ mul( mul( boneMatZ, skinVertex ), weight.z ),
29
+ mul( mul( boneMatW, skinVertex ), weight.w )
30
+ );
31
+
32
+ const skinPosition = mul( bindMatrixInverse, skinned ).xyz;
33
+
34
+ // NORMAL
35
+
36
+ let skinMatrix = add(
37
+ mul( weight.x, boneMatX ),
38
+ mul( weight.y, boneMatY ),
39
+ mul( weight.z, boneMatZ ),
40
+ mul( weight.w, boneMatW )
41
+ );
42
+
43
+ skinMatrix = mul( mul( bindMatrixInverse, skinMatrix ), bindMatrix );
44
+
45
+ const skinNormal = transformDirection( skinMatrix, normal ).xyz;
46
+
47
+ // ASSIGNS
48
+
49
+ assign( position, skinPosition ).build( builder );
50
+ assign( normal, skinNormal ).build( builder );
51
+
52
+ } );
53
+
54
+ class SkinningNode extends Node {
55
+
56
+ constructor( skinnedMesh ) {
57
+
58
+ super( 'void' );
59
+
60
+ this.skinnedMesh = skinnedMesh;
61
+
62
+ this.updateType = NodeUpdateType.Object;
63
+
64
+ //
65
+
66
+ this.skinIndexNode = new AttributeNode( 'skinIndex', 'uvec4' );
67
+ this.skinWeightNode = new AttributeNode( 'skinWeight', 'vec4' );
68
+
69
+ this.bindMatrixNode = new Matrix4Node( skinnedMesh.bindMatrix );
70
+ this.bindMatrixInverseNode = new Matrix4Node( skinnedMesh.bindMatrixInverse );
71
+ this.boneMatricesNode = new BufferNode( skinnedMesh.skeleton.boneMatrices, 'mat4', skinnedMesh.skeleton.bones.length );
72
+
73
+ }
74
+
75
+ generate( builder ) {
76
+
77
+ // inout nodes
78
+ const position = new PositionNode( PositionNode.LOCAL );
79
+ const normal = new NormalNode( NormalNode.LOCAL );
80
+
81
+ const index = this.skinIndexNode;
82
+ const weight = this.skinWeightNode;
83
+ const bindMatrix = this.bindMatrixNode;
84
+ const bindMatrixInverse = this.bindMatrixInverseNode;
85
+ const boneMatrices = this.boneMatricesNode;
86
+
87
+ Skinning( {
88
+ position,
89
+ normal,
90
+ index,
91
+ weight,
92
+ bindMatrix,
93
+ bindMatrixInverse,
94
+ boneMatrices
95
+ }, builder );
96
+
97
+ }
98
+
99
+ update() {
100
+
101
+ this.skinnedMesh.skeleton.update();
102
+
103
+ }
104
+
105
+ }
106
+
107
+ export default SkinningNode;