super-three 0.133.3 → 0.136.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. package/build/three.js +1059 -783
  2. package/build/three.min.js +1 -1
  3. package/build/three.module.js +1424 -895
  4. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  5. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  6. package/examples/fonts/open-sans/open-sans.css +9 -0
  7. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  8. package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
  9. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  10. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  11. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  12. package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
  13. package/examples/js/animation/CCDIKSolver.js +0 -1
  14. package/examples/js/animation/MMDPhysics.js +1 -3
  15. package/examples/js/controls/ArcballControls.js +99 -72
  16. package/examples/js/controls/DragControls.js +7 -0
  17. package/examples/js/controls/OrbitControls.js +5 -36
  18. package/examples/js/controls/TrackballControls.js +3 -2
  19. package/examples/js/controls/TransformControls.js +24 -1
  20. package/examples/js/csm/CSM.js +2 -2
  21. package/examples/js/csm/CSMFrustum.js +133 -0
  22. package/examples/js/curves/CurveExtras.js +0 -2
  23. package/examples/js/effects/AsciiEffect.js +2 -9
  24. package/examples/js/exporters/GLTFExporter.js +148 -64
  25. package/examples/js/exporters/USDZExporter.js +45 -26
  26. package/examples/js/geometries/TeapotGeometry.js +0 -1
  27. package/examples/js/interactive/SelectionBox.js +2 -0
  28. package/examples/js/interactive/SelectionHelper.js +22 -7
  29. package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
  30. package/examples/js/lines/LineMaterial.js +58 -20
  31. package/examples/js/lines/LineSegments2.js +29 -24
  32. package/examples/js/loaders/3DMLoader.js +24 -11
  33. package/examples/js/loaders/3MFLoader.js +2 -2
  34. package/examples/js/loaders/AMFLoader.js +0 -2
  35. package/examples/js/loaders/ColladaLoader.js +61 -4
  36. package/examples/js/loaders/EXRLoader.js +185 -262
  37. package/examples/js/loaders/FBXLoader.js +4 -5
  38. package/examples/js/loaders/GLTFLoader.js +96 -33
  39. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -8
  40. package/examples/js/loaders/KTX2Loader.js +23 -2
  41. package/examples/js/loaders/KTXLoader.js +1 -1
  42. package/examples/js/loaders/LDrawLoader.js +26 -30
  43. package/examples/js/loaders/LUT3dlLoader.js +2 -0
  44. package/examples/js/loaders/LUTCubeLoader.js +2 -0
  45. package/examples/js/loaders/LWOLoader.js +8 -6
  46. package/examples/js/loaders/LogLuvLoader.js +766 -0
  47. package/examples/js/loaders/MMDLoader.js +0 -1
  48. package/examples/js/loaders/NRRDLoader.js +9 -2
  49. package/examples/js/loaders/OBJLoader.js +0 -2
  50. package/examples/js/loaders/PLYLoader.js +33 -8
  51. package/examples/js/loaders/RGBELoader.js +2 -16
  52. package/examples/js/loaders/RGBMLoader.js +55 -5
  53. package/examples/js/loaders/SVGLoader.js +9 -5
  54. package/examples/js/loaders/TDSLoader.js +237 -271
  55. package/examples/js/loaders/VOXLoader.js +1 -0
  56. package/examples/js/loaders/VRMLLoader.js +2 -1
  57. package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
  58. package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
  59. package/examples/js/math/ImprovedNoise.js +1 -1
  60. package/examples/js/misc/GPUComputationRenderer.js +3 -1
  61. package/examples/js/objects/Lensflare.js +2 -10
  62. package/examples/js/objects/MarchingCubes.js +42 -128
  63. package/examples/js/objects/Reflector.js +7 -0
  64. package/examples/js/objects/Refractor.js +7 -0
  65. package/examples/js/objects/Sky.js +1 -1
  66. package/examples/js/objects/Water.js +2 -2
  67. package/examples/js/objects/Water2.js +4 -7
  68. package/examples/js/postprocessing/GlitchPass.js +3 -1
  69. package/examples/js/postprocessing/SSAOPass.js +1 -0
  70. package/examples/js/renderers/CSS2DRenderer.js +4 -4
  71. package/examples/js/renderers/CSS3DRenderer.js +4 -4
  72. package/examples/js/shaders/ConvolutionShader.js +0 -1
  73. package/examples/js/shaders/FXAAShader.js +1 -1
  74. package/examples/js/shaders/FilmShader.js +1 -1
  75. package/examples/js/shaders/GammaCorrectionShader.js +1 -1
  76. package/examples/js/shaders/HorizontalBlurShader.js +1 -2
  77. package/examples/js/shaders/SSRShader.js +1 -1
  78. package/examples/js/shaders/SSRrShader.js +1 -1
  79. package/examples/js/shaders/VerticalBlurShader.js +1 -2
  80. package/examples/js/utils/GeometryUtils.js +1 -1
  81. package/examples/js/utils/RoughnessMipmapper.js +18 -28
  82. package/examples/jsm/animation/CCDIKSolver.js +0 -1
  83. package/examples/jsm/animation/MMDPhysics.js +0 -2
  84. package/examples/jsm/controls/ArcballControls.js +80 -77
  85. package/examples/jsm/controls/DragControls.js +7 -0
  86. package/examples/jsm/controls/OrbitControls.js +9 -51
  87. package/examples/jsm/controls/TrackballControls.js +1 -1
  88. package/examples/jsm/controls/TransformControls.js +24 -1
  89. package/examples/jsm/csm/CSM.js +3 -3
  90. package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
  91. package/examples/jsm/curves/CurveExtras.js +0 -2
  92. package/examples/jsm/effects/AsciiEffect.js +2 -9
  93. package/examples/jsm/exporters/GLTFExporter.js +161 -75
  94. package/examples/jsm/exporters/USDZExporter.js +47 -26
  95. package/examples/jsm/geometries/TeapotGeometry.js +0 -1
  96. package/examples/jsm/interactive/SelectionBox.js +1 -0
  97. package/examples/jsm/interactive/SelectionHelper.js +19 -7
  98. package/examples/jsm/libs/flow.module.js +3338 -0
  99. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  100. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  101. package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
  102. package/examples/jsm/lines/LineMaterial.js +59 -23
  103. package/examples/jsm/lines/LineSegments2.js +22 -18
  104. package/examples/jsm/loaders/3DMLoader.js +18 -12
  105. package/examples/jsm/loaders/3MFLoader.js +2 -2
  106. package/examples/jsm/loaders/AMFLoader.js +0 -2
  107. package/examples/jsm/loaders/ColladaLoader.js +61 -4
  108. package/examples/jsm/loaders/EXRLoader.js +184 -293
  109. package/examples/jsm/loaders/FBXLoader.js +4 -5
  110. package/examples/jsm/loaders/GLTFLoader.js +101 -37
  111. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -14
  112. package/examples/jsm/loaders/KTX2Loader.js +30 -2
  113. package/examples/jsm/loaders/KTXLoader.js +1 -1
  114. package/examples/jsm/loaders/LDrawLoader.js +23 -24
  115. package/examples/jsm/loaders/LUT3dlLoader.js +2 -0
  116. package/examples/jsm/loaders/LUTCubeLoader.js +2 -0
  117. package/examples/jsm/loaders/LWOLoader.js +8 -6
  118. package/examples/jsm/loaders/LogLuvLoader.js +606 -0
  119. package/examples/jsm/loaders/MMDLoader.js +0 -1
  120. package/examples/jsm/loaders/NRRDLoader.js +10 -2
  121. package/examples/jsm/loaders/OBJLoader.js +0 -2
  122. package/examples/jsm/loaders/PLYLoader.js +34 -8
  123. package/examples/jsm/loaders/RGBELoader.js +0 -20
  124. package/examples/jsm/loaders/RGBMLoader.js +61 -7
  125. package/examples/jsm/loaders/SVGLoader.js +9 -6
  126. package/examples/jsm/loaders/TDSLoader.js +236 -275
  127. package/examples/jsm/loaders/VOXLoader.js +1 -0
  128. package/examples/jsm/loaders/VRMLLoader.js +2 -1
  129. package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
  130. package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
  131. package/examples/jsm/math/ImprovedNoise.js +1 -1
  132. package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
  133. package/examples/jsm/node-editor/NodeEditor.js +456 -0
  134. package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
  135. package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
  136. package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
  137. package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
  138. package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
  139. package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
  140. package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
  141. package/examples/jsm/node-editor/examples/rim.json +1 -0
  142. package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
  143. package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
  144. package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
  145. package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
  146. package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
  147. package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
  148. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +108 -0
  149. package/examples/jsm/node-editor/math/DotEditor.js +36 -0
  150. package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
  151. package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
  152. package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
  153. package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
  154. package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
  155. package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
  156. package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
  157. package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
  158. package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
  159. package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
  160. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
  161. package/examples/jsm/nodes/materials/nodes/StandardNode.js +7 -6
  162. package/examples/jsm/nodes/math/MathNode.js +12 -0
  163. package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
  164. package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
  165. package/examples/jsm/nodes/utils/ColorSpaceNode.js +1 -164
  166. package/examples/jsm/objects/Lensflare.js +3 -14
  167. package/examples/jsm/objects/MarchingCubes.js +46 -152
  168. package/examples/jsm/objects/Reflector.js +7 -0
  169. package/examples/jsm/objects/Refractor.js +7 -0
  170. package/examples/jsm/objects/Sky.js +1 -1
  171. package/examples/jsm/objects/Water.js +2 -2
  172. package/examples/jsm/objects/Water2.js +4 -8
  173. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
  174. package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
  175. package/examples/jsm/postprocessing/BloomPass.js +1 -1
  176. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  177. package/examples/jsm/postprocessing/ClearPass.js +1 -1
  178. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
  179. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  180. package/examples/jsm/postprocessing/EffectComposer.js +3 -3
  181. package/examples/jsm/postprocessing/FilmPass.js +1 -1
  182. package/examples/jsm/postprocessing/GlitchPass.js +4 -2
  183. package/examples/jsm/postprocessing/HalftonePass.js +1 -1
  184. package/examples/jsm/postprocessing/MaskPass.js +1 -1
  185. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  186. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  187. package/examples/jsm/postprocessing/SAOPass.js +2 -2
  188. package/examples/jsm/postprocessing/SMAAPass.js +1 -1
  189. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
  190. package/examples/jsm/postprocessing/SSAOPass.js +2 -1
  191. package/examples/jsm/postprocessing/SSRPass.js +1 -1
  192. package/examples/jsm/postprocessing/SSRrPass.js +1 -1
  193. package/examples/jsm/postprocessing/SavePass.js +1 -1
  194. package/examples/jsm/postprocessing/ShaderPass.js +1 -1
  195. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  196. package/examples/jsm/postprocessing/TexturePass.js +1 -1
  197. package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
  198. package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
  199. package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
  200. package/examples/jsm/renderers/nodes/Nodes.js +15 -13
  201. package/examples/jsm/renderers/nodes/ShaderNode.js +194 -41
  202. package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
  203. package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
  204. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
  205. package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
  206. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
  207. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
  208. package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
  209. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
  210. package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
  211. package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
  212. package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
  213. package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
  214. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
  215. package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
  216. package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
  217. package/examples/jsm/renderers/nodes/core/Node.js +32 -10
  218. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
  219. package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
  220. package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
  221. package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
  222. package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
  223. package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
  224. package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
  225. package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
  226. package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
  227. package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
  228. package/examples/jsm/renderers/nodes/core/constants.js +2 -0
  229. package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +60 -43
  230. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
  231. package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
  232. package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
  233. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
  234. package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
  235. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +10 -2
  236. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
  237. package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
  238. package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
  239. package/examples/jsm/renderers/nodes/math/MathNode.js +90 -37
  240. package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
  241. package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
  242. package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
  243. package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
  244. package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
  245. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
  246. package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
  247. package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
  248. package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
  249. package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
  250. package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
  251. package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
  252. package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
  253. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
  254. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +192 -95
  255. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
  256. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
  257. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
  258. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +10 -9
  259. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
  260. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
  261. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
  262. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +44 -65
  263. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +12 -28
  264. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
  265. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +34 -27
  266. package/examples/jsm/renderers/webgpu/constants.js +2 -2
  267. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +453 -95
  268. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  269. package/examples/jsm/shaders/ConvolutionShader.js +0 -1
  270. package/examples/jsm/shaders/FXAAShader.js +1 -1
  271. package/examples/jsm/shaders/FilmShader.js +1 -1
  272. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  273. package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
  274. package/examples/jsm/shaders/SSRShader.js +1 -1
  275. package/examples/jsm/shaders/SSRrShader.js +1 -1
  276. package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
  277. package/examples/jsm/utils/GeometryUtils.js +1 -1
  278. package/examples/jsm/utils/RoughnessMipmapper.js +19 -31
  279. package/examples/jsm/utils/WorkerPool.js +11 -11
  280. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
  281. package/package.json +24 -18
  282. package/src/Three.Legacy.js +18 -0
  283. package/src/Three.js +1 -3
  284. package/src/cameras/StereoCamera.js +8 -7
  285. package/src/constants.js +1 -8
  286. package/src/core/Layers.js +7 -1
  287. package/src/core/Object3D.js +3 -1
  288. package/src/extras/PMREMGenerator.js +23 -109
  289. package/src/extras/core/Interpolations.js +1 -1
  290. package/src/geometries/LatheGeometry.js +70 -47
  291. package/src/helpers/CameraHelper.js +1 -1
  292. package/src/loaders/FileLoader.js +98 -144
  293. package/src/loaders/ImageLoader.js +9 -4
  294. package/src/loaders/LoaderUtils.js +26 -0
  295. package/src/loaders/MaterialLoader.js +7 -4
  296. package/src/loaders/ObjectLoader.js +2 -0
  297. package/src/materials/Material.js +4 -4
  298. package/src/materials/MeshPhysicalMaterial.js +20 -14
  299. package/src/math/Color.js +0 -38
  300. package/src/math/MathUtils.js +5 -16
  301. package/src/math/Ray.js +2 -2
  302. package/src/math/Sphere.js +10 -1
  303. package/src/objects/Skeleton.js +1 -0
  304. package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
  305. package/src/renderers/WebGLRenderer.js +105 -132
  306. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
  307. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
  308. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
  309. package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -74
  310. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  311. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
  312. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
  313. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +28 -2
  314. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  315. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  316. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +1 -1
  317. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +23 -5
  318. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
  319. package/src/renderers/shaders/ShaderLib.js +6 -4
  320. package/src/renderers/shaders/UniformsLib.js +1 -2
  321. package/src/renderers/webgl/WebGLCapabilities.js +0 -2
  322. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  323. package/src/renderers/webgl/WebGLMaterials.js +27 -15
  324. package/src/renderers/webgl/WebGLMorphtargets.js +1 -0
  325. package/src/renderers/webgl/WebGLProgram.js +11 -24
  326. package/src/renderers/webgl/WebGLPrograms.js +194 -33
  327. package/src/renderers/webgl/WebGLRenderLists.js +4 -14
  328. package/src/renderers/webgl/WebGLShaderCache.js +120 -0
  329. package/src/renderers/webgl/WebGLShadowMap.js +14 -5
  330. package/src/renderers/webgl/WebGLState.js +76 -17
  331. package/src/renderers/webgl/WebGLTextures.js +367 -61
  332. package/src/renderers/webgl/WebGLUniforms.js +45 -1
  333. package/src/renderers/webxr/WebXRManager.js +77 -109
  334. package/src/scenes/Scene.js +1 -1
  335. package/src/textures/DataTexture.js +0 -2
  336. package/src/textures/DataTexture2DArray.js +0 -2
  337. package/src/textures/DataTexture3D.js +0 -2
  338. package/src/textures/FramebufferTexture.js +25 -0
  339. package/src/textures/Texture.js +6 -0
  340. package/examples/js/controls/DeviceOrientationControls.js +0 -147
  341. package/examples/js/libs/dat.gui.min.js +0 -14
  342. package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
  343. package/examples/jsm/libs/dat.gui.module.js +0 -3575
  344. package/examples/jsm/libs/glslang.js +0 -78
  345. package/examples/jsm/libs/glslang.wasm +0 -0
  346. package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
  347. package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
  348. package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
  349. package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
  350. package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
  351. package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
  352. package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
  353. package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
  354. package/src/extras/objects/ImmediateRenderObject.js +0 -31
