super-three 0.157.1 → 0.158.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 (178) hide show
  1. package/README.md +6 -4
  2. package/build/three.cjs +1013 -790
  3. package/build/three.js +1013 -790
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +1008 -791
  6. package/build/three.module.min.js +1 -1
  7. package/examples/jsm/Addons.js +290 -0
  8. package/examples/jsm/controls/FlyControls.js +26 -0
  9. package/examples/jsm/controls/OrbitControls.js +12 -1
  10. package/examples/jsm/controls/TransformControls.js +27 -11
  11. package/examples/jsm/csm/CSMShader.js +1 -1
  12. package/examples/jsm/exporters/GLTFExporter.js +72 -2
  13. package/examples/jsm/geometries/InstancedPointsGeometry.js +174 -0
  14. package/examples/jsm/geometries/SDFGeometryGenerator.js +144 -0
  15. package/examples/jsm/libs/lottie_canvas.module.js +6 -1
  16. package/examples/jsm/libs/opentype.module.js +13 -75
  17. package/examples/jsm/libs/surfaceNet.js +201 -0
  18. package/examples/jsm/loaders/GLTFLoader.js +12 -3
  19. package/examples/jsm/loaders/LUTImageLoader.js +162 -0
  20. package/examples/jsm/loaders/lwo/IFFParser.js +89 -93
  21. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  22. package/examples/jsm/math/Capsule.js +0 -55
  23. package/examples/jsm/math/Octree.js +70 -3
  24. package/examples/jsm/modifiers/SimplifyModifier.js +103 -11
  25. package/examples/jsm/modifiers/TessellateModifier.js +3 -3
  26. package/examples/jsm/nodes/Nodes.js +6 -6
  27. package/examples/jsm/nodes/accessors/CubeTextureNode.js +3 -3
  28. package/examples/jsm/nodes/accessors/InstanceNode.js +3 -3
  29. package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +21 -0
  30. package/examples/jsm/nodes/accessors/MaterialNode.js +68 -31
  31. package/examples/jsm/nodes/accessors/ModelNode.js +1 -2
  32. package/examples/jsm/nodes/accessors/MorphNode.js +5 -5
  33. package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
  34. package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
  35. package/examples/jsm/nodes/accessors/SkinningNode.js +13 -3
  36. package/examples/jsm/nodes/accessors/TextureNode.js +3 -3
  37. package/examples/jsm/nodes/code/FunctionNode.js +1 -1
  38. package/examples/jsm/nodes/core/AssignNode.js +72 -0
  39. package/examples/jsm/nodes/core/LightingModel.js +3 -1
  40. package/examples/jsm/nodes/core/Node.js +7 -12
  41. package/examples/jsm/nodes/core/NodeBuilder.js +126 -16
  42. package/examples/jsm/nodes/core/NodeUtils.js +4 -2
  43. package/examples/jsm/nodes/core/OutputStructNode.js +1 -1
  44. package/examples/jsm/nodes/core/ParameterNode.js +33 -0
  45. package/examples/jsm/nodes/core/PropertyNode.js +4 -10
  46. package/examples/jsm/nodes/core/StackNode.js +7 -17
  47. package/examples/jsm/nodes/core/TempNode.js +1 -1
  48. package/examples/jsm/nodes/core/VarNode.js +6 -35
  49. package/examples/jsm/nodes/core/VaryingNode.js +2 -0
  50. package/examples/jsm/nodes/display/BumpMapNode.js +35 -13
  51. package/examples/jsm/nodes/display/NormalMapNode.js +3 -1
  52. package/examples/jsm/nodes/display/ViewportNode.js +14 -4
  53. package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +20 -6
  54. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +8 -7
  55. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +8 -3
  56. package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +8 -0
  57. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +8 -0
  58. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +93 -43
  59. package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -2
  60. package/examples/jsm/nodes/lighting/AmbientLightNode.js +1 -1
  61. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +19 -5
  62. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +1 -1
  63. package/examples/jsm/nodes/lighting/EnvironmentNode.js +0 -6
  64. package/examples/jsm/nodes/lighting/LightingContextNode.js +21 -57
  65. package/examples/jsm/nodes/lighting/LightsNode.js +62 -4
  66. package/examples/jsm/nodes/lighting/PointLightNode.js +1 -1
  67. package/examples/jsm/nodes/lighting/SpotLightNode.js +1 -1
  68. package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +162 -0
  69. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +70 -71
  70. package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +5 -5
  71. package/examples/jsm/nodes/materials/Materials.js +1 -0
  72. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +2 -2
  73. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
  74. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +47 -20
  75. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +6 -6
  76. package/examples/jsm/nodes/materials/NodeMaterial.js +17 -20
  77. package/examples/jsm/nodes/materialx/lib/mx_noise.js +5 -5
  78. package/examples/jsm/nodes/math/OperatorNode.js +5 -21
  79. package/examples/jsm/nodes/shadernode/ShaderNode.js +128 -9
  80. package/examples/jsm/nodes/utils/ArrayElementNode.js +2 -0
  81. package/examples/jsm/nodes/utils/DiscardNode.js +3 -2
  82. package/examples/jsm/nodes/utils/JoinNode.js +11 -1
  83. package/examples/jsm/nodes/utils/LoopNode.js +36 -24
  84. package/examples/jsm/nodes/utils/SplitNode.js +2 -0
  85. package/examples/jsm/objects/BatchedMesh.js +586 -0
  86. package/examples/jsm/objects/InstancedPoints.js +21 -0
  87. package/examples/jsm/objects/Lensflare.js +20 -0
  88. package/examples/jsm/objects/ReflectorForSSRPass.js +3 -0
  89. package/examples/jsm/objects/Refractor.js +3 -0
  90. package/examples/jsm/objects/Sky.js +5 -3
  91. package/examples/jsm/objects/Water.js +5 -2
  92. package/examples/jsm/objects/Water2.js +3 -0
  93. package/examples/jsm/physics/AmmoPhysics.js +21 -0
  94. package/examples/jsm/physics/RapierPhysics.js +21 -0
  95. package/examples/jsm/postprocessing/BokehPass.js +3 -2
  96. package/examples/jsm/postprocessing/LUTPass.js +2 -1
  97. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  98. package/examples/jsm/postprocessing/Pass.js +14 -3
  99. package/examples/jsm/postprocessing/SAOPass.js +0 -1
  100. package/examples/jsm/postprocessing/SMAAPass.js +0 -2
  101. package/examples/jsm/postprocessing/TAARenderPass.js +1 -2
  102. package/examples/jsm/renderers/CSS3DRenderer.js +3 -9
  103. package/examples/jsm/renderers/SVGRenderer.js +9 -6
  104. package/examples/jsm/renderers/common/Bindings.js +1 -1
  105. package/examples/jsm/renderers/common/RenderObject.js +8 -1
  106. package/examples/jsm/renderers/common/RenderObjects.js +1 -1
  107. package/examples/jsm/renderers/common/Textures.js +4 -36
  108. package/examples/jsm/renderers/common/nodes/Nodes.js +53 -18
  109. package/examples/jsm/renderers/webgl/WebGLBackend.js +291 -50
  110. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +88 -12
  111. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +40 -5
  112. package/examples/jsm/renderers/webgl/utils/WebGLState.js +14 -2
  113. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +2 -0
  114. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +36 -4
  115. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +2 -0
  116. package/examples/jsm/shaders/AfterimageShader.js +2 -0
  117. package/examples/jsm/shaders/BasicShader.js +2 -0
  118. package/examples/jsm/shaders/BlendShader.js +2 -0
  119. package/examples/jsm/shaders/BokehShader.js +2 -0
  120. package/examples/jsm/shaders/BokehShader2.js +4 -0
  121. package/examples/jsm/shaders/BrightnessContrastShader.js +2 -0
  122. package/examples/jsm/shaders/ColorCorrectionShader.js +2 -0
  123. package/examples/jsm/shaders/DOFMipMapShader.js +2 -0
  124. package/examples/jsm/shaders/DepthLimitedBlurShader.js +5 -0
  125. package/examples/jsm/shaders/FXAAShader.js +2 -0
  126. package/examples/jsm/shaders/FilmShader.js +1 -1
  127. package/examples/jsm/shaders/FocusShader.js +2 -0
  128. package/examples/jsm/shaders/FreiChenShader.js +2 -0
  129. package/examples/jsm/shaders/GodRaysShader.js +8 -0
  130. package/examples/jsm/shaders/HalftoneShader.js +2 -0
  131. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +2 -0
  132. package/examples/jsm/shaders/HueSaturationShader.js +2 -0
  133. package/examples/jsm/shaders/KaleidoShader.js +2 -0
  134. package/examples/jsm/shaders/LuminosityHighPassShader.js +2 -0
  135. package/examples/jsm/shaders/LuminosityShader.js +2 -0
  136. package/examples/jsm/shaders/MMDToonShader.js +2 -0
  137. package/examples/jsm/shaders/MirrorShader.js +2 -0
  138. package/examples/jsm/shaders/NormalMapShader.js +2 -0
  139. package/examples/jsm/shaders/OutputShader.js +4 -5
  140. package/examples/jsm/shaders/SAOShader.js +5 -0
  141. package/examples/jsm/shaders/SMAAShader.js +6 -0
  142. package/examples/jsm/shaders/SSAOShader.js +6 -0
  143. package/examples/jsm/shaders/SSRShader.js +6 -0
  144. package/examples/jsm/shaders/SobelOperatorShader.js +2 -0
  145. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +2 -0
  146. package/examples/jsm/shaders/TechnicolorShader.js +2 -0
  147. package/examples/jsm/shaders/TriangleBlurShader.js +2 -0
  148. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -0
  149. package/examples/jsm/shaders/VelocityShader.js +2 -0
  150. package/examples/jsm/shaders/VerticalTiltShiftShader.js +2 -0
  151. package/examples/jsm/shaders/WaterRefractionShader.js +2 -0
  152. package/examples/jsm/transpiler/AST.js +231 -0
  153. package/examples/jsm/transpiler/GLSLDecoder.js +899 -0
  154. package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -0
  155. package/examples/jsm/transpiler/TSLEncoder.js +611 -0
  156. package/examples/jsm/transpiler/Transpiler.js +18 -0
  157. package/examples/jsm/webxr/VRButton.js +1 -1
  158. package/examples/jsm/webxr/XRButton.js +7 -5
  159. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  160. package/package.json +4 -1
  161. package/src/constants.js +7 -1
  162. package/src/extras/PMREMGenerator.js +7 -1
  163. package/src/loaders/MaterialLoader.js +10 -2
  164. package/src/materials/Material.js +27 -13
  165. package/src/math/Box3.js +35 -18
  166. package/src/math/Vector3.js +11 -12
  167. package/src/objects/SkinnedMesh.js +6 -7
  168. package/src/renderers/WebGLRenderer.js +142 -25
  169. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -0
  170. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -2
  171. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
  172. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +8 -6
  173. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +2 -2
  174. package/src/renderers/webgl/WebGLProgram.js +80 -50
  175. package/src/renderers/webgl/WebGLPrograms.js +3 -0
  176. package/src/renderers/webgl/WebGLState.js +25 -4
  177. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +0 -76
  178. package/examples/jsm/nodes/accessors/LineMaterialNode.js +0 -29
