super-three 0.133.2 → 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 +619 -538
  2. package/build/three.min.js +1 -1
  3. package/build/three.module.js +763 -616
  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 +71 -110
  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,57 @@
1
+ import { ObjectNode, NumberInput, LabelElement, Element, ButtonInput } from '../../libs/flow.module.js';
2
+ import { TimerNode } from '../../renderers/nodes/Nodes.js';
3
+
4
+ export class TimerEditor extends ObjectNode {
5
+
6
+ constructor() {
7
+
8
+ const node = new TimerNode();
9
+
10
+ super( 'Timer', 1, node, 250 );
11
+
12
+ this.title.setIcon( 'ti ti-clock' );
13
+
14
+ const updateField = () => {
15
+
16
+ field.setValue( node.value.toFixed( 3 ) );
17
+
18
+ };
19
+
20
+ const field = new NumberInput().onChange( () => {
21
+
22
+ node.value = field.getValue();
23
+
24
+ } );
25
+
26
+ const scaleField = new NumberInput( 1 ).onChange( () => {
27
+
28
+ node.scale = scaleField.getValue();
29
+
30
+ } );
31
+
32
+ const moreElement = new Element().add( new ButtonInput( 'Reset' ).onClick( () => {
33
+
34
+ node.value = 0;
35
+
36
+ updateField();
37
+
38
+ } ) ).setSerializable( false );
39
+
40
+ this.add( new LabelElement( 'Value' ).add( field ).setSerializable( false ) )
41
+ .add( new LabelElement( 'Scale' ).add( scaleField ) )
42
+ .add( moreElement );
43
+
44
+ // extends node
45
+
46
+ node._update = node.update;
47
+ node.update = function ( ...params ) {
48
+
49
+ this._update( ...params );
50
+
51
+ updateField();
52
+
53
+ };
54
+
55
+ }
56
+
57
+ }
@@ -34,7 +34,7 @@ NodeUtils.addShortcuts( StandardNodeMaterial.prototype, 'fragment', [
34
34
  'environment',
35
35
  'mask',
36
36
  'position',
37
- 'sheenTint'
37
+ 'sheenColor'
38
38
  ] );
39
39
 
40
40
  export { StandardNodeMaterial };
@@ -185,7 +185,7 @@ class StandardNode extends Node {
185
185
 
186
186
  }
187
187
 
188
- if ( this.sheenTint ) this.sheenTint.analyze( builder );
188
+ if ( this.sheenColor ) this.sheenColor.analyze( builder );
189
189
 
190
190
  // build code
191
191
 
