super-three 0.162.0 → 0.164.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 (187) hide show
  1. package/build/three.cjs +847 -1226
  2. package/build/three.module.js +846 -1225
  3. package/build/three.module.min.js +2 -2
  4. package/examples/jsm/animation/CCDIKSolver.js +4 -2
  5. package/examples/jsm/controls/TransformControls.js +3 -3
  6. package/examples/jsm/exporters/GLTFExporter.js +66 -5
  7. package/examples/jsm/exporters/USDZExporter.js +22 -1
  8. package/examples/jsm/geometries/TextGeometry.js +10 -2
  9. package/examples/jsm/interactive/HTMLMesh.js +7 -9
  10. package/examples/jsm/libs/draco/README.md +2 -2
  11. package/examples/jsm/libs/fflate.module.js +694 -496
  12. package/examples/jsm/lines/LineMaterial.js +0 -2
  13. package/examples/jsm/loaders/3MFLoader.js +2 -0
  14. package/examples/jsm/loaders/EXRLoader.js +351 -97
  15. package/examples/jsm/loaders/FBXLoader.js +1 -1
  16. package/examples/jsm/loaders/GLTFLoader.js +59 -0
  17. package/examples/jsm/loaders/KTX2Loader.js +3 -10
  18. package/examples/jsm/loaders/LUT3dlLoader.js +0 -15
  19. package/examples/jsm/loaders/LUTCubeLoader.js +0 -14
  20. package/examples/jsm/loaders/LUTImageLoader.js +0 -14
  21. package/examples/jsm/loaders/RGBMLoader.js +16 -0
  22. package/examples/jsm/loaders/VRMLLoader.js +1 -1
  23. package/examples/jsm/loaders/lwo/IFFParser.js +8 -5
  24. package/examples/jsm/materials/MeshGouraudMaterial.js +7 -1
  25. package/examples/jsm/math/Octree.js +26 -20
  26. package/examples/jsm/misc/GPUComputationRenderer.js +0 -6
  27. package/examples/jsm/nodes/Nodes.js +10 -4
  28. package/examples/jsm/nodes/accessors/AccessorsUtils.js +16 -1
  29. package/examples/jsm/nodes/accessors/BatchNode.js +78 -0
  30. package/examples/jsm/nodes/accessors/ClippingNode.js +3 -2
  31. package/examples/jsm/nodes/accessors/InstanceNode.js +25 -2
  32. package/examples/jsm/nodes/accessors/MaterialNode.js +107 -3
  33. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +1 -1
  34. package/examples/jsm/nodes/accessors/MorphNode.js +13 -3
  35. package/examples/jsm/nodes/accessors/NormalNode.js +12 -2
  36. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  37. package/examples/jsm/nodes/accessors/RendererReferenceNode.js +29 -0
  38. package/examples/jsm/nodes/accessors/StorageBufferNode.js +9 -0
  39. package/examples/jsm/nodes/accessors/TextureNode.js +51 -10
  40. package/examples/jsm/nodes/accessors/TextureSizeNode.js +1 -1
  41. package/examples/jsm/nodes/code/FunctionNode.js +0 -8
  42. package/examples/jsm/nodes/core/Node.js +63 -4
  43. package/examples/jsm/nodes/core/NodeBuilder.js +26 -25
  44. package/examples/jsm/nodes/core/NodeFrame.js +10 -10
  45. package/examples/jsm/nodes/core/NodeUtils.js +2 -2
  46. package/examples/jsm/nodes/core/OutputStructNode.js +2 -1
  47. package/examples/jsm/nodes/core/PropertyNode.js +10 -0
  48. package/examples/jsm/nodes/core/UniformNode.js +20 -0
  49. package/examples/jsm/nodes/display/BumpMapNode.js +7 -26
  50. package/examples/jsm/nodes/display/FrontFacingNode.js +13 -0
  51. package/examples/jsm/nodes/display/PassNode.js +17 -1
  52. package/examples/jsm/nodes/display/ToneMappingNode.js +8 -4
  53. package/examples/jsm/nodes/display/ViewportDepthNode.js +1 -1
  54. package/examples/jsm/nodes/display/ViewportNode.js +4 -2
  55. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +6 -0
  56. package/examples/jsm/nodes/display/ViewportTextureNode.js +4 -1
  57. package/examples/jsm/nodes/fog/FogExp2Node.js +4 -5
  58. package/examples/jsm/nodes/fog/FogNode.js +13 -3
  59. package/examples/jsm/nodes/fog/FogRangeNode.js +4 -3
  60. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +26 -7
  61. package/examples/jsm/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
  62. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -3
  63. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
  64. package/examples/jsm/nodes/functions/PhongLightingModel.js +1 -1
  65. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +164 -10
  66. package/examples/jsm/nodes/functions/ShadowMaskModel.js +31 -0
  67. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +19 -5
  68. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -1
  69. package/examples/jsm/nodes/lighting/EnvironmentNode.js +22 -70
  70. package/examples/jsm/nodes/lighting/IrradianceNode.js +24 -0
  71. package/examples/jsm/nodes/lighting/LightsNode.js +11 -1
  72. package/examples/jsm/nodes/lighting/PointLightNode.js +2 -1
  73. package/examples/jsm/nodes/lighting/SpotLightNode.js +2 -1
  74. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +10 -6
  75. package/examples/jsm/nodes/materials/Materials.js +1 -0
  76. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -2
  77. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +2 -2
  78. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +76 -5
  79. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +11 -4
  80. package/examples/jsm/nodes/materials/NodeMaterial.js +55 -43
  81. package/examples/jsm/nodes/materials/ShadowNodeMaterial.js +34 -0
  82. package/examples/jsm/nodes/pmrem/PMREMNode.js +193 -0
  83. package/examples/jsm/nodes/pmrem/PMREMUtils.js +288 -0
  84. package/examples/jsm/nodes/shadernode/ShaderNode.js +3 -9
  85. package/examples/jsm/nodes/utils/EquirectUVNode.js +1 -1
  86. package/examples/jsm/objects/QuadMesh.js +7 -23
  87. package/examples/jsm/physics/JoltPhysics.js +281 -0
  88. package/examples/jsm/physics/RapierPhysics.js +4 -4
  89. package/examples/jsm/postprocessing/GlitchPass.js +0 -3
  90. package/examples/jsm/postprocessing/LUTPass.js +5 -71
  91. package/examples/jsm/postprocessing/RenderTransitionPass.js +193 -0
  92. package/examples/jsm/postprocessing/SAOPass.js +0 -1
  93. package/examples/jsm/postprocessing/SSAOPass.js +0 -3
  94. package/examples/jsm/renderers/common/Animation.js +3 -0
  95. package/examples/jsm/renderers/common/Background.js +8 -8
  96. package/examples/jsm/renderers/common/ClippingContext.js +1 -1
  97. package/examples/jsm/renderers/common/Info.js +11 -19
  98. package/examples/jsm/renderers/common/PostProcessing.js +12 -4
  99. package/examples/jsm/renderers/common/RenderContext.js +1 -1
  100. package/examples/jsm/renderers/common/RenderList.js +1 -1
  101. package/examples/jsm/renderers/common/RenderObject.js +47 -5
  102. package/examples/jsm/renderers/common/RenderObjects.js +1 -1
  103. package/examples/jsm/renderers/common/Renderer.js +153 -21
  104. package/examples/jsm/renderers/common/Textures.js +1 -1
  105. package/examples/jsm/renderers/common/extras/PMREMGenerator.js +773 -0
  106. package/examples/jsm/renderers/common/nodes/Nodes.js +34 -63
  107. package/examples/jsm/renderers/webgl/WebGLBackend.js +146 -36
  108. package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +145 -0
  109. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +9 -3
  110. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +1 -1
  111. package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +1 -0
  112. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +64 -7
  113. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +6 -23
  114. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +77 -60
  115. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +21 -4
  116. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +29 -1
  117. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -4
  118. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +92 -18
  119. package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
  120. package/examples/jsm/transpiler/ShaderToyDecoder.js +1 -1
  121. package/examples/jsm/utils/GPUStatsPanel.js +10 -45
  122. package/examples/jsm/utils/SceneUtils.js +60 -1
  123. package/examples/jsm/utils/TextureUtils.js +1 -1
  124. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  125. package/examples/jsm/webxr/XRHandModelFactory.js +4 -2
  126. package/package.json +1 -1
  127. package/src/Three.js +0 -1
  128. package/src/animation/AnimationClip.js +1 -1
  129. package/src/constants.js +3 -3
  130. package/src/core/Object3D.js +10 -7
  131. package/src/core/RenderTarget.js +8 -0
  132. package/src/extras/PMREMGenerator.js +21 -11
  133. package/src/loaders/FileLoader.js +1 -1
  134. package/src/loaders/MaterialLoader.js +1 -0
  135. package/src/loaders/ObjectLoader.js +2 -0
  136. package/src/materials/Material.js +2 -0
  137. package/src/materials/MeshPhysicalMaterial.js +20 -0
  138. package/src/materials/ShaderMaterial.js +0 -4
  139. package/src/math/Spherical.js +4 -5
  140. package/src/objects/BatchedMesh.js +27 -3
  141. package/src/objects/InstancedMesh.js +10 -0
  142. package/src/objects/Line.js +66 -43
  143. package/src/renderers/WebGLRenderer.js +130 -158
  144. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
  145. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +1 -0
  146. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
  147. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  148. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +2 -10
  149. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +2 -16
  150. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +32 -22
  151. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +17 -9
  152. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  153. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +47 -13
  154. package/src/renderers/shaders/ShaderChunk.js +0 -2
  155. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
  156. package/src/renderers/shaders/ShaderLib.js +2 -1
  157. package/src/renderers/shaders/UniformsUtils.js +10 -1
  158. package/src/renderers/webgl/WebGLAttributes.js +6 -33
  159. package/src/renderers/webgl/WebGLBackground.js +18 -3
  160. package/src/renderers/webgl/WebGLBindingStates.js +14 -51
  161. package/src/renderers/webgl/WebGLBufferRenderer.js +35 -21
  162. package/src/renderers/webgl/WebGLCapabilities.js +35 -13
  163. package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
  164. package/src/renderers/webgl/WebGLExtensions.js +4 -19
  165. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +35 -21
  166. package/src/renderers/webgl/WebGLLights.js +6 -32
  167. package/src/renderers/webgl/WebGLMaterials.js +8 -3
  168. package/src/renderers/webgl/WebGLMorphtargets.js +79 -217
  169. package/src/renderers/webgl/WebGLProgram.js +21 -52
  170. package/src/renderers/webgl/WebGLPrograms.js +24 -31
  171. package/src/renderers/webgl/WebGLRenderStates.js +13 -7
  172. package/src/renderers/webgl/WebGLShadowMap.js +25 -25
  173. package/src/renderers/webgl/WebGLState.js +15 -59
  174. package/src/renderers/webgl/WebGLTextures.js +138 -292
  175. package/src/renderers/webgl/WebGLUniformsGroups.js +1 -1
  176. package/src/renderers/webgl/WebGLUtils.js +9 -78
  177. package/src/renderers/webxr/WebXRDepthSensing.js +2 -3
  178. package/src/renderers/webxr/WebXRManager.js +4 -6
  179. package/src/scenes/Scene.js +7 -1
  180. package/src/textures/Texture.js +11 -1
  181. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
  182. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -320
  183. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +0 -26
  184. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -794
  185. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +0 -51
  186. package/src/renderers/WebGL1Renderer.js +0 -7
  187. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
