super-three 0.133.5 → 0.135.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 (246) hide show
  1. package/build/three.js +617 -536
  2. package/build/three.min.js +1 -1
  3. package/build/three.module.js +760 -613
  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.ttf +0 -0
  9. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  10. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  11. package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
  12. package/examples/js/controls/ArcballControls.js +68 -27
  13. package/examples/js/controls/DragControls.js +7 -0
  14. package/examples/js/controls/OrbitControls.js +5 -36
  15. package/examples/js/controls/TrackballControls.js +3 -2
  16. package/examples/js/csm/CSM.js +2 -2
  17. package/examples/js/csm/CSMFrustum.js +133 -0
  18. package/examples/js/exporters/GLTFExporter.js +147 -63
  19. package/examples/js/exporters/USDZExporter.js +45 -26
  20. package/examples/js/lines/LineMaterial.js +58 -20
  21. package/examples/js/lines/LineSegments2.js +29 -24
  22. package/examples/js/loaders/3DMLoader.js +24 -11
  23. package/examples/js/loaders/3MFLoader.js +2 -2
  24. package/examples/js/loaders/ColladaLoader.js +61 -3
  25. package/examples/js/loaders/FBXLoader.js +1 -1
  26. package/examples/js/loaders/GLTFLoader.js +94 -31
  27. package/examples/js/loaders/KTX2Loader.js +12 -0
  28. package/examples/js/loaders/LWOLoader.js +8 -6
  29. package/examples/js/loaders/LogLuvLoader.js +766 -0
  30. package/examples/js/loaders/PLYLoader.js +32 -7
  31. package/examples/js/loaders/RGBELoader.js +2 -1
  32. package/examples/js/loaders/SVGLoader.js +7 -3
  33. package/examples/js/loaders/TDSLoader.js +237 -271
  34. package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
  35. package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
  36. package/examples/js/objects/MarchingCubes.js +42 -128
  37. package/examples/js/renderers/CSS2DRenderer.js +4 -4
  38. package/examples/js/renderers/CSS3DRenderer.js +4 -4
  39. package/examples/js/utils/RoughnessMipmapper.js +1 -0
  40. package/examples/jsm/controls/ArcballControls.js +61 -29
  41. package/examples/jsm/controls/DragControls.js +7 -0
  42. package/examples/jsm/controls/OrbitControls.js +9 -51
  43. package/examples/jsm/controls/TrackballControls.js +1 -1
  44. package/examples/jsm/csm/CSM.js +3 -3
  45. package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
  46. package/examples/jsm/exporters/GLTFExporter.js +160 -74
  47. package/examples/jsm/exporters/USDZExporter.js +47 -26
  48. package/examples/jsm/libs/flow.module.js +3218 -0
  49. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  50. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  51. package/examples/jsm/lines/LineMaterial.js +59 -23
  52. package/examples/jsm/lines/LineSegments2.js +22 -18
  53. package/examples/jsm/loaders/3DMLoader.js +18 -12
  54. package/examples/jsm/loaders/3MFLoader.js +2 -2
  55. package/examples/jsm/loaders/ColladaLoader.js +61 -3
  56. package/examples/jsm/loaders/FBXLoader.js +1 -1
  57. package/examples/jsm/loaders/GLTFLoader.js +99 -35
  58. package/examples/jsm/loaders/KTX2Loader.js +19 -0
  59. package/examples/jsm/loaders/LWOLoader.js +8 -6
  60. package/examples/jsm/loaders/LogLuvLoader.js +606 -0
  61. package/examples/jsm/loaders/PLYLoader.js +33 -7
  62. package/examples/jsm/loaders/SVGLoader.js +7 -4
  63. package/examples/jsm/loaders/TDSLoader.js +225 -285
  64. package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
  65. package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
  66. package/examples/jsm/node-editor/NodeEditor.js +455 -0
  67. package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
  68. package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
  69. package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
  70. package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
  71. package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
  72. package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
  73. package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
  74. package/examples/jsm/node-editor/examples/rim.json +1 -0
  75. package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
  76. package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
  77. package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
  78. package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
  79. package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
  80. package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
  81. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +69 -0
  82. package/examples/jsm/node-editor/math/DotEditor.js +36 -0
  83. package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
  84. package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
  85. package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
  86. package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
  87. package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
  88. package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
  89. package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
  90. package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
  91. package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
  92. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
  93. package/examples/jsm/nodes/materials/nodes/StandardNode.js +6 -6
  94. package/examples/jsm/nodes/utils/ColorSpaceNode.js +1 -49
  95. package/examples/jsm/objects/MarchingCubes.js +46 -152
  96. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
  97. package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
  98. package/examples/jsm/postprocessing/BloomPass.js +1 -1
  99. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  100. package/examples/jsm/postprocessing/ClearPass.js +1 -1
  101. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
  102. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  103. package/examples/jsm/postprocessing/EffectComposer.js +3 -3
  104. package/examples/jsm/postprocessing/FilmPass.js +1 -1
  105. package/examples/jsm/postprocessing/GlitchPass.js +1 -1
  106. package/examples/jsm/postprocessing/HalftonePass.js +1 -1
  107. package/examples/jsm/postprocessing/MaskPass.js +1 -1
  108. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  109. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  110. package/examples/jsm/postprocessing/SAOPass.js +1 -1
  111. package/examples/jsm/postprocessing/SMAAPass.js +1 -1
  112. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
  113. package/examples/jsm/postprocessing/SSAOPass.js +1 -1
  114. package/examples/jsm/postprocessing/SSRPass.js +1 -1
  115. package/examples/jsm/postprocessing/SSRrPass.js +1 -1
  116. package/examples/jsm/postprocessing/SavePass.js +1 -1
  117. package/examples/jsm/postprocessing/ShaderPass.js +1 -1
  118. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  119. package/examples/jsm/postprocessing/TexturePass.js +1 -1
  120. package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
  121. package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
  122. package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
  123. package/examples/jsm/renderers/nodes/Nodes.js +14 -13
  124. package/examples/jsm/renderers/nodes/ShaderNode.js +193 -41
  125. package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
  126. package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
  127. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
  128. package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
  129. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
  130. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
  131. package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
  132. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
  133. package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
  134. package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
  135. package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
  136. package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
  137. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
  138. package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
  139. package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
  140. package/examples/jsm/renderers/nodes/core/Node.js +32 -10
  141. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
  142. package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
  143. package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
  144. package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
  145. package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
  146. package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
  147. package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
  148. package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
  149. package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
  150. package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
  151. package/examples/jsm/renderers/nodes/core/constants.js +2 -0
  152. package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +47 -25
  153. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
  154. package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
  155. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
  156. package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
  157. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +10 -2
  158. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
  159. package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
  160. package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
  161. package/examples/jsm/renderers/nodes/math/MathNode.js +87 -36
  162. package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
  163. package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
  164. package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
  165. package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
  166. package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
  167. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
  168. package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
  169. package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
  170. package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
  171. package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
  172. package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
  173. package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
  174. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
  175. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +191 -94
  176. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
  177. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
  178. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
  179. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +3 -3
  180. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
  181. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
  182. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
  183. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +3 -5
  184. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +11 -27
  185. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +62 -28
  186. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +34 -27
  187. package/examples/jsm/renderers/webgpu/constants.js +2 -2
  188. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +430 -98
  189. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  190. package/examples/jsm/utils/RoughnessMipmapper.js +1 -0
  191. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
  192. package/package.json +10 -10
  193. package/src/Three.Legacy.js +6 -0
  194. package/src/Three.js +0 -1
  195. package/src/cameras/StereoCamera.js +8 -7
  196. package/src/constants.js +1 -2
  197. package/src/core/Layers.js +7 -1
  198. package/src/core/Object3D.js +2 -0
  199. package/src/extras/PMREMGenerator.js +11 -6
  200. package/src/loaders/FileLoader.js +89 -152
  201. package/src/loaders/ImageLoader.js +9 -4
  202. package/src/loaders/LoaderUtils.js +26 -0
  203. package/src/loaders/MaterialLoader.js +7 -4
  204. package/src/loaders/ObjectLoader.js +2 -0
  205. package/src/materials/Material.js +4 -4
  206. package/src/materials/MeshPhysicalMaterial.js +20 -14
  207. package/src/math/MathUtils.js +5 -16
  208. package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
  209. package/src/renderers/WebGLRenderer.js +83 -117
  210. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
  211. package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -27
  212. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  213. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
  214. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  215. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  216. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +1 -1
  217. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +13 -5
  218. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
  219. package/src/renderers/shaders/ShaderLib.js +6 -4
  220. package/src/renderers/shaders/UniformsLib.js +1 -2
  221. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  222. package/src/renderers/webgl/WebGLMaterials.js +27 -15
  223. package/src/renderers/webgl/WebGLProgram.js +10 -6
  224. package/src/renderers/webgl/WebGLPrograms.js +17 -12
  225. package/src/renderers/webgl/WebGLShadowMap.js +14 -5
  226. package/src/renderers/webgl/WebGLState.js +31 -17
  227. package/src/renderers/webgl/WebGLTextures.js +188 -51
  228. package/src/renderers/webgl/WebGLUniforms.js +45 -1
  229. package/src/renderers/webxr/WebXRManager.js +68 -107
  230. package/src/textures/Texture.js +6 -0
  231. package/src/utils.js +37 -1
  232. package/examples/js/controls/DeviceOrientationControls.js +0 -147
  233. package/examples/js/libs/dat.gui.min.js +0 -14
  234. package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
  235. package/examples/jsm/libs/dat.gui.module.js +0 -3575
  236. package/examples/jsm/libs/glslang.js +0 -78
  237. package/examples/jsm/libs/glslang.wasm +0 -0
  238. package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
  239. package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
  240. package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
  241. package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
  242. package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
  243. package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
  244. package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
  245. package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
  246. package/src/extras/objects/ImmediateRenderObject.js +0 -31
