super-three 0.169.1 → 0.170.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 (193) hide show
  1. package/build/three.cjs +974 -562
  2. package/build/three.module.js +975 -559
  3. package/build/three.module.min.js +1 -1
  4. package/build/three.webgpu.js +8398 -9842
  5. package/build/three.webgpu.min.js +1 -1
  6. package/build/three.webgpu.nodes.js +8398 -9842
  7. package/build/three.webgpu.nodes.min.js +1 -1
  8. package/examples/jsm/Addons.js +3 -3
  9. package/examples/jsm/animation/MMDAnimationHelper.js +2 -0
  10. package/examples/jsm/animation/MMDPhysics.js +2 -0
  11. package/examples/jsm/controls/TransformControls.js +22 -6
  12. package/examples/jsm/csm/CSM.js +2 -2
  13. package/examples/jsm/csm/CSMFrustum.js +7 -4
  14. package/examples/jsm/csm/CSMHelper.js +2 -0
  15. package/examples/jsm/csm/CSMShadowNode.js +435 -0
  16. package/examples/jsm/curves/NURBSCurve.js +34 -3
  17. package/examples/jsm/exporters/GLTFExporter.js +138 -71
  18. package/examples/jsm/exporters/KTX2Exporter.js +35 -12
  19. package/examples/jsm/exporters/MMDExporter.js +6 -0
  20. package/examples/jsm/exporters/USDZExporter.js +21 -3
  21. package/examples/jsm/geometries/DecalGeometry.js +65 -20
  22. package/examples/jsm/geometries/InstancedPointsGeometry.js +2 -0
  23. package/examples/jsm/helpers/TextureHelperGPU.js +175 -0
  24. package/examples/jsm/interactive/HTMLMesh.js +1 -0
  25. package/examples/jsm/lighting/TiledLighting.js +18 -0
  26. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  27. package/examples/jsm/lines/LineMaterial.js +7 -2
  28. package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
  29. package/examples/jsm/lines/webgpu/LineSegments2.js +0 -15
  30. package/examples/jsm/lines/webgpu/Wireframe.js +56 -0
  31. package/examples/jsm/loaders/3DMLoader.js +1 -0
  32. package/examples/jsm/loaders/3MFLoader.js +91 -0
  33. package/examples/jsm/loaders/FBXLoader.js +12 -2
  34. package/examples/jsm/loaders/GLTFLoader.js +2 -0
  35. package/examples/jsm/loaders/KTX2Loader.js +140 -49
  36. package/examples/jsm/loaders/LDrawLoader.js +22 -136
  37. package/examples/jsm/loaders/LottieLoader.js +1 -0
  38. package/examples/jsm/loaders/MMDLoader.js +9 -2
  39. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
  40. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
  41. package/examples/jsm/materials/MeshGouraudMaterial.js +6 -2
  42. package/examples/jsm/math/ColorSpaces.js +76 -0
  43. package/examples/jsm/misc/ProgressiveLightMap.js +52 -40
  44. package/examples/jsm/misc/ProgressiveLightMapGPU.js +293 -0
  45. package/examples/jsm/misc/VolumeSlice.js +1 -0
  46. package/examples/jsm/objects/WaterMesh.js +8 -8
  47. package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
  48. package/examples/jsm/postprocessing/SSRPass.js +6 -0
  49. package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
  50. package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
  51. package/examples/jsm/shaders/FXAAShader.js +225 -224
  52. package/examples/jsm/transpiler/ShaderToyDecoder.js +1 -1
  53. package/{src/nodes → examples/jsm/tsl}/display/AfterImageNode.js +17 -20
  54. package/{src/nodes → examples/jsm/tsl}/display/AnaglyphPassNode.js +2 -6
  55. package/{src/nodes → examples/jsm/tsl}/display/AnamorphicNode.js +12 -18
  56. package/{src/nodes → examples/jsm/tsl}/display/BleachBypass.js +1 -3
  57. package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +11 -40
  58. package/{src/nodes → examples/jsm/tsl}/display/DenoiseNode.js +18 -41
  59. package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +2 -8
  60. package/{src/nodes → examples/jsm/tsl}/display/DotScreenNode.js +2 -9
  61. package/examples/jsm/tsl/display/FXAANode.js +316 -0
  62. package/{src/nodes → examples/jsm/tsl}/display/FilmNode.js +2 -6
  63. package/{src/nodes → examples/jsm/tsl}/display/GTAONode.js +30 -70
  64. package/{src/nodes → examples/jsm/tsl}/display/GaussianBlurNode.js +74 -36
  65. package/examples/jsm/tsl/display/LensflareNode.js +161 -0
  66. package/{src/nodes → examples/jsm/tsl}/display/Lut3DNode.js +1 -4
  67. package/{src/nodes → examples/jsm/tsl}/display/MotionBlur.js +2 -3
  68. package/examples/jsm/tsl/display/OutlineNode.js +434 -0
  69. package/{src/nodes → examples/jsm/tsl}/display/ParallaxBarrierPassNode.js +1 -5
  70. package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +3 -15
  71. package/{src/nodes → examples/jsm/tsl}/display/RGBShiftNode.js +1 -6
  72. package/examples/jsm/tsl/display/SMAANode.js +620 -0
  73. package/{src/nodes → examples/jsm/tsl}/display/SSAAPassNode.js +10 -25
  74. package/examples/jsm/tsl/display/SSRNode.js +343 -0
  75. package/{src/nodes → examples/jsm/tsl}/display/Sepia.js +1 -2
  76. package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +3 -11
  77. package/{src/nodes → examples/jsm/tsl}/display/StereoCompositePassNode.js +9 -11
  78. package/{src/nodes → examples/jsm/tsl}/display/StereoPassNode.js +10 -11
  79. package/examples/jsm/tsl/display/TRAAPassNode.js +355 -0
  80. package/{src/nodes → examples/jsm/tsl}/display/TransitionNode.js +1 -6
  81. package/examples/jsm/tsl/display/hashBlur.js +24 -0
  82. package/examples/jsm/tsl/lighting/TiledLightsNode.js +392 -0
  83. package/examples/jsm/utils/{TextureUtilsGPU.js → WebGPUTextureUtils.js} +2 -1
  84. package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
  85. package/examples/jsm/webxr/Text2D.js +6 -6
  86. package/package.json +2 -2
  87. package/src/Three.WebGPU.Nodes.js +4 -0
  88. package/src/Three.WebGPU.js +4 -0
  89. package/src/constants.js +1 -6
  90. package/src/core/BufferGeometry.js +44 -6
  91. package/src/geometries/CylinderGeometry.js +2 -2
  92. package/src/materials/LineBasicMaterial.js +6 -2
  93. package/src/materials/LineDashedMaterial.js +6 -2
  94. package/src/materials/Material.js +14 -1
  95. package/src/materials/MeshBasicMaterial.js +6 -2
  96. package/src/materials/MeshDepthMaterial.js +6 -2
  97. package/src/materials/MeshDistanceMaterial.js +6 -2
  98. package/src/materials/MeshLambertMaterial.js +6 -2
  99. package/src/materials/MeshMatcapMaterial.js +6 -2
  100. package/src/materials/MeshNormalMaterial.js +6 -2
  101. package/src/materials/MeshPhongMaterial.js +6 -2
  102. package/src/materials/MeshPhysicalMaterial.js +6 -2
  103. package/src/materials/MeshStandardMaterial.js +6 -2
  104. package/src/materials/MeshToonMaterial.js +6 -2
  105. package/src/materials/PointsMaterial.js +6 -2
  106. package/src/materials/RawShaderMaterial.js +6 -2
  107. package/src/materials/ShaderMaterial.js +6 -2
  108. package/src/materials/ShadowMaterial.js +6 -2
  109. package/src/materials/SpriteMaterial.js +6 -2
  110. package/src/materials/nodes/NodeMaterial.js +31 -9
  111. package/src/materials/nodes/SpriteNodeMaterial.js +11 -2
  112. package/src/materials/nodes/manager/NodeMaterialObserver.js +111 -2
  113. package/src/math/ColorManagement.js +118 -85
  114. package/src/math/Vector4.js +11 -0
  115. package/src/nodes/Nodes.js +1 -21
  116. package/src/nodes/TSL.js +6 -24
  117. package/src/nodes/accessors/Camera.js +0 -1
  118. package/src/nodes/accessors/SceneNode.js +35 -1
  119. package/src/nodes/accessors/StorageBufferNode.js +32 -10
  120. package/src/nodes/accessors/VelocityNode.js +13 -3
  121. package/src/nodes/code/FunctionCallNode.js +16 -5
  122. package/src/nodes/code/ScriptableNode.js +4 -4
  123. package/src/nodes/core/Node.js +1 -0
  124. package/src/nodes/core/NodeBuilder.js +29 -5
  125. package/src/nodes/core/VarNode.js +15 -3
  126. package/src/nodes/display/ColorAdjustment.js +53 -4
  127. package/src/nodes/display/ColorSpaceFunctions.js +5 -5
  128. package/src/nodes/display/ColorSpaceNode.js +27 -39
  129. package/src/nodes/display/PassNode.js +6 -4
  130. package/src/nodes/display/ToneMappingNode.js +1 -1
  131. package/src/nodes/display/ViewportDepthNode.js +33 -1
  132. package/src/nodes/functions/PhysicalLightingModel.js +21 -15
  133. package/src/nodes/functions/material/getAlphaHashThreshold.js +64 -0
  134. package/src/nodes/functions/material/getGeometryRoughness.js +8 -2
  135. package/src/nodes/functions/material/getParallaxCorrectNormal.js +22 -0
  136. package/src/nodes/gpgpu/ComputeNode.js +9 -1
  137. package/src/nodes/lighting/AnalyticLightNode.js +12 -416
  138. package/src/nodes/lighting/LightsNode.js +24 -12
  139. package/src/nodes/lighting/PointLightNode.js +36 -26
  140. package/src/nodes/lighting/RectAreaLightNode.js +3 -0
  141. package/src/nodes/lighting/ShadowNode.js +484 -0
  142. package/src/nodes/utils/LoopNode.js +2 -2
  143. package/src/nodes/utils/Oscillators.js +6 -0
  144. package/src/nodes/utils/PostProcessingUtils.js +89 -0
  145. package/src/nodes/utils/ReflectorNode.js +101 -15
  146. package/src/nodes/utils/Timer.js +29 -0
  147. package/src/objects/BatchedMesh.js +458 -241
  148. package/src/renderers/WebGLRenderer.js +120 -117
  149. package/src/renderers/common/Attributes.js +4 -0
  150. package/src/renderers/common/Backend.js +2 -0
  151. package/src/renderers/common/Background.js +14 -4
  152. package/src/renderers/common/Bindings.js +3 -2
  153. package/src/renderers/common/Constants.js +2 -1
  154. package/src/renderers/common/Geometries.js +20 -0
  155. package/src/renderers/common/IndirectStorageBufferAttribute.js +15 -0
  156. package/src/renderers/common/Lighting.js +45 -0
  157. package/src/renderers/common/PostProcessingUtils.js +86 -0
  158. package/src/renderers/common/RenderList.js +39 -11
  159. package/src/renderers/common/RenderLists.js +4 -2
  160. package/src/renderers/common/RenderObject.js +18 -1
  161. package/src/renderers/common/Renderer.js +165 -26
  162. package/src/renderers/common/Textures.js +30 -14
  163. package/src/renderers/common/nodes/NodeLibrary.js +1 -14
  164. package/src/renderers/common/nodes/Nodes.js +2 -2
  165. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
  166. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
  167. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
  168. package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
  169. package/src/renderers/webgl/WebGLCapabilities.js +0 -7
  170. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
  171. package/src/renderers/webgl/WebGLProgram.js +24 -28
  172. package/src/renderers/webgl/WebGLPrograms.js +5 -2
  173. package/src/renderers/webgl/WebGLState.js +37 -1
  174. package/src/renderers/webgl/WebGLTextures.js +29 -12
  175. package/src/renderers/webgl-fallback/WebGLBackend.js +98 -31
  176. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +2 -7
  177. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +33 -8
  178. package/src/renderers/webgpu/WebGPUBackend.js +105 -25
  179. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -1
  180. package/src/renderers/webgpu/WebGPURenderer.js +1 -1
  181. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +0 -8
  182. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -8
  183. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +10 -20
  184. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +12 -4
  185. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +29 -9
  186. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +24 -6
  187. package/src/renderers/webgpu/utils/WebGPUUtils.js +0 -1
  188. package/src/renderers/webxr/WebXRManager.js +4 -4
  189. package/examples/jsm/cameras/CinematicCamera.js +0 -208
  190. package/src/nodes/display/FXAANode.js +0 -332
  191. package/src/nodes/utils/OscNode.js +0 -85
  192. package/src/nodes/utils/TimerNode.js +0 -97
  193. /package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +0 -0