@@ -296,6 +296,7 @@ class VOXDataTexture3D extends DataTexture3D {
296
296
  this.minFilter = NearestFilter;
297
297
  this.magFilter = LinearFilter;
298
298
  this.unpackAlignment = 1;
299
+ this.needsUpdate = true;
299
300
 
300
301
  }
301
302
 
@@ -192,7 +192,7 @@ class VRMLLoader extends Loader {
192
192
 
193
193
  //
194
194
 
195
- const StringLiteral = createToken( { name: 'StringLiteral', pattern: /"(:?[^\\"\n\r]+|\\(:?[bfnrtv"\\/]|u[0-9a-fA-F]{4}))*"/ } );
195
+ const StringLiteral = createToken( { name: 'StringLiteral', pattern: /"(?:[^\\"\n\r]|\\[bfnrtv"\\/]|\\u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F])*"/ } );
196
196
  const HexLiteral = createToken( { name: 'HexLiteral', pattern: /0[xX][0-9a-fA-F]+/ } );
197
197
  const NumberLiteral = createToken( { name: 'NumberLiteral', pattern: /[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/ } );
198
198
  const TrueLiteral = createToken( { name: 'TrueLiteral', pattern: /TRUE/ } );
@@ -1382,6 +1382,7 @@ class VRMLLoader extends Loader {
1382
1382
  }
1383
1383
 
1384
1384
  texture = new DataTexture( data, width, height, ( useAlpha === true ) ? RGBAFormat : RGBFormat );
1385
+ texture.needsUpdate = true;
1385
1386
  texture.__type = textureType; // needed for material modifications
1386
1387
  break;
1387
1388
 
@@ -106,6 +106,7 @@ LWO2Parser.prototype = {
106
106
  case 'WRPW': // image wrap w ( for cylindrical and spherical projections)
107
107
  case 'WRPH': // image wrap h
108
108
  case 'NMOD':
109
+ case 'NSEL':
109
110
  case 'NPRW':
110
111
  case 'NPLA':
111
112
  case 'NODS':
@@ -38,8 +38,8 @@ LWO3Parser.prototype = {
38
38
  case 'NORM':
39
39
 
40
40
  // ENVL FORM skipped
41
- case 'PRE ':
42
- case 'POST':
41
+ case 'PRE ': // Pre-loop behavior for the keyframe
42
+ case 'POST': // Post-loop behavior for the keyframe
43
43
  case 'KEY ':
44
44
  case 'SPAN':
45
45
 
@@ -1,4 +1,4 @@
1
- // http://mrl.nyu.edu/~perlin/noise/
1
+ // https://cs.nyu.edu/~perlin/noise/
2
2
 
3
3
  const _p = [ 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10,
4
4
  23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87,
@@ -345,7 +345,9 @@ class GPUComputationRenderer {
345
345
  this.createTexture = function () {
346
346
 
347
347
  const data = new Float32Array( sizeX * sizeY * 4 );
348
- return new DataTexture( data, sizeX, sizeY, RGBAFormat, FloatType );
348
+ const texture = new DataTexture( data, sizeX, sizeY, RGBAFormat, FloatType );
349
+ texture.needsUpdate = true;
350
+ return texture;
349
351
 
350
352
  };
351
353
 
@@ -0,0 +1,456 @@
1
+ import { Canvas, CircleMenu, ButtonInput, ContextMenu, Loader } from '../libs/flow.module.js';
2
+ import { StandardMaterialEditor } from './materials/StandardMaterialEditor.js';
3
+ import { OperatorEditor } from './math/OperatorEditor.js';
4
+ import { NormalizeEditor } from './math/NormalizeEditor.js';
5
+ import { InvertEditor } from './math/InvertEditor.js';
6
+ import { LimiterEditor } from './math/LimiterEditor.js';
7
+ import { DotEditor } from './math/DotEditor.js';
8
+ import { PowerEditor } from './math/PowerEditor.js';
9
+ import { TrigonometryEditor } from './math/TrigonometryEditor.js';
10
+ import { FloatEditor } from './inputs/FloatEditor.js';
11
+ import { Vector2Editor } from './inputs/Vector2Editor.js';
12
+ import { Vector3Editor } from './inputs/Vector3Editor.js';
13
+ import { Vector4Editor } from './inputs/Vector4Editor.js';
14
+ import { SliderEditor } from './inputs/SliderEditor.js';
15
+ import { ColorEditor } from './inputs/ColorEditor.js';
16
+ import { BlendEditor } from './display/BlendEditor.js';
17
+ import { UVEditor } from './accessors/UVEditor.js';
18
+ import { PositionEditor } from './accessors/PositionEditor.js';
19
+ import { NormalEditor } from './accessors/NormalEditor.js';
20
+ import { TimerEditor } from './utils/TimerEditor.js';
21
+ import { OscillatorEditor } from './utils/OscillatorEditor.js';
22
+ import { CheckerEditor } from './procedural/CheckerEditor.js';
23
+
24
+ import { EventDispatcher } from 'three';
25
+
26
+ export const ClassLib = {
27
+ StandardMaterialEditor,
28
+ OperatorEditor,
29
+ NormalizeEditor,
30
+ InvertEditor,
31
+ LimiterEditor,
32
+ DotEditor,
33
+ PowerEditor,
34
+ TrigonometryEditor,
35
+ FloatEditor,
36
+ Vector2Editor,
37
+ Vector3Editor,
38
+ Vector4Editor,
39
+ SliderEditor,
40
+ ColorEditor,
41
+ BlendEditor,
42
+ UVEditor,
43
+ PositionEditor,
44
+ NormalEditor,
45
+ TimerEditor,
46
+ OscillatorEditor,
47
+ CheckerEditor
48
+ };
49
+
50
+ export class NodeEditor extends EventDispatcher {
51
+
52
+ constructor() {
53
+
54
+ super();
55
+
56
+ const domElement = document.createElement( 'flow' );
57
+ const canvas = new Canvas();
58
+
59
+ domElement.appendChild( canvas.dom );
60
+
61
+ this.canvas = canvas;
62
+ this.domElement = domElement;
63
+
64
+ this.nodesContext = null;
65
+ this.examplesContext = null;
66
+
67
+ this._initMenu();
68
+ this._initNodesContext();
69
+ this._initExamplesContext();
70
+
71
+ }
72
+
73
+ add( node ) {
74
+
75
+ this.canvas.add( node );
76
+
77
+ return this;
78
+
79
+ }
80
+
81
+ get nodes() {
82
+
83
+ return this.canvas.nodes;
84
+
85
+ }
86
+
87
+ newProject() {
88
+
89
+ this.canvas.clear();
90
+
91
+ this.dispatchEvent( { type: 'new' } );
92
+
93
+ }
94
+
95
+ loadJSON( json ) {
96
+
97
+ this.canvas.clear();
98
+
99
+ this.canvas.deserialize( json );
100
+
101
+ this.dispatchEvent( { type: 'load' } );
102
+
103
+ }
104
+
105
+ _initMenu() {
106
+
107
+ const menu = new CircleMenu();
108
+
109
+ const menuButton = new ButtonInput().setIcon( 'ti ti-menu-2' );
110
+ const examplesButton = new ButtonInput().setIcon( 'ti ti-file-symlink' ).setToolTip( 'Examples' );
111
+ const newButton = new ButtonInput().setIcon( 'ti ti-file' ).setToolTip( 'New' );
112
+ const openButton = new ButtonInput().setIcon( 'ti ti-upload' ).setToolTip( 'Open' );
113
+ const saveButton = new ButtonInput().setIcon( 'ti ti-download' ).setToolTip( 'Save' );
114
+
115
+ const hideContext = () => {
116
+
117
+ this.examplesContext.hide();
118
+ this.nodesContext.hide();
119
+
120
+ };
121
+
122
+ menuButton.onClick( () => {
123
+
124
+ this.nodesContext.show( 60, 50 );
125
+
126
+ } );
127
+
128
+ examplesButton.onClick( () => {
129
+
130
+ this.examplesContext.show( 60, 175 );
131
+
132
+ } );
133
+
134
+ newButton.onClick( () => {
135
+
136
+ hideContext();
137
+
138
+ this.newProject();
139
+
140
+ } );
141
+
142
+ openButton.onClick( () => {
143
+
144
+ hideContext();
145
+
146
+ const input = document.createElement( 'input' );
147
+ input.type = 'file';
148
+
149
+ input.onchange = e => {
150
+
151
+ const file = e.target.files[ 0 ];
152
+
153
+ const reader = new FileReader();
154
+ reader.readAsText( file, 'UTF-8' );
155
+
156
+ reader.onload = readerEvent => {
157
+
158
+ const loader = new Loader( Loader.OBJECTS );
159
+ const json = loader.parse( JSON.parse( readerEvent.target.result ), ClassLib );
160
+
161
+ this.loadJSON( json );
162
+
163
+ };
164
+
165
+ };
166
+
167
+ input.click();
168
+
169
+ } );
170
+
171
+ saveButton.onClick( () => {
172
+
173
+ hideContext();
174
+
175
+ const json = JSON.stringify( this.canvas.toJSON() );
176
+
177
+ const a = document.createElement( 'a' );
178
+ const file = new Blob( [ json ], { type: 'text/plain' } );
179
+
180
+ a.href = URL.createObjectURL( file );
181
+ a.download = 'node_editor.json';
182
+ a.click();
183
+
184
+ } );
185
+
186
+ menu.add( menuButton )
187
+ .add( newButton )
188
+ .add( examplesButton )
189
+ .add( openButton )
190
+ .add( saveButton );
191
+
192
+ this.domElement.appendChild( menu.dom );
193
+
194
+ this.menu = menu;
195
+
196
+ }
197
+
198
+ _initExamplesContext() {
199
+
200
+ const context = new ContextMenu();
201
+
202
+ //**************//
203
+ // MAIN
204
+ //**************//
205
+
206
+ const onClickExample = async ( button ) => {
207
+
208
+ this.examplesContext.hide();
209
+
210
+ const filename = button.getExtra();
211
+
212
+ const loader = new Loader( Loader.OBJECTS );
213
+ const json = await loader.load( `./jsm/node-editor/examples/${filename}.json`, ClassLib );
214
+
215
+ this.loadJSON( json );
216
+
217
+ };
218
+
219
+ const addExample = ( context, name, filename = null ) => {
220
+
221
+ filename = filename || name.replaceAll( ' ', '-' ).toLowerCase();
222
+
223
+ context.add( new ButtonInput( name )
224
+ .setIcon( 'ti ti-file-symlink' )
225
+ .onClick( onClickExample )
226
+ .setExtra( filename )
227
+ );
228
+
229
+ };
230
+
231
+ //**************//
232
+ // EXAMPLES
233
+ //**************//
234
+
235
+ const basicContext = new ContextMenu();
236
+ const advancedContext = new ContextMenu();
237
+
238
+ addExample( basicContext, 'Animate UV' );
239
+ addExample( basicContext, 'Fake top light' );
240
+ addExample( basicContext, 'Oscillator color' );
241
+
242
+ addExample( advancedContext, 'Rim' );
243
+
244
+ //**************//
245
+ // MAIN
246
+ //**************//
247
+
248
+ context.add( new ButtonInput( 'Basic' ), basicContext );
249
+ context.add( new ButtonInput( 'Advanced' ), advancedContext );
250
+
251
+ this.domElement.appendChild( context.dom );
252
+
253
+ this.examplesContext = context;
254
+
255
+ }
256
+
257
+ _initNodesContext() {
258
+
259
+ const context = new ContextMenu( this.domElement );
260
+
261
+ let isContext = false;
262
+ const contextPosition = {};
263
+
264
+ const add = ( node ) => {
265
+
266
+ const canvas = this.canvas;
267
+ const canvasRect = canvas.rect;
268
+
269
+ if ( isContext ) {
270
+
271
+ node.setPosition(
272
+ contextPosition.x,
273
+ contextPosition.y
274
+ );
275
+
276
+ } else {
277
+
278
+ const defaultOffsetX = 350 / 2;
279
+ const defaultOffsetY = 20;
280
+
281
+ node.setPosition(
282
+ ( canvas.relativeX + ( canvasRect.width / 2 ) ) - defaultOffsetX,
283
+ ( canvas.relativeY + ( canvasRect.height / 2 ) ) - defaultOffsetY
284
+ );
285
+
286
+ }
287
+
288
+ context.hide();
289
+
290
+ this.add( node );
291
+
292
+ this.canvas.select( node );
293
+
294
+ isContext = false;
295
+
296
+ };
297
+
298
+ context.onContext( () => {
299
+
300
+ isContext = true;
301
+
302
+ const { relativeClientX, relativeClientY } = this.canvas;
303
+
304
+ contextPosition.x = relativeClientX;
305
+ contextPosition.y = relativeClientY;
306
+
307
+ } );
308
+
309
+ //**************//
310
+ // INPUTS
311
+ //**************//
312
+
313
+ const inputsContext = new ContextMenu();
314
+
315
+ const sliderInput = new ButtonInput( 'Slider' ).setIcon( 'ti ti-adjustments-horizontal' )
316
+ .onClick( () => add( new SliderEditor() ) );
317
+
318
+ const floatInput = new ButtonInput( 'Float' ).setIcon( 'ti ti-box-multiple-1' )
319
+ .onClick( () => add( new FloatEditor() ) );
320
+
321
+ const vector2Input = new ButtonInput( 'Vector 2' ).setIcon( 'ti ti-box-multiple-2' )
322
+ .onClick( () => add( new Vector2Editor() ) );
323
+
324
+ const vector3Input = new ButtonInput( 'Vector 3' ).setIcon( 'ti ti-box-multiple-3' )
325
+ .onClick( () => add( new Vector3Editor() ) );
326
+
327
+ const vector4Input = new ButtonInput( 'Vector 4' ).setIcon( 'ti ti-box-multiple-4' )
328
+ .onClick( () => add( new Vector4Editor() ) );
329
+
330
+ const colorInput = new ButtonInput( 'Color' ).setIcon( 'ti ti-palette' )
331
+ .onClick( () => add( new ColorEditor() ) );
332
+
333
+ //const mapInput = new ButtonInput( 'Map' ).setIcon( 'ti ti-photo' );
334
+ //const cubeMapInput = new ButtonInput( 'Cube Map' ).setIcon( 'ti ti-box' );
335
+ //const integerInput = new ButtonInput( 'Integer' ).setIcon( 'ti ti-list-numbers' );
336
+
337
+ inputsContext
338
+ .add( sliderInput )
339
+ .add( floatInput )
340
+ .add( vector2Input )
341
+ .add( vector3Input )
342
+ .add( vector4Input )
343
+ .add( colorInput );
344
+
345
+ //**************//
346
+ // MATH
347
+ //**************//
348
+
349
+ const mathContext = new ContextMenu();
350
+
351
+ const operatorsNode = new ButtonInput( 'Operator' ).setIcon( 'ti ti-math-symbols' )
352
+ .onClick( () => add( new OperatorEditor() ) );
353
+
354
+ const normalizeNode = new ButtonInput( 'Normalize' ).setIcon( 'ti ti-fold' )
355
+ .onClick( () => add( new NormalizeEditor() ) );
356
+
357
+ const invertNode = new ButtonInput( 'Invert' ).setToolTip( 'Negate' ).setIcon( 'ti ti-flip-vertical' )
358
+ .onClick( () => add( new InvertEditor() ) );
359
+
360
+ const limiterNode = new ButtonInput( 'Limiter' ).setToolTip( 'Min / Max' ).setIcon( 'ti ti-arrow-bar-to-up' )
361
+ .onClick( () => add( new LimiterEditor() ) );
362
+
363
+ const dotNode = new ButtonInput( 'Dot Product' ).setIcon( 'ti ti-arrows-up-left' )
364
+ .onClick( () => add( new DotEditor() ) );
365
+
366
+ const powNode = new ButtonInput( 'Power' ).setIcon( 'ti ti-arrow-up-right' )
367
+ .onClick( () => add( new PowerEditor() ) );
368
+
369
+ const triNode = new ButtonInput( 'Trigonometry' ).setToolTip( 'Sin / Cos / Tan' ).setIcon( 'ti ti-wave-sine' )
370
+ .onClick( () => add( new TrigonometryEditor() ) );
371
+
372
+ mathContext
373
+ .add( operatorsNode )
374
+ .add( invertNode )
375
+ .add( limiterNode )
376
+ .add( dotNode )
377
+ .add( powNode )
378
+ .add( triNode )
379
+ .add( normalizeNode );
380
+
381
+ //**************//
382
+ // ACCESSORS
383
+ //**************//
384
+
385
+ const accessorsContext = new ContextMenu();
386
+
387
+ const uvNode = new ButtonInput( 'UV' ).setIcon( 'ti ti-details' )
388
+ .onClick( () => add( new UVEditor() ) );
389
+
390
+ const positionNode = new ButtonInput( 'Position' ).setIcon( 'ti ti-hierarchy' )
391
+ .onClick( () => add( new PositionEditor() ) );
392
+
393
+ const normalNode = new ButtonInput( 'Normal' ).setIcon( 'ti ti-fold-up' )
394
+ .onClick( () => add( new NormalEditor() ) );
395
+
396
+ accessorsContext
397
+ .add( uvNode )
398
+ .add( positionNode )
399
+ .add( normalNode );
400
+
401
+ //**************//
402
+ // PROCEDURAL
403
+ //**************//
404
+
405
+ const proceduralContext = new ContextMenu();
406
+
407
+ const checkerNode = new ButtonInput( 'Checker' ).setIcon( 'ti ti-border-outer' )
408
+ .onClick( () => add( new CheckerEditor() ) );
409
+
410
+ proceduralContext
411
+ .add( checkerNode );
412
+
413
+ //**************//
414
+ // DISPLAY
415
+ //**************//
416
+
417
+ const displayContext = new ContextMenu();
418
+
419
+ const blendNode = new ButtonInput( 'Blend' ).setIcon( 'ti ti-layers-subtract' )
420
+ .onClick( () => add( new BlendEditor() ) );
421
+
422
+ displayContext
423
+ .add( blendNode );
424
+
425
+ //**************//
426
+ // UTILS
427
+ //**************//
428
+
429
+ const utilsContext = new ContextMenu();
430
+
431
+ const timerNode = new ButtonInput( 'Timer' ).setIcon( 'ti ti-clock' )
432
+ .onClick( () => add( new TimerEditor() ) );
433
+
434
+ const oscNode = new ButtonInput( 'Oscillator' ).setIcon( 'ti ti-wave-sine' )
435
+ .onClick( () => add( new OscillatorEditor() ) );
436
+
437
+ utilsContext
438
+ .add( timerNode )
439
+ .add( oscNode );
440
+
441
+ //**************//
442
+ // MAIN
443
+ //**************//
444
+
445
+ context.add( new ButtonInput( 'Inputs' ).setIcon( 'ti ti-forms' ), inputsContext );
446
+ context.add( new ButtonInput( 'Accessors' ).setIcon( 'ti ti-vector-triangle' ), accessorsContext );
447
+ context.add( new ButtonInput( 'Display' ).setIcon( 'ti ti-brightness' ), displayContext );
448
+ context.add( new ButtonInput( 'Math' ).setIcon( 'ti ti-calculator' ), mathContext );
449
+ context.add( new ButtonInput( 'Procedural' ).setIcon( 'ti ti-infinity' ), proceduralContext );
450
+ context.add( new ButtonInput( 'Utils' ).setIcon( 'ti ti-apps' ), utilsContext );
451
+
452
+ this.nodesContext = context;
453
+
454
+ }
455
+
456
+ }
@@ -0,0 +1,30 @@
1
+ import { ObjectNode, SelectInput, LabelElement } from '../../libs/flow.module.js';
2
+ import { NormalNode } from '../../renderers/nodes/Nodes.js';
3
+
4
+ export class NormalEditor extends ObjectNode {
5
+
6
+ constructor() {
7
+
8
+ const node = new NormalNode();
9
+
10
+ super( 'Normal', 3, node, 250 );
11
+
12
+ this.title.setStyle( 'red' );
13
+
14
+ const optionsField = new SelectInput( [
15
+ { name: 'Local', value: NormalNode.LOCAL },
16
+ { name: 'World', value: NormalNode.WORLD },
17
+ { name: 'View', value: NormalNode.VIEW }
18
+ ] ).onChange( () => {
19
+
20
+ node.scope = optionsField.getValue();
21
+
22
+ this.invalidate();
23
+
24
+ } );
25
+
26
+ this.add( new LabelElement( 'Scope' ).add( optionsField ) );
27
+
28
+ }
29
+
30
+ }
@@ -0,0 +1,30 @@
1
+ import { ObjectNode, SelectInput, LabelElement } from '../../libs/flow.module.js';
2
+ import { PositionNode } from '../../renderers/nodes/Nodes.js';
3
+
4
+ export class PositionEditor extends ObjectNode {
5
+
6
+ constructor() {
7
+
8
+ const node = new PositionNode();
9
+
10
+ super( 'Position', 3, node, 250 );
11
+
12
+ this.title.setStyle( 'red' );
13
+
14
+ const optionsField = new SelectInput( [
15
+ { name: 'Local', value: PositionNode.LOCAL },
16
+ { name: 'World', value: PositionNode.WORLD },
17
+ { name: 'View', value: PositionNode.VIEW }
18
+ ] ).onChange( () => {
19
+
20
+ node.scope = optionsField.getValue();
21
+
22
+ this.invalidate();
23
+
24
+ } );
25
+
26
+ this.add( new LabelElement( 'Scope' ).add( optionsField ) );
27
+
28
+ }
29
+
30
+ }
@@ -0,0 +1,26 @@
1
+ import { ObjectNode, SelectInput, LabelElement } from '../../libs/flow.module.js';
2
+ import { UVNode } from '../../renderers/nodes/Nodes.js';
3
+
4
+ export class UVEditor extends ObjectNode {
5
+
6
+ constructor() {
7
+
8
+ const node = new UVNode();
9
+
10
+ super( 'UV', 2, node, 250 );
11
+
12
+ this.title.setStyle( 'red' );
13
+
14
+ const optionsField = new SelectInput( [ '1', '2' ] ).onChange( () => {
15
+
16
+ node.value = Number( optionsField.getValue() );
17
+
18
+ this.invalidate();
19
+
20
+ } );
21
+
22
+ this.add( new LabelElement( 'Channel' ).add( optionsField ) );
23
+
24
+ }
25
+
26
+ }
@@ -0,0 +1,43 @@
1
+ import { ObjectNode, LabelElement } from '../../libs/flow.module.js';
2
+ import { MathNode, FloatNode } from '../../renderers/nodes/Nodes.js';
3
+
4
+ const NULL_VALUE = new FloatNode();
5
+ const ONE_VALUE = new FloatNode( 1 );
6
+
7
+ export class BlendEditor extends ObjectNode {
8
+
9
+ constructor() {
10
+
11
+ const node = new MathNode( MathNode.MIX, NULL_VALUE, NULL_VALUE, ONE_VALUE );
12
+
13
+ super( 'Blend', 3, node );
14
+
15
+ const aElement = new LabelElement( 'Base' ).setInput( 3 );
16
+ const bElement = new LabelElement( 'Blend' ).setInput( 3 );
17
+ const cElement = new LabelElement( 'Opacity' ).setInput( 1 );
18
+
19
+ aElement.onConnect( () => {
20
+
21
+ node.aNode = aElement.linkedExtra || NULL_VALUE;
22
+
23
+ } );
24
+
25
+ bElement.onConnect( () => {
26
+
27
+ node.bNode = bElement.linkedExtra || NULL_VALUE;
28
+
29
+ } );
30
+
31
+ cElement.onConnect( () => {
32
+
33
+ node.cNode = cElement.linkedExtra || ONE_VALUE;
34
+
35
+ } );
36
+
37
+ this.add( aElement )
38
+ .add( bElement )
39
+ .add( cElement );
40
+
41
+ }
42
+
43
+ }
@@ -0,0 +1 @@
1
+ {"objects":{"325":{"x":1718,"y":136,"width":"300px","elements":[326,328,329,330,331],"id":325,"type":"StandardMaterialEditor"},"326":{"style":"blue","title":"Standard Material","id":326,"type":"TitleElement"},"328":{"inputLength":3,"links":[394],"label":"Color","id":328,"type":"LabelElement"},"329":{"inputLength":1,"label":"Opacity","id":329,"type":"LabelElement"},"330":{"inputLength":1,"label":"Metalness","id":330,"type":"LabelElement"},"331":{"inputLength":1,"label":"Roughness","id":331,"type":"LabelElement"},"337":{"x":155,"y":230,"width":"250px","elements":[338,344,345,342],"id":337,"type":"TimerEditor"},"338":{"outputLength":1,"title":"Timer","icon":"ti ti-clock","id":338,"type":"TitleElement"},"340":{"value":16.881,"id":340,"type":"NumberInput"},"341":{"value":0.04,"id":341,"type":"NumberInput"},"342":{"inputs":[343],"id":342,"type":"Element"},"343":{"value":"Reset","id":343,"type":"ButtonInput"},"344":{"inputs":[340],"label":"Value","id":344,"type":"LabelElement"},"345":{"inputs":[341],"label":"Scale","id":345,"type":"LabelElement"},"353":{"x":202,"y":79,"width":"250px","elements":[354,357],"id":353,"type":"UVEditor"},"354":{"outputLength":2,"style":"red","title":"UV","id":354,"type":"TitleElement"},"356":{"options":["1","2"],"value":"0","id":356,"type":"SelectInput"},"357":{"inputs":[356],"label":"Channel","id":357,"type":"LabelElement"},"361":{"x":612,"y":102,"width":"250px","elements":[362,367,365,366],"id":361,"type":"OperatorEditor"},"362":{"outputLength":1,"title":"Operator","id":362,"type":"TitleElement"},"364":{"options":[{"name":"+ Addition","value":"+"},{"name":"- Subtraction","value":"-"},{"name":"* Multiplication","value":"*"},{"name":"/ Division","value":"/"}],"value":"+","id":364,"type":"SelectInput"},"365":{"inputLength":3,"links":[354],"label":"A","id":365,"type":"LabelElement"},"366":{"inputLength":3,"links":[338],"label":"B","id":366,"type":"LabelElement"},"367":{"inputs":[364],"label":"Operator","id":367,"type":"LabelElement"},"373":{"x":1047,"y":158,"width":"250px","elements":[374,379,377,378],"id":373,"type":"OperatorEditor"},"374":{"outputLength":1,"title":"Operator","id":374,"type":"TitleElement"},"376":{"options":[{"name":"+ Addition","value":"+"},{"name":"- Subtraction","value":"-"},{"name":"* Multiplication","value":"*"},{"name":"/ Division","value":"/"}],"value":"*","id":376,"type":"SelectInput"},"377":{"inputLength":3,"links":[362],"label":"A","id":377,"type":"LabelElement"},"378":{"inputLength":3,"links":[386],"label":"B","id":378,"type":"LabelElement"},"379":{"inputs":[376],"label":"Operator","id":379,"type":"LabelElement"},"385":{"x":601,"y":345,"width":"250px","elements":[386,389],"id":385,"type":"FloatEditor"},"386":{"outputLength":1,"title":"Float","icon":"ti ti-box-multiple-1","id":386,"type":"TitleElement"},"388":{"value":24.12,"id":388,"type":"NumberInput"},"389":{"inputs":[388],"label":"Value","id":389,"type":"LabelElement"},"393":{"x":1402,"y":14,"width":"200px","elements":[394,396],"id":393,"type":"CheckerEditor"},"394":{"outputLength":1,"title":"Checker","id":394,"type":"TitleElement"},"396":{"inputLength":2,"links":[374],"label":"UV","id":396,"type":"LabelElement"}},"nodes":[325,337,353,361,373,385,393],"id":0,"type":"Canvas"}
@@ -0,0 +1 @@
1
+ {"objects":{"575":{"x":885,"y":119,"width":"300px","elements":[576,578,579,580,581],"id":575,"type":"StandardMaterialEditor"},"576":{"style":"blue","title":"Standard Material","id":576,"type":"TitleElement"},"578":{"inputLength":3,"links":[595],"label":"Color","id":578,"type":"LabelElement"},"579":{"inputLength":1,"label":"Opacity","id":579,"type":"LabelElement"},"580":{"inputLength":1,"label":"Metalness","id":580,"type":"LabelElement"},"581":{"inputLength":1,"label":"Roughness","id":581,"type":"LabelElement"},"587":{"x":73,"y":296,"width":"","elements":[588,593],"id":587,"type":"Vector3Editor"},"588":{"outputLength":3,"title":"Vector 3","icon":"ti ti-box-multiple-3","id":588,"type":"TitleElement"},"590":{"value":0,"id":590,"type":"NumberInput"},"591":{"value":1,"id":591,"type":"NumberInput"},"592":{"value":0,"id":592,"type":"NumberInput"},"593":{"inputs":[590,591,592],"label":"Values","id":593,"type":"LabelElement"},"594":{"x":541,"y":199,"width":"200px","elements":[595,597,598],"id":594,"type":"DotEditor"},"595":{"outputLength":1,"title":"Dot Product","id":595,"type":"TitleElement"},"597":{"inputLength":3,"links":[600],"label":"A","id":597,"type":"LabelElement"},"598":{"inputLength":3,"links":[588],"label":"B","id":598,"type":"LabelElement"},"599":{"x":106,"y":158,"width":"250px","elements":[600,603],"id":599,"type":"NormalEditor"},"600":{"outputLength":3,"style":"red","title":"Normal","id":600,"type":"TitleElement"},"602":{"options":[{"name":"Local","value":"local"},{"name":"World","value":"world"},{"name":"View","value":"view"}],"value":"world","id":602,"type":"SelectInput"},"603":{"inputs":[602],"label":"Scope","id":603,"type":"LabelElement"}},"nodes":[575,587,594,599],"id":0,"type":"Canvas"}