super-three 0.158.0 → 0.160.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 (191) hide show
  1. package/build/three.cjs +1719 -379
  2. package/build/three.js +1719 -379
  3. package/build/three.min.js +1 -1
  4. package/build/three.module.js +1718 -380
  5. package/build/three.module.min.js +1 -1
  6. package/examples/jsm/Addons.js +2 -1
  7. package/examples/jsm/controls/OrbitControls.js +50 -40
  8. package/examples/jsm/csm/CSMShader.js +52 -47
  9. package/examples/jsm/exporters/GLTFExporter.js +79 -1
  10. package/examples/jsm/exporters/USDZExporter.js +27 -19
  11. package/examples/jsm/helpers/TextureHelper.js +237 -0
  12. package/examples/jsm/interactive/HTMLMesh.js +9 -2
  13. package/examples/jsm/lines/LineMaterial.js +16 -33
  14. package/examples/jsm/loaders/ColladaLoader.js +0 -6
  15. package/examples/jsm/loaders/DRACOLoader.js +4 -3
  16. package/examples/jsm/loaders/FBXLoader.js +294 -124
  17. package/examples/jsm/loaders/GLTFLoader.js +71 -3
  18. package/examples/jsm/loaders/MaterialXLoader.js +73 -54
  19. package/examples/jsm/loaders/NRRDLoader.js +0 -13
  20. package/examples/jsm/loaders/SVGLoader.js +4 -4
  21. package/examples/jsm/loaders/USDZLoader.js +3 -17
  22. package/examples/jsm/math/Octree.js +15 -4
  23. package/examples/jsm/misc/Timer.js +119 -0
  24. package/examples/jsm/misc/TubePainter.js +3 -6
  25. package/examples/jsm/modifiers/CurveModifier.js +20 -2
  26. package/examples/jsm/nodes/Nodes.js +11 -7
  27. package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
  28. package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
  29. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
  30. package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
  31. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
  32. package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
  33. package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
  34. package/examples/jsm/nodes/accessors/TextureNode.js +122 -36
  35. package/examples/jsm/nodes/code/CodeNode.js +3 -3
  36. package/examples/jsm/nodes/core/AttributeNode.js +7 -1
  37. package/examples/jsm/nodes/core/CacheNode.js +4 -1
  38. package/examples/jsm/nodes/core/ConstNode.js +1 -1
  39. package/examples/jsm/nodes/core/Node.js +6 -3
  40. package/examples/jsm/nodes/core/NodeBuilder.js +84 -27
  41. package/examples/jsm/nodes/core/NodeFrame.js +10 -8
  42. package/examples/jsm/nodes/core/NodeUniform.js +12 -0
  43. package/examples/jsm/nodes/core/NodeUtils.js +3 -7
  44. package/examples/jsm/nodes/core/OutputStructNode.js +3 -3
  45. package/examples/jsm/nodes/core/PropertyNode.js +17 -2
  46. package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
  47. package/examples/jsm/nodes/core/UniformGroup.js +13 -0
  48. package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
  49. package/examples/jsm/nodes/core/UniformNode.js +17 -0
  50. package/examples/jsm/nodes/core/VarNode.js +2 -0
  51. package/examples/jsm/nodes/core/VaryingNode.js +1 -7
  52. package/examples/jsm/nodes/display/BumpMapNode.js +1 -1
  53. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
  54. package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
  55. package/examples/jsm/nodes/display/PassNode.js +182 -0
  56. package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
  57. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
  58. package/examples/jsm/nodes/display/ViewportNode.js +5 -8
  59. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +1 -1
  60. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +52 -17
  61. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -12
  62. package/examples/jsm/nodes/lighting/LightsNode.js +34 -32
  63. package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +1 -1
  64. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +12 -12
  65. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
  66. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +1 -1
  67. package/examples/jsm/nodes/materials/NodeMaterial.js +66 -41
  68. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
  69. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
  70. package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
  71. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
  72. package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
  73. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
  74. package/examples/jsm/nodes/math/MathNode.js +2 -0
  75. package/examples/jsm/nodes/math/OperatorNode.js +19 -6
  76. package/examples/jsm/nodes/shadernode/ShaderNode.js +32 -3
  77. package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
  78. package/examples/jsm/nodes/utils/RemapNode.js +2 -2
  79. package/examples/jsm/nodes/utils/SplitNode.js +8 -2
  80. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
  81. package/examples/jsm/objects/QuadMesh.js +60 -0
  82. package/examples/jsm/postprocessing/GTAOPass.js +572 -0
  83. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  84. package/examples/jsm/renderers/common/Animation.js +10 -21
  85. package/examples/jsm/renderers/common/Backend.js +19 -3
  86. package/examples/jsm/renderers/common/Background.js +20 -22
  87. package/examples/jsm/renderers/common/Bindings.js +30 -21
  88. package/examples/jsm/renderers/common/ChainMap.js +3 -3
  89. package/examples/jsm/renderers/common/Color4.js +37 -0
  90. package/examples/jsm/renderers/common/Geometries.js +4 -4
  91. package/examples/jsm/renderers/common/Info.js +12 -2
  92. package/examples/jsm/renderers/common/Pipelines.js +3 -51
  93. package/examples/jsm/renderers/common/PostProcessing.js +25 -0
  94. package/examples/jsm/renderers/common/RenderContext.js +1 -1
  95. package/examples/jsm/renderers/common/RenderContexts.js +1 -1
  96. package/examples/jsm/renderers/common/RenderObject.js +13 -1
  97. package/examples/jsm/renderers/common/RenderObjects.js +4 -2
  98. package/examples/jsm/renderers/common/Renderer.js +137 -37
  99. package/examples/jsm/renderers/common/StorageTexture.js +1 -0
  100. package/examples/jsm/renderers/common/Textures.js +4 -1
  101. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
  102. package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
  103. package/examples/jsm/renderers/common/nodes/Nodes.js +74 -7
  104. package/examples/jsm/renderers/webgl/WebGLBackend.js +91 -33
  105. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +100 -31
  106. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +57 -5
  107. package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
  108. package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
  109. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
  110. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
  111. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
  112. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
  113. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
  114. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +186 -137
  115. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
  116. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +209 -90
  117. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
  118. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
  119. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
  120. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
  121. package/examples/jsm/shaders/FXAAShader.js +133 -133
  122. package/examples/jsm/shaders/GTAOShader.js +424 -0
  123. package/examples/jsm/shaders/OutputShader.js +4 -0
  124. package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
  125. package/examples/jsm/shaders/SAOShader.js +2 -3
  126. package/examples/jsm/shaders/SSAOShader.js +2 -3
  127. package/examples/jsm/transpiler/AST.js +40 -1
  128. package/examples/jsm/transpiler/GLSLDecoder.js +50 -8
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +4 -4
  130. package/examples/jsm/transpiler/TSLEncoder.js +124 -20
  131. package/examples/jsm/utils/SortUtils.js +158 -0
  132. package/examples/jsm/utils/TextureUtils.js +33 -21
  133. package/examples/jsm/webxr/ARButton.js +14 -0
  134. package/examples/jsm/webxr/VRButton.js +23 -8
  135. package/examples/jsm/webxr/XRButton.js +25 -11
  136. package/package.json +5 -6
  137. package/src/Three.js +1 -0
  138. package/src/constants.js +2 -1
  139. package/src/core/BufferAttribute.js +21 -2
  140. package/src/core/InterleavedBuffer.js +21 -1
  141. package/src/core/Object3D.js +60 -12
  142. package/src/core/UniformsGroup.js +7 -1
  143. package/src/extras/curves/LineCurve3.js +4 -0
  144. package/src/loaders/AudioLoader.js +1 -1
  145. package/src/loaders/BufferGeometryLoader.js +0 -7
  146. package/src/loaders/ImageBitmapLoader.js +25 -1
  147. package/src/loaders/ObjectLoader.js +49 -0
  148. package/src/materials/ShaderMaterial.js +2 -1
  149. package/src/math/ColorManagement.js +0 -16
  150. package/src/math/Quaternion.js +5 -4
  151. package/src/math/Sphere.js +2 -0
  152. package/src/math/Triangle.js +17 -5
  153. package/src/objects/BatchedMesh.js +1020 -0
  154. package/src/objects/Skeleton.js +1 -3
  155. package/src/renderers/WebGL3DRenderTarget.js +2 -2
  156. package/src/renderers/WebGLArrayRenderTarget.js +2 -2
  157. package/src/renderers/WebGLRenderer.js +23 -18
  158. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
  159. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
  160. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
  161. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
  162. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
  163. package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
  164. package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
  165. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
  166. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
  167. package/src/renderers/shaders/ShaderChunk.js +4 -0
  168. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  169. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  170. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
  171. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
  172. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
  173. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
  174. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
  175. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +2 -0
  176. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
  177. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
  178. package/src/renderers/webgl/WebGLAttributes.js +39 -5
  179. package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
  180. package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
  181. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  182. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
  183. package/src/renderers/webgl/WebGLLights.js +11 -2
  184. package/src/renderers/webgl/WebGLProgram.js +20 -1
  185. package/src/renderers/webgl/WebGLPrograms.js +5 -0
  186. package/src/renderers/webgl/WebGLShadowMap.js +35 -0
  187. package/src/renderers/webgl/WebGLTextures.js +7 -11
  188. package/src/renderers/webgl/WebGLUniforms.js +11 -1
  189. package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
  190. package/src/renderers/webxr/WebXRManager.js +16 -0
  191. package/examples/jsm/objects/BatchedMesh.js +0 -586