@@ -1,9 +1,10 @@
1
+ import Node from '../core/Node.js';
1
2
  import TextureNode from '../accessors/TextureNode.js';
2
3
  import { nodeObject } from '../tsl/TSLBase.js';
3
4
  import { NodeUpdateType } from '../core/constants.js';
4
5
  import { screenUV } from '../display/ScreenNode.js';
5
6
 
6
- import { HalfFloatType, LinearMipMapLinearFilter } from '../../constants.js';
7
+ import { HalfFloatType, LinearMipMapLinearFilter, WebGPUCoordinateSystem } from '../../constants.js';
7
8
  import { Plane } from '../../math/Plane.js';
8
9
  import { Object3D } from '../../core/Object3D.js';
9
10
  import { Vector2 } from '../../math/Vector2.js';
@@ -11,6 +12,7 @@ import { Vector3 } from '../../math/Vector3.js';
11
12
  import { Vector4 } from '../../math/Vector4.js';
12
13
  import { Matrix4 } from '../../math/Matrix4.js';
13
14
  import { RenderTarget } from '../../core/RenderTarget.js';
15
+ import { DepthTexture } from '../../textures/DepthTexture.js';
14
16
 
15
17
  const _reflectorPlane = new Plane();
16
18
  const _normal = new Vector3();