@@ -4,12 +4,7 @@ const LUTShader = {
4
4
 
5
5
  name: 'LUTShader',
6
6
 
7
- defines: {
8
- USE_3DTEXTURE: 1,
9
- },
10
-
11
7
  uniforms: {
12
- lut3d: { value: null },
13
8
 
14
9
  lut: { value: null },
15
10
  lutSize: { value: 0 },
@@ -34,45 +29,7 @@ const LUTShader = {
34
29
  fragmentShader: /* glsl */`
35
30
 
36
31
  uniform float lutSize;
37
- #if USE_3DTEXTURE
38
- precision highp sampler3D;
39
- uniform sampler3D lut3d;
40
- #else
41
- uniform sampler2D lut;
42
-
43
- vec3 lutLookup( sampler2D tex, float size, vec3 rgb ) {
44
-
45
- float sliceHeight = 1.0 / size;
46
- float yPixelHeight = 1.0 / ( size * size );
47
-
48
- // Get the slices on either side of the sample
49
- float slice = rgb.b * size;
50
- float interp = fract( slice );
51
- float slice0 = slice - interp;
52
- float centeredInterp = interp - 0.5;
53
-
54
- float slice1 = slice0 + sign( centeredInterp );
55
-
56
- // Pull y sample in by half a pixel in each direction to avoid color
57
- // bleeding from adjacent slices.
58
- float greenOffset = clamp( rgb.g * sliceHeight, yPixelHeight * 0.5, sliceHeight - yPixelHeight * 0.5 );
59
-
60
- vec2 uv0 = vec2(
61
- rgb.r,
62
- slice0 * sliceHeight + greenOffset
63
- );
64
- vec2 uv1 = vec2(
65
- rgb.r,
66
- slice1 * sliceHeight + greenOffset
67
- );
68
-
69
- vec3 sample0 = texture2D( tex, uv0 ).rgb;
70
- vec3 sample1 = texture2D( tex, uv1 ).rgb;
71
-
72
- return mix( sample0, sample1, abs( centeredInterp ) );
73
-
74
- }
75
- #endif
32
+ uniform sampler3D lut;
76
33
 
77
34
  varying vec2 vUv;
78
35
  uniform float intensity;
@@ -88,15 +45,8 @@ const LUTShader = {
88
45
  float halfPixelWidth = 0.5 / lutSize;
89
46
  vec3 uvw = vec3( halfPixelWidth ) + val.rgb * ( 1.0 - pixelWidth );
90
47
 
91
- #if USE_3DTEXTURE
92
48
 
93
- lutVal = vec4( texture( lut3d, uvw ).rgb, val.a );
94
-
95
- #else
96
-
97
- lutVal = vec4( lutLookup( lut, lutSize, uvw ), val.a );
98
-
99
- #endif
49
+ lutVal = vec4( texture( lut, uvw ).rgb, val.a );
100
50
 
101
51
  gl_FragColor = vec4( mix( val, lutVal, intensity ) );
102
52
 
@@ -111,31 +61,15 @@ class LUTPass extends ShaderPass {
111
61
  set lut( v ) {
112
62
 
113
63
  const material = this.material;
64
+
114
65
  if ( v !== this.lut ) {
115
66
 
116
- material.uniforms.lut3d.value = null;
117
67
  material.uniforms.lut.value = null;
118
68
 
119
69
  if ( v ) {
120
70
 
121
- const is3dTextureDefine = v.isData3DTexture ? 1 : 0;
122
- if ( is3dTextureDefine !== material.defines.USE_3DTEXTURE ) {
123
-
124
- material.defines.USE_3DTEXTURE = is3dTextureDefine;
125
- material.needsUpdate = true;
126
-
127
- }
128
-
129
71
  material.uniforms.lutSize.value = v.image.width;
130
- if ( v.isData3DTexture ) {
131
-
132
- material.uniforms.lut3d.value = v;
133
-
134
- } else {
135
-
136
- material.uniforms.lut.value = v;
137
-
138
- }
72
+ material.uniforms.lut.value = v;
139
73
 
140
74
  }
141
75
 
@@ -145,7 +79,7 @@ class LUTPass extends ShaderPass {
145
79
 
146
80
  get lut() {
147
81
 
148
- return this.material.uniforms.lut.value || this.material.uniforms.lut3d.value;
82
+ return this.material.uniforms.lut.value;
149
83
 
150
84
  }
151
85
 
@@ -0,0 +1,193 @@
1
+ import {
2
+ HalfFloatType,
3
+ ShaderMaterial,
4
+ WebGLRenderTarget
5
+ } from 'three';
6
+ import { FullScreenQuad, Pass } from './Pass.js';
7
+
8
+ class RenderTransitionPass extends Pass {
9
+
10
+ constructor( sceneA, cameraA, sceneB, cameraB ) {
11
+
12
+ super();
13
+
14
+ this.material = this.createMaterial();
15
+ this.fsQuad = new FullScreenQuad( this.material );
16
+
17
+ this.sceneA = sceneA;
18
+ this.cameraA = cameraA;
19
+ this.sceneB = sceneB;
20
+ this.cameraB = cameraB;
21
+
22
+ this.renderTargetA = new WebGLRenderTarget();
23
+ this.renderTargetA.texture.type = HalfFloatType;
24
+ this.renderTargetB = new WebGLRenderTarget();
25
+ this.renderTargetB.texture.type = HalfFloatType;
26
+
27
+ }
28
+
29
+ setTransition( value ) {
30
+
31
+ this.material.uniforms.mixRatio.value = value;
32
+
33
+ }
34
+
35
+ useTexture( value ) {
36
+
37
+ this.material.uniforms.useTexture.value = value ? 1 : 0;
38
+
39
+ }
40
+
41
+ setTexture( value ) {
42
+
43
+ this.material.uniforms.tMixTexture.value = value;
44
+
45
+ }
46
+
47
+ setTextureThreshold( value ) {
48
+
49
+ this.material.uniforms.threshold.value = value;
50
+
51
+ }
52
+
53
+ setSize( width, height ) {
54
+
55
+ this.renderTargetA.setSize( width, height );
56
+ this.renderTargetB.setSize( width, height );
57
+
58
+ }
59
+
60
+ render( renderer, writeBuffer ) {
61
+
62
+ const uniforms = this.fsQuad.material.uniforms;
63
+ const transition = uniforms.mixRatio.value;
64
+
65
+ // Prevent render both scenes when it's not necessary
66
+
67
+ if ( transition === 0 ) {
68
+
69
+ renderer.setRenderTarget( writeBuffer );
70
+ if ( this.clear ) renderer.clear();
71
+ renderer.render( this.sceneB, this.cameraB );
72
+
73
+ } else if ( transition === 1 ) {
74
+
75
+ renderer.setRenderTarget( writeBuffer );
76
+ if ( this.clear ) renderer.clear();
77
+ renderer.render( this.sceneA, this.cameraA );
78
+
79
+ } else {
80
+
81
+ // When 0 < transition < 1 render transition between two scenes
82
+
83
+ renderer.setRenderTarget( this.renderTargetA );
84
+ renderer.render( this.sceneA, this.cameraA );
85
+ renderer.setRenderTarget( this.renderTargetB );
86
+ renderer.render( this.sceneB, this.cameraB );
87
+
88
+ uniforms.tDiffuse1.value = this.renderTargetA.texture;
89
+ uniforms.tDiffuse2.value = this.renderTargetB.texture;
90
+
91
+ if ( this.renderToScreen ) {
92
+
93
+ renderer.setRenderTarget( null );
94
+ renderer.clear();
95
+
96
+ } else {
97
+
98
+ renderer.setRenderTarget( writeBuffer );
99
+ if ( this.clear ) renderer.clear();
100
+
101
+ }
102
+
103
+ this.fsQuad.render( renderer );
104
+
105
+ }
106
+
107
+ }
108
+
109
+ dispose() {
110
+
111
+ this.renderTargetA.dispose();
112
+ this.renderTargetB.dispose();
113
+ this.material.dispose();
114
+ this.fsQuad.dispose();
115
+
116
+ }
117
+
118
+ createMaterial() {
119
+
120
+ return new ShaderMaterial( {
121
+ uniforms: {
122
+ tDiffuse1: {
123
+ value: null
124
+ },
125
+ tDiffuse2: {
126
+ value: null
127
+ },
128
+ mixRatio: {
129
+ value: 0.0
130
+ },
131
+ threshold: {
132
+ value: 0.1
133
+ },
134
+ useTexture: {
135
+ value: 1
136
+ },
137
+ tMixTexture: {
138
+ value: null
139
+ }
140
+ },
141
+ vertexShader: /* glsl */`
142
+ varying vec2 vUv;
143
+
144
+ void main() {
145
+
146
+ vUv = vec2( uv.x, uv.y );
147
+ gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
148
+
149
+ }
150
+ `,
151
+ fragmentShader: /* glsl */`
152
+ uniform float mixRatio;
153
+
154
+ uniform sampler2D tDiffuse1;
155
+ uniform sampler2D tDiffuse2;
156
+ uniform sampler2D tMixTexture;
157
+
158
+ uniform int useTexture;
159
+ uniform float threshold;
160
+
161
+ varying vec2 vUv;
162
+
163
+ void main() {
164
+
165
+ vec4 texel1 = texture2D( tDiffuse1, vUv );
166
+ vec4 texel2 = texture2D( tDiffuse2, vUv );
167
+
168
+ if (useTexture == 1) {
169
+
170
+ vec4 transitionTexel = texture2D( tMixTexture, vUv );
171
+ float r = mixRatio * ( 1.0 + threshold * 2.0 ) - threshold;
172
+ float mixf = clamp( ( transitionTexel.r - r ) * ( 1.0 / threshold ), 0.0, 1.0 );
173
+
174
+ gl_FragColor = mix( texel1, texel2, mixf );
175
+
176
+ } else {
177
+
178
+ gl_FragColor = mix( texel2, texel1, mixRatio );
179
+
180
+ }
181
+
182
+ #include <tonemapping_fragment>
183
+ #include <colorspace_fragment>
184
+
185
+ }
186
+ `
187
+ } );
188
+
189
+ }
190
+
191
+ }
192
+
193
+ export { RenderTransitionPass };
@@ -81,7 +81,6 @@ class SAOPass extends Pass {
81
81
  vertexShader: SAOShader.vertexShader,
82
82
  uniforms: UniformsUtils.clone( SAOShader.uniforms )
83
83
  } );
84
- this.saoMaterial.extensions.derivatives = true;
85
84
  this.saoMaterial.defines[ 'PERSPECTIVE_CAMERA' ] = this.camera.isPerspectiveCamera ? 1 : 0;
86
85
  this.saoMaterial.uniforms[ 'tDepth' ].value = depthTexture;
87
86
  this.saoMaterial.uniforms[ 'tNormal' ].value = this.normalRenderTarget.texture;
@@ -13,7 +13,6 @@ import {
13
13
  NearestFilter,
14
14
  NoBlending,
15
15
  RedFormat,
16
- LuminanceFormat,
17
16
  DepthStencilFormat,
18
17
  UnsignedInt248Type,
19
18
  RepeatWrapping,
@@ -177,8 +176,6 @@ class SSAOPass extends Pass {
177
176
 
178
177
  render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
179
178
 
180
- if ( renderer.capabilities.isWebGL2 === false ) this.noiseTexture.format = LuminanceFormat;
181
-
182
179
  // render normals and depth (honor only meshes, points and lines do not contribute to SSAO)
183
180
 
184
181
  this.overrideVisibility();
@@ -18,6 +18,8 @@ class Animation {
18
18
 
19
19
  this.requestId = self.requestAnimationFrame( update );
20
20
 
21
+ if ( this.info.autoReset === true ) this.info.reset();
22
+
21
23
  this.nodes.nodeFrame.update();
22
24
 
23
25
  this.info.frame = this.nodes.nodeFrame.frameId;
@@ -33,6 +35,7 @@ class Animation {
33
35
  dispose() {
34
36
 
35
37
  self.cancelAnimationFrame( this.requestId );
38
+ this.requestId = null;
36
39
 
37
40
  }
38
41
 
@@ -1,7 +1,7 @@
1
1
  import DataMap from './DataMap.js';
2
2
  import Color4 from './Color4.js';
3
- import { Mesh, SphereGeometry, BackSide } from 'three';
4
- import { vec4, context, normalWorld, backgroundBlurriness, backgroundIntensity, NodeMaterial, modelViewProjection, maxMipLevel } from '../../nodes/Nodes.js';
3
+ import { Mesh, SphereGeometry, BackSide, LinearSRGBColorSpace } from 'three';
4
+ import { vec4, context, normalWorld, backgroundBlurriness, backgroundIntensity, NodeMaterial, modelViewProjection } from '../../nodes/Nodes.js';
5
5
 
6
6
  const _clearColor = new Color4();
7
7
 
@@ -27,14 +27,14 @@ class Background extends DataMap {
27
27
 
28
28
  // no background settings, use clear color configuration from the renderer
29
29
 
30
- renderer._clearColor.getRGB( _clearColor, this.renderer.currentColorSpace );
30
+ renderer._clearColor.getRGB( _clearColor, LinearSRGBColorSpace );
31
31
  _clearColor.a = renderer._clearColor.a;
32
32
 
33
33
  } else if ( background.isColor === true ) {
34
34
 
35
35
  // background is an opaque color
36
36
 
37
- background.getRGB( _clearColor, this.renderer.currentColorSpace );
37
+ background.getRGB( _clearColor, LinearSRGBColorSpace );
38
38
  _clearColor.a = 1;
39
39
 
40
40
  forceClear = true;
@@ -50,11 +50,11 @@ class Background extends DataMap {
50
50
 
51
51
  if ( backgroundMesh === undefined ) {
52
52
 
53
- const backgroundMeshNode = context( vec4( backgroundNode ), {
53
+ const backgroundMeshNode = context( vec4( backgroundNode ).mul( backgroundIntensity ), {
54
54
  // @TODO: Add Texture2D support using node context
55
55
  getUV: () => normalWorld,
56
- getTextureLevel: ( textureNode ) => backgroundBlurriness.mul( maxMipLevel( textureNode ) )
57
- } ).mul( backgroundIntensity );
56
+ getTextureLevel: () => backgroundBlurriness
57
+ } );
58
58
 
59
59
  let viewProj = modelViewProjection();
60
60
  viewProj = viewProj.setZ( viewProj.w );
@@ -83,7 +83,7 @@ class Background extends DataMap {
83
83
 
84
84
  if ( sceneData.backgroundCacheKey !== backgroundCacheKey ) {
85
85
 
86
- sceneData.backgroundMeshNode.node = vec4( backgroundNode );
86
+ sceneData.backgroundMeshNode.node = vec4( backgroundNode ).mul( backgroundIntensity );
87
87
 
88
88
  backgroundMesh.material.needsUpdate = true;
89
89
 
@@ -101,7 +101,7 @@ class ClippingContext {
101
101
 
102
102
  if ( this !== parent && parent.version !== this.parentVersion ) {
103
103
 
104
- this.globalClippingCount = material.isShadowNodeMaterial ? 0 : parent.globalClippingCount;
104
+ this.globalClippingCount = material.isShadowNodeMaterial ? 0 : parent.globalClippingCount;
105
105
  this.localClippingEnabled = parent.localClippingEnabled;
106
106
  this.planes = Array.from( parent.planes );
107
107
  this.parentVersion = parent.version;
@@ -12,12 +12,14 @@ class Info {
12
12
  drawCalls: 0,
13
13
  triangles: 0,
14
14
  points: 0,
15
- lines: 0
15
+ lines: 0,
16
+ timestamp: 0
16
17
  };
17
18
 
18
19
  this.compute = {
19
20
  calls: 0,
20
- computeCalls: 0
21
+ computeCalls: 0,
22
+ timestamp: 0
21
23
  };
22
24
 
23
25
  this.memory = {
@@ -25,11 +27,6 @@ class Info {
25
27
  textures: 0
26
28
  };
27
29
 
28
- this.timestamp = {
29
- compute: 0,
30
- render: 0
31
- };
32
-
33
30
  }
34
31
 
35
32
  update( object, count, instanceCount ) {
@@ -62,26 +59,21 @@ class Info {
62
59
 
63
60
  updateTimestamp( type, time ) {
64
61
 
65
- this.timestamp[ type ] += time;
66
-
67
- }
68
-
69
- resetCompute() {
70
-
71
- this.compute.computeCalls = 0;
72
-
73
- this.timestamp.compute = 0;
62
+ this[ type ].timestamp += time;
74
63
 
75
64
  }
76
65
 
77
66
  reset() {
78
67
 
79
68
  this.render.drawCalls = 0;
69
+ this.compute.computeCalls = 0;
70
+
80
71
  this.render.triangles = 0;
81
72
  this.render.points = 0;
82
73
  this.render.lines = 0;
83
74
 
84
- this.timestamp.render = 0;
75
+ this.render.timestamp = 0;
76
+ this.compute.timestamp = 0;
85
77
 
86
78
  }
87
79
 
@@ -94,8 +86,8 @@ class Info {
94
86
  this.render.calls = 0;
95
87
  this.compute.calls = 0;
96
88
 
97
- this.timestamp.compute = 0;
98
- this.timestamp.render = 0;
89
+ this.render.timestamp = 0;
90
+ this.compute.timestamp = 0;
99
91
  this.memory.geometries = 0;
100
92
  this.memory.textures = 0;
101
93
 
@@ -1,7 +1,7 @@
1
- import { vec4, MeshBasicNodeMaterial } from '../../nodes/Nodes.js';
1
+ import { vec4, NodeMaterial } from '../../nodes/Nodes.js';
2
2
  import QuadMesh from '../../objects/QuadMesh.js';
3
3
 
4
- const quadMesh = new QuadMesh( new MeshBasicNodeMaterial() );
4
+ const quadMesh = new QuadMesh( new NodeMaterial() );
5
5
 
6
6
  class PostProcessing {
7
7
 
@@ -12,11 +12,19 @@ class PostProcessing {
12
12
 
13
13
  }
14
14
 
15
- async render() {
15
+ render() {
16
16
 
17
17
  quadMesh.material.fragmentNode = this.outputNode;
18
18
 
19
- await quadMesh.render( this.renderer );
19
+ quadMesh.render( this.renderer );
20
+
21
+ }
22
+
23
+ renderAsync() {
24
+
25
+ quadMesh.material.fragmentNode = this.outputNode;
26
+
27
+ return quadMesh.renderAsync( this.renderer );
20
28
 
21
29
  }
22
30
 
@@ -16,7 +16,7 @@ class RenderContext {
16
16
  this.clearDepth = true;
17
17
  this.clearDepthValue = 1;
18
18
 
19
- this.stencil = true;
19
+ this.stencil = false;
20
20
  this.clearStencil = true;
21
21
  this.clearStencilValue = 1;
22
22
 
@@ -123,7 +123,7 @@ class RenderList {
123
123
 
124
124
  if ( object.occlusionTest === true ) this.occlusionQueryCount ++;
125
125
 
126
- ( material.transparent === true ? this.transparent : this.opaque ).push( renderItem );
126
+ ( material.transparent === true || material.transmission > 0 ? this.transparent : this.opaque ).push( renderItem );
127
127
 
128
128
  }
129
129
 
@@ -1,7 +1,41 @@
1
- import ClippingContext from "./ClippingContext.js";
1
+ import ClippingContext from './ClippingContext.js';
2
2
 
3
3
  let id = 0;
4
4
 
5
+ function getKeys( obj ) {
6
+
7
+ const keys = Object.keys( obj );
8
+
9
+ let proto = Object.getPrototypeOf( obj );
10
+
11
+ while ( proto ) {
12
+
13
+ const descriptors = Object.getOwnPropertyDescriptors( proto );
14
+
15
+ for ( const key in descriptors ) {
16
+
17
+ if ( descriptors[ key ] !== undefined ) {
18
+
19
+ const descriptor = descriptors[ key ];
20
+
21
+ if ( descriptor && typeof descriptor.get === 'function' ) {
22
+
23
+ keys.push( key );
24
+
25
+ }
26
+
27
+ }
28
+
29
+ }
30
+
31
+ proto = Object.getPrototypeOf( proto );
32
+
33
+ }
34
+
35
+ return keys;
36
+
37
+ }
38
+
5
39
  export default class RenderObject {
6
40
 
7
41
  constructor( nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext ) {
@@ -22,6 +56,8 @@ export default class RenderObject {
22
56
  this.geometry = object.geometry;
23
57
  this.version = material.version;
24
58
 
59
+ this.drawRange = null;
60
+
25
61
  this.attributes = null;
26
62
  this.pipeline = null;
27
63
  this.vertexBuffers = null;
@@ -75,7 +111,7 @@ export default class RenderObject {
75
111
 
76
112
  }
77
113
 
78
- clippingNeedsUpdate () {
114
+ get clippingNeedsUpdate() {
79
115
 
80
116
  if ( this.clippingContext.version === this.clippingContextVersion ) return false;
81
117
 
@@ -153,9 +189,9 @@ export default class RenderObject {
153
189
 
154
190
  let cacheKey = material.customProgramCacheKey();
155
191
 
156
- for ( const property in material ) {
192
+ for ( const property of getKeys( material ) ) {
157
193
 
158
- if ( /^(is[A-Z])|^(visible|version|uuid|name|opacity|userData)$/.test( property ) ) continue;
194
+ if ( /^(is[A-Z]|_)|^(visible|version|uuid|name|opacity|userData)$/.test( property ) ) continue;
159
195
 
160
196
  let value = material[ property ];
161
197
 
@@ -186,13 +222,19 @@ export default class RenderObject {
186
222
 
187
223
  }
188
224
 
225
+ if ( object.isBatchedMesh ) {
226
+
227
+ cacheKey += object._matricesTexture.uuid + ',';
228
+
229
+ }
230
+
189
231
  return cacheKey;
190
232
 
191
233
  }
192
234
 
193
235
  get needsUpdate() {
194
236
 
195
- return this.initialNodesCacheKey !== this.getNodesCacheKey();
237
+ return this.initialNodesCacheKey !== this.getNodesCacheKey() || this.clippingNeedsUpdate;
196
238
 
197
239
  }
198
240
 
@@ -33,7 +33,7 @@ class RenderObjects {
33
33
 
34
34
  renderObject.updateClipping( renderContext.clippingContext );
35
35
 
36
- if ( renderObject.version !== material.version || renderObject.needsUpdate || renderObject.clippingNeedsUpdate() ) {
36
+ if ( renderObject.version !== material.version || renderObject.needsUpdate ) {
37
37
 
38
38
  if ( renderObject.initialCacheKey !== renderObject.getCacheKey() ) {
39
39