@@ -1,9 +1,9 @@
1
1
  import DataMap from './DataMap.js';
2
- import { Color, Mesh, SphereGeometry, BackSide } from 'three';
3
- import { context, normalWorld, backgroundBlurriness, backgroundIntensity, NodeMaterial, modelViewProjection } from '../../nodes/Nodes.js';
2
+ import Color4 from './Color4.js';
3
+ import { Mesh, SphereGeometry, BackSide } from 'three';
4
+ import { vec4, context, normalWorld, backgroundBlurriness, backgroundIntensity, NodeMaterial, modelViewProjection } from '../../nodes/Nodes.js';
4
5
 
5
- let _clearAlpha;
6
- const _clearColor = new Color();
6
+ const _clearColor = new Color4();
7
7
 
8
8
  class Background extends DataMap {
9
9
 
@@ -14,9 +14,6 @@ class Background extends DataMap {
14
14
  this.renderer = renderer;
15
15
  this.nodes = nodes;
16
16
 
17
- this.backgroundMesh = null;
18
- this.backgroundMeshNode = null;
19
-
20
17
  }
21
18
 
22
19
  update( scene, renderList, renderContext ) {
@@ -30,15 +27,16 @@ class Background extends DataMap {
30
27
 
31
28
  // no background settings, use clear color configuration from the renderer
32
29
 
33
- _clearColor.copyLinearToSRGB( renderer._clearColor );
34
- _clearAlpha = renderer._clearAlpha;
30
+ renderer._clearColor.getRGB( _clearColor, this.renderer.currentColorSpace );
31
+ _clearColor.a = renderer._clearColor.a;
35
32
 
36
33
  } else if ( background.isColor === true ) {
37
34
 
38
35
  // background is an opaque color
39
36
 
40
- _clearColor.copyLinearToSRGB( background );
41
- _clearAlpha = 1;
37
+ background.getRGB( _clearColor, this.renderer.currentColorSpace );
38
+ _clearColor.a = 1;
39
+
42
40
  forceClear = true;
43
41
 
44
42
  } else if ( background.isNode === true ) {
@@ -47,30 +45,30 @@ class Background extends DataMap {
47
45
  const backgroundNode = background;
48
46
 
49
47
  _clearColor.copy( renderer._clearColor );
50
- _clearAlpha = renderer._clearAlpha;
51
48
 
52
- let backgroundMesh = this.backgroundMesh;
49
+ let backgroundMesh = sceneData.backgroundMesh;
53
50
 
54
- if ( backgroundMesh === null ) {
51
+ if ( backgroundMesh === undefined ) {
55
52
 
56
- this.backgroundMeshNode = context( backgroundNode, {
53
+ const backgroundMeshNode = context( vec4( backgroundNode ), {
57
54
  // @TODO: Add Texture2D support using node context
58
- getUVNode: () => normalWorld,
59
- getSamplerLevelNode: () => backgroundBlurriness
55
+ getUV: () => normalWorld,
56
+ getTextureLevel: () => backgroundBlurriness
60
57
  } ).mul( backgroundIntensity );
61
58
 
62
59
  let viewProj = modelViewProjection();
63
60
  viewProj = viewProj.setZ( viewProj.w );
64
61
 
65
62
  const nodeMaterial = new NodeMaterial();
66
- nodeMaterial.outputNode = this.backgroundMeshNode;
67
63
  nodeMaterial.side = BackSide;
68
64
  nodeMaterial.depthTest = false;
69
65
  nodeMaterial.depthWrite = false;
70
66
  nodeMaterial.fog = false;
71
67
  nodeMaterial.vertexNode = viewProj;
68
+ nodeMaterial.fragmentNode = backgroundMeshNode;
72
69
 
73
- this.backgroundMesh = backgroundMesh = new Mesh( new SphereGeometry( 1, 32, 32 ), nodeMaterial );
70
+ sceneData.backgroundMeshNode = backgroundMeshNode;
71
+ sceneData.backgroundMesh = backgroundMesh = new Mesh( new SphereGeometry( 1, 32, 32 ), nodeMaterial );
74
72
  backgroundMesh.frustumCulled = false;
75
73
 
76
74
  backgroundMesh.onBeforeRender = function ( renderer, scene, camera ) {
@@ -85,7 +83,7 @@ class Background extends DataMap {
85
83
 
86
84
  if ( sceneData.backgroundCacheKey !== backgroundCacheKey ) {
87
85
 
88
- this.backgroundMeshNode.node = backgroundNode;
86
+ sceneData.backgroundMeshNode.node = vec4( backgroundNode );
89
87
 
90
88
  backgroundMesh.material.needsUpdate = true;
91
89
 
@@ -105,14 +103,14 @@ class Background extends DataMap {
105
103
 
106
104
  if ( renderer.autoClear === true || forceClear === true ) {
107
105
 
108
- _clearColor.multiplyScalar( _clearAlpha );
106
+ _clearColor.multiplyScalar( _clearColor.a );
109
107
 
110
108
  const clearColorValue = renderContext.clearColorValue;
111
109
 
112
110
  clearColorValue.r = _clearColor.r;
113
111
  clearColorValue.g = _clearColor.g;
114
112
  clearColorValue.b = _clearColor.b;
115
- clearColorValue.a = _clearAlpha;
113
+ clearColorValue.a = _clearColor.a;
116
114
 
117
115
  renderContext.depthClearValue = renderer._clearDepth;
118
116
  renderContext.stencilClearValue = renderer._clearStencil;
@@ -16,8 +16,6 @@ class Bindings extends DataMap {
16
16
 
17
17
  this.pipelines.bindings = this; // assign bindings to pipelines
18
18
 
19
- this.updateMap = new WeakMap();
20
-
21
19
  }
22
20
 
23
21
  getForRender( renderObject ) {
@@ -100,24 +98,25 @@ class Bindings extends DataMap {
100
98
 
101
99
  const { backend } = this;
102
100
 
103
- const updateMap = this.updateMap;
104
- const frame = this.info.render.frame;
105
-
106
101
  let needsBindingsUpdate = false;
107
102
 
108
103
  // iterate over all bindings and check if buffer updates or a new binding group is required
109
104
 
110
105
  for ( const binding of bindings ) {
111
106
 
112
- const isUpdated = updateMap.get( binding ) === frame;
107
+ if ( binding.isNodeUniformsGroup ) {
108
+
109
+ const updated = this.nodes.updateGroup( binding );
113
110
 
114
- if ( isUpdated ) continue;
111
+ if ( ! updated ) continue;
112
+
113
+ }
115
114
 
116
115
  if ( binding.isUniformBuffer ) {
117
116
 
118
- const needsUpdate = binding.update();
117
+ const updated = binding.update();
119
118
 
120
- if ( needsUpdate ) {
119
+ if ( updated ) {
121
120
 
122
121
  backend.updateBinding( binding );
123
122
 
@@ -125,37 +124,47 @@ class Bindings extends DataMap {
125
124
 
126
125
  } else if ( binding.isSampledTexture ) {
127
126
 
127
+ const texture = binding.texture;
128
+
128
129
  if ( binding.needsBindingsUpdate ) needsBindingsUpdate = true;
129
130
 
130
- const needsUpdate = binding.update();
131
+ const updated = binding.update();
131
132
 
132
- if ( needsUpdate ) {
133
+ if ( updated ) {
133
134
 
134
135
  this.textures.updateTexture( binding.texture );
135
136
 
136
137
  }
137
138
 
138
- }
139
+ if ( texture.isStorageTexture === true ) {
139
140
 
140
- updateMap.set( binding, frame );
141
+ const textureData = this.get( texture );
141
142
 
142
- }
143
+ if ( binding.store === true ) {
143
144
 
144
- if ( needsBindingsUpdate === true ) {
145
+ textureData.needsMipmap = true;
145
146
 
146
- const pipeline = this.pipelines.getForRender( object );
147
+ } else if ( texture.generateMipmaps === true && this.textures.needsMipmaps( texture ) && textureData.needsMipmap === true ) {
147
148
 
148
- this.backend.updateBindings( bindings, pipeline );
149
+ this.backend.generateMipmaps( texture );
150
+
151
+ textureData.needsMipmap = false;
152
+
153
+ }
154
+
155
+ }
156
+
157
+ }
149
158
 
150
159
  }
151
160
 
152
- }
161
+ if ( needsBindingsUpdate === true ) {
153
162
 
154
- dispose() {
163
+ const pipeline = this.pipelines.getForRender( object );
155
164
 
156
- super.dispose();
165
+ this.backend.updateBindings( bindings, pipeline );
157
166
 
158
- this.updateMap = new WeakMap();
167
+ }
159
168
 
160
169
  }
161
170
 
@@ -12,7 +12,7 @@ export default class ChainMap {
12
12
 
13
13
  let map = this.weakMap;
14
14
 
15
- for ( let i = 0; i < keys.length - 1; i ++ ) {
15
+ for ( let i = 0; i < keys.length; i ++ ) {
16
16
 
17
17
  map = map.get( keys[ i ] );
18
18
 
@@ -36,7 +36,7 @@ export default class ChainMap {
36
36
 
37
37
  let map = this.weakMap;
38
38
 
39
- for ( let i = 0; i < keys.length - 1; i ++ ) {
39
+ for ( let i = 0; i < keys.length; i ++ ) {
40
40
 
41
41
  const key = keys[ i ];
42
42
 
@@ -62,7 +62,7 @@ export default class ChainMap {
62
62
 
63
63
  let map = this.weakMap;
64
64
 
65
- for ( let i = 0; i < keys.length - 1; i ++ ) {
65
+ for ( let i = 0; i < keys.length; i ++ ) {
66
66
 
67
67
  map = map.get( keys[ i ] );
68
68
 
@@ -0,0 +1,37 @@
1
+ import { Color } from 'three';
2
+
3
+ class Color4 extends Color {
4
+
5
+ constructor( r, g, b, a = 1 ) {
6
+
7
+ super( r, g, b );
8
+
9
+ this.a = a;
10
+
11
+ }
12
+
13
+ set( r, g, b, a = 1 ) {
14
+
15
+ this.a = a;
16
+
17
+ return super.set( r, g, b );
18
+
19
+ }
20
+
21
+ copy( color ) {
22
+
23
+ if ( color.a !== undefined ) this.a = color.a;
24
+
25
+ return super.copy( color );
26
+
27
+ }
28
+
29
+ clone() {
30
+
31
+ return new this.constructor( this.r, this.g, this.b, this.a );
32
+
33
+ }
34
+
35
+ }
36
+
37
+ export default Color4;
@@ -76,7 +76,7 @@ class Geometries extends DataMap {
76
76
  this.info = info;
77
77
 
78
78
  this.wireframes = new WeakMap();
79
- this.attributeFrame = new WeakMap();
79
+ this.attributeCall = new WeakMap();
80
80
 
81
81
  }
82
82
 
@@ -162,13 +162,13 @@ class Geometries extends DataMap {
162
162
 
163
163
  updateAttribute( attribute, type ) {
164
164
 
165
- const frame = this.info.render.frame;
165
+ const callId = this.info.render.calls;
166
166
 
167
- if ( this.attributeFrame.get( attribute ) !== frame ) {
167
+ if ( this.attributeCall.get( attribute ) !== callId ) {
168
168
 
169
169
  this.attributes.update( attribute, type );
170
170
 
171
- this.attributeFrame.set( attribute, frame );
171
+ this.attributeCall.set( attribute, callId );
172
172
 
173
173
  }
174
174
 
@@ -4,14 +4,21 @@ class Info {
4
4
 
5
5
  this.autoReset = true;
6
6
 
7
+ this.frame = 0;
8
+ this.calls = 0;
9
+
7
10
  this.render = {
8
- frame: 0,
11
+ calls: 0,
9
12
  drawCalls: 0,
10
13
  triangles: 0,
11
14
  points: 0,
12
15
  lines: 0
13
16
  };
14
17
 
18
+ this.compute = {
19
+ calls: 0
20
+ };
21
+
15
22
  this.memory = {
16
23
  geometries: 0,
17
24
  textures: 0
@@ -60,7 +67,10 @@ class Info {
60
67
 
61
68
  this.reset();
62
69
 
63
- this.render.frame = 0;
70
+ this.calls = 0;
71
+
72
+ this.render.calls = 0;
73
+ this.compute.calls = 0;
64
74
 
65
75
  this.memory.geometries = 0;
66
76
  this.memory.textures = 0;
@@ -276,29 +276,13 @@ class Pipelines extends DataMap {
276
276
 
277
277
  _getComputeCacheKey( computeNode, stageCompute ) {
278
278
 
279
- return 'compute' + computeNode.id + stageCompute.id;
279
+ return computeNode.id + ',' + stageCompute.id;
280
280
 
281
281
  }
282
282
 
283
283
  _getRenderCacheKey( renderObject, stageVertex, stageFragment ) {
284
284
 
285
- const { material } = renderObject;
286
-
287
- const parameters = [
288
- stageVertex.id, stageFragment.id,
289
- material.transparent, material.blending, material.premultipliedAlpha,
290
- material.blendSrc, material.blendDst, material.blendEquation,
291
- material.blendSrcAlpha, material.blendDstAlpha, material.blendEquationAlpha,
292
- material.colorWrite,
293
- material.depthWrite, material.depthTest, material.depthFunc,
294
- material.stencilWrite, material.stencilFunc,
295
- material.stencilFail, material.stencilZFail, material.stencilZPass,
296
- material.stencilFuncMask, material.stencilWriteMask,
297
- material.side,
298
- this.backend.getCacheKey( renderObject )
299
- ];
300
-
301
- return parameters.join();
285
+ return stageVertex.id + ',' + stageFragment.id + ',' + this.backend.getRenderCacheKey( renderObject );
302
286
 
303
287
  }
304
288
 
@@ -328,40 +312,8 @@ class Pipelines extends DataMap {
328
312
  _needsRenderUpdate( renderObject ) {
329
313
 
330
314
  const data = this.get( renderObject );
331
- const material = renderObject.material;
332
-
333
- let needsUpdate = this.backend.needsUpdate( renderObject );
334
-
335
- // check material state
336
-
337
- if ( data.material !== material || data.materialVersion !== material.version ||
338
- data.transparent !== material.transparent || data.blending !== material.blending || data.premultipliedAlpha !== material.premultipliedAlpha ||
339
- data.blendSrc !== material.blendSrc || data.blendDst !== material.blendDst || data.blendEquation !== material.blendEquation ||
340
- data.blendSrcAlpha !== material.blendSrcAlpha || data.blendDstAlpha !== material.blendDstAlpha || data.blendEquationAlpha !== material.blendEquationAlpha ||
341
- data.colorWrite !== material.colorWrite ||
342
- data.depthWrite !== material.depthWrite || data.depthTest !== material.depthTest || data.depthFunc !== material.depthFunc ||
343
- data.stencilWrite !== material.stencilWrite || data.stencilFunc !== material.stencilFunc ||
344
- data.stencilFail !== material.stencilFail || data.stencilZFail !== material.stencilZFail || data.stencilZPass !== material.stencilZPass ||
345
- data.stencilFuncMask !== material.stencilFuncMask || data.stencilWriteMask !== material.stencilWriteMask ||
346
- data.side !== material.side || data.alphaToCoverage !== material.alphaToCoverage
347
- ) {
348
-
349
- data.material = material; data.materialVersion = material.version;
350
- data.transparent = material.transparent; data.blending = material.blending; data.premultipliedAlpha = material.premultipliedAlpha;
351
- data.blendSrc = material.blendSrc; data.blendDst = material.blendDst; data.blendEquation = material.blendEquation;
352
- data.blendSrcAlpha = material.blendSrcAlpha; data.blendDstAlpha = material.blendDstAlpha; data.blendEquationAlpha = material.blendEquationAlpha;
353
- data.colorWrite = material.colorWrite;
354
- data.depthWrite = material.depthWrite; data.depthTest = material.depthTest; data.depthFunc = material.depthFunc;
355
- data.stencilWrite = material.stencilWrite; data.stencilFunc = material.stencilFunc;
356
- data.stencilFail = material.stencilFail; data.stencilZFail = material.stencilZFail; data.stencilZPass = material.stencilZPass;
357
- data.stencilFuncMask = material.stencilFuncMask; data.stencilWriteMask = material.stencilWriteMask;
358
- data.side = material.side; data.alphaToCoverage = material.alphaToCoverage;
359
-
360
- needsUpdate = true;
361
-
362
- }
363
315
 
364
- return needsUpdate || data.pipeline === undefined;
316
+ return data.pipeline === undefined || this.backend.needsRenderUpdate( renderObject );
365
317
 
366
318
  }
367
319
 
@@ -0,0 +1,25 @@
1
+ import { vec4, MeshBasicNodeMaterial } from '../../nodes/Nodes.js';
2
+ import QuadMesh from '../../objects/QuadMesh.js';
3
+
4
+ const quadMesh = new QuadMesh( new MeshBasicNodeMaterial() );
5
+
6
+ class PostProcessing {
7
+
8
+ constructor( renderer, outputNode = vec4( 0, 0, 1, 1 ) ) {
9
+
10
+ this.renderer = renderer;
11
+ this.outputNode = outputNode;
12
+
13
+ }
14
+
15
+ render() {
16
+
17
+ quadMesh.material.fragmentNode = this.outputNode;
18
+
19
+ quadMesh.render( this.renderer );
20
+
21
+ }
22
+
23
+ }
24
+
25
+ export default PostProcessing;
@@ -26,7 +26,7 @@ class RenderContext {
26
26
  this.scissor = false;
27
27
  this.scissorValue = new Vector4();
28
28
 
29
- this.texture = null;
29
+ this.textures = null;
30
30
  this.depthTexture = null;
31
31
  this.activeCubeFace = 0;
32
32
  this.sampleCount = 1;
@@ -35,7 +35,7 @@ class RenderContexts {
35
35
 
36
36
  }
37
37
 
38
- attachmentState = `${count}:${format}:${renderTarget.samples}:${renderTarget.depthBuffer}:${renderTarget.stencilBuffer}`;
38
+ attachmentState = `${ count }:${ format }:${ renderTarget.samples }:${ renderTarget.depthBuffer }:${ renderTarget.stencilBuffer }`;
39
39
 
40
40
  }
41
41
 
@@ -106,7 +106,7 @@ export default class RenderObject {
106
106
 
107
107
  getMaterialCacheKey() {
108
108
 
109
- const material = this.material;
109
+ const { object, material } = this;
110
110
 
111
111
  let cacheKey = material.customProgramCacheKey();
112
112
 
@@ -129,6 +129,18 @@ export default class RenderObject {
129
129
 
130
130
  }
131
131
 
132
+ if ( object.skeleton ) {
133
+
134
+ cacheKey += object.skeleton.uuid + ',';
135
+
136
+ }
137
+
138
+ if ( object.morphTargetInfluences ) {
139
+
140
+ cacheKey += object.morphTargetInfluences.length + ',';
141
+
142
+ }
143
+
132
144
  return cacheKey;
133
145
 
134
146
  }
@@ -33,14 +33,16 @@ class RenderObjects {
33
33
 
34
34
  if ( renderObject.version !== material.version || renderObject.needsUpdate ) {
35
35
 
36
- renderObject.version = material.version;
37
-
38
36
  if ( renderObject.initialCacheKey !== renderObject.getCacheKey() ) {
39
37
 
40
38
  renderObject.dispose();
41
39
 
42
40
  renderObject = this.get( object, material, scene, camera, lightsNode, renderContext, passId );
43
41
 
42
+ } else {
43
+
44
+ renderObject.version = material.version;
45
+
44
46
  }
45
47
 
46
48
  }