@@ -29,6 +31,8 @@ const _size = new Vector2();
29
31
  const _defaultRT = new RenderTarget();
30
32
  const _defaultUV = screenUV.flipX();
31
33
 
34
+ _defaultRT.depthTexture = new DepthTexture( 1, 1 );
35
+
32
36
  let _inReflector = false;
33
37
 
34
38
  class ReflectorNode extends TextureNode {
@@ -41,28 +45,104 @@ class ReflectorNode extends TextureNode {
41
45
 
42
46
  constructor( parameters = {} ) {
43
47
 
44
- super( _defaultRT.texture, _defaultUV );
48
+ super( parameters.defaultTexture || _defaultRT.texture, _defaultUV );
49
+
50
+ this._reflectorBaseNode = parameters.reflector || new ReflectorBaseNode( this, parameters );
51
+ this._depthNode = null;
52
+
53
+ this.setUpdateMatrix( false );
54
+
55
+ }
56
+
57
+ get reflector() {
58
+
59
+ return this._reflectorBaseNode;
60
+
61
+ }
62
+
63
+ get target() {
64
+
65
+ return this._reflectorBaseNode.target;
66
+
67
+ }
68
+
69
+ getDepthNode() {
70
+
71
+ if ( this._depthNode === null ) {
72
+
73
+ if ( this._reflectorBaseNode.depth !== true ) {
74
+
75
+ throw new Error( 'THREE.ReflectorNode: Depth node can only be requested when the reflector is created with { depth: true }. ' );
76
+
77
+ }
78
+
79
+ this._depthNode = nodeObject( new ReflectorNode( {
80
+ defaultTexture: _defaultRT.depthTexture,
81
+ reflector: this._reflectorBaseNode
82
+ } ) );
83
+
84
+ }
85
+
86
+ return this._depthNode;
87
+
88
+ }
89
+
90
+ setup( builder ) {
91
+
92
+ // ignore if used in post-processing
93
+ if ( ! builder.object.isQuadMesh ) this._reflectorBaseNode.build( builder );
94
+
95
+ return super.setup( builder );
96
+
97
+ }
98
+
99
+ clone() {
100
+
101
+ const texture = new this.constructor( this.reflectorNode );
102
+ texture._reflectorBaseNode = this._reflectorBaseNode;
103
+
104
+ return texture;
105
+
106
+ }
107
+
108
+ }
109
+
110
+
111
+ class ReflectorBaseNode extends Node {
112
+
113
+ static get type() {
114
+
115
+ return 'ReflectorBaseNode';
116
+
117
+ }
118
+
119
+ constructor( textureNode, parameters = {} ) {
120
+
121
+ super();
45
122
 
46
123
  const {
47
124
  target = new Object3D(),
48
125
  resolution = 1,
49
126
  generateMipmaps = false,
50
- bounces = true
127
+ bounces = true,
128
+ depth = false
51
129
  } = parameters;
52
130
 
53
131
  //
54
132
 
133
+ this.textureNode = textureNode;
134
+
55
135
  this.target = target;
56
136
  this.resolution = resolution;
57
137
  this.generateMipmaps = generateMipmaps;
58
138
  this.bounces = bounces;
139
+ this.depth = depth;
59
140
 
60
141
  this.updateBeforeType = bounces ? NodeUpdateType.RENDER : NodeUpdateType.FRAME;
61
142
 
62
143
  this.virtualCameras = new WeakMap();
63
144
  this.renderTargets = new WeakMap();
64
145
 
65
-
66
146
  }
67
147
 
68
148
  _updateResolution( renderTarget, renderer ) {
@@ -83,12 +163,6 @@ class ReflectorNode extends TextureNode {
83
163
 
84
164
  }
85
165
 
86
- getTextureNode() {
87
-
88
- return this.textureNode;
89
-
90
- }
91
-
92
166
  getVirtualCamera( camera ) {
93
167
 
94
168
  let virtualCamera = this.virtualCameras.get( camera );
@@ -115,8 +189,14 @@ class ReflectorNode extends TextureNode {
115
189
 
116
190
  if ( this.generateMipmaps === true ) {
117
191
 
118
- renderTarget.texture.minFilter = LinearMipMapLinearFilter;
119
- renderTarget.texture.generateMipmaps = true;
192
+ renderTarget.texture.minFilter = LinearMipMapLinearFilter;
193
+ renderTarget.texture.generateMipmaps = true;
194
+
195
+ }
196
+
197
+ if ( this.depth === true ) {
198
+
199
+ renderTarget.depthTexture = new DepthTexture();
120
200
 
121
201
  }
122
202
 
@@ -130,7 +210,7 @@ class ReflectorNode extends TextureNode {
130
210
 
131
211
  updateBefore( frame ) {
132
212
 
133
- if ( this.bounces === false && _inReflector ) return false;
213
+ if ( this.bounces === false && _inReflector ) return;
134
214
 
135
215
  _inReflector = true;
136
216
 
@@ -210,12 +290,18 @@ class ReflectorNode extends TextureNode {
210
290
  // Replacing the third row of the projection matrix
211
291
  projectionMatrix.elements[ 2 ] = clipPlane.x;
212
292
  projectionMatrix.elements[ 6 ] = clipPlane.y;
213
- projectionMatrix.elements[ 10 ] = clipPlane.z - clipBias;
293
+ projectionMatrix.elements[ 10 ] = ( renderer.coordinateSystem === WebGPUCoordinateSystem ) ? ( clipPlane.z - clipBias ) : ( clipPlane.z + 1.0 - clipBias );
214
294
  projectionMatrix.elements[ 14 ] = clipPlane.w;
215
295
 
216
296
  //
217
297
 
218
- this.value = renderTarget.texture;
298
+ this.textureNode.value = renderTarget.texture;
299
+
300
+ if ( this.depth === true ) {
301
+
302
+ this.textureNode.getDepthNode().value = renderTarget.depthTexture;
303
+
304
+ }
219
305
 
220
306
  material.visible = false;
221
307
 
@@ -0,0 +1,29 @@
1
+ import { renderGroup } from '../core/UniformGroupNode.js';
2
+ import { uniform } from '../core/UniformNode.js';
3
+
4
+ export const time = /*@__PURE__*/ uniform( 0 ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => frame.time );
5
+ export const deltaTime = /*@__PURE__*/ uniform( 0 ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => frame.deltaTime );
6
+ export const frameId = /*@__PURE__*/ uniform( 0, 'uint' ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => frame.frameId );
7
+
8
+ // Deprecated
9
+
10
+ export const timerLocal = ( timeScale = 1 ) => { // @deprecated, r170
11
+
12
+ console.warn( 'TSL: timerLocal() is deprecated. Use "time" instead.' );
13
+ return time.mul( timeScale );
14
+
15
+ };
16
+
17
+ export const timerGlobal = ( timeScale = 1 ) => { // @deprecated, r170
18
+
19
+ console.warn( 'TSL: timerGlobal() is deprecated. Use "time" instead.' );
20
+ return time.mul( timeScale );
21
+
22
+ };
23
+
24
+ export const timerDelta = ( timeScale = 1 ) => { // @deprecated, r170
25
+
26
+ console.warn( 'TSL: timerDelta() is deprecated. Use "deltaTime" instead.' );
27
+ return deltaTime.mul( timeScale );
28
+
29
+ };