super-three 0.161.0 → 0.163.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/build/three.cjs +822 -1332
- package/build/three.module.js +820 -1328
- package/build/three.module.min.js +1 -1
- package/examples/jsm/controls/DragControls.js +91 -30
- package/examples/jsm/controls/OrbitControls.js +32 -6
- package/examples/jsm/controls/TransformControls.js +9 -9
- package/examples/jsm/exporters/GLTFExporter.js +30 -3
- package/examples/jsm/exporters/USDZExporter.js +15 -0
- package/examples/jsm/geometries/TextGeometry.js +10 -2
- package/examples/jsm/interactive/HTMLMesh.js +7 -9
- package/examples/jsm/interactive/InteractiveGroup.js +15 -25
- package/examples/jsm/libs/fflate.module.js +694 -496
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +1 -8723
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +1 -8734
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/libs/tween.module.js +32 -14
- package/examples/jsm/lines/LineMaterial.js +0 -2
- package/examples/jsm/loaders/3DMLoader.js +13 -21
- package/examples/jsm/loaders/3MFLoader.js +2 -0
- package/examples/jsm/loaders/EXRLoader.js +89 -19
- package/examples/jsm/loaders/FBXLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +6 -0
- package/examples/jsm/loaders/KTX2Loader.js +2 -6
- package/examples/jsm/loaders/LUT3dlLoader.js +0 -15
- package/examples/jsm/loaders/LUTCubeLoader.js +0 -14
- package/examples/jsm/loaders/LUTImageLoader.js +0 -14
- package/examples/jsm/loaders/RGBMLoader.js +16 -0
- package/examples/jsm/loaders/VOXLoader.js +9 -2
- package/examples/jsm/loaders/VRMLLoader.js +6 -2
- package/examples/jsm/misc/GPUComputationRenderer.js +0 -6
- package/examples/jsm/misc/ProgressiveLightMap.js +1 -0
- package/examples/jsm/nodes/Nodes.js +15 -8
- package/examples/jsm/nodes/accessors/AccessorsUtils.js +10 -0
- package/examples/jsm/nodes/accessors/BatchNode.js +78 -0
- package/examples/jsm/nodes/accessors/ClippingNode.js +144 -0
- package/examples/jsm/nodes/accessors/InstanceNode.js +25 -2
- package/examples/jsm/nodes/accessors/MaterialNode.js +2 -2
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +2 -12
- package/examples/jsm/nodes/accessors/MorphNode.js +20 -10
- package/examples/jsm/nodes/accessors/NormalNode.js +12 -2
- package/examples/jsm/nodes/accessors/ReferenceNode.js +87 -29
- package/examples/jsm/nodes/accessors/RendererReferenceNode.js +29 -0
- package/examples/jsm/nodes/accessors/SkinningNode.js +31 -10
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +18 -0
- package/examples/jsm/nodes/accessors/TangentNode.js +8 -2
- package/examples/jsm/nodes/accessors/TextureNode.js +30 -7
- package/examples/jsm/nodes/accessors/UniformsNode.js +140 -0
- package/examples/jsm/nodes/code/CodeNode.js +6 -0
- package/examples/jsm/nodes/core/AssignNode.js +68 -12
- package/examples/jsm/nodes/core/Node.js +67 -6
- package/examples/jsm/nodes/core/NodeBuilder.js +23 -24
- package/examples/jsm/nodes/core/NodeFrame.js +8 -8
- package/examples/jsm/nodes/core/NodeUtils.js +2 -2
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- package/examples/jsm/nodes/core/UniformNode.js +20 -0
- package/examples/jsm/nodes/display/BlendModeNode.js +30 -1
- package/examples/jsm/nodes/display/NormalMapNode.js +3 -5
- package/examples/jsm/nodes/display/PassNode.js +17 -1
- package/examples/jsm/nodes/display/ToneMappingNode.js +8 -4
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +6 -0
- package/examples/jsm/nodes/fog/FogExp2Node.js +4 -5
- package/examples/jsm/nodes/fog/FogNode.js +13 -3
- package/examples/jsm/nodes/fog/FogRangeNode.js +4 -3
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +12 -69
- package/examples/jsm/nodes/materials/NodeMaterial.js +70 -17
- package/examples/jsm/nodes/math/CondNode.js +42 -7
- package/examples/jsm/nodes/math/MathNode.js +20 -0
- package/examples/jsm/nodes/pmrem/PMREMNode.js +193 -0
- package/examples/jsm/nodes/pmrem/PMREMUtils.js +288 -0
- package/examples/jsm/nodes/shadernode/ShaderNode.js +1 -1
- package/examples/jsm/nodes/utils/ArrayElementNode.js +0 -6
- package/examples/jsm/nodes/utils/EquirectUVNode.js +1 -1
- package/examples/jsm/nodes/utils/LoopNode.js +2 -0
- package/examples/jsm/nodes/utils/StorageArrayElementNode.js +91 -0
- package/examples/jsm/objects/QuadMesh.js +7 -23
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/GlitchPass.js +0 -3
- package/examples/jsm/postprocessing/LUTPass.js +5 -71
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +0 -1
- package/examples/jsm/postprocessing/SSAOPass.js +0 -3
- package/examples/jsm/renderers/common/Animation.js +3 -0
- package/examples/jsm/renderers/common/Background.js +3 -3
- package/examples/jsm/renderers/common/ClippingContext.js +165 -0
- package/examples/jsm/renderers/common/Info.js +11 -19
- package/examples/jsm/renderers/common/PostProcessing.js +12 -4
- package/examples/jsm/renderers/common/RenderContext.js +3 -1
- package/examples/jsm/renderers/common/RenderContexts.js +2 -13
- package/examples/jsm/renderers/common/RenderObject.js +46 -3
- package/examples/jsm/renderers/common/RenderObjects.js +2 -0
- package/examples/jsm/renderers/common/Renderer.js +113 -39
- package/examples/jsm/renderers/common/StorageBufferAttribute.js +2 -2
- package/examples/jsm/renderers/common/StorageInstancedBufferAttribute.js +17 -0
- package/examples/jsm/renderers/common/Textures.js +3 -13
- package/examples/jsm/renderers/common/UniformsGroup.js +6 -4
- package/examples/jsm/renderers/common/extras/PMREMGenerator.js +777 -0
- package/examples/jsm/renderers/common/nodes/NodeStorageBuffer.js +23 -0
- package/examples/jsm/renderers/common/nodes/NodeUniformBuffer.js +23 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +6 -18
- package/examples/jsm/renderers/webgl/WebGLBackend.js +174 -30
- package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +141 -0
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +136 -11
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +8 -2
- package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +1 -0
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +90 -0
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +3 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -2
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +67 -37
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +20 -43
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +32 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +94 -20
- package/examples/jsm/shaders/OutputShader.js +4 -0
- package/examples/jsm/utils/GPUStatsPanel.js +10 -45
- package/examples/jsm/utils/SkeletonUtils.js +14 -3
- package/examples/jsm/utils/TextureUtils.js +1 -1
- package/examples/jsm/webxr/VRButton.js +13 -5
- package/examples/jsm/webxr/XRButton.js +0 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +8 -0
- package/package.json +4 -3
- package/src/Three.Legacy.js +20 -0
- package/src/Three.js +0 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/constants.js +4 -7
- package/src/core/BufferAttribute.js +0 -11
- package/src/core/BufferGeometry.js +23 -29
- package/src/core/Object3D.js +21 -7
- package/src/core/Raycaster.js +18 -4
- package/src/core/RenderTarget.js +44 -21
- package/src/extras/PMREMGenerator.js +11 -0
- package/src/extras/curves/EllipseCurve.js +2 -2
- package/src/helpers/SpotLightHelper.js +18 -1
- package/src/loaders/DataTextureLoader.js +0 -4
- package/src/loaders/MaterialLoader.js +1 -0
- package/src/loaders/ObjectLoader.js +4 -1
- package/src/materials/Material.js +2 -1
- package/src/materials/MeshBasicMaterial.js +3 -0
- package/src/materials/MeshLambertMaterial.js +3 -0
- package/src/materials/MeshPhongMaterial.js +3 -0
- package/src/materials/MeshStandardMaterial.js +3 -0
- package/src/materials/ShaderMaterial.js +0 -4
- package/src/math/Quaternion.js +13 -12
- package/src/math/Spherical.js +4 -5
- package/src/math/Vector3.js +7 -7
- package/src/objects/BatchedMesh.js +4 -3
- package/src/objects/InstancedMesh.js +63 -0
- package/src/objects/Mesh.js +0 -1
- package/src/renderers/WebGLCubeRenderTarget.js +1 -10
- package/src/renderers/WebGLRenderer.js +70 -136
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -0
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +2 -10
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +2 -16
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +14 -0
- package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +11 -2
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +32 -22
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +23 -0
- package/src/renderers/shaders/ShaderChunk.js +2 -0
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +3 -2
- 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/linedashed.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/points.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib.js +3 -2
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +10 -1
- package/src/renderers/webgl/WebGLAttributes.js +6 -33
- package/src/renderers/webgl/WebGLBackground.js +18 -0
- package/src/renderers/webgl/WebGLBindingStates.js +14 -51
- package/src/renderers/webgl/WebGLBufferRenderer.js +3 -25
- package/src/renderers/webgl/WebGLCapabilities.js +2 -12
- package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
- package/src/renderers/webgl/WebGLExtensions.js +4 -19
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +3 -25
- package/src/renderers/webgl/WebGLLights.js +6 -32
- package/src/renderers/webgl/WebGLMaterials.js +26 -4
- package/src/renderers/webgl/WebGLMorphtargets.js +79 -210
- package/src/renderers/webgl/WebGLProgram.js +30 -48
- package/src/renderers/webgl/WebGLPrograms.js +5 -14
- package/src/renderers/webgl/WebGLRenderStates.js +8 -6
- package/src/renderers/webgl/WebGLState.js +21 -75
- package/src/renderers/webgl/WebGLTextures.js +143 -275
- package/src/renderers/webgl/WebGLUniformsGroups.js +1 -1
- package/src/renderers/webgl/WebGLUtils.js +6 -57
- package/src/renderers/webxr/WebXRDepthSensing.js +2 -3
- package/src/renderers/webxr/WebXRManager.js +2 -2
- package/src/scenes/Scene.js +14 -0
- package/src/textures/Texture.js +6 -24
- package/examples/jsm/nodes/core/ArrayUniformNode.js +0 -26
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
- package/src/renderers/WebGL1Renderer.js +0 -7
- package/src/renderers/WebGLMultipleRenderTargets.js +0 -82
|
@@ -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
56
|
getTextureLevel: () => backgroundBlurriness
|
|
57
|
-
} )
|
|
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
|
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { Matrix3, Plane, Vector4 } from 'three';
|
|
2
|
+
|
|
3
|
+
const _plane = new Plane();
|
|
4
|
+
const _viewNormalMatrix = new Matrix3();
|
|
5
|
+
|
|
6
|
+
let _clippingContextVersion = 0;
|
|
7
|
+
|
|
8
|
+
class ClippingContext {
|
|
9
|
+
|
|
10
|
+
constructor() {
|
|
11
|
+
|
|
12
|
+
this.version = ++ _clippingContextVersion;
|
|
13
|
+
|
|
14
|
+
this.globalClippingCount = 0;
|
|
15
|
+
|
|
16
|
+
this.localClippingCount = 0;
|
|
17
|
+
this.localClippingEnabled = false;
|
|
18
|
+
this.localClipIntersection = false;
|
|
19
|
+
|
|
20
|
+
this.planes = [];
|
|
21
|
+
|
|
22
|
+
this.parentVersion = 0;
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
projectPlanes( source, offset ) {
|
|
27
|
+
|
|
28
|
+
const l = source.length;
|
|
29
|
+
const planes = this.planes;
|
|
30
|
+
|
|
31
|
+
for ( let i = 0; i < l; i ++ ) {
|
|
32
|
+
|
|
33
|
+
_plane.copy( source[ i ] ).applyMatrix4( this.viewMatrix, _viewNormalMatrix );
|
|
34
|
+
|
|
35
|
+
const v = planes[ offset + i ];
|
|
36
|
+
const normal = _plane.normal;
|
|
37
|
+
|
|
38
|
+
v.x = - normal.x;
|
|
39
|
+
v.y = - normal.y;
|
|
40
|
+
v.z = - normal.z;
|
|
41
|
+
v.w = _plane.constant;
|
|
42
|
+
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
updateGlobal( renderer, camera ) {
|
|
48
|
+
|
|
49
|
+
const rendererClippingPlanes = renderer.clippingPlanes;
|
|
50
|
+
this.viewMatrix = camera.matrixWorldInverse;
|
|
51
|
+
|
|
52
|
+
_viewNormalMatrix.getNormalMatrix( this.viewMatrix );
|
|
53
|
+
|
|
54
|
+
let update = false;
|
|
55
|
+
|
|
56
|
+
if ( Array.isArray( rendererClippingPlanes ) && rendererClippingPlanes.length !== 0 ) {
|
|
57
|
+
|
|
58
|
+
const l = rendererClippingPlanes.length;
|
|
59
|
+
|
|
60
|
+
if ( l !== this.globalClippingCount ) {
|
|
61
|
+
|
|
62
|
+
const planes = [];
|
|
63
|
+
|
|
64
|
+
for ( let i = 0; i < l; i ++ ) {
|
|
65
|
+
|
|
66
|
+
planes.push( new Vector4() );
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
this.globalClippingCount = l;
|
|
71
|
+
this.planes = planes;
|
|
72
|
+
|
|
73
|
+
update = true;
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
this.projectPlanes( rendererClippingPlanes, 0 );
|
|
78
|
+
|
|
79
|
+
} else if ( this.globalClippingCount !== 0 ) {
|
|
80
|
+
|
|
81
|
+
this.globalClippingCount = 0;
|
|
82
|
+
this.planes = [];
|
|
83
|
+
update = true;
|
|
84
|
+
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if ( renderer.localClippingEnabled !== this.localClippingEnabled ) {
|
|
88
|
+
|
|
89
|
+
this.localClippingEnabled = renderer.localClippingEnabled;
|
|
90
|
+
update = true;
|
|
91
|
+
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if ( update ) this.version = _clippingContextVersion ++;
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
update( parent, material ) {
|
|
99
|
+
|
|
100
|
+
let update = false;
|
|
101
|
+
|
|
102
|
+
if ( this !== parent && parent.version !== this.parentVersion ) {
|
|
103
|
+
|
|
104
|
+
this.globalClippingCount = material.isShadowNodeMaterial ? 0 : parent.globalClippingCount;
|
|
105
|
+
this.localClippingEnabled = parent.localClippingEnabled;
|
|
106
|
+
this.planes = Array.from( parent.planes );
|
|
107
|
+
this.parentVersion = parent.version;
|
|
108
|
+
this.viewMatrix = parent.viewMatrix;
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
update = true;
|
|
112
|
+
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if ( this.localClippingEnabled ) {
|
|
116
|
+
|
|
117
|
+
const localClippingPlanes = material.clippingPlanes;
|
|
118
|
+
|
|
119
|
+
if ( ( Array.isArray( localClippingPlanes ) && localClippingPlanes.length !== 0 ) ) {
|
|
120
|
+
|
|
121
|
+
const l = localClippingPlanes.length;
|
|
122
|
+
const planes = this.planes;
|
|
123
|
+
const offset = this.globalClippingCount;
|
|
124
|
+
|
|
125
|
+
if ( update || l !== this.localClippingCount ) {
|
|
126
|
+
|
|
127
|
+
planes.length = offset + l;
|
|
128
|
+
|
|
129
|
+
for ( let i = 0; i < l; i ++ ) {
|
|
130
|
+
|
|
131
|
+
planes[ offset + i ] = new Vector4();
|
|
132
|
+
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
this.localClippingCount = l;
|
|
136
|
+
update = true;
|
|
137
|
+
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
this.projectPlanes( localClippingPlanes, offset );
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
} else if ( this.localClippingCount !== 0 ) {
|
|
144
|
+
|
|
145
|
+
this.localClippingCount = 0;
|
|
146
|
+
update = true;
|
|
147
|
+
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if ( this.localClipIntersection !== material.clipIntersection ) {
|
|
151
|
+
|
|
152
|
+
this.localClipIntersection = material.clipIntersection;
|
|
153
|
+
update = true;
|
|
154
|
+
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if ( update ) this.version = _clippingContextVersion ++;
|
|
160
|
+
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export default ClippingContext;
|
|
@@ -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
|
|
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
|
|
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
|
|
98
|
-
this.timestamp
|
|
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,
|
|
1
|
+
import { vec4, NodeMaterial } from '../../nodes/Nodes.js';
|
|
2
2
|
import QuadMesh from '../../objects/QuadMesh.js';
|
|
3
3
|
|
|
4
|
-
const quadMesh = new QuadMesh( new
|
|
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
|
-
|
|
15
|
+
render() {
|
|
16
16
|
|
|
17
17
|
quadMesh.material.fragmentNode = this.outputNode;
|
|
18
18
|
|
|
19
|
-
|
|
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 =
|
|
19
|
+
this.stencil = false;
|
|
20
20
|
this.clearStencil = true;
|
|
21
21
|
this.clearStencilValue = 1;
|
|
22
22
|
|
|
@@ -34,6 +34,8 @@ class RenderContext {
|
|
|
34
34
|
this.width = 0;
|
|
35
35
|
this.height = 0;
|
|
36
36
|
|
|
37
|
+
this.isRenderContext = true;
|
|
38
|
+
|
|
37
39
|
}
|
|
38
40
|
|
|
39
41
|
}
|
|
@@ -21,19 +21,8 @@ class RenderContexts {
|
|
|
21
21
|
|
|
22
22
|
} else {
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if ( renderTarget.isWebGLMultipleRenderTargets ) {
|
|
27
|
-
|
|
28
|
-
format = renderTarget.texture[ 0 ].format;
|
|
29
|
-
count = renderTarget.texture.length;
|
|
30
|
-
|
|
31
|
-
} else {
|
|
32
|
-
|
|
33
|
-
format = renderTarget.texture.format;
|
|
34
|
-
count = 1;
|
|
35
|
-
|
|
36
|
-
}
|
|
24
|
+
const format = renderTarget.texture.format;
|
|
25
|
+
const count = renderTarget.count;
|
|
37
26
|
|
|
38
27
|
attachmentState = `${ count }:${ format }:${ renderTarget.samples }:${ renderTarget.depthBuffer }:${ renderTarget.stencilBuffer }`;
|
|
39
28
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import ClippingContext from './ClippingContext.js';
|
|
2
|
+
|
|
1
3
|
let id = 0;
|
|
2
4
|
|
|
3
5
|
export default class RenderObject {
|
|
@@ -24,6 +26,10 @@ export default class RenderObject {
|
|
|
24
26
|
this.pipeline = null;
|
|
25
27
|
this.vertexBuffers = null;
|
|
26
28
|
|
|
29
|
+
this.updateClipping( renderContext.clippingContext );
|
|
30
|
+
|
|
31
|
+
this.clippingContextVersion = this.clippingContext.version;
|
|
32
|
+
|
|
27
33
|
this.initialNodesCacheKey = this.getNodesCacheKey();
|
|
28
34
|
this.initialCacheKey = this.getCacheKey();
|
|
29
35
|
|
|
@@ -44,6 +50,41 @@ export default class RenderObject {
|
|
|
44
50
|
|
|
45
51
|
}
|
|
46
52
|
|
|
53
|
+
updateClipping( parent ) {
|
|
54
|
+
|
|
55
|
+
const material = this.material;
|
|
56
|
+
|
|
57
|
+
let clippingContext = this.clippingContext;
|
|
58
|
+
|
|
59
|
+
if ( Array.isArray( material.clippingPlanes ) ) {
|
|
60
|
+
|
|
61
|
+
if ( clippingContext === parent || ! clippingContext ) {
|
|
62
|
+
|
|
63
|
+
clippingContext = new ClippingContext();
|
|
64
|
+
this.clippingContext = clippingContext;
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
clippingContext.update( parent, material );
|
|
69
|
+
|
|
70
|
+
} else if ( this.clippingContext !== parent ) {
|
|
71
|
+
|
|
72
|
+
this.clippingContext = parent;
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
get clippingNeedsUpdate() {
|
|
79
|
+
|
|
80
|
+
if ( this.clippingContext.version === this.clippingContextVersion ) return false;
|
|
81
|
+
|
|
82
|
+
this.clippingContextVersion = this.clippingContext.version;
|
|
83
|
+
|
|
84
|
+
return true;
|
|
85
|
+
|
|
86
|
+
}
|
|
87
|
+
|
|
47
88
|
getNodeBuilderState() {
|
|
48
89
|
|
|
49
90
|
return this._nodeBuilderState || ( this._nodeBuilderState = this._nodes.getForRender( this ) );
|
|
@@ -114,7 +155,7 @@ export default class RenderObject {
|
|
|
114
155
|
|
|
115
156
|
for ( const property in material ) {
|
|
116
157
|
|
|
117
|
-
if ( /^(is[A-Z])|^(visible|version|uuid|name|opacity|userData)$/.test( property ) ) continue;
|
|
158
|
+
if ( /^(is[A-Z]|_)|^(visible|version|uuid|name|opacity|userData)$/.test( property ) ) continue;
|
|
118
159
|
|
|
119
160
|
let value = material[ property ];
|
|
120
161
|
|
|
@@ -131,9 +172,11 @@ export default class RenderObject {
|
|
|
131
172
|
|
|
132
173
|
}
|
|
133
174
|
|
|
175
|
+
cacheKey += this.clippingContextVersion + ',';
|
|
176
|
+
|
|
134
177
|
if ( object.skeleton ) {
|
|
135
178
|
|
|
136
|
-
cacheKey += object.skeleton.
|
|
179
|
+
cacheKey += object.skeleton.bones.length + ',';
|
|
137
180
|
|
|
138
181
|
}
|
|
139
182
|
|
|
@@ -149,7 +192,7 @@ export default class RenderObject {
|
|
|
149
192
|
|
|
150
193
|
get needsUpdate() {
|
|
151
194
|
|
|
152
|
-
return this.initialNodesCacheKey !== this.getNodesCacheKey();
|
|
195
|
+
return this.initialNodesCacheKey !== this.getNodesCacheKey() || this.clippingNeedsUpdate;
|
|
153
196
|
|
|
154
197
|
}
|
|
155
198
|
|
|
@@ -31,6 +31,8 @@ class RenderObjects {
|
|
|
31
31
|
|
|
32
32
|
} else {
|
|
33
33
|
|
|
34
|
+
renderObject.updateClipping( renderContext.clippingContext );
|
|
35
|
+
|
|
34
36
|
if ( renderObject.version !== material.version || renderObject.needsUpdate ) {
|
|
35
37
|
|
|
36
38
|
if ( renderObject.initialCacheKey !== renderObject.getCacheKey() ) {
|
|
@@ -11,6 +11,7 @@ import Textures from './Textures.js';
|
|
|
11
11
|
import Background from './Background.js';
|
|
12
12
|
import Nodes from './nodes/Nodes.js';
|
|
13
13
|
import Color4 from './Color4.js';
|
|
14
|
+
import ClippingContext from './ClippingContext.js';
|
|
14
15
|
import { Scene, Frustum, Matrix4, Vector2, Vector3, Vector4, DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoToneMapping } from 'three';
|
|
15
16
|
|
|
16
17
|
const _scene = new Scene();
|
|
@@ -56,7 +57,9 @@ class Renderer {
|
|
|
56
57
|
this.sortObjects = true;
|
|
57
58
|
|
|
58
59
|
this.depth = true;
|
|
59
|
-
this.stencil =
|
|
60
|
+
this.stencil = false;
|
|
61
|
+
|
|
62
|
+
this.clippingPlanes = [];
|
|
60
63
|
|
|
61
64
|
this.info = new Info();
|
|
62
65
|
|
|
@@ -223,6 +226,9 @@ class Renderer {
|
|
|
223
226
|
renderContext.depth = this.depth;
|
|
224
227
|
renderContext.stencil = this.stencil;
|
|
225
228
|
|
|
229
|
+
if ( ! renderContext.clippingContext ) renderContext.clippingContext = new ClippingContext();
|
|
230
|
+
renderContext.clippingContext.updateGlobal( this, camera );
|
|
231
|
+
|
|
226
232
|
//
|
|
227
233
|
|
|
228
234
|
sceneRef.onBeforeRender( this, scene, camera, renderTarget );
|
|
@@ -306,6 +312,28 @@ class Renderer {
|
|
|
306
312
|
|
|
307
313
|
if ( this._initialized === false ) await this.init();
|
|
308
314
|
|
|
315
|
+
const renderContext = this._renderScene( scene, camera );
|
|
316
|
+
|
|
317
|
+
await this.backend.resolveTimestampAsync( renderContext, 'render' );
|
|
318
|
+
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
render( scene, camera ) {
|
|
322
|
+
|
|
323
|
+
if ( this._initialized === false ) {
|
|
324
|
+
|
|
325
|
+
console.warn( 'THREE.Renderer: .render() called before the backend is initialized. Try using .renderAsync() instead.' );
|
|
326
|
+
|
|
327
|
+
return this.renderAsync( scene, camera );
|
|
328
|
+
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
this._renderScene( scene, camera );
|
|
332
|
+
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
_renderScene( scene, camera ) {
|
|
336
|
+
|
|
309
337
|
// preserve render tree
|
|
310
338
|
|
|
311
339
|
const nodeFrame = this._nodes.nodeFrame;
|
|
@@ -351,7 +379,6 @@ class Renderer {
|
|
|
351
379
|
|
|
352
380
|
if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
|
|
353
381
|
|
|
354
|
-
if ( this.info.autoReset === true ) this.info.reset();
|
|
355
382
|
|
|
356
383
|
//
|
|
357
384
|
|
|
@@ -386,6 +413,9 @@ class Renderer {
|
|
|
386
413
|
renderContext.scissorValue.width >>= activeMipmapLevel;
|
|
387
414
|
renderContext.scissorValue.height >>= activeMipmapLevel;
|
|
388
415
|
|
|
416
|
+
if ( ! renderContext.clippingContext ) renderContext.clippingContext = new ClippingContext();
|
|
417
|
+
renderContext.clippingContext.updateGlobal( this, camera );
|
|
418
|
+
|
|
389
419
|
//
|
|
390
420
|
|
|
391
421
|
sceneRef.onBeforeRender( this, scene, camera, renderTarget );
|
|
@@ -477,8 +507,9 @@ class Renderer {
|
|
|
477
507
|
|
|
478
508
|
sceneRef.onAfterRender( this, scene, camera, renderTarget );
|
|
479
509
|
|
|
510
|
+
//
|
|
480
511
|
|
|
481
|
-
|
|
512
|
+
return renderContext;
|
|
482
513
|
|
|
483
514
|
}
|
|
484
515
|
|
|
@@ -728,9 +759,15 @@ class Renderer {
|
|
|
728
759
|
|
|
729
760
|
}
|
|
730
761
|
|
|
731
|
-
|
|
762
|
+
clear( color = true, depth = true, stencil = true ) {
|
|
732
763
|
|
|
733
|
-
if ( this._initialized === false )
|
|
764
|
+
if ( this._initialized === false ) {
|
|
765
|
+
|
|
766
|
+
console.warn( 'THREE.Renderer: .clear() called before the backend is initialized. Try using .clearAsync() instead.' );
|
|
767
|
+
|
|
768
|
+
return this.clearAsync( color, depth, stencil );
|
|
769
|
+
|
|
770
|
+
}
|
|
734
771
|
|
|
735
772
|
let renderTargetData = null;
|
|
736
773
|
const renderTarget = this._renderTarget;
|
|
@@ -747,6 +784,32 @@ class Renderer {
|
|
|
747
784
|
|
|
748
785
|
}
|
|
749
786
|
|
|
787
|
+
clearColor() {
|
|
788
|
+
|
|
789
|
+
return this.clear( true, false, false );
|
|
790
|
+
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
clearDepth() {
|
|
794
|
+
|
|
795
|
+
return this.clear( false, true, false );
|
|
796
|
+
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
clearStencil() {
|
|
800
|
+
|
|
801
|
+
return this.clear( false, false, true );
|
|
802
|
+
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
async clearAsync( color = true, depth = true, stencil = true ) {
|
|
806
|
+
|
|
807
|
+
if ( this._initialized === false ) await this.init();
|
|
808
|
+
|
|
809
|
+
this.clear( color, depth, stencil );
|
|
810
|
+
|
|
811
|
+
}
|
|
812
|
+
|
|
750
813
|
clearColorAsync() {
|
|
751
814
|
|
|
752
815
|
return this.clearAsync( true, false, false );
|
|
@@ -842,7 +905,6 @@ class Renderer {
|
|
|
842
905
|
nodeFrame.renderId = this.info.calls;
|
|
843
906
|
|
|
844
907
|
//
|
|
845
|
-
if ( this.info.autoReset === true ) this.info.resetCompute();
|
|
846
908
|
|
|
847
909
|
const backend = this.backend;
|
|
848
910
|
const pipelines = this._pipelines;
|
|
@@ -924,6 +986,16 @@ class Renderer {
|
|
|
924
986
|
|
|
925
987
|
}
|
|
926
988
|
|
|
989
|
+
copyTextureToTexture( position, srcTexture, dstTexture, level = 0 ) {
|
|
990
|
+
|
|
991
|
+
this._textures.updateTexture( srcTexture );
|
|
992
|
+
this._textures.updateTexture( dstTexture );
|
|
993
|
+
|
|
994
|
+
this.backend.copyTextureToTexture( position, srcTexture, dstTexture, level );
|
|
995
|
+
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
|
|
927
999
|
readRenderTargetPixelsAsync( renderTarget, x, y, width, height ) {
|
|
928
1000
|
|
|
929
1001
|
return this.backend.copyTextureToBuffer( renderTarget.texture, x, y, width, height );
|
|
@@ -1107,10 +1179,42 @@ class Renderer {
|
|
|
1107
1179
|
|
|
1108
1180
|
}
|
|
1109
1181
|
|
|
1110
|
-
if ( overrideMaterial.isShadowNodeMaterial
|
|
1182
|
+
if ( overrideMaterial.isShadowNodeMaterial ) {
|
|
1183
|
+
|
|
1184
|
+
overrideMaterial.side = material.shadowSide === null ? material.side : material.shadowSide;
|
|
1185
|
+
|
|
1186
|
+
if ( material.shadowNode && material.shadowNode.isNode ) {
|
|
1187
|
+
|
|
1188
|
+
overrideFragmentNode = overrideMaterial.fragmentNode;
|
|
1189
|
+
overrideMaterial.fragmentNode = material.shadowNode;
|
|
1190
|
+
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
if ( this.localClippingEnabled ) {
|
|
1194
|
+
|
|
1195
|
+
if ( material.clipShadows ) {
|
|
1111
1196
|
|
|
1112
|
-
|
|
1113
|
-
|
|
1197
|
+
if ( overrideMaterial.clippingPlanes !== material.clippingPlanes ) {
|
|
1198
|
+
|
|
1199
|
+
overrideMaterial.clippingPlanes = material.clippingPlanes;
|
|
1200
|
+
overrideMaterial.needsUpdate = true;
|
|
1201
|
+
|
|
1202
|
+
}
|
|
1203
|
+
|
|
1204
|
+
if ( overrideMaterial.clipIntersection !== material.clipIntersection ) {
|
|
1205
|
+
|
|
1206
|
+
overrideMaterial.clipIntersection = material.clipIntersection;
|
|
1207
|
+
|
|
1208
|
+
}
|
|
1209
|
+
|
|
1210
|
+
} else if ( Array.isArray( overrideMaterial.clippingPlanes ) ) {
|
|
1211
|
+
|
|
1212
|
+
overrideMaterial.clippingPlanes = null;
|
|
1213
|
+
overrideMaterial.needsUpdate = true;
|
|
1214
|
+
|
|
1215
|
+
}
|
|
1216
|
+
|
|
1217
|
+
}
|
|
1114
1218
|
|
|
1115
1219
|
}
|
|
1116
1220
|
|
|
@@ -1212,36 +1316,6 @@ class Renderer {
|
|
|
1212
1316
|
|
|
1213
1317
|
}
|
|
1214
1318
|
|
|
1215
|
-
get render() {
|
|
1216
|
-
|
|
1217
|
-
return this.renderAsync;
|
|
1218
|
-
|
|
1219
|
-
}
|
|
1220
|
-
|
|
1221
|
-
get clear() {
|
|
1222
|
-
|
|
1223
|
-
return this.clearAsync;
|
|
1224
|
-
|
|
1225
|
-
}
|
|
1226
|
-
|
|
1227
|
-
get clearColor() {
|
|
1228
|
-
|
|
1229
|
-
return this.clearColorAsync;
|
|
1230
|
-
|
|
1231
|
-
}
|
|
1232
|
-
|
|
1233
|
-
get clearDepth() {
|
|
1234
|
-
|
|
1235
|
-
return this.clearDepthAsync;
|
|
1236
|
-
|
|
1237
|
-
}
|
|
1238
|
-
|
|
1239
|
-
get clearStencil() {
|
|
1240
|
-
|
|
1241
|
-
return this.clearStencilAsync;
|
|
1242
|
-
|
|
1243
|
-
}
|
|
1244
|
-
|
|
1245
1319
|
}
|
|
1246
1320
|
|
|
1247
1321
|
export default Renderer;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BufferAttribute } from 'three';
|
|
2
2
|
|
|
3
|
-
class StorageBufferAttribute extends
|
|
3
|
+
class StorageBufferAttribute extends BufferAttribute {
|
|
4
4
|
|
|
5
5
|
constructor( array, itemSize, typeClass = Float32Array ) {
|
|
6
6
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { InstancedBufferAttribute } from 'three';
|
|
2
|
+
|
|
3
|
+
class StorageInstancedBufferAttribute extends InstancedBufferAttribute {
|
|
4
|
+
|
|
5
|
+
constructor( array, itemSize, typeClass = Float32Array ) {
|
|
6
|
+
|
|
7
|
+
if ( ArrayBuffer.isView( array ) === false ) array = new typeClass( array * itemSize );
|
|
8
|
+
|
|
9
|
+
super( array, itemSize );
|
|
10
|
+
|
|
11
|
+
this.isStorageInstancedBufferAttribute = true;
|
|
12
|
+
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export default StorageInstancedBufferAttribute;
|