@@ -230,7 +230,7 @@ class StandardNode extends Node {
230
230
 
231
231
  const clearcoatEnv = useClearcoat && environment ? this.environment.flow( builder, 'c', { cache: 'clearcoat', context: contextClearcoatEnvironment, slot: 'environment' } ) : undefined;
232
232
 
233
- const sheenTint = this.sheenTint ? this.sheenTint.flow( builder, 'c' ) : undefined;
233
+ const sheenColor = this.sheenColor ? this.sheenColor.flow( builder, 'c' ) : undefined;
234
234
 
235
235
  builder.requires.transparent = alpha !== undefined;
236
236
 
@@ -368,9 +368,9 @@ class StandardNode extends Node {
368
368
 
369
369
  }
370
370
 
371
- if ( sheenTint ) {
371
+ if ( sheenColor ) {
372
372
 
373
- output.push( 'material.sheenTint = ' + sheenTint.result + ';' );
373
+ output.push( 'material.sheenColor = ' + sheenColor.result + ';' );
374
374
 
375
375
  }
376
376
 
@@ -547,7 +547,7 @@ class StandardNode extends Node {
547
547
 
548
548
  if ( source.environment ) this.environment = source.environment;
549
549
 
550
- if ( source.sheenTint ) this.sheenTint = source.sheenTint;
550
+ if ( source.sheenColor ) this.sheenColor = source.sheenColor;
551
551
 
552
552
  return this;
553
553
 
@@ -593,7 +593,7 @@ class StandardNode extends Node {
593
593
 
594
594
  if ( this.environment ) data.environment = this.environment.toJSON( meta ).uuid;
595
595
 
596
- if ( this.sheenTint ) data.sheenTint = this.sheenTint.toJSON( meta ).uuid;
596
+ if ( this.sheenColor ) data.sheenColor = this.sheenColor.toJSON( meta ).uuid;
597
597
 
598
598
  }
599
599
 
@@ -9,7 +9,6 @@ import {
9
9
  } from 'three';
10
10
 
11
11
  import { TempNode } from '../core/TempNode.js';
12
- import { ConstNode } from '../core/ConstNode.js';
13
12
  import { FloatNode } from '../inputs/FloatNode.js';
14
13
  import { FunctionNode } from '../core/FunctionNode.js';
15
14
  import { ExpressionNode } from '../core/ExpressionNode.js';
@@ -197,7 +196,6 @@ ColorSpaceNode.Nodes = ( function () {
197
196
  }`
198
197
  );
199
198
 
200
-
201
199
  const LinearToRGBD = new FunctionNode( /* glsl */`
202
200
  vec3 LinearToRGBD( in vec4 value, in float maxRange ) {
203
201
 
@@ -209,45 +207,6 @@ ColorSpaceNode.Nodes = ( function () {
209
207
  }`
210
208
  );
211
209
 
212
- // LogLuv reference: http://graphicrants.blogspot.ca/2009/04/rgbm-color-encoding.html
213
-
214
- // M matrix, for encoding
215
-
216
- const cLogLuvM = new ConstNode( 'const mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );' );
217
-
218
- const LinearToLogLuv = new FunctionNode( /* glsl */`
219
- vec4 LinearToLogLuv( in vec4 value ) {
220
-
221
- vec3 Xp_Y_XYZp = cLogLuvM * value.rgb;
222
- Xp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));
223
- vec4 vResult;
224
- vResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;
225
- float Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;
226
- vResult.w = fract(Le);
227
- vResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;
228
- return vResult;
229
-
230
- }`
231
- , [ cLogLuvM ] );
232
-
233
- // Inverse M matrix, for decoding
234
-
235
- const cLogLuvInverseM = new ConstNode( 'const mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );' );
236
-
237
- const LogLuvToLinear = new FunctionNode( /* glsl */`
238
- vec4 LogLuvToLinear( in vec4 value ) {
239
-
240
- float Le = value.z * 255.0 + value.w;
241
- vec3 Xp_Y_XYZp;
242
- Xp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);
243
- Xp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;
244
- Xp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;
245
- vec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;
246
- return vec4( max(vRGB, 0.0), 1.0 );
247
-
248
- }`
249
- , [ cLogLuvInverseM ] );
250
-
251
210
  return {
252
211
  LinearToLinear: LinearToLinear,
253
212
  GammaToLinear: GammaToLinear,
@@ -259,11 +218,7 @@ ColorSpaceNode.Nodes = ( function () {
259
218
  RGBMToLinear: RGBMToLinear,
260
219
  LinearToRGBM: LinearToRGBM,
261
220
  RGBDToLinear: RGBDToLinear,
262
- LinearToRGBD: LinearToRGBD,
263
- cLogLuvM: cLogLuvM,
264
- LinearToLogLuv: LinearToLogLuv,
265
- cLogLuvInverseM: cLogLuvInverseM,
266
- LogLuvToLinear: LogLuvToLinear
221
+ LinearToRGBD: LinearToRGBD
267
222
  };
268
223
 
269
224
  } )();
@@ -285,9 +240,6 @@ ColorSpaceNode.LINEAR_TO_RGBM = 'LinearToRGBM';
285
240
  ColorSpaceNode.RGBD_TO_LINEAR = 'RGBDToLinear';
286
241
  ColorSpaceNode.LINEAR_TO_RGBD = 'LinearToRGBD';
287
242
 
288
- ColorSpaceNode.LINEAR_TO_LOG_LUV = 'LinearToLogLuv';
289
- ColorSpaceNode.LOG_LUV_TO_LINEAR = 'LogLuvToLinear';
290
-
291
243
  ColorSpaceNode.getEncodingComponents = function ( encoding ) {
292
244
 
293
245
  switch ( encoding ) {
@@ -2,19 +2,21 @@ import {
2
2
  BufferAttribute,
3
3
  BufferGeometry,
4
4
  Color,
5
- ImmediateRenderObject,
6
- NoColors
5
+ DynamicDrawUsage,
6
+ Mesh
7
7
  } from 'three';
8
8
 
9
9
  /**
10
10
  * Port of http://webglsamples.org/blob/blob.html
11
11
  */
12
12
 
13
- class MarchingCubes extends ImmediateRenderObject {
13
+ class MarchingCubes extends Mesh {
14
14
 
15
- constructor( resolution, material, enableUvs, enableColors ) {
15
+ constructor( resolution, material, enableUvs = false, enableColors = false, maxPolyCount = 10000 ) {
16
16
 
17
- super( material );
17
+ const geometry = new BufferGeometry();
18
+
19
+ super( geometry, material );
18
20
 
19
21
  const scope = this;
20
22
 
@@ -24,8 +26,8 @@ class MarchingCubes extends ImmediateRenderObject {
24
26
  const nlist = new Float32Array( 12 * 3 );
25
27
  const clist = new Float32Array( 12 * 3 );
26
28
 
27
- this.enableUvs = enableUvs !== undefined ? enableUvs : false;
28
- this.enableColors = enableColors !== undefined ? enableColors : false;
29
+ this.enableUvs = enableUvs;
30
+ this.enableColors = enableColors;
29
31
 
30
32
  // functions have to be object properties
31
33
  // prototype functions kill performance
@@ -56,28 +58,37 @@ class MarchingCubes extends ImmediateRenderObject {
56
58
  this.normal_cache = new Float32Array( this.size3 * 3 );
57
59
  this.palette = new Float32Array( this.size3 * 3 );
58
60
 
59
- // immediate render mode simulator
61
+ //
60
62
 
61
- this.maxCount = 4096; // TODO: find the fastest size for this buffer
62
63
  this.count = 0;
63
64
 
64
- this.hasPositions = false;
65
- this.hasNormals = false;
66
- this.hasColors = false;
67
- this.hasUvs = false;
65
+ const maxVertexCount = maxPolyCount * 3;
66
+
67
+ this.positionArray = new Float32Array( maxVertexCount * 3 );
68
+ const positionAttribute = new BufferAttribute( this.positionArray, 3 );
69
+ positionAttribute.setUsage( DynamicDrawUsage );
70
+ geometry.setAttribute( 'position', positionAttribute );
68
71
 
69
- this.positionArray = new Float32Array( this.maxCount * 3 );
70
- this.normalArray = new Float32Array( this.maxCount * 3 );
72
+ this.normalArray = new Float32Array( maxVertexCount * 3 );
73
+ const normalAttribute = new BufferAttribute( this.normalArray, 3 );
74
+ normalAttribute.setUsage( DynamicDrawUsage );
75
+ geometry.setAttribute( 'normal', normalAttribute );
71
76
 
72
77
  if ( this.enableUvs ) {
73
78
 
74
- this.uvArray = new Float32Array( this.maxCount * 2 );
79
+ this.uvArray = new Float32Array( maxVertexCount * 2 );
80
+ const uvAttribute = new BufferAttribute( this.uvArray, 2 );
81
+ uvAttribute.setUsage( DynamicDrawUsage );
82
+ geometry.setAttribute( 'uv', uvAttribute );
75
83
 
76
84
  }
77
85
 
78
86
  if ( this.enableColors ) {
79
87
 
80
- this.colorArray = new Float32Array( this.maxCount * 3 );
88
+ this.colorArray = new Float32Array( maxVertexCount * 3 );
89
+ const colorAttribute = new BufferAttribute( this.colorArray, 3 );
90
+ colorAttribute.setUsage( DynamicDrawUsage );
91
+ geometry.setAttribute( 'color', colorAttribute );
81
92
 
82
93
  }
83
94
 
@@ -173,7 +184,7 @@ class MarchingCubes extends ImmediateRenderObject {
173
184
  // Returns total number of triangles. Fills triangles.
174
185
  // (this is where most of time is spent - it's inner work of O(n3) loop )
175
186
 
176
- function polygonize( fx, fy, fz, q, isol, renderCallback ) {
187
+ function polygonize( fx, fy, fz, q, isol ) {
177
188
 
178
189
  // cache indices
179
190
  const q1 = q + 1,
@@ -369,8 +380,7 @@ class MarchingCubes extends ImmediateRenderObject {
369
380
  clist,
370
381
  3 * triTable[ o1 ],
371
382
  3 * triTable[ o2 ],
372
- 3 * triTable[ o3 ],
373
- renderCallback
383
+ 3 * triTable[ o3 ]
374
384
  );
375
385
 
376
386
  i += 3;
@@ -382,11 +392,7 @@ class MarchingCubes extends ImmediateRenderObject {
382
392
 
383
393
  }
384
394
 
385
- /////////////////////////////////////
386
- // Immediate render mode simulator
387
- /////////////////////////////////////
388
-
389
- function posnormtriv( pos, norm, colors, o1, o2, o3, renderCallback ) {
395
+ function posnormtriv( pos, norm, colors, o1, o2, o3 ) {
390
396
 
391
397
  const c = scope.count * 3;
392
398
 
@@ -477,69 +483,8 @@ class MarchingCubes extends ImmediateRenderObject {
477
483
 
478
484
  scope.count += 3;
479
485
 
480
- if ( scope.count >= scope.maxCount - 3 ) {
481
-
482
- scope.hasPositions = true;
483
- scope.hasNormals = true;
484
-
485
- if ( scope.enableUvs ) {
486
-
487
- scope.hasUvs = true;
488
-
489
- }
490
-
491
- if ( scope.enableColors ) {
492
-
493
- scope.hasColors = true;
494
-
495
- }
496
-
497
- renderCallback( scope );
498
-
499
- }
500
-
501
486
  }
502
487
 
503
- this.begin = function () {
504
-
505
- this.count = 0;
506
-
507
- this.hasPositions = false;
508
- this.hasNormals = false;
509
- this.hasUvs = false;
510
- this.hasColors = false;
511
-
512
- };
513
-
514
- this.end = function ( renderCallback ) {
515
-
516
- if ( this.count === 0 ) return;
517
-
518
- for ( let i = this.count * 3; i < this.positionArray.length; i ++ ) {
519
-
520
- this.positionArray[ i ] = 0.0;
521
-
522
- }
523
-
524
- this.hasPositions = true;
525
- this.hasNormals = true;
526
-
527
- if ( this.enableUvs && this.material.map ) {
528
-
529
- this.hasUvs = true;
530
-
531
- }
532
-
533
- if ( this.enableColors && this.material.vertexColors !== NoColors ) {
534
-
535
- this.hasColors = true;
536
-
537
- }
538
-
539
- renderCallback( this );
540
-
541
- };
542
-
543
488
  /////////////////////////////////////
544
489
  // Metaballs
545
490
  /////////////////////////////////////
@@ -867,9 +812,9 @@ class MarchingCubes extends ImmediateRenderObject {
867
812
 
868
813
  };
869
814
 
870
- this.render = function ( renderCallback ) {
815
+ this.onBeforeRender = function () {
871
816
 
872
- this.begin();
817
+ this.count = 0;
873
818
 
874
819
  // Triangulate. Yeah, this is slow.
875
820
 
@@ -890,7 +835,7 @@ class MarchingCubes extends ImmediateRenderObject {
890
835
  const fx = ( x - this.halfsize ) / this.halfsize; //+ 1
891
836
  const q = y_offset + x;
892
837
 
893
- polygonize( fx, fy, fz, q, this.isolation, renderCallback );
838
+ polygonize( fx, fy, fz, q, this.isolation );
894
839
 
895
840
  }
896
841
 
@@ -898,76 +843,25 @@ class MarchingCubes extends ImmediateRenderObject {
898
843
 
899
844
  }
900
845
 
901
- this.end( renderCallback );
846
+ // reset unneeded data
902
847
 
903
- };
848
+ for ( let i = this.count * 3; i < this.positionArray.length; i ++ ) {
904
849
 
905
- this.generateGeometry = function () {
850
+ this.positionArray[ i ] = 0.0;
906
851
 
907
- console.warn(
908
- 'THREE.MarchingCubes: generateGeometry() now returns BufferGeometry'
909
- );
910
- return this.generateBufferGeometry();
852
+ }
911
853
 
912
- };
854
+ // update geometry data
913
855
 
914
- function concatenate( a, b, length ) {
856
+ geometry.getAttribute( 'position' ).needsUpdate = true;
857
+ geometry.getAttribute( 'normal' ).needsUpdate = true;
915
858
 
916
- const result = new Float32Array( a.length + length );
917
- result.set( a, 0 );
918
- result.set( b.slice( 0, length ), a.length );
919
- return result;
859
+ if ( this.enableUvs ) geometry.getAttribute( 'uv' ).needsUpdate = true;
860
+ if ( this.enableColors ) geometry.getAttribute( 'color' ).needsUpdate = true;
920
861
 
921
- }
862
+ // safety check
922
863
 
923
- this.generateBufferGeometry = function () {
924
-
925
- const geo = new BufferGeometry();
926
- let posArray = new Float32Array();
927
- let normArray = new Float32Array();
928
- let colorArray = new Float32Array();
929
- let uvArray = new Float32Array();
930
- const scope = this;
931
-
932
- const geo_callback = function ( object ) {
933
-
934
- if ( scope.hasPositions )
935
- posArray = concatenate(
936
- posArray,
937
- object.positionArray,
938
- object.count * 3
939
- );
940
- if ( scope.hasNormals )
941
- normArray = concatenate(
942
- normArray,
943
- object.normalArray,
944
- object.count * 3
945
- );
946
- if ( scope.hasColors )
947
- colorArray = concatenate(
948
- colorArray,
949
- object.colorArray,
950
- object.count * 3
951
- );
952
- if ( scope.hasUvs )
953
- uvArray = concatenate( uvArray, object.uvArray, object.count * 2 );
954
-
955
- object.count = 0;
956
-
957
- };
958
-
959
- this.render( geo_callback );
960
-
961
- if ( this.hasPositions )
962
- geo.setAttribute( 'position', new BufferAttribute( posArray, 3 ) );
963
- if ( this.hasNormals )
964
- geo.setAttribute( 'normal', new BufferAttribute( normArray, 3 ) );
965
- if ( this.hasColors )
966
- geo.setAttribute( 'color', new BufferAttribute( colorArray, 3 ) );
967
- if ( this.hasUvs )
968
- geo.setAttribute( 'uv', new BufferAttribute( uvArray, 2 ) );
969
-
970
- return geo;
864
+ if ( this.count / 3 > maxPolyCount ) console.warn( 'THREE.MarchingCubes: Geometry buffers too small for rendering. Please create an instance with a higher poly count.' );
971
865
 
972
866
  };
973
867
 
@@ -984,7 +878,7 @@ MarchingCubes.prototype.isMarchingCubes = true;
984
878
  /////////////////////////////////////
985
879
 
986
880
  // These tables are straight from Paul Bourke's page:
987
- // http://local.wasp.uwa.edu.au/~pbourke/geometry/polygonise/
881
+ // http://paulbourke.net/geometry/polygonise/
988
882
  // who in turn got them from Cory Gene Bloyd.
989
883
 
990
884
  const edgeTable = new Int32Array( [
@@ -8,7 +8,7 @@ import {
8
8
  UniformsUtils,
9
9
  WebGLRenderTarget
10
10
  } from 'three';
11
- import { Pass, FullScreenQuad } from '../postprocessing/Pass.js';
11
+ import { Pass, FullScreenQuad } from './Pass.js';
12
12
  import { CopyShader } from '../shaders/CopyShader.js';
13
13
  import { LuminosityShader } from '../shaders/LuminosityShader.js';
14
14
  import { ToneMapShader } from '../shaders/ToneMapShader.js';
@@ -7,7 +7,7 @@ import {
7
7
  UniformsUtils,
8
8
  WebGLRenderTarget
9
9
  } from 'three';
10
- import { Pass, FullScreenQuad } from '../postprocessing/Pass.js';
10
+ import { Pass, FullScreenQuad } from './Pass.js';
11
11
  import { AfterimageShader } from '../shaders/AfterimageShader.js';
12
12
 
13
13
  class AfterimagePass extends Pass {
@@ -7,7 +7,7 @@ import {
7
7
  Vector2,
8
8
  WebGLRenderTarget
9
9
  } from 'three';
10
- import { Pass, FullScreenQuad } from '../postprocessing/Pass.js';
10
+ import { Pass, FullScreenQuad } from './Pass.js';
11
11
  import { CopyShader } from '../shaders/CopyShader.js';
12
12
  import { ConvolutionShader } from '../shaders/ConvolutionShader.js';
13
13
 
@@ -8,7 +8,7 @@ import {
8
8
  UniformsUtils,
9
9
  WebGLRenderTarget
10
10
  } from 'three';
11
- import { Pass, FullScreenQuad } from '../postprocessing/Pass.js';
11
+ import { Pass, FullScreenQuad } from './Pass.js';
12
12
  import { BokehShader } from '../shaders/BokehShader.js';
13
13
 
14
14
  /**
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  Color
3
3
  } from 'three';
4
- import { Pass } from '../postprocessing/Pass.js';
4
+ import { Pass } from './Pass.js';
5
5
 
6
6
  class ClearPass extends Pass {
7
7
 
@@ -8,7 +8,7 @@ import {
8
8
  ShaderMaterial,
9
9
  UniformsUtils
10
10
  } from 'three';
11
- import { Pass } from '../postprocessing/Pass.js';
11
+ import { Pass } from './Pass.js';
12
12
 
13
13
  class CubeTexturePass extends Pass {
14
14
 
@@ -2,7 +2,7 @@ import {
2
2
  ShaderMaterial,
3
3
  UniformsUtils
4
4
  } from 'three';
5
- import { Pass, FullScreenQuad } from '../postprocessing/Pass.js';
5
+ import { Pass, FullScreenQuad } from './Pass.js';
6
6
  import { DotScreenShader } from '../shaders/DotScreenShader.js';
7
7
 
8
8
  class DotScreenPass extends Pass {
@@ -10,9 +10,9 @@ import {
10
10
  WebGLRenderTarget
11
11
  } from 'three';
12
12
  import { CopyShader } from '../shaders/CopyShader.js';
13
- import { ShaderPass } from '../postprocessing/ShaderPass.js';
14
- import { MaskPass } from '../postprocessing/MaskPass.js';
15
- import { ClearMaskPass } from '../postprocessing/MaskPass.js';
13
+ import { ShaderPass } from './ShaderPass.js';
14
+ import { MaskPass } from './MaskPass.js';
15
+ import { ClearMaskPass } from './MaskPass.js';
16
16
 
17
17
  class EffectComposer {
18
18
 
@@ -2,7 +2,7 @@ import {
2
2
  ShaderMaterial,
3
3
  UniformsUtils
4
4
  } from 'three';
5
- import { Pass, FullScreenQuad } from '../postprocessing/Pass.js';
5
+ import { Pass, FullScreenQuad } from './Pass.js';
6
6
  import { FilmShader } from '../shaders/FilmShader.js';
7
7
 
8
8
  class FilmPass extends Pass {
@@ -6,7 +6,7 @@ import {
6
6
  ShaderMaterial,
7
7
  UniformsUtils
8
8
  } from 'three';
9
- import { Pass, FullScreenQuad } from '../postprocessing/Pass.js';
9
+ import { Pass, FullScreenQuad } from './Pass.js';
10
10
  import { DigitalGlitch } from '../shaders/DigitalGlitch.js';
11
11
 
12
12
  class GlitchPass extends Pass {
@@ -2,7 +2,7 @@ import {
2
2
  ShaderMaterial,
3
3
  UniformsUtils
4
4
  } from 'three';
5
- import { Pass, FullScreenQuad } from '../postprocessing/Pass.js';
5
+ import { Pass, FullScreenQuad } from './Pass.js';
6
6
  import { HalftoneShader } from '../shaders/HalftoneShader.js';
7
7
 
8
8
  /**
@@ -1,4 +1,4 @@
1
- import { Pass } from '../postprocessing/Pass.js';
1
+ import { Pass } from './Pass.js';
2
2
 
3
3
  class MaskPass extends Pass {
4
4
 
@@ -15,7 +15,7 @@ import {
15
15
  Vector3,
16
16
  WebGLRenderTarget
17
17
  } from 'three';
18
- import { Pass, FullScreenQuad } from '../postprocessing/Pass.js';
18
+ import { Pass, FullScreenQuad } from './Pass.js';
19
19
  import { CopyShader } from '../shaders/CopyShader.js';
20
20
 
21
21
  class OutlinePass extends Pass {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  Color
3
3
  } from 'three';
4
- import { Pass } from '../postprocessing/Pass.js';
4
+ import { Pass } from './Pass.js';
5
5
 
6
6
  class RenderPass extends Pass {
7
7
 
@@ -19,7 +19,7 @@ import {
19
19
  WebGLRenderTarget,
20
20
  ZeroFactor
21
21
  } from 'three';
22
- import { Pass, FullScreenQuad } from '../postprocessing/Pass.js';
22
+ import { Pass, FullScreenQuad } from './Pass.js';
23
23
  import { SAOShader } from '../shaders/SAOShader.js';
24
24
  import { DepthLimitedBlurShader } from '../shaders/DepthLimitedBlurShader.js';
25
25
  import { BlurShaderUtils } from '../shaders/DepthLimitedBlurShader.js';
@@ -8,7 +8,7 @@ import {
8
8
  UniformsUtils,
9
9
  WebGLRenderTarget
10
10
  } from 'three';
11
- import { Pass, FullScreenQuad } from '../postprocessing/Pass.js';
11
+ import { Pass, FullScreenQuad } from './Pass.js';
12
12
  import { SMAAEdgesShader } from '../shaders/SMAAShader.js';
13
13
  import { SMAAWeightsShader } from '../shaders/SMAAShader.js';
14
14
  import { SMAABlendShader } from '../shaders/SMAAShader.js';
@@ -7,7 +7,7 @@ import {
7
7
  UniformsUtils,
8
8
  WebGLRenderTarget
9
9
  } from 'three';
10
- import { Pass, FullScreenQuad } from '../postprocessing/Pass.js';
10
+ import { Pass, FullScreenQuad } from './Pass.js';
11
11
  import { CopyShader } from '../shaders/CopyShader.js';
12
12
 
13
13
  /**