@@ -62,7 +62,8 @@ import {
62
62
  Vector2,
63
63
  Vector3,
64
64
  VectorKeyframeTrack,
65
- SRGBColorSpace
65
+ SRGBColorSpace,
66
+ InstancedBufferAttribute
66
67
  } from 'three';
67
68
  import { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';
68
69
 
@@ -361,6 +362,9 @@ class GLTFLoader extends Loader {
361
362
  for ( let i = 0; i < this.pluginCallbacks.length; i ++ ) {
362
363
 
363
364
  const plugin = this.pluginCallbacks[ i ]( parser );
365
+
366
+ if ( ! plugin.name ) console.error( 'THREE.GLTFLoader: Invalid plugin found: missing name' );
367
+
364
368
  plugins[ plugin.name ] = plugin;
365
369
 
366
370
  // Workaround to avoid determining as unknown extension
@@ -942,7 +946,7 @@ class GLTFMaterialsSheenExtension {
942
946
  if ( extension.sheenColorFactor !== undefined ) {
943
947
 
944
948
  const colorFactor = extension.sheenColorFactor;
945
- materialParams.sheenColor.setRGB( colorFactor[ 0 ], colorFactor[ 1 ], colorFactor [ 2 ], LinearSRGBColorSpace );
949
+ materialParams.sheenColor.setRGB( colorFactor[ 0 ], colorFactor[ 1 ], colorFactor[ 2 ], LinearSRGBColorSpace );
946
950
 
947
951
  }
948
952
 
@@ -1679,7 +1683,12 @@ class GLTFMeshGpuInstancing {
1679
1683
  // Add instance attributes to the geometry, excluding TRS.
1680
1684
  for ( const attributeName in attributes ) {
1681
1685
 
1682
- if ( attributeName !== 'TRANSLATION' &&
1686
+ if ( attributeName === '_COLOR_0' ) {
1687
+
1688
+ const attr = attributes[ attributeName ];
1689
+ instancedMesh.instanceColor = new InstancedBufferAttribute( attr.array, attr.itemSize, attr.normalized );
1690
+
1691
+ } else if ( attributeName !== 'TRANSLATION' &&
1683
1692
  attributeName !== 'ROTATION' &&
1684
1693
  attributeName !== 'SCALE' ) {
1685
1694
 
@@ -0,0 +1,162 @@
1
+ import {
2
+ Loader,
3
+ TextureLoader,
4
+ DataTexture,
5
+ Data3DTexture,
6
+ RGBAFormat,
7
+ UnsignedByteType,
8
+ ClampToEdgeWrapping,
9
+ LinearFilter,
10
+ } from 'three';
11
+
12
+ export class LUTImageLoader extends Loader {
13
+
14
+ constructor( flipVertical = false ) {
15
+ //The NeutralLUT.png has green at the bottom for Unreal ang green at the top for Unity URP Color Lookup
16
+ //post-processing. If you're using lut image strips from a Unity pipeline then pass true to the constructor
17
+
18
+ super();
19
+
20
+ this.flip = flipVertical;
21
+
22
+ }
23
+
24
+ load( url, onLoad, onProgress, onError ) {
25
+
26
+ const loader = new TextureLoader( this.manager );
27
+
28
+ loader.setCrossOrigin( this.crossOrigin );
29
+
30
+ loader.setPath( this.path );
31
+ loader.load( url, texture => {
32
+
33
+ try {
34
+
35
+ let imageData;
36
+
37
+ if ( texture.image.width < texture.image.height ) {
38
+
39
+ imageData = this.getImageData( texture );
40
+
41
+ } else {
42
+
43
+ imageData = this.horz2Vert( texture );
44
+
45
+ }
46
+
47
+ onLoad( this.parse( imageData.data, Math.min( texture.image.width, texture.image.height ) ) );
48
+
49
+ } catch ( e ) {
50
+
51
+ if ( onError ) {
52
+
53
+ onError( e );
54
+
55
+ } else {
56
+
57
+ console.error( e );
58
+
59
+ }
60
+
61
+ this.manager.itemError( url );
62
+
63
+ }
64
+
65
+ }, onProgress, onError );
66
+
67
+ }
68
+
69
+ getImageData( texture ) {
70
+
71
+ const width = texture.image.width;
72
+ const height = texture.image.height;
73
+
74
+ const canvas = document.createElement( 'canvas' );
75
+ canvas.width = width;
76
+ canvas.height = height;
77
+
78
+ const context = canvas.getContext( '2d' );
79
+
80
+ if ( this.flip === true ) {
81
+
82
+ context.scale( 1, - 1 );
83
+ context.translate( 0, - height );
84
+
85
+ }
86
+
87
+ context.drawImage( texture.image, 0, 0 );
88
+
89
+ return context.getImageData( 0, 0, width, height );
90
+
91
+ }
92
+
93
+ horz2Vert( texture ) {
94
+
95
+ const width = texture.image.height;
96
+ const height = texture.image.width;
97
+
98
+ const canvas = document.createElement( 'canvas' );
99
+ canvas.width = width;
100
+ canvas.height = height;
101
+
102
+ const context = canvas.getContext( '2d' );
103
+
104
+ if ( this.flip === true ) {
105
+
106
+ context.scale( 1, - 1 );
107
+ context.translate( 0, - height );
108
+
109
+ }
110
+
111
+ for ( let i = 0; i < width; i ++ ) {
112
+
113
+ const sy = i * width;
114
+ const dy = ( this.flip ) ? height - i * width : i * width;
115
+ context.drawImage( texture.image, sy, 0, width, width, 0, dy, width, width );
116
+
117
+ }
118
+
119
+ return context.getImageData( 0, 0, width, height );
120
+
121
+ }
122
+
123
+ parse( dataArray, size ) {
124
+
125
+ const data = new Uint8Array( dataArray );
126
+ const texture = new DataTexture();
127
+ texture.image.data = data;
128
+ texture.image.width = size;
129
+ texture.image.height = size * size;
130
+ texture.format = RGBAFormat;
131
+ texture.type = UnsignedByteType;
132
+ texture.magFilter = LinearFilter;
133
+ texture.minFilter = LinearFilter;
134
+ texture.wrapS = ClampToEdgeWrapping;
135
+ texture.wrapT = ClampToEdgeWrapping;
136
+ texture.generateMipmaps = false;
137
+ texture.needsUpdate = true;
138
+
139
+ const texture3D = new Data3DTexture();
140
+ texture3D.image.data = data;
141
+ texture3D.image.width = size;
142
+ texture3D.image.height = size;
143
+ texture3D.image.depth = size;
144
+ texture3D.format = RGBAFormat;
145
+ texture3D.type = UnsignedByteType;
146
+ texture3D.magFilter = LinearFilter;
147
+ texture3D.minFilter = LinearFilter;
148
+ texture3D.wrapS = ClampToEdgeWrapping;
149
+ texture3D.wrapT = ClampToEdgeWrapping;
150
+ texture3D.wrapR = ClampToEdgeWrapping;
151
+ texture3D.generateMipmaps = false;
152
+ texture3D.needsUpdate = true;
153
+
154
+ return {
155
+ size,
156
+ texture,
157
+ texture3D,
158
+ };
159
+
160
+ }
161
+
162
+ }