super-three 0.163.0 → 0.165.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.
- package/README.md +3 -3
- package/build/three.cjs +1127 -452
- package/build/three.module.js +1127 -452
- package/build/three.module.min.js +2 -2
- package/examples/jsm/animation/CCDIKSolver.js +4 -2
- package/examples/jsm/controls/TransformControls.js +1 -1
- package/examples/jsm/environments/RoomEnvironment.js +1 -5
- package/examples/jsm/exporters/GLTFExporter.js +45 -1
- package/examples/jsm/exporters/USDZExporter.js +13 -5
- package/examples/jsm/helpers/ViewHelper.js +32 -67
- package/examples/jsm/libs/draco/README.md +2 -2
- package/examples/jsm/libs/tween.module.js +75 -64
- package/examples/jsm/lines/LineMaterial.js +1 -15
- package/examples/jsm/lines/LineSegments2.js +15 -0
- package/examples/jsm/lines/Wireframe.js +16 -1
- package/examples/jsm/loaders/DRACOLoader.js +1 -1
- package/examples/jsm/loaders/EXRLoader.js +283 -99
- package/examples/jsm/loaders/FBXLoader.js +24 -13
- package/examples/jsm/loaders/GLTFLoader.js +55 -0
- package/examples/jsm/loaders/KTX2Loader.js +3 -6
- package/examples/jsm/loaders/LDrawLoader.js +3 -2
- package/examples/jsm/loaders/MMDLoader.js +31 -12
- package/examples/jsm/loaders/VRMLLoader.js +1 -1
- package/examples/jsm/loaders/lwo/IFFParser.js +8 -5
- package/examples/jsm/materials/MeshGouraudMaterial.js +7 -1
- package/examples/jsm/math/Octree.js +26 -20
- package/examples/jsm/modifiers/CurveModifier.js +11 -9
- package/examples/jsm/nodes/Nodes.js +15 -13
- package/examples/jsm/nodes/accessors/AccessorsUtils.js +16 -1
- package/examples/jsm/nodes/accessors/BitangentNode.js +7 -83
- package/examples/jsm/nodes/accessors/BufferNode.js +6 -0
- package/examples/jsm/nodes/accessors/CameraNode.js +12 -119
- package/examples/jsm/nodes/accessors/ClippingNode.js +3 -2
- package/examples/jsm/nodes/accessors/MaterialNode.js +109 -3
- package/examples/jsm/nodes/accessors/ModelNode.js +3 -0
- package/examples/jsm/nodes/accessors/NormalNode.js +9 -101
- package/examples/jsm/nodes/accessors/PositionNode.js +6 -100
- package/examples/jsm/nodes/accessors/ReferenceNode.js +6 -0
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +2 -31
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +9 -0
- package/examples/jsm/nodes/accessors/{TextureStoreNode.js → StorageTextureNode.js} +19 -6
- package/examples/jsm/nodes/accessors/TangentNode.js +11 -97
- package/examples/jsm/nodes/accessors/Texture3DNode.js +100 -0
- package/examples/jsm/nodes/accessors/TextureNode.js +21 -3
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +1 -1
- package/examples/jsm/nodes/accessors/UVNode.js +2 -46
- package/examples/jsm/nodes/code/FunctionNode.js +0 -8
- package/examples/jsm/nodes/core/AttributeNode.js +15 -3
- package/examples/jsm/nodes/core/ContextNode.js +6 -0
- package/examples/jsm/nodes/core/Node.js +23 -2
- package/examples/jsm/nodes/core/NodeBuilder.js +25 -18
- package/examples/jsm/nodes/core/NodeKeywords.js +1 -1
- package/examples/jsm/nodes/core/OutputStructNode.js +3 -6
- package/examples/jsm/nodes/core/PropertyNode.js +11 -0
- package/examples/jsm/nodes/core/VaryingNode.js +40 -9
- package/examples/jsm/nodes/display/AfterImageNode.js +14 -2
- package/examples/jsm/nodes/display/BumpMapNode.js +7 -26
- package/examples/jsm/nodes/display/FrontFacingNode.js +13 -0
- package/examples/jsm/nodes/display/PassNode.js +3 -1
- package/examples/jsm/nodes/display/ViewportDepthNode.js +1 -1
- package/examples/jsm/nodes/display/ViewportNode.js +5 -3
- package/examples/jsm/nodes/display/ViewportTextureNode.js +4 -1
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +26 -7
- package/examples/jsm/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -3
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
- package/examples/jsm/nodes/functions/PhongLightingModel.js +1 -1
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +210 -12
- package/examples/jsm/nodes/functions/ShadowMaskModel.js +31 -0
- package/examples/jsm/nodes/functions/ToonLightingModel.js +49 -0
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +20 -5
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +11 -2
- package/examples/jsm/nodes/lighting/IrradianceNode.js +24 -0
- package/examples/jsm/nodes/lighting/LightsNode.js +28 -1
- package/examples/jsm/nodes/lighting/PointLightNode.js +2 -1
- package/examples/jsm/nodes/lighting/SpotLightNode.js +2 -1
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +11 -7
- package/examples/jsm/nodes/materials/Materials.js +4 -0
- package/examples/jsm/nodes/materials/MeshMatcapNodeMaterial.js +52 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -2
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +94 -6
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +11 -4
- package/examples/jsm/nodes/materials/MeshToonNodeMaterial.js +34 -0
- package/examples/jsm/nodes/materials/NodeMaterial.js +43 -45
- package/examples/jsm/nodes/materials/ShadowNodeMaterial.js +34 -0
- package/examples/jsm/nodes/materials/VolumeNodeMaterial.js +106 -0
- package/examples/jsm/nodes/math/HashNode.js +2 -2
- package/examples/jsm/nodes/pmrem/PMREMUtils.js +1 -1
- package/examples/jsm/nodes/shadernode/ShaderNode.js +57 -41
- package/examples/jsm/nodes/utils/ArrayElementNode.js +1 -1
- package/examples/jsm/nodes/utils/MatcapUVNode.js +1 -1
- package/examples/jsm/nodes/utils/TimerNode.js +1 -1
- package/examples/jsm/objects/Lensflare.js +2 -2
- package/examples/jsm/physics/JoltPhysics.js +281 -0
- package/examples/jsm/postprocessing/RenderPass.js +1 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +193 -0
- package/examples/jsm/renderers/CSS2DRenderer.js +25 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +24 -3
- package/examples/jsm/renderers/common/Attributes.js +2 -0
- package/examples/jsm/renderers/common/Background.js +3 -3
- package/examples/jsm/renderers/common/Bindings.js +17 -0
- package/examples/jsm/renderers/common/ChainMap.js +18 -48
- package/examples/jsm/renderers/common/ClippingContext.js +5 -5
- package/examples/jsm/renderers/common/Pipelines.js +2 -2
- package/examples/jsm/renderers/common/RenderBundle.js +18 -0
- package/examples/jsm/renderers/common/RenderBundles.js +38 -0
- package/examples/jsm/renderers/common/RenderList.js +10 -1
- package/examples/jsm/renderers/common/RenderObject.js +49 -1
- package/examples/jsm/renderers/common/Renderer.js +268 -25
- package/examples/jsm/renderers/common/Textures.js +1 -1
- package/examples/jsm/renderers/common/Uniform.js +1 -1
- package/examples/jsm/renderers/common/extras/PMREMGenerator.js +13 -17
- package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +18 -4
- package/examples/jsm/renderers/common/nodes/NodeSampler.js +6 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +31 -47
- package/examples/jsm/renderers/webgl/WebGLBackend.js +7 -21
- package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +5 -1
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +23 -5
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +114 -13
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +3 -21
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +80 -46
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +85 -12
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +10 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUConstants.js +6 -0
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +62 -19
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +62 -3
- package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +1 -1
- package/examples/jsm/utils/BufferGeometryUtils.js +18 -16
- package/examples/jsm/utils/GPUStatsPanel.js +2 -0
- package/examples/jsm/utils/SceneUtils.js +60 -1
- package/examples/jsm/utils/SortUtils.js +8 -5
- package/examples/jsm/webxr/OculusHandModel.js +3 -2
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -2
- package/package.json +3 -2
- package/src/animation/tracks/BooleanKeyframeTrack.js +10 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -2
- package/src/animation/tracks/StringKeyframeTrack.js +10 -1
- package/src/constants.js +1 -1
- package/src/core/Object3D.js +2 -0
- package/src/core/Raycaster.js +6 -2
- package/src/core/RenderTarget.js +8 -0
- package/src/extras/PMREMGenerator.js +12 -11
- package/src/loaders/FileLoader.js +5 -1
- package/src/loaders/LoaderUtils.js +3 -1
- package/src/loaders/MaterialLoader.js +1 -0
- package/src/loaders/ObjectLoader.js +1 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshPhysicalMaterial.js +20 -0
- package/src/objects/BatchedMesh.js +114 -1
- package/src/objects/Line.js +66 -43
- package/src/renderers/WebGLRenderer.js +371 -109
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +15 -0
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +9 -1
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +8 -22
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +1 -0
- package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +3 -14
- package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +10 -31
- package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +3 -23
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +17 -9
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +47 -13
- package/src/renderers/shaders/ShaderChunk.js +0 -2
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
- package/src/renderers/shaders/ShaderLib.js +1 -0
- package/src/renderers/webgl/WebGLBackground.js +24 -3
- package/src/renderers/webgl/WebGLBufferRenderer.js +36 -0
- package/src/renderers/webgl/WebGLCapabilities.js +33 -1
- package/src/renderers/webgl/WebGLExtensions.js +3 -1
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +36 -0
- package/src/renderers/webgl/WebGLLights.js +9 -12
- package/src/renderers/webgl/WebGLMaterials.js +7 -5
- package/src/renderers/webgl/WebGLMorphtargets.js +1 -2
- package/src/renderers/webgl/WebGLProgram.js +5 -36
- package/src/renderers/webgl/WebGLPrograms.js +19 -14
- package/src/renderers/webgl/WebGLRenderStates.js +8 -4
- package/src/renderers/webgl/WebGLShadowMap.js +25 -25
- package/src/renderers/webgl/WebGLTextures.js +206 -129
- package/src/renderers/webgl/WebGLUtils.js +3 -21
- package/src/renderers/webxr/WebXRDepthSensing.js +3 -3
- package/src/renderers/webxr/WebXRManager.js +8 -6
- package/src/textures/CompressedArrayTexture.js +14 -0
- package/src/textures/DataArrayTexture.js +14 -0
- package/src/textures/DepthTexture.js +1 -3
- package/src/utils.js +30 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -318
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +0 -26
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -792
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +0 -51
- package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
|
@@ -114,22 +114,42 @@ class CSS2DRenderer {
|
|
|
114
114
|
|
|
115
115
|
};
|
|
116
116
|
|
|
117
|
+
function hideObject( object ) {
|
|
118
|
+
|
|
119
|
+
if ( object.isCSS2DObject ) object.element.style.display = 'none';
|
|
120
|
+
|
|
121
|
+
for ( let i = 0, l = object.children.length; i < l; i ++ ) {
|
|
122
|
+
|
|
123
|
+
hideObject( object.children[ i ] );
|
|
124
|
+
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
}
|
|
128
|
+
|
|
117
129
|
function renderObject( object, scene, camera ) {
|
|
118
130
|
|
|
131
|
+
if ( object.visible === false ) {
|
|
132
|
+
|
|
133
|
+
hideObject( object );
|
|
134
|
+
|
|
135
|
+
return;
|
|
136
|
+
|
|
137
|
+
}
|
|
138
|
+
|
|
119
139
|
if ( object.isCSS2DObject ) {
|
|
120
140
|
|
|
121
141
|
_vector.setFromMatrixPosition( object.matrixWorld );
|
|
122
142
|
_vector.applyMatrix4( _viewProjectionMatrix );
|
|
123
143
|
|
|
124
|
-
const visible = (
|
|
125
|
-
|
|
144
|
+
const visible = ( _vector.z >= - 1 && _vector.z <= 1 ) && ( object.layers.test( camera.layers ) === true );
|
|
145
|
+
|
|
146
|
+
const element = object.element;
|
|
147
|
+
element.style.display = visible === true ? '' : 'none';
|
|
126
148
|
|
|
127
149
|
if ( visible === true ) {
|
|
128
150
|
|
|
129
151
|
object.onBeforeRender( _this, scene, camera );
|
|
130
152
|
|
|
131
|
-
const element = object.element;
|
|
132
|
-
|
|
133
153
|
element.style.transform = 'translate(' + ( - 100 * object.center.x ) + '%,' + ( - 100 * object.center.y ) + '%)' + 'translate(' + ( _vector.x * _widthHalf + _widthHalf ) + 'px,' + ( - _vector.y * _heightHalf + _heightHalf ) + 'px)';
|
|
134
154
|
|
|
135
155
|
if ( element.parentNode !== domElement ) {
|
|
@@ -171,7 +191,7 @@ class CSS2DRenderer {
|
|
|
171
191
|
|
|
172
192
|
const result = [];
|
|
173
193
|
|
|
174
|
-
scene.
|
|
194
|
+
scene.traverseVisible( function ( object ) {
|
|
175
195
|
|
|
176
196
|
if ( object.isCSS2DObject ) result.push( object );
|
|
177
197
|
|
|
@@ -251,12 +251,34 @@ class CSS3DRenderer {
|
|
|
251
251
|
|
|
252
252
|
}
|
|
253
253
|
|
|
254
|
+
function hideObject( object ) {
|
|
255
|
+
|
|
256
|
+
if ( object.isCSS3DObject ) object.element.style.display = 'none';
|
|
257
|
+
|
|
258
|
+
for ( let i = 0, l = object.children.length; i < l; i ++ ) {
|
|
259
|
+
|
|
260
|
+
hideObject( object.children[ i ] );
|
|
261
|
+
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
}
|
|
265
|
+
|
|
254
266
|
function renderObject( object, scene, camera, cameraCSSMatrix ) {
|
|
255
267
|
|
|
268
|
+
if ( object.visible === false ) {
|
|
269
|
+
|
|
270
|
+
hideObject( object );
|
|
271
|
+
|
|
272
|
+
return;
|
|
273
|
+
|
|
274
|
+
}
|
|
275
|
+
|
|
256
276
|
if ( object.isCSS3DObject ) {
|
|
257
277
|
|
|
258
|
-
const visible = ( object.
|
|
259
|
-
|
|
278
|
+
const visible = ( object.layers.test( camera.layers ) === true );
|
|
279
|
+
|
|
280
|
+
const element = object.element;
|
|
281
|
+
element.style.display = visible === true ? '' : 'none';
|
|
260
282
|
|
|
261
283
|
if ( visible === true ) {
|
|
262
284
|
|
|
@@ -290,7 +312,6 @@ class CSS3DRenderer {
|
|
|
290
312
|
|
|
291
313
|
}
|
|
292
314
|
|
|
293
|
-
const element = object.element;
|
|
294
315
|
const cachedObject = cache.objects.get( object );
|
|
295
316
|
|
|
296
317
|
if ( cachedObject === undefined || cachedObject.style !== style ) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import DataMap from './DataMap.js';
|
|
2
2
|
import Color4 from './Color4.js';
|
|
3
|
-
import { Mesh, SphereGeometry, BackSide } from 'three';
|
|
3
|
+
import { Mesh, SphereGeometry, BackSide, LinearSRGBColorSpace } from 'three';
|
|
4
4
|
import { vec4, context, normalWorld, backgroundBlurriness, backgroundIntensity, NodeMaterial, modelViewProjection } from '../../nodes/Nodes.js';
|
|
5
5
|
|
|
6
6
|
const _clearColor = new Color4();
|
|
@@ -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,
|
|
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,
|
|
37
|
+
background.getRGB( _clearColor, LinearSRGBColorSpace );
|
|
38
38
|
_clearColor.a = 1;
|
|
39
39
|
|
|
40
40
|
forceClear = true;
|
|
@@ -122,6 +122,10 @@ class Bindings extends DataMap {
|
|
|
122
122
|
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
+
} else if ( binding.isSampler ) {
|
|
126
|
+
|
|
127
|
+
binding.update();
|
|
128
|
+
|
|
125
129
|
} else if ( binding.isSampledTexture ) {
|
|
126
130
|
|
|
127
131
|
const texture = binding.texture;
|
|
@@ -136,6 +140,19 @@ class Bindings extends DataMap {
|
|
|
136
140
|
|
|
137
141
|
}
|
|
138
142
|
|
|
143
|
+
const textureData = backend.get( binding.texture );
|
|
144
|
+
|
|
145
|
+
if ( backend.isWebGPUBackend === true && textureData.texture === undefined && textureData.externalTexture === undefined ) {
|
|
146
|
+
|
|
147
|
+
// TODO: Remove this once we found why updated === false isn't bound to a texture in the WebGPU backend
|
|
148
|
+
console.error( 'Bindings._update: binding should be available:', binding, updated, binding.texture, binding.textureNode.value );
|
|
149
|
+
|
|
150
|
+
this.textures.updateTexture( binding.texture );
|
|
151
|
+
needsBindingsUpdate = true;
|
|
152
|
+
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
|
|
139
156
|
if ( texture.isStorageTexture === true ) {
|
|
140
157
|
|
|
141
158
|
const textureData = this.get( texture );
|
|
@@ -8,81 +8,51 @@ export default class ChainMap {
|
|
|
8
8
|
|
|
9
9
|
get( keys ) {
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
let map = this.weakMap;
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
for ( let i = 0; i < keys.length; i ++ ) {
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
map = map.get( keys[ i ] );
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
if ( map === undefined ) return undefined;
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
return map.get( keys[ keys.length - 1 ] );
|
|
24
|
-
|
|
25
|
-
} else {
|
|
26
|
-
|
|
27
|
-
return super.get( keys );
|
|
17
|
+
if ( map === undefined ) return undefined;
|
|
28
18
|
|
|
29
19
|
}
|
|
30
20
|
|
|
21
|
+
return map.get( keys[ keys.length - 1 ] );
|
|
22
|
+
|
|
31
23
|
}
|
|
32
24
|
|
|
33
25
|
set( keys, value ) {
|
|
34
26
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
let map = this.weakMap;
|
|
38
|
-
|
|
39
|
-
for ( let i = 0; i < keys.length; i ++ ) {
|
|
40
|
-
|
|
41
|
-
const key = keys[ i ];
|
|
42
|
-
|
|
43
|
-
if ( map.has( key ) === false ) map.set( key, new WeakMap() );
|
|
27
|
+
let map = this.weakMap;
|
|
44
28
|
|
|
45
|
-
|
|
29
|
+
for ( let i = 0; i < keys.length; i ++ ) {
|
|
46
30
|
|
|
47
|
-
|
|
31
|
+
const key = keys[ i ];
|
|
48
32
|
|
|
49
|
-
|
|
33
|
+
if ( map.has( key ) === false ) map.set( key, new WeakMap() );
|
|
50
34
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
return super.set( keys, value );
|
|
35
|
+
map = map.get( key );
|
|
54
36
|
|
|
55
37
|
}
|
|
56
38
|
|
|
39
|
+
return map.set( keys[ keys.length - 1 ], value );
|
|
40
|
+
|
|
57
41
|
}
|
|
58
42
|
|
|
59
43
|
delete( keys ) {
|
|
60
44
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
let map = this.weakMap;
|
|
64
|
-
|
|
65
|
-
for ( let i = 0; i < keys.length; i ++ ) {
|
|
66
|
-
|
|
67
|
-
map = map.get( keys[ i ] );
|
|
45
|
+
let map = this.weakMap;
|
|
68
46
|
|
|
69
|
-
|
|
47
|
+
for ( let i = 0; i < keys.length; i ++ ) {
|
|
70
48
|
|
|
71
|
-
|
|
49
|
+
map = map.get( keys[ i ] );
|
|
72
50
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
} else {
|
|
76
|
-
|
|
77
|
-
return super.delete( keys );
|
|
51
|
+
if ( map === undefined ) return false;
|
|
78
52
|
|
|
79
53
|
}
|
|
80
54
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
dispose() {
|
|
84
|
-
|
|
85
|
-
this.weakMap.clear();
|
|
55
|
+
return map.delete( keys[ keys.length - 1 ] );
|
|
86
56
|
|
|
87
57
|
}
|
|
88
58
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Matrix3, Plane, Vector4 } from 'three';
|
|
2
2
|
|
|
3
3
|
const _plane = new Plane();
|
|
4
|
-
const _viewNormalMatrix = new Matrix3();
|
|
5
4
|
|
|
6
5
|
let _clippingContextVersion = 0;
|
|
7
6
|
|
|
@@ -20,6 +19,7 @@ class ClippingContext {
|
|
|
20
19
|
this.planes = [];
|
|
21
20
|
|
|
22
21
|
this.parentVersion = 0;
|
|
22
|
+
this.viewNormalMatrix = new Matrix3();
|
|
23
23
|
|
|
24
24
|
}
|
|
25
25
|
|
|
@@ -30,7 +30,7 @@ class ClippingContext {
|
|
|
30
30
|
|
|
31
31
|
for ( let i = 0; i < l; i ++ ) {
|
|
32
32
|
|
|
33
|
-
_plane.copy( source[ i ] ).applyMatrix4( this.viewMatrix,
|
|
33
|
+
_plane.copy( source[ i ] ).applyMatrix4( this.viewMatrix, this.viewNormalMatrix );
|
|
34
34
|
|
|
35
35
|
const v = planes[ offset + i ];
|
|
36
36
|
const normal = _plane.normal;
|
|
@@ -49,7 +49,7 @@ class ClippingContext {
|
|
|
49
49
|
const rendererClippingPlanes = renderer.clippingPlanes;
|
|
50
50
|
this.viewMatrix = camera.matrixWorldInverse;
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
this.viewNormalMatrix.getNormalMatrix( this.viewMatrix );
|
|
53
53
|
|
|
54
54
|
let update = false;
|
|
55
55
|
|
|
@@ -101,12 +101,12 @@ class ClippingContext {
|
|
|
101
101
|
|
|
102
102
|
if ( this !== parent && parent.version !== this.parentVersion ) {
|
|
103
103
|
|
|
104
|
-
this.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;
|
|
108
108
|
this.viewMatrix = parent.viewMatrix;
|
|
109
|
-
|
|
109
|
+
this.viewNormalMatrix = parent.viewNormalMatrix;
|
|
110
110
|
|
|
111
111
|
update = true;
|
|
112
112
|
|
|
@@ -67,7 +67,7 @@ class Pipelines extends DataMap {
|
|
|
67
67
|
|
|
68
68
|
if ( pipeline === undefined ) {
|
|
69
69
|
|
|
70
|
-
if ( previousPipeline && previousPipeline.usedTimes === 0 ) this._releasePipeline(
|
|
70
|
+
if ( previousPipeline && previousPipeline.usedTimes === 0 ) this._releasePipeline( previousPipeline );
|
|
71
71
|
|
|
72
72
|
pipeline = this._getComputePipeline( computeNode, stageCompute, cacheKey, bindings );
|
|
73
73
|
|
|
@@ -205,7 +205,7 @@ class Pipelines extends DataMap {
|
|
|
205
205
|
|
|
206
206
|
}
|
|
207
207
|
|
|
208
|
-
super.delete( object );
|
|
208
|
+
return super.delete( object );
|
|
209
209
|
|
|
210
210
|
}
|
|
211
211
|
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import ChainMap from './ChainMap.js';
|
|
2
|
+
import RenderBundle from './RenderBundle.js';
|
|
3
|
+
|
|
4
|
+
class RenderBundles {
|
|
5
|
+
|
|
6
|
+
constructor() {
|
|
7
|
+
|
|
8
|
+
this.lists = new ChainMap();
|
|
9
|
+
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
get( scene, camera ) {
|
|
13
|
+
|
|
14
|
+
const lists = this.lists;
|
|
15
|
+
const keys = [ scene, camera ];
|
|
16
|
+
|
|
17
|
+
let list = lists.get( keys );
|
|
18
|
+
|
|
19
|
+
if ( list === undefined ) {
|
|
20
|
+
|
|
21
|
+
list = new RenderBundle( scene, camera );
|
|
22
|
+
lists.set( keys, list );
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return list;
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
dispose() {
|
|
31
|
+
|
|
32
|
+
this.lists = new ChainMap();
|
|
33
|
+
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export default RenderBundles;
|
|
@@ -57,6 +57,7 @@ class RenderList {
|
|
|
57
57
|
|
|
58
58
|
this.opaque = [];
|
|
59
59
|
this.transparent = [];
|
|
60
|
+
this.bundles = [];
|
|
60
61
|
|
|
61
62
|
this.lightsNode = new LightsNode( [] );
|
|
62
63
|
this.lightsArray = [];
|
|
@@ -71,6 +72,8 @@ class RenderList {
|
|
|
71
72
|
|
|
72
73
|
this.opaque.length = 0;
|
|
73
74
|
this.transparent.length = 0;
|
|
75
|
+
this.bundles.length = 0;
|
|
76
|
+
|
|
74
77
|
this.lightsArray.length = 0;
|
|
75
78
|
|
|
76
79
|
this.occlusionQueryCount = 0;
|
|
@@ -123,7 +126,7 @@ class RenderList {
|
|
|
123
126
|
|
|
124
127
|
if ( object.occlusionTest === true ) this.occlusionQueryCount ++;
|
|
125
128
|
|
|
126
|
-
( material.transparent === true ? this.transparent : this.opaque ).push( renderItem );
|
|
129
|
+
( material.transparent === true || material.transmission > 0 ? this.transparent : this.opaque ).push( renderItem );
|
|
127
130
|
|
|
128
131
|
}
|
|
129
132
|
|
|
@@ -135,6 +138,12 @@ class RenderList {
|
|
|
135
138
|
|
|
136
139
|
}
|
|
137
140
|
|
|
141
|
+
pushBundle( group ) {
|
|
142
|
+
|
|
143
|
+
this.bundles.push( group );
|
|
144
|
+
|
|
145
|
+
}
|
|
146
|
+
|
|
138
147
|
pushLight( light ) {
|
|
139
148
|
|
|
140
149
|
this.lightsArray.push( light );
|
|
@@ -2,6 +2,40 @@ 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;
|
|
@@ -153,7 +189,7 @@ export default class RenderObject {
|
|
|
153
189
|
|
|
154
190
|
let cacheKey = material.customProgramCacheKey();
|
|
155
191
|
|
|
156
|
-
for ( const property
|
|
192
|
+
for ( const property of getKeys( material ) ) {
|
|
157
193
|
|
|
158
194
|
if ( /^(is[A-Z]|_)|^(visible|version|uuid|name|opacity|userData)$/.test( property ) ) continue;
|
|
159
195
|
|
|
@@ -186,6 +222,18 @@ export default class RenderObject {
|
|
|
186
222
|
|
|
187
223
|
}
|
|
188
224
|
|
|
225
|
+
if ( object.isBatchedMesh ) {
|
|
226
|
+
|
|
227
|
+
cacheKey += object._matricesTexture.uuid + ',';
|
|
228
|
+
|
|
229
|
+
if ( object._colorsTexture !== null ) {
|
|
230
|
+
|
|
231
|
+
cacheKey += object._colorsTexture.uuid + ',';
|
|
232
|
+
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
}
|
|
236
|
+
|
|
189
237
|
return cacheKey;
|
|
190
238
|
|
|
191
239
|
}
|