@@ -0,0 +1,91 @@
1
+ import { ObjectNode, ColorInput, StringInput, NumberInput, LabelElement } from '../../libs/flow.module.js';
2
+ import { ColorNode } from '../../renderers/nodes/Nodes.js';
3
+
4
+ export class ColorEditor extends ObjectNode {
5
+
6
+ constructor() {
7
+
8
+ const node = new ColorNode();
9
+
10
+ super( 'Color', 1, node );
11
+
12
+ this.title.setIcon( 'ti ti-palette' );
13
+
14
+ const updateFields = ( editing ) => {
15
+
16
+ const value = node.value;
17
+ const hexValue = value.getHex();
18
+
19
+ if ( editing !== 'color' ) {
20
+
21
+ field.setValue( hexValue, false );
22
+
23
+ }
24
+
25
+ if ( editing !== 'hex' ) {
26
+
27
+ hexField.setValue( '#' + hexValue.toString( 16 ).toUpperCase().padEnd( 6, '0' ), false );
28
+
29
+ }
30
+
31
+ if ( editing !== 'rgb' ) {
32
+
33
+ fieldR.setValue( value.r.toFixed( 3 ), false );
34
+ fieldG.setValue( value.g.toFixed( 3 ), false );
35
+ fieldB.setValue( value.b.toFixed( 3 ), false );
36
+
37
+ }
38
+
39
+ };
40
+
41
+ const field = new ColorInput( 0xFFFFFF ).onChange( () => {
42
+
43
+ node.value.setHex( field.getValue() );
44
+
45
+ updateFields( 'picker' );
46
+
47
+ } );
48
+
49
+ const hexField = new StringInput().onChange( () => {
50
+
51
+ const value = hexField.getValue();
52
+
53
+ if ( value.indexOf( '#' ) === 0 ) {
54
+
55
+ const hexStr = value.substr( 1 ).padEnd( 6, '0' );
56
+
57
+ node.value.setHex( parseInt( hexStr, 16 ) );
58
+
59
+ updateFields( 'hex' );
60
+
61
+ }
62
+
63
+ } );
64
+
65
+ hexField.addEventListener( 'blur', () => {
66
+
67
+ updateFields();
68
+
69
+ } );
70
+
71
+ const onChangeRGB = () => {
72
+
73
+ node.value.setRGB( fieldR.getValue(), fieldG.getValue(), fieldB.getValue() );
74
+
75
+ updateFields( 'rgb' );
76
+
77
+ };
78
+
79
+ const fieldR = new NumberInput( 1, 0, 1 ).onChange( onChangeRGB );
80
+ const fieldG = new NumberInput( 1, 0, 1 ).onChange( onChangeRGB );
81
+ const fieldB = new NumberInput( 1, 0, 1 ).onChange( onChangeRGB );
82
+
83
+ this.add( new LabelElement( 'Value' ).add( field ).setSerializable( false ) )
84
+ .add( new LabelElement( 'Hex' ).add( hexField ).setSerializable( false ) )
85
+ .add( new LabelElement( 'RGB' ).add( fieldR ).add( fieldG ).add( fieldB ) );
86
+
87
+ updateFields();
88
+
89
+ }
90
+
91
+ }
@@ -0,0 +1,24 @@
1
+ import { ObjectNode, NumberInput, LabelElement } from '../../libs/flow.module.js';
2
+ import { FloatNode } from '../../renderers/nodes/Nodes.js';
3
+
4
+ export class FloatEditor extends ObjectNode {
5
+
6
+ constructor() {
7
+
8
+ const node = new FloatNode();
9
+
10
+ super( 'Float', 1, node, 250 );
11
+
12
+ this.title.setIcon( 'ti ti-box-multiple-1' );
13
+
14
+ const field = new NumberInput().onChange( () => {
15
+
16
+ node.value = field.getValue();
17
+
18
+ } );
19
+
20
+ this.add( new LabelElement( 'Value' ).add( field ) );
21
+
22
+ }
23
+
24
+ }
@@ -0,0 +1,68 @@
1
+ import { ObjectNode, ButtonInput, SliderInput, NumberInput, LabelElement, Element } from '../../libs/flow.module.js';
2
+ import { FloatNode } from '../../renderers/nodes/Nodes.js';
3
+
4
+ export class SliderEditor extends ObjectNode {
5
+
6
+ constructor() {
7
+
8
+ const node = new FloatNode();
9
+
10
+ super( 'Slider', 1, node );
11
+
12
+ this.title.setIcon( 'ti ti-adjustments-horizontal' );
13
+
14
+ this.collapse = true;
15
+
16
+ const field = new SliderInput( 0, 0, 1 ).onChange( () => {
17
+
18
+ node.value = field.getValue();
19
+
20
+ } );
21
+
22
+ const updateRange = () => {
23
+
24
+ const min = minInput.getValue();
25
+ const max = maxInput.getValue();
26
+
27
+ if ( min <= max ) {
28
+
29
+ field.setRange( min, max );
30
+
31
+ } else {
32
+
33
+ maxInput.setValue( min );
34
+
35
+ }
36
+
37
+ };
38
+
39
+ const minInput = new NumberInput().onChange( updateRange );
40
+ const maxInput = new NumberInput( 1 ).onChange( updateRange );
41
+
42
+ const minElement = new LabelElement( 'Min.' ).add( minInput ).setVisible( false );
43
+ const maxElement = new LabelElement( 'Max.' ).add( maxInput ).setVisible( false );
44
+
45
+ const moreElement = new Element().add( new ButtonInput( 'More' ).onClick( () => {
46
+
47
+ minElement.setVisible( true );
48
+ maxElement.setVisible( true );
49
+ moreElement.setVisible( false );
50
+
51
+ } ) ).setSerializable( false );
52
+
53
+ this.add( new LabelElement( 'Value' ).add( field ) )
54
+ .add( minElement )
55
+ .add( maxElement )
56
+ .add( moreElement );
57
+
58
+ this.onBlur( () => {
59
+
60
+ minElement.setVisible( false );
61
+ maxElement.setVisible( false );
62
+ moreElement.setVisible( true );
63
+
64
+ } );
65
+
66
+ }
67
+
68
+ }
@@ -0,0 +1,28 @@
1
+ import { ObjectNode, NumberInput, LabelElement } from '../../libs/flow.module.js';
2
+ import { Vector2Node } from '../../renderers/nodes/Nodes.js';
3
+
4
+ export class Vector2Editor extends ObjectNode {
5
+
6
+ constructor() {
7
+
8
+ const node = new Vector2Node();
9
+
10
+ super( 'Vector 2', 2, node );
11
+
12
+ this.title.setIcon( 'ti ti-box-multiple-2' );
13
+
14
+ const onUpdate = () => {
15
+
16
+ node.value.x = fieldX.getValue();
17
+ node.value.y = fieldY.getValue();
18
+
19
+ };
20
+
21
+ const fieldX = new NumberInput().onChange( onUpdate );
22
+ const fieldY = new NumberInput().onChange( onUpdate );
23
+
24
+ this.add( new LabelElement( 'Values' ).add( fieldX ).add( fieldY ) );
25
+
26
+ }
27
+
28
+ }
@@ -0,0 +1,30 @@
1
+ import { ObjectNode, NumberInput, LabelElement } from '../../libs/flow.module.js';
2
+ import { Vector3Node } from '../../renderers/nodes/Nodes.js';
3
+
4
+ export class Vector3Editor extends ObjectNode {
5
+
6
+ constructor() {
7
+
8
+ const node = new Vector3Node();
9
+
10
+ super( 'Vector 3', 3, node );
11
+
12
+ this.title.setIcon( 'ti ti-box-multiple-3' );
13
+
14
+ const onUpdate = () => {
15
+
16
+ node.value.x = fieldX.getValue();
17
+ node.value.y = fieldY.getValue();
18
+ node.value.z = fieldZ.getValue();
19
+
20
+ };
21
+
22
+ const fieldX = new NumberInput().onChange( onUpdate );
23
+ const fieldY = new NumberInput().onChange( onUpdate );
24
+ const fieldZ = new NumberInput().onChange( onUpdate );
25
+
26
+ this.add( new LabelElement( 'Values' ).add( fieldX ).add( fieldY ).add( fieldZ ) );
27
+
28
+ }
29
+
30
+ }
@@ -0,0 +1,37 @@
1
+ import { ObjectNode, NumberInput, LabelElement } from '../../libs/flow.module.js';
2
+ import { Vector4Node } from '../../renderers/nodes/Nodes.js';
3
+
4
+ export class Vector4Editor extends ObjectNode {
5
+
6
+ constructor() {
7
+
8
+ const node = new Vector4Node();
9
+
10
+ super( 'Vector 4', 4, node );
11
+
12
+ this.title.setIcon( 'ti ti-box-multiple-4' );
13
+
14
+ const onUpdate = () => {
15
+
16
+ node.value.x = fieldX.getValue();
17
+ node.value.y = fieldY.getValue();
18
+ node.value.z = fieldZ.getValue();
19
+ node.value.w = fieldW.getValue();
20
+
21
+ };
22
+
23
+ const fieldX = new NumberInput().onChange( onUpdate );
24
+ const fieldY = new NumberInput().onChange( onUpdate );
25
+ const fieldZ = new NumberInput().onChange( onUpdate );
26
+ const fieldW = new NumberInput().onChange( onUpdate );
27
+
28
+ this.add( new LabelElement( 'Values' )
29
+ .add( fieldX )
30
+ .add( fieldY )
31
+ .add( fieldZ )
32
+ .add( fieldW )
33
+ );
34
+
35
+ }
36
+
37
+ }
@@ -0,0 +1,69 @@
1
+ import { ObjectNode, LabelElement } from '../../libs/flow.module.js';
2
+ import { MeshStandardNodeMaterial, ColorNode, FloatNode } from '../../renderers/nodes/Nodes.js';
3
+ import * as THREE from 'three';
4
+
5
+ const NULL_COLOR = new ColorNode();
6
+ const NULL_FLOAT = new FloatNode();
7
+
8
+ export class StandardMaterialEditor extends ObjectNode {
9
+
10
+ constructor() {
11
+
12
+ const material = new MeshStandardNodeMaterial();
13
+
14
+ super( 'Standard Material', 0, material );
15
+
16
+ this.title.setStyle( 'blue' );
17
+
18
+ this.setWidth( 300 );
19
+
20
+ const color = new LabelElement( 'color' ).setInput( 3 );
21
+ const opacity = new LabelElement( 'opacity' ).setInput( 1 );
22
+ const metalness = new LabelElement( 'metalness' ).setInput( 1 );
23
+ const roughness = new LabelElement( 'roughness' ).setInput( 1 );
24
+
25
+ color.onConnect( () => this.update(), true );
26
+ opacity.onConnect( () => this.update(), true );
27
+ metalness.onConnect( () => this.update(), true );
28
+ roughness.onConnect( () => this.update(), true );
29
+
30
+ this.add( color )
31
+ .add( opacity )
32
+ .add( metalness )
33
+ .add( roughness );
34
+
35
+ this.color = color;
36
+ this.opacity = opacity;
37
+ this.metalness = metalness;
38
+ this.roughness = roughness;
39
+
40
+ this.material = material;
41
+
42
+ this.update();
43
+
44
+ }
45
+
46
+ update() {
47
+
48
+ const { material, color, opacity, roughness, metalness } = this;
49
+
50
+ material.colorNode = color.linkedExtra || NULL_COLOR;
51
+
52
+ material.opacityNode = opacity.linkedExtra || null;
53
+ material.transparent = opacity.linkedExtra ? true : false;
54
+
55
+ material.metalnessNode = metalness.linkedExtra || NULL_FLOAT;
56
+ material.roughnessNode = roughness.linkedExtra || NULL_FLOAT;
57
+
58
+ material.dispose();
59
+
60
+ // TODO: Fix on NodeMaterial System
61
+ material.customProgramCacheKey = () => {
62
+
63
+ return THREE.MathUtils.generateUUID();
64
+
65
+ };
66
+
67
+ }
68
+
69
+ }
@@ -0,0 +1,36 @@
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
+
6
+ export class DotEditor extends ObjectNode {
7
+
8
+ constructor() {
9
+
10
+ const node = new MathNode( MathNode.DOT, NULL_VALUE, NULL_VALUE );
11
+
12
+ super( 'Dot Product', 1, node );
13
+
14
+ this.setWidth( 200 );
15
+
16
+ const aElement = new LabelElement( 'A' ).setInput( 3 );
17
+ const bElement = new LabelElement( 'B' ).setInput( 3 );
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
+ this.add( aElement )
32
+ .add( bElement );
33
+
34
+ }
35
+
36
+ }
@@ -0,0 +1,38 @@
1
+ import { ObjectNode, SelectInput, LabelElement } from '../../libs/flow.module.js';
2
+ import { MathNode, FloatNode } from '../../renderers/nodes/Nodes.js';
3
+
4
+ const DEFAULT_VALUE = new FloatNode();
5
+
6
+ export class InvertEditor extends ObjectNode {
7
+
8
+ constructor() {
9
+
10
+ const node = new MathNode( MathNode.INVERT, DEFAULT_VALUE );
11
+
12
+ super( 'Invert / Negate', 1, node );
13
+
14
+ const optionsField = new SelectInput( [
15
+ { name: 'Invert ( 1 - Source )', value: MathNode.INVERT },
16
+ { name: 'Negate ( - Source )', value: MathNode.NEGATE }
17
+ ] ).onChange( () => {
18
+
19
+ node.method = optionsField.getValue();
20
+
21
+ this.invalidate();
22
+
23
+ } );
24
+
25
+ const input = new LabelElement( 'Source' ).setInput( 1 );
26
+
27
+ input.onConnect( () => {
28
+
29
+ node.aNode = input.linkedExtra || DEFAULT_VALUE;
30
+
31
+ } );
32
+
33
+ this.add( new LabelElement( 'Method' ).add( optionsField ) )
34
+ .add( input );
35
+
36
+ }
37
+
38
+ }
@@ -0,0 +1,48 @@
1
+ import { ObjectNode, SelectInput, LabelElement } from '../../libs/flow.module.js';
2
+ import { MathNode, FloatNode } from '../../renderers/nodes/Nodes.js';
3
+
4
+ const NULL_VALUE = new FloatNode();
5
+
6
+ export class LimiterEditor extends ObjectNode {
7
+
8
+ constructor() {
9
+
10
+ const node = new MathNode( MathNode.MAX, NULL_VALUE, NULL_VALUE );
11
+
12
+ super( 'Limiter', 1, node, 250 );
13
+
14
+ const methodInput = new SelectInput( [
15
+ { name: 'Max', value: MathNode.MAX },
16
+ { name: 'Min', value: MathNode.MIN }
17
+ ] );
18
+
19
+ methodInput.onChange( ( data ) => {
20
+
21
+ node.method = data.getValue();
22
+
23
+ this.invalidate();
24
+
25
+ } );
26
+
27
+ const aElement = new LabelElement( 'A' ).setInput( 1 );
28
+ const bElement = new LabelElement( 'B' ).setInput( 1 );
29
+
30
+ aElement.onConnect( () => {
31
+
32
+ node.aNode = aElement.linkedExtra || NULL_VALUE;
33
+
34
+ } );
35
+
36
+ bElement.onConnect( () => {
37
+
38
+ node.bNode = bElement.linkedExtra || NULL_VALUE;
39
+
40
+ } );
41
+
42
+ this.add( new LabelElement( 'Method' ).add( methodInput ) )
43
+ .add( aElement )
44
+ .add( bElement );
45
+
46
+ }
47
+
48
+ }
@@ -0,0 +1,26 @@
1
+ import { ObjectNode, LabelElement } from '../../libs/flow.module.js';
2
+ import { MathNode, Vector3Node } from '../../renderers/nodes/Nodes.js';
3
+
4
+ const DEFAULT_VALUE = new Vector3Node();
5
+
6
+ export class NormalizeEditor extends ObjectNode {
7
+
8
+ constructor() {
9
+
10
+ const node = new MathNode( MathNode.NORMALIZE, DEFAULT_VALUE );
11
+
12
+ super( 'Normalize', 3, node, 200 );
13
+
14
+ const input = new LabelElement( 'Source' ).setInput( 3 );
15
+
16
+ input.onConnect( () => {
17
+
18
+ node.aNode = input.linkedExtra || DEFAULT_VALUE;
19
+
20
+ } );
21
+
22
+ this.add( input );
23
+
24
+ }
25
+
26
+ }
@@ -0,0 +1,50 @@
1
+ import { ObjectNode, SelectInput, LabelElement } from '../../libs/flow.module.js';
2
+ import { OperatorNode, FloatNode } from '../../renderers/nodes/Nodes.js';
3
+
4
+ const NULL_VALUE = new FloatNode();
5
+
6
+ export class OperatorEditor extends ObjectNode {
7
+
8
+ constructor() {
9
+
10
+ const node = new OperatorNode( '+', NULL_VALUE, NULL_VALUE );
11
+
12
+ super( 'Operator', 1, node, 250 );
13
+
14
+ const opInput = new SelectInput( [
15
+ { name: '+ Addition', value: '+' },
16
+ { name: '- Subtraction', value: '-' },
17
+ { name: '* Multiplication', value: '*' },
18
+ { name: '/ Division', value: '/' }
19
+ ] );
20
+
21
+ opInput.onChange( ( data ) => {
22
+
23
+ node.op = data.getValue();
24
+
25
+ this.invalidate();
26
+
27
+ } );
28
+
29
+ const aElement = new LabelElement( 'A' ).setInput( 3 );
30
+ const bElement = new LabelElement( 'B' ).setInput( 3 );
31
+
32
+ aElement.onConnect( () => {
33
+
34
+ node.aNode = aElement.linkedExtra || NULL_VALUE;
35
+
36
+ } );
37
+
38
+ bElement.onConnect( () => {
39
+
40
+ node.bNode = bElement.linkedExtra || NULL_VALUE;
41
+
42
+ } );
43
+
44
+ this.add( new LabelElement( 'Operator' ).add( opInput ) )
45
+ .add( aElement )
46
+ .add( bElement );
47
+
48
+ }
49
+
50
+ }
@@ -0,0 +1,34 @@
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
+
6
+ export class PowerEditor extends ObjectNode {
7
+
8
+ constructor() {
9
+
10
+ const node = new MathNode( MathNode.POW, NULL_VALUE, NULL_VALUE );
11
+
12
+ super( 'Power', 1, node, 200 );
13
+
14
+ const aElement = new LabelElement( 'A' ).setInput( 1 );
15
+ const bElement = new LabelElement( 'B' ).setInput( 1 );
16
+
17
+ aElement.onConnect( () => {
18
+
19
+ node.aNode = aElement.linkedExtra || NULL_VALUE;
20
+
21
+ } );
22
+
23
+ bElement.onConnect( () => {
24
+
25
+ node.bNode = bElement.linkedExtra || NULL_VALUE;
26
+
27
+ } );
28
+
29
+ this.add( aElement )
30
+ .add( bElement );
31
+
32
+ }
33
+
34
+ }
@@ -0,0 +1,39 @@
1
+ import { ObjectNode, SelectInput, Element, LabelElement } from '../../libs/flow.module.js';
2
+ import { MathNode, Vector3Node } from '../../renderers/nodes/Nodes.js';
3
+
4
+ const DEFAULT_VALUE = new Vector3Node();
5
+
6
+ export class TrigonometryEditor extends ObjectNode {
7
+
8
+ constructor() {
9
+
10
+ const node = new MathNode( MathNode.SIN, DEFAULT_VALUE );
11
+
12
+ super( 'Trigonometry', 1, node, 200 );
13
+
14
+ const optionsField = new SelectInput( [
15
+ { name: 'Sin', value: MathNode.SIN },
16
+ { name: 'Cos', value: MathNode.COS },
17
+ { name: 'Tan', value: MathNode.TAN }
18
+ ] ).onChange( () => {
19
+
20
+ node.method = optionsField.getValue();
21
+
22
+ this.invalidate();
23
+
24
+ } );
25
+
26
+ const input = new LabelElement( 'Source' ).setInput( 1 );
27
+
28
+ input.onConnect( () => {
29
+
30
+ node.aNode = input.linkedExtra || DEFAULT_VALUE;
31
+
32
+ } );
33
+
34
+ this.add( new Element().add( optionsField ) )
35
+ .add( input );
36
+
37
+ }
38
+
39
+ }
@@ -0,0 +1,26 @@
1
+ import { ObjectNode, LabelElement } from '../../libs/flow.module.js';
2
+ import { CheckerNode, UVNode } from '../../renderers/nodes/Nodes.js';
3
+
4
+ const DEFAULT_UV = new UVNode();
5
+
6
+ export class CheckerEditor extends ObjectNode {
7
+
8
+ constructor() {
9
+
10
+ const node = new CheckerNode( DEFAULT_UV );
11
+
12
+ super( 'Checker', 1, node, 200 );
13
+
14
+ const field = new LabelElement( 'UV' ).setInput( 2 );
15
+
16
+ field.onConnect( () => {
17
+
18
+ node.uvNode = field.linkedExtra || DEFAULT_UV;
19
+
20
+ } );
21
+
22
+ this.add( field );
23
+
24
+ }
25
+
26
+ }
@@ -0,0 +1,42 @@
1
+ import { ObjectNode, SelectInput, LabelElement } from '../../libs/flow.module.js';
2
+ import { OscNode, FloatNode } from '../../renderers/nodes/Nodes.js';
3
+
4
+ const NULL_VALUE = new FloatNode();
5
+
6
+ export class OscillatorEditor extends ObjectNode {
7
+
8
+ constructor() {
9
+
10
+ const node = new OscNode( OscNode.SINE, NULL_VALUE );
11
+
12
+ super( 'Oscillator', 1, node, 250 );
13
+
14
+ const methodInput = new SelectInput( [
15
+ { name: 'Sine', value: OscNode.SINE },
16
+ { name: 'Square', value: OscNode.SQUARE },
17
+ { name: 'Triangle', value: OscNode.TRIANGLE },
18
+ { name: 'Sawtooth', value: OscNode.SAWTOOTH }
19
+ ] );
20
+
21
+ methodInput.onChange( () => {
22
+
23
+ node.method = methodInput.getValue();
24
+
25
+ this.invalidate();
26
+
27
+ } );
28
+
29
+ const timeElement = new LabelElement( 'Time' ).setInput( 1 );
30
+
31
+ timeElement.onConnect( () => {
32
+
33
+ node.timeNode = timeElement.linkedExtra || NULL_VALUE;
34
+
35
+ } );
36
+
37
+ this.add( new LabelElement( 'Method' ).add( methodInput ) )
38
+ .add( timeElement );
39
+
40
+ }
41
+
42
+ }