super-three 0.158.0 → 0.160.1
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.
- package/build/three.cjs +1720 -380
- package/build/three.js +1720 -380
- package/build/three.min.js +1 -1
- package/build/three.module.js +1719 -381
- package/build/three.module.min.js +1 -1
- package/examples/jsm/Addons.js +2 -1
- package/examples/jsm/controls/OrbitControls.js +50 -40
- package/examples/jsm/csm/CSMShader.js +52 -47
- package/examples/jsm/exporters/GLTFExporter.js +79 -1
- package/examples/jsm/exporters/USDZExporter.js +27 -19
- package/examples/jsm/helpers/TextureHelper.js +237 -0
- package/examples/jsm/interactive/HTMLMesh.js +9 -2
- package/examples/jsm/lines/LineMaterial.js +16 -33
- package/examples/jsm/loaders/ColladaLoader.js +0 -6
- package/examples/jsm/loaders/DRACOLoader.js +4 -3
- package/examples/jsm/loaders/FBXLoader.js +294 -124
- package/examples/jsm/loaders/GLTFLoader.js +71 -3
- package/examples/jsm/loaders/MaterialXLoader.js +73 -54
- package/examples/jsm/loaders/NRRDLoader.js +0 -13
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/USDZLoader.js +3 -17
- package/examples/jsm/math/Octree.js +15 -4
- package/examples/jsm/misc/Timer.js +119 -0
- package/examples/jsm/misc/TubePainter.js +3 -6
- package/examples/jsm/modifiers/CurveModifier.js +20 -2
- package/examples/jsm/nodes/Nodes.js +11 -7
- package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
- package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
- package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
- package/examples/jsm/nodes/accessors/TextureNode.js +122 -36
- package/examples/jsm/nodes/code/CodeNode.js +3 -3
- package/examples/jsm/nodes/core/AttributeNode.js +7 -1
- package/examples/jsm/nodes/core/CacheNode.js +4 -1
- package/examples/jsm/nodes/core/ConstNode.js +1 -1
- package/examples/jsm/nodes/core/Node.js +6 -3
- package/examples/jsm/nodes/core/NodeBuilder.js +84 -27
- package/examples/jsm/nodes/core/NodeFrame.js +10 -8
- package/examples/jsm/nodes/core/NodeUniform.js +12 -0
- package/examples/jsm/nodes/core/NodeUtils.js +3 -7
- package/examples/jsm/nodes/core/OutputStructNode.js +3 -3
- package/examples/jsm/nodes/core/PropertyNode.js +17 -2
- package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
- package/examples/jsm/nodes/core/UniformGroup.js +13 -0
- package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
- package/examples/jsm/nodes/core/UniformNode.js +17 -0
- package/examples/jsm/nodes/core/VarNode.js +2 -0
- package/examples/jsm/nodes/core/VaryingNode.js +1 -7
- package/examples/jsm/nodes/display/BumpMapNode.js +1 -1
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
- package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
- package/examples/jsm/nodes/display/PassNode.js +182 -0
- package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportNode.js +5 -8
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +52 -17
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -12
- package/examples/jsm/nodes/lighting/LightsNode.js +34 -32
- package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +12 -12
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/NodeMaterial.js +66 -41
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
- package/examples/jsm/nodes/math/MathNode.js +2 -0
- package/examples/jsm/nodes/math/OperatorNode.js +19 -6
- package/examples/jsm/nodes/shadernode/ShaderNode.js +32 -3
- package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
- package/examples/jsm/nodes/utils/RemapNode.js +2 -2
- package/examples/jsm/nodes/utils/SplitNode.js +8 -2
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/examples/jsm/objects/QuadMesh.js +60 -0
- package/examples/jsm/postprocessing/GTAOPass.js +572 -0
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/renderers/common/Animation.js +10 -21
- package/examples/jsm/renderers/common/Backend.js +19 -3
- package/examples/jsm/renderers/common/Background.js +20 -22
- package/examples/jsm/renderers/common/Bindings.js +30 -21
- package/examples/jsm/renderers/common/ChainMap.js +3 -3
- package/examples/jsm/renderers/common/Color4.js +37 -0
- package/examples/jsm/renderers/common/Geometries.js +4 -4
- package/examples/jsm/renderers/common/Info.js +12 -2
- package/examples/jsm/renderers/common/Pipelines.js +3 -51
- package/examples/jsm/renderers/common/PostProcessing.js +25 -0
- package/examples/jsm/renderers/common/RenderContext.js +1 -1
- package/examples/jsm/renderers/common/RenderContexts.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +13 -1
- package/examples/jsm/renderers/common/RenderObjects.js +4 -2
- package/examples/jsm/renderers/common/Renderer.js +137 -37
- package/examples/jsm/renderers/common/StorageTexture.js +1 -0
- package/examples/jsm/renderers/common/Textures.js +4 -1
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +74 -7
- package/examples/jsm/renderers/webgl/WebGLBackend.js +91 -33
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +100 -31
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +57 -5
- package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
- package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +186 -137
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +209 -90
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
- package/examples/jsm/shaders/FXAAShader.js +133 -133
- package/examples/jsm/shaders/GTAOShader.js +424 -0
- package/examples/jsm/shaders/OutputShader.js +4 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
- package/examples/jsm/shaders/SAOShader.js +2 -3
- package/examples/jsm/shaders/SSAOShader.js +2 -3
- package/examples/jsm/transpiler/AST.js +40 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +50 -8
- package/examples/jsm/transpiler/ShaderToyDecoder.js +4 -4
- package/examples/jsm/transpiler/TSLEncoder.js +124 -20
- package/examples/jsm/utils/SortUtils.js +158 -0
- package/examples/jsm/utils/TextureUtils.js +33 -21
- package/examples/jsm/webxr/ARButton.js +14 -0
- package/examples/jsm/webxr/VRButton.js +23 -8
- package/examples/jsm/webxr/XRButton.js +25 -11
- package/package.json +5 -6
- package/src/Three.js +1 -0
- package/src/constants.js +2 -1
- package/src/core/BufferAttribute.js +21 -2
- package/src/core/InterleavedBuffer.js +21 -1
- package/src/core/Object3D.js +60 -12
- package/src/core/UniformsGroup.js +7 -1
- package/src/extras/curves/LineCurve3.js +4 -0
- package/src/loaders/AudioLoader.js +1 -1
- package/src/loaders/BufferGeometryLoader.js +0 -7
- package/src/loaders/ImageBitmapLoader.js +25 -1
- package/src/loaders/ObjectLoader.js +49 -0
- package/src/materials/ShaderMaterial.js +2 -1
- package/src/math/ColorManagement.js +0 -16
- package/src/math/Quaternion.js +5 -4
- package/src/math/Sphere.js +2 -0
- package/src/math/Triangle.js +17 -5
- package/src/objects/BatchedMesh.js +1020 -0
- package/src/objects/Skeleton.js +1 -3
- package/src/renderers/WebGL3DRenderTarget.js +2 -2
- package/src/renderers/WebGLArrayRenderTarget.js +2 -2
- package/src/renderers/WebGLRenderer.js +24 -19
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
- package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
- package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
- package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk.js +4 -0
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
- package/src/renderers/webgl/WebGLAttributes.js +39 -5
- package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
- package/src/renderers/webgl/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLLights.js +11 -2
- package/src/renderers/webgl/WebGLProgram.js +20 -1
- package/src/renderers/webgl/WebGLPrograms.js +5 -0
- package/src/renderers/webgl/WebGLShadowMap.js +35 -0
- package/src/renderers/webgl/WebGLTextures.js +7 -11
- package/src/renderers/webgl/WebGLUniforms.js +11 -1
- package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
- package/src/renderers/webxr/WebXRManager.js +16 -0
- package/examples/jsm/objects/BatchedMesh.js +0 -586
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import DataMap from './DataMap.js';
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
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
|
-
|
|
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.
|
|
34
|
-
|
|
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
|
-
|
|
41
|
-
|
|
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 =
|
|
49
|
+
let backgroundMesh = sceneData.backgroundMesh;
|
|
53
50
|
|
|
54
|
-
if ( backgroundMesh ===
|
|
51
|
+
if ( backgroundMesh === undefined ) {
|
|
55
52
|
|
|
56
|
-
|
|
53
|
+
const backgroundMeshNode = context( vec4( backgroundNode ), {
|
|
57
54
|
// @TODO: Add Texture2D support using node context
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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 =
|
|
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
|
-
|
|
107
|
+
if ( binding.isNodeUniformsGroup ) {
|
|
108
|
+
|
|
109
|
+
const updated = this.nodes.updateGroup( binding );
|
|
113
110
|
|
|
114
|
-
|
|
111
|
+
if ( ! updated ) continue;
|
|
112
|
+
|
|
113
|
+
}
|
|
115
114
|
|
|
116
115
|
if ( binding.isUniformBuffer ) {
|
|
117
116
|
|
|
118
|
-
const
|
|
117
|
+
const updated = binding.update();
|
|
119
118
|
|
|
120
|
-
if (
|
|
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
|
|
131
|
+
const updated = binding.update();
|
|
131
132
|
|
|
132
|
-
if (
|
|
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
|
-
|
|
141
|
+
const textureData = this.get( texture );
|
|
141
142
|
|
|
142
|
-
|
|
143
|
+
if ( binding.store === true ) {
|
|
143
144
|
|
|
144
|
-
|
|
145
|
+
textureData.needsMipmap = true;
|
|
145
146
|
|
|
146
|
-
|
|
147
|
+
} else if ( texture.generateMipmaps === true && this.textures.needsMipmaps( texture ) && textureData.needsMipmap === true ) {
|
|
147
148
|
|
|
148
|
-
|
|
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
|
-
|
|
163
|
+
const pipeline = this.pipelines.getForRender( object );
|
|
155
164
|
|
|
156
|
-
|
|
165
|
+
this.backend.updateBindings( bindings, pipeline );
|
|
157
166
|
|
|
158
|
-
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
165
|
+
const callId = this.info.render.calls;
|
|
166
166
|
|
|
167
|
-
if ( this.
|
|
167
|
+
if ( this.attributeCall.get( attribute ) !== callId ) {
|
|
168
168
|
|
|
169
169
|
this.attributes.update( attribute, type );
|
|
170
170
|
|
|
171
|
-
this.
|
|
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
|
-
|
|
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.
|
|
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
|
|
279
|
+
return computeNode.id + ',' + stageCompute.id;
|
|
280
280
|
|
|
281
281
|
}
|
|
282
282
|
|
|
283
283
|
_getRenderCacheKey( renderObject, stageVertex, stageFragment ) {
|
|
284
284
|
|
|
285
|
-
|
|
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
|
|
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;
|
|
@@ -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
|
|
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
|
}
|