super-three 0.163.0 → 0.164.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +473 -245
- package/build/three.module.js +473 -245
- package/build/three.module.min.js +2 -2
- package/examples/jsm/animation/CCDIKSolver.js +4 -2
- package/examples/jsm/exporters/GLTFExporter.js +45 -1
- package/examples/jsm/exporters/USDZExporter.js +7 -1
- package/examples/jsm/libs/draco/README.md +2 -2
- package/examples/jsm/loaders/EXRLoader.js +283 -99
- package/examples/jsm/loaders/GLTFLoader.js +53 -0
- package/examples/jsm/loaders/KTX2Loader.js +3 -6
- 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/nodes/Nodes.js +4 -3
- package/examples/jsm/nodes/accessors/AccessorsUtils.js +16 -1
- package/examples/jsm/nodes/accessors/ClippingNode.js +3 -2
- package/examples/jsm/nodes/accessors/MaterialNode.js +107 -3
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +9 -0
- package/examples/jsm/nodes/accessors/TextureNode.js +21 -3
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +1 -1
- package/examples/jsm/nodes/code/FunctionNode.js +0 -8
- package/examples/jsm/nodes/core/Node.js +8 -0
- package/examples/jsm/nodes/core/NodeBuilder.js +5 -9
- package/examples/jsm/nodes/core/OutputStructNode.js +2 -1
- package/examples/jsm/nodes/core/PropertyNode.js +10 -0
- package/examples/jsm/nodes/display/BumpMapNode.js +7 -26
- package/examples/jsm/nodes/display/FrontFacingNode.js +13 -0
- package/examples/jsm/nodes/display/ViewportDepthNode.js +1 -1
- package/examples/jsm/nodes/display/ViewportNode.js +4 -2
- 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 +164 -10
- package/examples/jsm/nodes/functions/ShadowMaskModel.js +31 -0
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +18 -4
- 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 +11 -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 +10 -6
- package/examples/jsm/nodes/materials/Materials.js +1 -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 +76 -5
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +11 -4
- package/examples/jsm/nodes/materials/NodeMaterial.js +31 -41
- package/examples/jsm/nodes/materials/ShadowNodeMaterial.js +34 -0
- package/examples/jsm/nodes/pmrem/PMREMUtils.js +1 -1
- package/examples/jsm/nodes/shadernode/ShaderNode.js +2 -8
- package/examples/jsm/physics/JoltPhysics.js +281 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +193 -0
- package/examples/jsm/renderers/common/Background.js +3 -3
- package/examples/jsm/renderers/common/ClippingContext.js +1 -1
- package/examples/jsm/renderers/common/RenderList.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +43 -1
- package/examples/jsm/renderers/common/Renderer.js +129 -14
- package/examples/jsm/renderers/common/Textures.js +1 -1
- package/examples/jsm/renderers/common/extras/PMREMGenerator.js +13 -17
- 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 +6 -0
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +21 -7
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +3 -21
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +33 -45
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +16 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +1 -1
- package/examples/jsm/utils/SceneUtils.js +60 -1
- package/examples/jsm/webxr/OculusHandModel.js +3 -2
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -2
- package/package.json +1 -1
- package/src/constants.js +1 -1
- package/src/core/RenderTarget.js +8 -0
- package/src/extras/PMREMGenerator.js +12 -11
- package/src/loaders/FileLoader.js +1 -1
- package/src/loaders/MaterialLoader.js +1 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshPhysicalMaterial.js +20 -0
- package/src/objects/BatchedMesh.js +23 -0
- package/src/objects/Line.js +66 -43
- package/src/renderers/WebGLRenderer.js +92 -61
- 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/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 +18 -3
- package/src/renderers/webgl/WebGLBufferRenderer.js +36 -0
- package/src/renderers/webgl/WebGLCapabilities.js +33 -1
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +36 -0
- package/src/renderers/webgl/WebGLMaterials.js +6 -0
- package/src/renderers/webgl/WebGLProgram.js +3 -5
- package/src/renderers/webgl/WebGLPrograms.js +5 -0
- package/src/renderers/webgl/WebGLRenderStates.js +6 -2
- package/src/renderers/webgl/WebGLShadowMap.js +25 -25
- package/src/renderers/webgl/WebGLTextures.js +68 -60
- package/src/renderers/webgl/WebGLUtils.js +3 -21
- package/src/renderers/webxr/WebXRManager.js +2 -4
- 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
|
@@ -314,6 +314,7 @@ ShaderLib.physical = {
|
|
|
314
314
|
clearcoatRoughness: { value: 0 },
|
|
315
315
|
clearcoatRoughnessMap: { value: null },
|
|
316
316
|
clearcoatRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() },
|
|
317
|
+
dispersion: { value: 0 },
|
|
317
318
|
iridescence: { value: 0 },
|
|
318
319
|
iridescenceMap: { value: null },
|
|
319
320
|
iridescenceMapTransform: { value: /*@__PURE__*/ new Matrix3() },
|
|
@@ -26,9 +26,8 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
|
|
|
26
26
|
let currentBackgroundVersion = 0;
|
|
27
27
|
let currentTonemapping = null;
|
|
28
28
|
|
|
29
|
-
function
|
|
29
|
+
function getBackground( scene ) {
|
|
30
30
|
|
|
31
|
-
let forceClear = false;
|
|
32
31
|
let background = scene.isScene === true ? scene.background : null;
|
|
33
32
|
|
|
34
33
|
if ( background && background.isTexture ) {
|
|
@@ -38,6 +37,15 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
|
|
|
38
37
|
|
|
39
38
|
}
|
|
40
39
|
|
|
40
|
+
return background;
|
|
41
|
+
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function render( scene ) {
|
|
45
|
+
|
|
46
|
+
let forceClear = false;
|
|
47
|
+
const background = getBackground( scene );
|
|
48
|
+
|
|
41
49
|
if ( background === null ) {
|
|
42
50
|
|
|
43
51
|
setClear( clearColor, clearAlpha );
|
|
@@ -67,6 +75,12 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
|
|
|
67
75
|
|
|
68
76
|
}
|
|
69
77
|
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function addToRenderList( renderList, scene ) {
|
|
81
|
+
|
|
82
|
+
const background = getBackground( scene );
|
|
83
|
+
|
|
70
84
|
if ( background && ( background.isCubeTexture || background.mapping === CubeUVReflectionMapping ) ) {
|
|
71
85
|
|
|
72
86
|
if ( boxMesh === undefined ) {
|
|
@@ -247,7 +261,8 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
|
|
|
247
261
|
setClear( clearColor, clearAlpha );
|
|
248
262
|
|
|
249
263
|
},
|
|
250
|
-
render: render
|
|
264
|
+
render: render,
|
|
265
|
+
addToRenderList: addToRenderList
|
|
251
266
|
|
|
252
267
|
};
|
|
253
268
|
|
|
@@ -57,12 +57,48 @@ function WebGLBufferRenderer( gl, extensions, info ) {
|
|
|
57
57
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
function renderMultiDrawInstances( starts, counts, drawCount, primcount ) {
|
|
61
|
+
|
|
62
|
+
if ( drawCount === 0 ) return;
|
|
63
|
+
|
|
64
|
+
const extension = extensions.get( 'WEBGL_multi_draw' );
|
|
65
|
+
|
|
66
|
+
if ( extension === null ) {
|
|
67
|
+
|
|
68
|
+
for ( let i = 0; i < starts.length; i ++ ) {
|
|
69
|
+
|
|
70
|
+
renderInstances( starts[ i ], counts[ i ], primcount[ i ] );
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
} else {
|
|
75
|
+
|
|
76
|
+
extension.multiDrawArraysInstancedWEBGL( mode, starts, 0, counts, 0, primcount, 0, drawCount );
|
|
77
|
+
|
|
78
|
+
let elementCount = 0;
|
|
79
|
+
for ( let i = 0; i < drawCount; i ++ ) {
|
|
80
|
+
|
|
81
|
+
elementCount += counts[ i ];
|
|
82
|
+
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
for ( let i = 0; i < primcount.length; i ++ ) {
|
|
86
|
+
|
|
87
|
+
info.update( elementCount, mode, primcount[ i ] );
|
|
88
|
+
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
|
|
60
95
|
//
|
|
61
96
|
|
|
62
97
|
this.setMode = setMode;
|
|
63
98
|
this.render = render;
|
|
64
99
|
this.renderInstances = renderInstances;
|
|
65
100
|
this.renderMultiDraw = renderMultiDraw;
|
|
101
|
+
this.renderMultiDrawInstances = renderMultiDrawInstances;
|
|
66
102
|
|
|
67
103
|
}
|
|
68
104
|
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import { FloatType, HalfFloatType, RGBAFormat, UnsignedByteType } from '../../constants.js';
|
|
2
|
+
|
|
3
|
+
function WebGLCapabilities( gl, extensions, parameters, utils ) {
|
|
2
4
|
|
|
3
5
|
let maxAnisotropy;
|
|
4
6
|
|
|
@@ -22,6 +24,33 @@ function WebGLCapabilities( gl, extensions, parameters ) {
|
|
|
22
24
|
|
|
23
25
|
}
|
|
24
26
|
|
|
27
|
+
function textureFormatReadable( textureFormat ) {
|
|
28
|
+
|
|
29
|
+
if ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {
|
|
30
|
+
|
|
31
|
+
return false;
|
|
32
|
+
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return true;
|
|
36
|
+
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function textureTypeReadable( textureType ) {
|
|
40
|
+
|
|
41
|
+
const halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) );
|
|
42
|
+
|
|
43
|
+
if ( textureType !== UnsignedByteType && utils.convert( textureType ) !== gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // Edge and Chrome Mac < 52 (#9513)
|
|
44
|
+
textureType !== FloatType && ! halfFloatSupportedByExt ) {
|
|
45
|
+
|
|
46
|
+
return false;
|
|
47
|
+
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return true;
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
25
54
|
function getMaxPrecision( precision ) {
|
|
26
55
|
|
|
27
56
|
if ( precision === 'highp' ) {
|
|
@@ -85,6 +114,9 @@ function WebGLCapabilities( gl, extensions, parameters ) {
|
|
|
85
114
|
getMaxAnisotropy: getMaxAnisotropy,
|
|
86
115
|
getMaxPrecision: getMaxPrecision,
|
|
87
116
|
|
|
117
|
+
textureFormatReadable: textureFormatReadable,
|
|
118
|
+
textureTypeReadable: textureTypeReadable,
|
|
119
|
+
|
|
88
120
|
precision: precision,
|
|
89
121
|
logarithmicDepthBuffer: logarithmicDepthBuffer,
|
|
90
122
|
|
|
@@ -66,6 +66,41 @@ function WebGLIndexedBufferRenderer( gl, extensions, info ) {
|
|
|
66
66
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
function renderMultiDrawInstances( starts, counts, drawCount, primcount ) {
|
|
70
|
+
|
|
71
|
+
if ( drawCount === 0 ) return;
|
|
72
|
+
|
|
73
|
+
const extension = extensions.get( 'WEBGL_multi_draw' );
|
|
74
|
+
|
|
75
|
+
if ( extension === null ) {
|
|
76
|
+
|
|
77
|
+
for ( let i = 0; i < starts.length; i ++ ) {
|
|
78
|
+
|
|
79
|
+
renderInstances( starts[ i ] / bytesPerElement, counts[ i ], primcount[ i ] );
|
|
80
|
+
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
} else {
|
|
84
|
+
|
|
85
|
+
extension.multiDrawElementsInstancedWEBGL( mode, counts, 0, type, starts, 0, primcount, 0, drawCount );
|
|
86
|
+
|
|
87
|
+
let elementCount = 0;
|
|
88
|
+
for ( let i = 0; i < drawCount; i ++ ) {
|
|
89
|
+
|
|
90
|
+
elementCount += counts[ i ];
|
|
91
|
+
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
for ( let i = 0; i < primcount.length; i ++ ) {
|
|
95
|
+
|
|
96
|
+
info.update( elementCount, mode, primcount[ i ] );
|
|
97
|
+
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
}
|
|
103
|
+
|
|
69
104
|
//
|
|
70
105
|
|
|
71
106
|
this.setMode = setMode;
|
|
@@ -73,6 +108,7 @@ function WebGLIndexedBufferRenderer( gl, extensions, info ) {
|
|
|
73
108
|
this.render = render;
|
|
74
109
|
this.renderInstances = renderInstances;
|
|
75
110
|
this.renderMultiDraw = renderMultiDraw;
|
|
111
|
+
this.renderMultiDrawInstances = renderMultiDrawInstances;
|
|
76
112
|
|
|
77
113
|
}
|
|
78
114
|
|
|
@@ -470,6 +470,12 @@ function WebGLMaterials( renderer, properties ) {
|
|
|
470
470
|
|
|
471
471
|
}
|
|
472
472
|
|
|
473
|
+
if ( material.dispersion > 0 ) {
|
|
474
|
+
|
|
475
|
+
uniforms.dispersion.value = material.dispersion;
|
|
476
|
+
|
|
477
|
+
}
|
|
478
|
+
|
|
473
479
|
if ( material.iridescence > 0 ) {
|
|
474
480
|
|
|
475
481
|
uniforms.iridescence.value = material.iridescence;
|
|
@@ -244,11 +244,7 @@ function resolveIncludes( string ) {
|
|
|
244
244
|
|
|
245
245
|
}
|
|
246
246
|
|
|
247
|
-
const shaderChunkMap = new Map(
|
|
248
|
-
[ 'encodings_fragment', 'colorspace_fragment' ], // @deprecated, r154
|
|
249
|
-
[ 'encodings_pars_fragment', 'colorspace_pars_fragment' ], // @deprecated, r154
|
|
250
|
-
[ 'output_fragment', 'opaque_fragment' ], // @deprecated, r154
|
|
251
|
-
] );
|
|
247
|
+
const shaderChunkMap = new Map();
|
|
252
248
|
|
|
253
249
|
function includeReplacer( match, include ) {
|
|
254
250
|
|
|
@@ -779,6 +775,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
779
775
|
parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',
|
|
780
776
|
parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',
|
|
781
777
|
|
|
778
|
+
parameters.dispersion ? '#define USE_DISPERSION' : '',
|
|
779
|
+
|
|
782
780
|
parameters.iridescence ? '#define USE_IRIDESCENCE' : '',
|
|
783
781
|
parameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',
|
|
784
782
|
parameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',
|
|
@@ -129,6 +129,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
129
129
|
|
|
130
130
|
const HAS_ANISOTROPY = material.anisotropy > 0;
|
|
131
131
|
const HAS_CLEARCOAT = material.clearcoat > 0;
|
|
132
|
+
const HAS_DISPERSION = material.dispersion > 0;
|
|
132
133
|
const HAS_IRIDESCENCE = material.iridescence > 0;
|
|
133
134
|
const HAS_SHEEN = material.sheen > 0;
|
|
134
135
|
const HAS_TRANSMISSION = material.transmission > 0;
|
|
@@ -228,6 +229,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
228
229
|
clearcoatNormalMap: HAS_CLEARCOAT_NORMALMAP,
|
|
229
230
|
clearcoatRoughnessMap: HAS_CLEARCOAT_ROUGHNESSMAP,
|
|
230
231
|
|
|
232
|
+
dispersion: HAS_DISPERSION,
|
|
233
|
+
|
|
231
234
|
iridescence: HAS_IRIDESCENCE,
|
|
232
235
|
iridescenceMap: HAS_IRIDESCENCEMAP,
|
|
233
236
|
iridescenceThicknessMap: HAS_IRIDESCENCE_THICKNESSMAP,
|
|
@@ -508,6 +511,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
508
511
|
_programLayers.enable( 18 );
|
|
509
512
|
if ( parameters.batching )
|
|
510
513
|
_programLayers.enable( 19 );
|
|
514
|
+
if ( parameters.dispersion )
|
|
515
|
+
_programLayers.enable( 20 );
|
|
511
516
|
|
|
512
517
|
array.push( _programLayers.mask );
|
|
513
518
|
_programLayers.disableAll();
|
|
@@ -7,7 +7,9 @@ function WebGLRenderState( extensions ) {
|
|
|
7
7
|
const lightsArray = [];
|
|
8
8
|
const shadowsArray = [];
|
|
9
9
|
|
|
10
|
-
function init() {
|
|
10
|
+
function init( camera ) {
|
|
11
|
+
|
|
12
|
+
state.camera = camera;
|
|
11
13
|
|
|
12
14
|
lightsArray.length = 0;
|
|
13
15
|
shadowsArray.length = 0;
|
|
@@ -42,9 +44,11 @@ function WebGLRenderState( extensions ) {
|
|
|
42
44
|
lightsArray: lightsArray,
|
|
43
45
|
shadowsArray: shadowsArray,
|
|
44
46
|
|
|
47
|
+
camera: null,
|
|
48
|
+
|
|
45
49
|
lights: lights,
|
|
46
50
|
|
|
47
|
-
transmissionRenderTarget:
|
|
51
|
+
transmissionRenderTarget: {}
|
|
48
52
|
};
|
|
49
53
|
|
|
50
54
|
return {
|
|
@@ -12,7 +12,7 @@ import { Frustum } from '../../math/Frustum.js';
|
|
|
12
12
|
|
|
13
13
|
import * as vsm from '../shaders/ShaderLib/vsm.glsl.js';
|
|
14
14
|
|
|
15
|
-
function WebGLShadowMap(
|
|
15
|
+
function WebGLShadowMap( renderer, objects, capabilities ) {
|
|
16
16
|
|
|
17
17
|
let _frustum = new Frustum();
|
|
18
18
|
|
|
@@ -26,7 +26,7 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
|
|
|
26
26
|
|
|
27
27
|
_materialCache = {},
|
|
28
28
|
|
|
29
|
-
_maxTextureSize =
|
|
29
|
+
_maxTextureSize = capabilities.maxTextureSize;
|
|
30
30
|
|
|
31
31
|
const shadowSide = { [ FrontSide ]: BackSide, [ BackSide ]: FrontSide, [ DoubleSide ]: DoubleSide };
|
|
32
32
|
|
|
@@ -76,11 +76,11 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
|
|
|
76
76
|
|
|
77
77
|
if ( lights.length === 0 ) return;
|
|
78
78
|
|
|
79
|
-
const currentRenderTarget =
|
|
80
|
-
const activeCubeFace =
|
|
81
|
-
const activeMipmapLevel =
|
|
79
|
+
const currentRenderTarget = renderer.getRenderTarget();
|
|
80
|
+
const activeCubeFace = renderer.getActiveCubeFace();
|
|
81
|
+
const activeMipmapLevel = renderer.getActiveMipmapLevel();
|
|
82
82
|
|
|
83
|
-
const _state =
|
|
83
|
+
const _state = renderer.state;
|
|
84
84
|
|
|
85
85
|
// Set GL state for depth map.
|
|
86
86
|
_state.setBlending( NoBlending );
|
|
@@ -154,8 +154,8 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
|
|
|
154
154
|
|
|
155
155
|
}
|
|
156
156
|
|
|
157
|
-
|
|
158
|
-
|
|
157
|
+
renderer.setRenderTarget( shadow.map );
|
|
158
|
+
renderer.clear();
|
|
159
159
|
|
|
160
160
|
const viewportCount = shadow.getViewportCount();
|
|
161
161
|
|
|
@@ -196,13 +196,13 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
|
|
|
196
196
|
|
|
197
197
|
scope.needsUpdate = false;
|
|
198
198
|
|
|
199
|
-
|
|
199
|
+
renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );
|
|
200
200
|
|
|
201
201
|
};
|
|
202
202
|
|
|
203
203
|
function VSMPass( shadow, camera ) {
|
|
204
204
|
|
|
205
|
-
const geometry =
|
|
205
|
+
const geometry = objects.update( fullScreenMesh );
|
|
206
206
|
|
|
207
207
|
if ( shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples ) {
|
|
208
208
|
|
|
@@ -225,18 +225,18 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
|
|
|
225
225
|
shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;
|
|
226
226
|
shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;
|
|
227
227
|
shadowMaterialVertical.uniforms.radius.value = shadow.radius;
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
228
|
+
renderer.setRenderTarget( shadow.mapPass );
|
|
229
|
+
renderer.clear();
|
|
230
|
+
renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );
|
|
231
231
|
|
|
232
232
|
// horizontal pass
|
|
233
233
|
|
|
234
234
|
shadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;
|
|
235
235
|
shadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;
|
|
236
236
|
shadowMaterialHorizontal.uniforms.radius.value = shadow.radius;
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
237
|
+
renderer.setRenderTarget( shadow.map );
|
|
238
|
+
renderer.clear();
|
|
239
|
+
renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );
|
|
240
240
|
|
|
241
241
|
}
|
|
242
242
|
|
|
@@ -254,7 +254,7 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
|
|
|
254
254
|
|
|
255
255
|
result = ( light.isPointLight === true ) ? _distanceMaterial : _depthMaterial;
|
|
256
256
|
|
|
257
|
-
if ( (
|
|
257
|
+
if ( ( renderer.localClippingEnabled && material.clipShadows === true && Array.isArray( material.clippingPlanes ) && material.clippingPlanes.length !== 0 ) ||
|
|
258
258
|
( material.displacementMap && material.displacementScale !== 0 ) ||
|
|
259
259
|
( material.alphaMap && material.alphaTest > 0 ) ||
|
|
260
260
|
( material.map && material.alphaTest > 0 ) ) {
|
|
@@ -319,7 +319,7 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
|
|
|
319
319
|
|
|
320
320
|
if ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {
|
|
321
321
|
|
|
322
|
-
const materialProperties =
|
|
322
|
+
const materialProperties = renderer.properties.get( result );
|
|
323
323
|
materialProperties.light = light;
|
|
324
324
|
|
|
325
325
|
}
|
|
@@ -340,7 +340,7 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
|
|
|
340
340
|
|
|
341
341
|
object.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );
|
|
342
342
|
|
|
343
|
-
const geometry =
|
|
343
|
+
const geometry = objects.update( object );
|
|
344
344
|
const material = object.material;
|
|
345
345
|
|
|
346
346
|
if ( Array.isArray( material ) ) {
|
|
@@ -356,11 +356,11 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
|
|
|
356
356
|
|
|
357
357
|
const depthMaterial = getDepthMaterial( object, groupMaterial, light, type );
|
|
358
358
|
|
|
359
|
-
object.onBeforeShadow(
|
|
359
|
+
object.onBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, group );
|
|
360
360
|
|
|
361
|
-
|
|
361
|
+
renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );
|
|
362
362
|
|
|
363
|
-
object.onAfterShadow(
|
|
363
|
+
object.onAfterShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, group );
|
|
364
364
|
|
|
365
365
|
}
|
|
366
366
|
|
|
@@ -370,11 +370,11 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
|
|
|
370
370
|
|
|
371
371
|
const depthMaterial = getDepthMaterial( object, material, light, type );
|
|
372
372
|
|
|
373
|
-
object.onBeforeShadow(
|
|
373
|
+
object.onBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, null );
|
|
374
374
|
|
|
375
|
-
|
|
375
|
+
renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );
|
|
376
376
|
|
|
377
|
-
object.onAfterShadow(
|
|
377
|
+
object.onAfterShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, null );
|
|
378
378
|
|
|
379
379
|
}
|
|
380
380
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, RGBAFormat,
|
|
1
|
+
import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, RGBAFormat, DepthFormat, DepthStencilFormat, UnsignedIntType, UnsignedInt248Type, FloatType, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, UnsignedByteType, NoColorSpace, LinearSRGBColorSpace, NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, SRGBTransfer, LinearTransfer } from '../../constants.js';
|
|
2
2
|
import { createElementNS } from '../../utils.js';
|
|
3
3
|
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
4
4
|
import { Vector2 } from '../../math/Vector2.js';
|
|
@@ -747,7 +747,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
747
747
|
let mipmap;
|
|
748
748
|
const mipmaps = texture.mipmaps;
|
|
749
749
|
|
|
750
|
-
const useTexStorage = ( texture.isVideoTexture !== true
|
|
750
|
+
const useTexStorage = ( texture.isVideoTexture !== true );
|
|
751
751
|
const allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );
|
|
752
752
|
const dataReady = source.dataReady;
|
|
753
753
|
const levels = getMipLevels( texture, image );
|
|
@@ -2004,112 +2004,120 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
2004
2004
|
|
|
2005
2005
|
}
|
|
2006
2006
|
|
|
2007
|
+
const invalidationArrayRead = [];
|
|
2008
|
+
const invalidationArrayDraw = [];
|
|
2009
|
+
|
|
2007
2010
|
function updateMultisampleRenderTarget( renderTarget ) {
|
|
2008
2011
|
|
|
2009
|
-
if (
|
|
2012
|
+
if ( renderTarget.samples > 0 ) {
|
|
2010
2013
|
|
|
2011
|
-
|
|
2012
|
-
const width = renderTarget.width;
|
|
2013
|
-
const height = renderTarget.height;
|
|
2014
|
-
let mask = _gl.COLOR_BUFFER_BIT;
|
|
2015
|
-
const invalidationArray = [];
|
|
2016
|
-
const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
|
|
2017
|
-
const renderTargetProperties = properties.get( renderTarget );
|
|
2018
|
-
const isMultipleRenderTargets = ( textures.length > 1 );
|
|
2019
|
-
|
|
2020
|
-
// If MRT we need to remove FBO attachments
|
|
2021
|
-
if ( isMultipleRenderTargets ) {
|
|
2014
|
+
if ( useMultisampledRTT( renderTarget ) === false ) {
|
|
2022
2015
|
|
|
2023
|
-
|
|
2016
|
+
const textures = renderTarget.textures;
|
|
2017
|
+
const width = renderTarget.width;
|
|
2018
|
+
const height = renderTarget.height;
|
|
2019
|
+
let mask = _gl.COLOR_BUFFER_BIT;
|
|
2020
|
+
const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
|
|
2021
|
+
const renderTargetProperties = properties.get( renderTarget );
|
|
2022
|
+
const isMultipleRenderTargets = ( textures.length > 1 );
|
|
2024
2023
|
|
|
2025
|
-
|
|
2026
|
-
|
|
2024
|
+
// If MRT we need to remove FBO attachments
|
|
2025
|
+
if ( isMultipleRenderTargets ) {
|
|
2026
|
+
|
|
2027
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
2028
|
+
|
|
2029
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
2030
|
+
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, null );
|
|
2027
2031
|
|
|
2028
|
-
|
|
2029
|
-
|
|
2032
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
2033
|
+
_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, null, 0 );
|
|
2034
|
+
|
|
2035
|
+
}
|
|
2030
2036
|
|
|
2031
2037
|
}
|
|
2032
2038
|
|
|
2033
|
-
|
|
2039
|
+
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
2040
|
+
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
2034
2041
|
|
|
2035
|
-
|
|
2036
|
-
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
2042
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
2037
2043
|
|
|
2038
|
-
|
|
2044
|
+
if ( renderTarget.resolveDepthBuffer ) {
|
|
2039
2045
|
|
|
2040
|
-
|
|
2046
|
+
if ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;
|
|
2041
2047
|
|
|
2042
|
-
|
|
2048
|
+
// resolving stencil is slow with a D3D backend. disable it for all transmission render targets (see #27799)
|
|
2043
2049
|
|
|
2044
|
-
|
|
2050
|
+
if ( renderTarget.stencilBuffer && renderTarget.resolveStencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT;
|
|
2045
2051
|
|
|
2046
|
-
|
|
2052
|
+
}
|
|
2047
2053
|
|
|
2048
|
-
|
|
2054
|
+
if ( isMultipleRenderTargets ) {
|
|
2049
2055
|
|
|
2050
|
-
|
|
2056
|
+
_gl.framebufferRenderbuffer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
|
|
2051
2057
|
|
|
2052
|
-
|
|
2058
|
+
const webglTexture = properties.get( textures[ i ] ).__webglTexture;
|
|
2059
|
+
_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, webglTexture, 0 );
|
|
2053
2060
|
|
|
2054
|
-
|
|
2061
|
+
}
|
|
2055
2062
|
|
|
2056
|
-
|
|
2063
|
+
_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST );
|
|
2057
2064
|
|
|
2058
|
-
|
|
2065
|
+
if ( supportsInvalidateFramebuffer === true ) {
|
|
2059
2066
|
|
|
2060
|
-
|
|
2067
|
+
invalidationArrayRead.length = 0;
|
|
2068
|
+
invalidationArrayDraw.length = 0;
|
|
2061
2069
|
|
|
2062
|
-
|
|
2070
|
+
invalidationArrayRead.push( _gl.COLOR_ATTACHMENT0 + i );
|
|
2063
2071
|
|
|
2064
|
-
|
|
2072
|
+
if ( renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false ) {
|
|
2065
2073
|
|
|
2066
|
-
|
|
2074
|
+
invalidationArrayRead.push( depthStyle );
|
|
2075
|
+
invalidationArrayDraw.push( depthStyle );
|
|
2067
2076
|
|
|
2068
|
-
|
|
2069
|
-
_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] );
|
|
2077
|
+
_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, invalidationArrayDraw );
|
|
2070
2078
|
|
|
2071
|
-
|
|
2079
|
+
}
|
|
2072
2080
|
|
|
2073
|
-
|
|
2081
|
+
_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArrayRead );
|
|
2074
2082
|
|
|
2075
|
-
|
|
2076
|
-
_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, webglTexture, 0 );
|
|
2083
|
+
}
|
|
2077
2084
|
|
|
2078
2085
|
}
|
|
2079
2086
|
|
|
2080
|
-
|
|
2087
|
+
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );
|
|
2088
|
+
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );
|
|
2081
2089
|
|
|
2082
|
-
|
|
2090
|
+
// If MRT since pre-blit we removed the FBO we need to reconstruct the attachments
|
|
2091
|
+
if ( isMultipleRenderTargets ) {
|
|
2083
2092
|
|
|
2084
|
-
|
|
2093
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
2085
2094
|
|
|
2086
|
-
|
|
2095
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
2096
|
+
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
|
|
2087
2097
|
|
|
2098
|
+
const webglTexture = properties.get( textures[ i ] ).__webglTexture;
|
|
2088
2099
|
|
|
2089
|
-
|
|
2100
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
2101
|
+
_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, webglTexture, 0 );
|
|
2090
2102
|
|
|
2091
|
-
|
|
2092
|
-
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );
|
|
2103
|
+
}
|
|
2093
2104
|
|
|
2094
|
-
|
|
2095
|
-
if ( isMultipleRenderTargets ) {
|
|
2105
|
+
}
|
|
2096
2106
|
|
|
2097
|
-
|
|
2107
|
+
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
2098
2108
|
|
|
2099
|
-
|
|
2100
|
-
|
|
2109
|
+
} else {
|
|
2110
|
+
|
|
2111
|
+
if ( renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false && supportsInvalidateFramebuffer ) {
|
|
2101
2112
|
|
|
2102
|
-
const
|
|
2113
|
+
const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
|
|
2103
2114
|
|
|
2104
|
-
|
|
2105
|
-
_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, webglTexture, 0 );
|
|
2115
|
+
_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] );
|
|
2106
2116
|
|
|
2107
2117
|
}
|
|
2108
2118
|
|
|
2109
2119
|
}
|
|
2110
2120
|
|
|
2111
|
-
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
2112
|
-
|
|
2113
2121
|
}
|
|
2114
2122
|
|
|
2115
2123
|
}
|
|
@@ -101,33 +101,15 @@ function WebGLUtils( gl, extensions ) {
|
|
|
101
101
|
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
//
|
|
104
|
+
// ETC
|
|
105
105
|
|
|
106
|
-
if ( p === RGB_ETC1_Format ) {
|
|
107
|
-
|
|
108
|
-
extension = extensions.get( 'WEBGL_compressed_texture_etc1' );
|
|
109
|
-
|
|
110
|
-
if ( extension !== null ) {
|
|
111
|
-
|
|
112
|
-
return extension.COMPRESSED_RGB_ETC1_WEBGL;
|
|
113
|
-
|
|
114
|
-
} else {
|
|
115
|
-
|
|
116
|
-
return null;
|
|
117
|
-
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// ETC2
|
|
123
|
-
|
|
124
|
-
if ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {
|
|
106
|
+
if ( p === RGB_ETC1_Format || p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {
|
|
125
107
|
|
|
126
108
|
extension = extensions.get( 'WEBGL_compressed_texture_etc' );
|
|
127
109
|
|
|
128
110
|
if ( extension !== null ) {
|
|
129
111
|
|
|
130
|
-
if ( p === RGB_ETC2_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;
|
|
112
|
+
if ( p === RGB_ETC1_Format || p === RGB_ETC2_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;
|
|
131
113
|
if ( p === RGBA_ETC2_EAC_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC;
|
|
132
114
|
|
|
133
115
|
} else {
|