super-three 0.162.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 +847 -1226
- package/build/three.module.js +846 -1225
- package/build/three.module.min.js +2 -2
- package/examples/jsm/animation/CCDIKSolver.js +4 -2
- package/examples/jsm/controls/TransformControls.js +3 -3
- package/examples/jsm/exporters/GLTFExporter.js +66 -5
- package/examples/jsm/exporters/USDZExporter.js +22 -1
- package/examples/jsm/geometries/TextGeometry.js +10 -2
- package/examples/jsm/interactive/HTMLMesh.js +7 -9
- package/examples/jsm/libs/draco/README.md +2 -2
- package/examples/jsm/libs/fflate.module.js +694 -496
- package/examples/jsm/lines/LineMaterial.js +0 -2
- package/examples/jsm/loaders/3MFLoader.js +2 -0
- package/examples/jsm/loaders/EXRLoader.js +351 -97
- package/examples/jsm/loaders/FBXLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +59 -0
- package/examples/jsm/loaders/KTX2Loader.js +3 -10
- 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/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/misc/GPUComputationRenderer.js +0 -6
- package/examples/jsm/nodes/Nodes.js +10 -4
- package/examples/jsm/nodes/accessors/AccessorsUtils.js +16 -1
- package/examples/jsm/nodes/accessors/BatchNode.js +78 -0
- package/examples/jsm/nodes/accessors/ClippingNode.js +3 -2
- package/examples/jsm/nodes/accessors/InstanceNode.js +25 -2
- package/examples/jsm/nodes/accessors/MaterialNode.js +107 -3
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/MorphNode.js +13 -3
- package/examples/jsm/nodes/accessors/NormalNode.js +12 -2
- package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/RendererReferenceNode.js +29 -0
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +9 -0
- package/examples/jsm/nodes/accessors/TextureNode.js +51 -10
- 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 +63 -4
- package/examples/jsm/nodes/core/NodeBuilder.js +26 -25
- package/examples/jsm/nodes/core/NodeFrame.js +10 -10
- package/examples/jsm/nodes/core/NodeUtils.js +2 -2
- package/examples/jsm/nodes/core/OutputStructNode.js +2 -1
- package/examples/jsm/nodes/core/PropertyNode.js +10 -0
- package/examples/jsm/nodes/core/UniformNode.js +20 -0
- 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 +17 -1
- package/examples/jsm/nodes/display/ToneMappingNode.js +8 -4
- package/examples/jsm/nodes/display/ViewportDepthNode.js +1 -1
- package/examples/jsm/nodes/display/ViewportNode.js +4 -2
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +6 -0
- package/examples/jsm/nodes/display/ViewportTextureNode.js +4 -1
- 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/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 +19 -5
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +22 -70
- 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 +55 -43
- package/examples/jsm/nodes/materials/ShadowNodeMaterial.js +34 -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 +3 -9
- package/examples/jsm/nodes/utils/EquirectUVNode.js +1 -1
- package/examples/jsm/objects/QuadMesh.js +7 -23
- package/examples/jsm/physics/JoltPhysics.js +281 -0
- 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/RenderTransitionPass.js +193 -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 +8 -8
- package/examples/jsm/renderers/common/ClippingContext.js +1 -1
- 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 +1 -1
- package/examples/jsm/renderers/common/RenderList.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +47 -5
- package/examples/jsm/renderers/common/RenderObjects.js +1 -1
- package/examples/jsm/renderers/common/Renderer.js +153 -21
- package/examples/jsm/renderers/common/Textures.js +1 -1
- package/examples/jsm/renderers/common/extras/PMREMGenerator.js +773 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +34 -63
- package/examples/jsm/renderers/webgl/WebGLBackend.js +146 -36
- package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +145 -0
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +9 -3
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +1 -1
- package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +1 -0
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +64 -7
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +6 -23
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +77 -60
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +21 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +29 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +92 -18
- package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +1 -1
- package/examples/jsm/utils/GPUStatsPanel.js +10 -45
- package/examples/jsm/utils/SceneUtils.js +60 -1
- package/examples/jsm/utils/TextureUtils.js +1 -1
- package/examples/jsm/webxr/OculusHandModel.js +3 -2
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -2
- package/package.json +1 -1
- package/src/Three.js +0 -1
- package/src/animation/AnimationClip.js +1 -1
- package/src/constants.js +3 -3
- package/src/core/Object3D.js +10 -7
- package/src/core/RenderTarget.js +8 -0
- package/src/extras/PMREMGenerator.js +21 -11
- package/src/loaders/FileLoader.js +1 -1
- package/src/loaders/MaterialLoader.js +1 -0
- package/src/loaders/ObjectLoader.js +2 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshPhysicalMaterial.js +20 -0
- package/src/materials/ShaderMaterial.js +0 -4
- package/src/math/Spherical.js +4 -5
- package/src/objects/BatchedMesh.js +27 -3
- package/src/objects/InstancedMesh.js +10 -0
- package/src/objects/Line.js +66 -43
- package/src/renderers/WebGLRenderer.js +130 -158
- 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/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/shadowmap_pars_fragment.glsl.js +32 -22
- 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 +2 -1
- package/src/renderers/shaders/UniformsUtils.js +10 -1
- package/src/renderers/webgl/WebGLAttributes.js +6 -33
- package/src/renderers/webgl/WebGLBackground.js +18 -3
- package/src/renderers/webgl/WebGLBindingStates.js +14 -51
- package/src/renderers/webgl/WebGLBufferRenderer.js +35 -21
- package/src/renderers/webgl/WebGLCapabilities.js +35 -13
- package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
- package/src/renderers/webgl/WebGLExtensions.js +4 -19
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +35 -21
- package/src/renderers/webgl/WebGLLights.js +6 -32
- package/src/renderers/webgl/WebGLMaterials.js +8 -3
- package/src/renderers/webgl/WebGLMorphtargets.js +79 -217
- package/src/renderers/webgl/WebGLProgram.js +21 -52
- package/src/renderers/webgl/WebGLPrograms.js +24 -31
- package/src/renderers/webgl/WebGLRenderStates.js +13 -7
- package/src/renderers/webgl/WebGLShadowMap.js +25 -25
- package/src/renderers/webgl/WebGLState.js +15 -59
- package/src/renderers/webgl/WebGLTextures.js +138 -292
- package/src/renderers/webgl/WebGLUniformsGroups.js +1 -1
- package/src/renderers/webgl/WebGLUtils.js +9 -78
- package/src/renderers/webxr/WebXRDepthSensing.js +2 -3
- package/src/renderers/webxr/WebXRManager.js +4 -6
- package/src/scenes/Scene.js +7 -1
- package/src/textures/Texture.js +11 -1
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -320
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +0 -26
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -794
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +0 -51
- package/src/renderers/WebGL1Renderer.js +0 -7
- package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
NearestFilter, NearestMipmapNearestFilter, NearestMipmapLinearFilter,
|
|
8
8
|
RepeatWrapping, MirroredRepeatWrapping,
|
|
9
9
|
RGB_ETC2_Format, RGBA_ETC2_EAC_Format,
|
|
10
|
-
RGBAFormat, RedFormat, RGFormat, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, UnsignedByteType, FloatType, HalfFloatType, SRGBColorSpace, DepthFormat, DepthStencilFormat,
|
|
10
|
+
RGBAFormat, RGBFormat, RedFormat, RGFormat, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, UnsignedByteType, FloatType, HalfFloatType, SRGBColorSpace, DepthFormat, DepthStencilFormat,
|
|
11
11
|
RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format,
|
|
12
|
-
RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, UnsignedIntType, UnsignedShortType, UnsignedInt248Type,
|
|
13
|
-
NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare
|
|
12
|
+
RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, UnsignedIntType, UnsignedShortType, UnsignedInt248Type, UnsignedInt5999Type,
|
|
13
|
+
NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, IntType, RedIntegerFormat, RGIntegerFormat, RGBAIntegerFormat
|
|
14
14
|
} from 'three';
|
|
15
15
|
|
|
16
16
|
import { CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping, DepthTexture } from 'three';
|
|
@@ -38,8 +38,8 @@ class WebGPUTextureUtils {
|
|
|
38
38
|
|
|
39
39
|
this._passUtils = null;
|
|
40
40
|
|
|
41
|
-
this.defaultTexture =
|
|
42
|
-
this.defaultCubeTexture =
|
|
41
|
+
this.defaultTexture = {};
|
|
42
|
+
this.defaultCubeTexture = {};
|
|
43
43
|
|
|
44
44
|
this.colorBuffer = null;
|
|
45
45
|
|
|
@@ -79,13 +79,15 @@ class WebGPUTextureUtils {
|
|
|
79
79
|
|
|
80
80
|
let textureGPU;
|
|
81
81
|
|
|
82
|
+
const format = getFormat( texture );
|
|
83
|
+
|
|
82
84
|
if ( texture.isCubeTexture ) {
|
|
83
85
|
|
|
84
|
-
textureGPU = this._getDefaultCubeTextureGPU();
|
|
86
|
+
textureGPU = this._getDefaultCubeTextureGPU( format );
|
|
85
87
|
|
|
86
88
|
} else {
|
|
87
89
|
|
|
88
|
-
textureGPU = this._getDefaultTextureGPU();
|
|
90
|
+
textureGPU = this._getDefaultTextureGPU( format );
|
|
89
91
|
|
|
90
92
|
}
|
|
91
93
|
|
|
@@ -111,7 +113,7 @@ class WebGPUTextureUtils {
|
|
|
111
113
|
const { width, height, depth, levels } = options;
|
|
112
114
|
|
|
113
115
|
const dimension = this._getDimension( texture );
|
|
114
|
-
const format = texture.internalFormat || getFormat( texture, backend.device );
|
|
116
|
+
const format = texture.internalFormat || options.format || getFormat( texture, backend.device );
|
|
115
117
|
|
|
116
118
|
let sampleCount = options.sampleCount !== undefined ? options.sampleCount : 1;
|
|
117
119
|
|
|
@@ -268,7 +270,7 @@ class WebGPUTextureUtils {
|
|
|
268
270
|
|
|
269
271
|
}
|
|
270
272
|
|
|
271
|
-
getDepthBuffer( depth = true, stencil =
|
|
273
|
+
getDepthBuffer( depth = true, stencil = false ) {
|
|
272
274
|
|
|
273
275
|
const backend = this.backend;
|
|
274
276
|
const { width, height } = backend.getDrawingBufferSize();
|
|
@@ -422,19 +424,19 @@ class WebGPUTextureUtils {
|
|
|
422
424
|
|
|
423
425
|
}
|
|
424
426
|
|
|
425
|
-
_getDefaultTextureGPU() {
|
|
427
|
+
_getDefaultTextureGPU( format ) {
|
|
426
428
|
|
|
427
|
-
let defaultTexture = this.defaultTexture;
|
|
429
|
+
let defaultTexture = this.defaultTexture[ format ];
|
|
428
430
|
|
|
429
|
-
if ( defaultTexture ===
|
|
431
|
+
if ( defaultTexture === undefined ) {
|
|
430
432
|
|
|
431
433
|
const texture = new Texture();
|
|
432
434
|
texture.minFilter = NearestFilter;
|
|
433
435
|
texture.magFilter = NearestFilter;
|
|
434
436
|
|
|
435
|
-
this.createTexture( texture, { width: 1, height: 1 } );
|
|
437
|
+
this.createTexture( texture, { width: 1, height: 1, format } );
|
|
436
438
|
|
|
437
|
-
this.defaultTexture = defaultTexture = texture;
|
|
439
|
+
this.defaultTexture[ format ] = defaultTexture = texture;
|
|
438
440
|
|
|
439
441
|
}
|
|
440
442
|
|
|
@@ -442,11 +444,11 @@ class WebGPUTextureUtils {
|
|
|
442
444
|
|
|
443
445
|
}
|
|
444
446
|
|
|
445
|
-
_getDefaultCubeTextureGPU() {
|
|
447
|
+
_getDefaultCubeTextureGPU( format ) {
|
|
446
448
|
|
|
447
|
-
let defaultCubeTexture = this.defaultTexture;
|
|
449
|
+
let defaultCubeTexture = this.defaultTexture[ format ];
|
|
448
450
|
|
|
449
|
-
if ( defaultCubeTexture ===
|
|
451
|
+
if ( defaultCubeTexture === undefined ) {
|
|
450
452
|
|
|
451
453
|
const texture = new CubeTexture();
|
|
452
454
|
texture.minFilter = NearestFilter;
|
|
@@ -454,7 +456,7 @@ class WebGPUTextureUtils {
|
|
|
454
456
|
|
|
455
457
|
this.createTexture( texture, { width: 1, height: 1, depth: 6 } );
|
|
456
458
|
|
|
457
|
-
this.defaultCubeTexture = defaultCubeTexture = texture;
|
|
459
|
+
this.defaultCubeTexture[ format ] = defaultCubeTexture = texture;
|
|
458
460
|
|
|
459
461
|
}
|
|
460
462
|
|
|
@@ -930,6 +932,21 @@ export function getFormat( texture, device = null ) {
|
|
|
930
932
|
|
|
931
933
|
break;
|
|
932
934
|
|
|
935
|
+
case RGBFormat:
|
|
936
|
+
|
|
937
|
+
switch ( type ) {
|
|
938
|
+
|
|
939
|
+
case UnsignedInt5999Type:
|
|
940
|
+
formatGPU = GPUTextureFormat.RGB9E5UFloat;
|
|
941
|
+
break;
|
|
942
|
+
|
|
943
|
+
default:
|
|
944
|
+
console.error( 'WebGPURenderer: Unsupported texture type with RGBFormat.', type );
|
|
945
|
+
|
|
946
|
+
}
|
|
947
|
+
|
|
948
|
+
break;
|
|
949
|
+
|
|
933
950
|
case RedFormat:
|
|
934
951
|
|
|
935
952
|
switch ( type ) {
|
|
@@ -1026,6 +1043,63 @@ export function getFormat( texture, device = null ) {
|
|
|
1026
1043
|
|
|
1027
1044
|
break;
|
|
1028
1045
|
|
|
1046
|
+
case RedIntegerFormat:
|
|
1047
|
+
|
|
1048
|
+
switch ( type ) {
|
|
1049
|
+
|
|
1050
|
+
case IntType:
|
|
1051
|
+
formatGPU = GPUTextureFormat.R32Sint;
|
|
1052
|
+
break;
|
|
1053
|
+
|
|
1054
|
+
case UnsignedIntType:
|
|
1055
|
+
formatGPU = GPUTextureFormat.R32Uint;
|
|
1056
|
+
break;
|
|
1057
|
+
|
|
1058
|
+
default:
|
|
1059
|
+
console.error( 'WebGPURenderer: Unsupported texture type with RedIntegerFormat.', type );
|
|
1060
|
+
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
break;
|
|
1064
|
+
|
|
1065
|
+
case RGIntegerFormat:
|
|
1066
|
+
|
|
1067
|
+
switch ( type ) {
|
|
1068
|
+
|
|
1069
|
+
case IntType:
|
|
1070
|
+
formatGPU = GPUTextureFormat.RG32Sint;
|
|
1071
|
+
break;
|
|
1072
|
+
|
|
1073
|
+
case UnsignedIntType:
|
|
1074
|
+
formatGPU = GPUTextureFormat.RG32Uint;
|
|
1075
|
+
break;
|
|
1076
|
+
|
|
1077
|
+
default:
|
|
1078
|
+
console.error( 'WebGPURenderer: Unsupported texture type with RGIntegerFormat.', type );
|
|
1079
|
+
|
|
1080
|
+
}
|
|
1081
|
+
|
|
1082
|
+
break;
|
|
1083
|
+
|
|
1084
|
+
case RGBAIntegerFormat:
|
|
1085
|
+
|
|
1086
|
+
switch ( type ) {
|
|
1087
|
+
|
|
1088
|
+
case IntType:
|
|
1089
|
+
formatGPU = GPUTextureFormat.RGBA32Sint;
|
|
1090
|
+
break;
|
|
1091
|
+
|
|
1092
|
+
case UnsignedIntType:
|
|
1093
|
+
formatGPU = GPUTextureFormat.RGBA32Uint;
|
|
1094
|
+
break;
|
|
1095
|
+
|
|
1096
|
+
default:
|
|
1097
|
+
console.error( 'WebGPURenderer: Unsupported texture type with RGBAIntegerFormat.', type );
|
|
1098
|
+
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
break;
|
|
1102
|
+
|
|
1029
1103
|
default:
|
|
1030
1104
|
console.error( 'WebGPURenderer: Unsupported texture format.', format );
|
|
1031
1105
|
|
|
@@ -218,7 +218,7 @@ class GLSLDecoder {
|
|
|
218
218
|
|
|
219
219
|
this._currentFunction = null;
|
|
220
220
|
|
|
221
|
-
this.addPolyfill( 'gl_FragCoord', '
|
|
221
|
+
this.addPolyfill( 'gl_FragCoord', 'vec3 gl_FragCoord = vec3( viewportCoordinate.x, viewportCoordinate.y.oneMinus(), viewportCoordinate.z );' );
|
|
222
222
|
|
|
223
223
|
}
|
|
224
224
|
|
|
@@ -9,7 +9,7 @@ class ShaderToyDecoder extends GLSLDecoder {
|
|
|
9
9
|
|
|
10
10
|
this.addPolyfill( 'iTime', 'float iTime = timerGlobal();' );
|
|
11
11
|
this.addPolyfill( 'iResolution', 'vec2 iResolution = viewportResolution;' );
|
|
12
|
-
this.addPolyfill( 'fragCoord', '
|
|
12
|
+
this.addPolyfill( 'fragCoord', 'vec3 fragCoord = vec3( viewportCoordinate.x, viewportResolution.y - viewportCoordinate.y, viewportCoordinate.z );' );
|
|
13
13
|
|
|
14
14
|
}
|
|
15
15
|
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import Stats from '../libs/stats.module.js';
|
|
2
2
|
|
|
3
|
-
// https://www.khronos.org/registry/webgl/extensions/EXT_disjoint_timer_query/
|
|
4
3
|
// https://www.khronos.org/registry/webgl/extensions/EXT_disjoint_timer_query_webgl2/
|
|
5
4
|
export class GPUStatsPanel extends Stats.Panel {
|
|
6
5
|
|
|
@@ -8,18 +7,11 @@ export class GPUStatsPanel extends Stats.Panel {
|
|
|
8
7
|
|
|
9
8
|
super( name, '#f90', '#210' );
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
let extension = context.getExtension( 'EXT_disjoint_timer_query_webgl2' );
|
|
13
|
-
if ( extension === null ) {
|
|
14
|
-
|
|
15
|
-
isWebGL2 = false;
|
|
16
|
-
extension = context.getExtension( 'EXT_disjoint_timer_query' );
|
|
17
|
-
|
|
18
|
-
if ( extension === null ) {
|
|
10
|
+
const extension = context.getExtension( 'EXT_disjoint_timer_query_webgl2' );
|
|
19
11
|
|
|
20
|
-
|
|
12
|
+
if ( extension === null ) {
|
|
21
13
|
|
|
22
|
-
|
|
14
|
+
console.warn( 'GPUStatsPanel: disjoint_time_query extension not available.' );
|
|
23
15
|
|
|
24
16
|
}
|
|
25
17
|
|
|
@@ -40,40 +32,21 @@ export class GPUStatsPanel extends Stats.Panel {
|
|
|
40
32
|
}
|
|
41
33
|
|
|
42
34
|
// create the query object
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
query = gl.createQuery();
|
|
47
|
-
gl.beginQuery( ext.TIME_ELAPSED_EXT, query );
|
|
48
|
-
|
|
49
|
-
} else {
|
|
50
|
-
|
|
51
|
-
query = ext.createQueryEXT();
|
|
52
|
-
ext.beginQueryEXT( ext.TIME_ELAPSED_EXT, query );
|
|
53
|
-
|
|
54
|
-
}
|
|
35
|
+
const query = gl.createQuery();
|
|
36
|
+
gl.beginQuery( ext.TIME_ELAPSED_EXT, query );
|
|
55
37
|
|
|
56
38
|
this.activeQueries ++;
|
|
57
39
|
|
|
58
40
|
const checkQuery = () => {
|
|
59
41
|
|
|
60
42
|
// check if the query is available and valid
|
|
61
|
-
let available, disjoint, ns;
|
|
62
|
-
if ( isWebGL2 ) {
|
|
63
43
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
} else {
|
|
69
|
-
|
|
70
|
-
available = ext.getQueryObjectEXT( query, ext.QUERY_RESULT_AVAILABLE_EXT );
|
|
71
|
-
disjoint = gl.getParameter( ext.GPU_DISJOINT_EXT );
|
|
72
|
-
ns = ext.getQueryObjectEXT( query, ext.QUERY_RESULT_EXT );
|
|
73
|
-
|
|
74
|
-
}
|
|
44
|
+
const available = gl.getQueryParameter( query, gl.QUERY_RESULT_AVAILABLE );
|
|
45
|
+
const disjoint = gl.getParameter( ext.GPU_DISJOINT_EXT );
|
|
46
|
+
const ns = gl.getQueryParameter( query, gl.QUERY_RESULT );
|
|
75
47
|
|
|
76
48
|
const ms = ns * 1e-6;
|
|
49
|
+
|
|
77
50
|
if ( available ) {
|
|
78
51
|
|
|
79
52
|
// update the display if it is valid
|
|
@@ -111,15 +84,7 @@ export class GPUStatsPanel extends Stats.Panel {
|
|
|
111
84
|
|
|
112
85
|
}
|
|
113
86
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
gl.endQuery( ext.TIME_ELAPSED_EXT );
|
|
117
|
-
|
|
118
|
-
} else {
|
|
119
|
-
|
|
120
|
-
ext.endQueryEXT( ext.TIME_ELAPSED_EXT );
|
|
121
|
-
|
|
122
|
-
}
|
|
87
|
+
gl.endQuery( ext.TIME_ELAPSED_EXT );
|
|
123
88
|
|
|
124
89
|
};
|
|
125
90
|
|
|
@@ -245,10 +245,69 @@ function sortInstancedMesh( mesh, compareFn ) {
|
|
|
245
245
|
|
|
246
246
|
}
|
|
247
247
|
|
|
248
|
+
/**
|
|
249
|
+
* @param {Object3D} object Object to traverse.
|
|
250
|
+
* @yields {Object3D} Objects that passed the filter condition.
|
|
251
|
+
*/
|
|
252
|
+
function* traverseGenerator( object ) {
|
|
253
|
+
|
|
254
|
+
yield object;
|
|
255
|
+
|
|
256
|
+
const children = object.children;
|
|
257
|
+
|
|
258
|
+
for ( let i = 0, l = children.length; i < l; i ++ ) {
|
|
259
|
+
|
|
260
|
+
yield* traverseGenerator( children[ i ] );
|
|
261
|
+
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* @param {Object3D} object Object to traverse.
|
|
268
|
+
* @yields {Object3D} Objects that passed the filter condition.
|
|
269
|
+
*/
|
|
270
|
+
function* traverseVisibleGenerator( object ) {
|
|
271
|
+
|
|
272
|
+
if ( object.visible === false ) return;
|
|
273
|
+
|
|
274
|
+
yield object;
|
|
275
|
+
|
|
276
|
+
const children = object.children;
|
|
277
|
+
|
|
278
|
+
for ( let i = 0, l = children.length; i < l; i ++ ) {
|
|
279
|
+
|
|
280
|
+
yield* traverseVisibleGenerator( children[ i ] );
|
|
281
|
+
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* @param {Object3D} object Object to traverse.
|
|
288
|
+
* @yields {Object3D} Objects that passed the filter condition.
|
|
289
|
+
*/
|
|
290
|
+
function* traverseAncestorsGenerator( object ) {
|
|
291
|
+
|
|
292
|
+
const parent = object.parent;
|
|
293
|
+
|
|
294
|
+
if ( parent !== null ) {
|
|
295
|
+
|
|
296
|
+
yield parent;
|
|
297
|
+
|
|
298
|
+
yield* traverseAncestorsGenerator( parent );
|
|
299
|
+
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
}
|
|
303
|
+
|
|
248
304
|
export {
|
|
249
305
|
createMeshesFromInstancedMesh,
|
|
250
306
|
createMeshesFromMultiMaterialMesh,
|
|
251
307
|
createMultiMaterialObject,
|
|
252
308
|
reduceVertices,
|
|
253
|
-
sortInstancedMesh
|
|
309
|
+
sortInstancedMesh,
|
|
310
|
+
traverseGenerator,
|
|
311
|
+
traverseVisibleGenerator,
|
|
312
|
+
traverseAncestorsGenerator
|
|
254
313
|
};
|
|
@@ -48,7 +48,7 @@ export function decompress( texture, maxTextureSize = Infinity, renderer = null
|
|
|
48
48
|
if ( ! fullscreenQuad ) {
|
|
49
49
|
|
|
50
50
|
fullscreenQuad = new Mesh( fullscreenQuadGeometry, fullscreenQuadMaterial );
|
|
51
|
-
fullscreenQuad.
|
|
51
|
+
fullscreenQuad.frustumCulled = false;
|
|
52
52
|
|
|
53
53
|
}
|
|
54
54
|
|
|
@@ -6,7 +6,7 @@ const POINTING_JOINT = 'index-finger-tip';
|
|
|
6
6
|
|
|
7
7
|
class OculusHandModel extends Object3D {
|
|
8
8
|
|
|
9
|
-
constructor( controller, loader = null ) {
|
|
9
|
+
constructor( controller, loader = null, onLoad = null ) {
|
|
10
10
|
|
|
11
11
|
super();
|
|
12
12
|
|
|
@@ -14,6 +14,7 @@ class OculusHandModel extends Object3D {
|
|
|
14
14
|
this.motionController = null;
|
|
15
15
|
this.envMap = null;
|
|
16
16
|
this.loader = loader;
|
|
17
|
+
this.onLoad = onLoad;
|
|
17
18
|
|
|
18
19
|
this.mesh = null;
|
|
19
20
|
|
|
@@ -25,7 +26,7 @@ class OculusHandModel extends Object3D {
|
|
|
25
26
|
|
|
26
27
|
this.xrInputSource = xrInputSource;
|
|
27
28
|
|
|
28
|
-
this.motionController = new XRHandMeshModel( this, controller, this.path, xrInputSource.handedness, this.loader );
|
|
29
|
+
this.motionController = new XRHandMeshModel( this, controller, this.path, xrInputSource.handedness, this.loader, this.onLoad );
|
|
29
30
|
|
|
30
31
|
}
|
|
31
32
|
|
|
@@ -40,9 +40,11 @@ class XRHandModel extends Object3D {
|
|
|
40
40
|
|
|
41
41
|
class XRHandModelFactory {
|
|
42
42
|
|
|
43
|
-
constructor() {
|
|
43
|
+
constructor( gltfLoader = null, onLoad = null ) {
|
|
44
44
|
|
|
45
|
+
this.gltfLoader = gltfLoader;
|
|
45
46
|
this.path = null;
|
|
47
|
+
this.onLoad = onLoad;
|
|
46
48
|
|
|
47
49
|
}
|
|
48
50
|
|
|
@@ -77,7 +79,7 @@ class XRHandModelFactory {
|
|
|
77
79
|
|
|
78
80
|
} else if ( profile === 'mesh' ) {
|
|
79
81
|
|
|
80
|
-
handModel.motionController = new XRHandMeshModel( handModel, controller, this.path, xrInputSource.handedness );
|
|
82
|
+
handModel.motionController = new XRHandMeshModel( handModel, controller, this.path, xrInputSource.handedness, this.gltfLoader, this.onLoad );
|
|
81
83
|
|
|
82
84
|
}
|
|
83
85
|
|
package/package.json
CHANGED
package/src/Three.js
CHANGED
|
@@ -5,7 +5,6 @@ export { WebGL3DRenderTarget } from './renderers/WebGL3DRenderTarget.js';
|
|
|
5
5
|
export { WebGLCubeRenderTarget } from './renderers/WebGLCubeRenderTarget.js';
|
|
6
6
|
export { WebGLRenderTarget } from './renderers/WebGLRenderTarget.js';
|
|
7
7
|
export { WebGLRenderer } from './renderers/WebGLRenderer.js';
|
|
8
|
-
export { WebGL1Renderer } from './renderers/WebGL1Renderer.js';
|
|
9
8
|
export { ShaderLib } from './renderers/shaders/ShaderLib.js';
|
|
10
9
|
export { UniformsLib } from './renderers/shaders/UniformsLib.js';
|
|
11
10
|
export { UniformsUtils } from './renderers/shaders/UniformsUtils.js';
|
|
@@ -11,7 +11,7 @@ import { NormalAnimationBlendMode } from '../constants.js';
|
|
|
11
11
|
|
|
12
12
|
class AnimationClip {
|
|
13
13
|
|
|
14
|
-
constructor( name, duration = - 1, tracks, blendMode = NormalAnimationBlendMode ) {
|
|
14
|
+
constructor( name = '', duration = - 1, tracks = [], blendMode = NormalAnimationBlendMode ) {
|
|
15
15
|
|
|
16
16
|
this.name = name;
|
|
17
17
|
this.tracks = tracks;
|
package/src/constants.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const REVISION = '
|
|
1
|
+
export const REVISION = '164';
|
|
2
2
|
|
|
3
3
|
export const MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };
|
|
4
4
|
export const TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };
|
|
@@ -91,7 +91,9 @@ export const HalfFloatType = 1016;
|
|
|
91
91
|
export const UnsignedShort4444Type = 1017;
|
|
92
92
|
export const UnsignedShort5551Type = 1018;
|
|
93
93
|
export const UnsignedInt248Type = 1020;
|
|
94
|
+
export const UnsignedInt5999Type = 35902;
|
|
94
95
|
export const AlphaFormat = 1021;
|
|
96
|
+
export const RGBFormat = 1022;
|
|
95
97
|
export const RGBAFormat = 1023;
|
|
96
98
|
export const LuminanceFormat = 1024;
|
|
97
99
|
export const LuminanceAlphaFormat = 1025;
|
|
@@ -207,7 +209,5 @@ export const StreamCopyUsage = 35042;
|
|
|
207
209
|
export const GLSL1 = '100';
|
|
208
210
|
export const GLSL3 = '300 es';
|
|
209
211
|
|
|
210
|
-
export const _SRGBAFormat = 1035; // fallback for WebGL 1
|
|
211
|
-
|
|
212
212
|
export const WebGLCoordinateSystem = 2000;
|
|
213
213
|
export const WebGPUCoordinateSystem = 2001;
|
package/src/core/Object3D.js
CHANGED
|
@@ -333,12 +333,7 @@ class Object3D extends EventDispatcher {
|
|
|
333
333
|
|
|
334
334
|
if ( object && object.isObject3D ) {
|
|
335
335
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
object.parent.remove( object );
|
|
339
|
-
|
|
340
|
-
}
|
|
341
|
-
|
|
336
|
+
object.removeFromParent();
|
|
342
337
|
object.parent = this;
|
|
343
338
|
this.children.push( object );
|
|
344
339
|
|
|
@@ -431,10 +426,18 @@ class Object3D extends EventDispatcher {
|
|
|
431
426
|
|
|
432
427
|
object.applyMatrix4( _m1 );
|
|
433
428
|
|
|
434
|
-
|
|
429
|
+
object.removeFromParent();
|
|
430
|
+
object.parent = this;
|
|
431
|
+
this.children.push( object );
|
|
435
432
|
|
|
436
433
|
object.updateWorldMatrix( false, true );
|
|
437
434
|
|
|
435
|
+
object.dispatchEvent( _addedEvent );
|
|
436
|
+
|
|
437
|
+
_childaddedEvent.child = object;
|
|
438
|
+
this.dispatchEvent( _childaddedEvent );
|
|
439
|
+
_childaddedEvent.child = null;
|
|
440
|
+
|
|
438
441
|
return this;
|
|
439
442
|
|
|
440
443
|
}
|
package/src/core/RenderTarget.js
CHANGED
|
@@ -34,6 +34,8 @@ class RenderTarget extends EventDispatcher {
|
|
|
34
34
|
minFilter: LinearFilter,
|
|
35
35
|
depthBuffer: true,
|
|
36
36
|
stencilBuffer: false,
|
|
37
|
+
resolveDepthBuffer: true,
|
|
38
|
+
resolveStencilBuffer: true,
|
|
37
39
|
depthTexture: null,
|
|
38
40
|
samples: 0,
|
|
39
41
|
count: 1
|
|
@@ -58,6 +60,9 @@ class RenderTarget extends EventDispatcher {
|
|
|
58
60
|
this.depthBuffer = options.depthBuffer;
|
|
59
61
|
this.stencilBuffer = options.stencilBuffer;
|
|
60
62
|
|
|
63
|
+
this.resolveDepthBuffer = options.resolveDepthBuffer;
|
|
64
|
+
this.resolveStencilBuffer = options.resolveStencilBuffer;
|
|
65
|
+
|
|
61
66
|
this.depthTexture = options.depthTexture;
|
|
62
67
|
|
|
63
68
|
this.samples = options.samples;
|
|
@@ -135,6 +140,9 @@ class RenderTarget extends EventDispatcher {
|
|
|
135
140
|
this.depthBuffer = source.depthBuffer;
|
|
136
141
|
this.stencilBuffer = source.stencilBuffer;
|
|
137
142
|
|
|
143
|
+
this.resolveDepthBuffer = source.resolveDepthBuffer;
|
|
144
|
+
this.resolveStencilBuffer = source.resolveStencilBuffer;
|
|
145
|
+
|
|
138
146
|
if ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone();
|
|
139
147
|
|
|
140
148
|
this.samples = source.samples;
|
|
@@ -40,6 +40,7 @@ const _clearColor = /*@__PURE__*/ new Color();
|
|
|
40
40
|
let _oldTarget = null;
|
|
41
41
|
let _oldActiveCubeFace = 0;
|
|
42
42
|
let _oldActiveMipmapLevel = 0;
|
|
43
|
+
let _oldXrEnabled = false;
|
|
43
44
|
|
|
44
45
|
// Golden Ratio
|
|
45
46
|
const PHI = ( 1 + Math.sqrt( 5 ) ) / 2;
|
|
@@ -48,16 +49,16 @@ const INV_PHI = 1 / PHI;
|
|
|
48
49
|
// Vertices of a dodecahedron (except the opposites, which represent the
|
|
49
50
|
// same axis), used as axis directions evenly spread on a sphere.
|
|
50
51
|
const _axisDirections = [
|
|
51
|
-
/*@__PURE__*/ new Vector3(
|
|
52
|
-
/*@__PURE__*/ new Vector3( - 1, 1, 1 ),
|
|
53
|
-
/*@__PURE__*/ new Vector3( 1, 1, - 1 ),
|
|
54
|
-
/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),
|
|
55
|
-
/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),
|
|
56
|
-
/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),
|
|
57
|
-
/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),
|
|
58
|
-
/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),
|
|
52
|
+
/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ),
|
|
59
53
|
/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),
|
|
60
|
-
/*@__PURE__*/ new Vector3( -
|
|
54
|
+
/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),
|
|
55
|
+
/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),
|
|
56
|
+
/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),
|
|
57
|
+
/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),
|
|
58
|
+
/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),
|
|
59
|
+
/*@__PURE__*/ new Vector3( 1, 1, - 1 ),
|
|
60
|
+
/*@__PURE__*/ new Vector3( - 1, 1, 1 ),
|
|
61
|
+
/*@__PURE__*/ new Vector3( 1, 1, 1 ) ];
|
|
61
62
|
|
|
62
63
|
/**
|
|
63
64
|
* This class generates a Prefiltered, Mipmapped Radiance Environment Map
|
|
@@ -107,6 +108,9 @@ class PMREMGenerator {
|
|
|
107
108
|
_oldTarget = this._renderer.getRenderTarget();
|
|
108
109
|
_oldActiveCubeFace = this._renderer.getActiveCubeFace();
|
|
109
110
|
_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
|
|
111
|
+
_oldXrEnabled = this._renderer.xr.enabled;
|
|
112
|
+
|
|
113
|
+
this._renderer.xr.enabled = false;
|
|
110
114
|
|
|
111
115
|
this._setSize( 256 );
|
|
112
116
|
|
|
@@ -222,6 +226,8 @@ class PMREMGenerator {
|
|
|
222
226
|
_cleanup( outputTarget ) {
|
|
223
227
|
|
|
224
228
|
this._renderer.setRenderTarget( _oldTarget, _oldActiveCubeFace, _oldActiveMipmapLevel );
|
|
229
|
+
this._renderer.xr.enabled = _oldXrEnabled;
|
|
230
|
+
|
|
225
231
|
outputTarget.scissorTest = false;
|
|
226
232
|
_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );
|
|
227
233
|
|
|
@@ -242,6 +248,9 @@ class PMREMGenerator {
|
|
|
242
248
|
_oldTarget = this._renderer.getRenderTarget();
|
|
243
249
|
_oldActiveCubeFace = this._renderer.getActiveCubeFace();
|
|
244
250
|
_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
|
|
251
|
+
_oldXrEnabled = this._renderer.xr.enabled;
|
|
252
|
+
|
|
253
|
+
this._renderer.xr.enabled = false;
|
|
245
254
|
|
|
246
255
|
const cubeUVRenderTarget = renderTarget || this._allocateTargets();
|
|
247
256
|
this._textureToCubeUV( texture, cubeUVRenderTarget );
|
|
@@ -435,12 +444,13 @@ class PMREMGenerator {
|
|
|
435
444
|
const renderer = this._renderer;
|
|
436
445
|
const autoClear = renderer.autoClear;
|
|
437
446
|
renderer.autoClear = false;
|
|
447
|
+
const n = this._lodPlanes.length;
|
|
438
448
|
|
|
439
|
-
for ( let i = 1; i <
|
|
449
|
+
for ( let i = 1; i < n; i ++ ) {
|
|
440
450
|
|
|
441
451
|
const sigma = Math.sqrt( this._sigmas[ i ] * this._sigmas[ i ] - this._sigmas[ i - 1 ] * this._sigmas[ i - 1 ] );
|
|
442
452
|
|
|
443
|
-
const poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ];
|
|
453
|
+
const poleAxis = _axisDirections[ ( n - i - 1 ) % _axisDirections.length ];
|
|
444
454
|
|
|
445
455
|
this._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );
|
|
446
456
|
|
|
@@ -112,7 +112,7 @@ class FileLoader extends Loader {
|
|
|
112
112
|
|
|
113
113
|
// Nginx needs X-File-Size check
|
|
114
114
|
// https://serverfault.com/questions/482875/why-does-nginx-remove-content-length-header-for-chunked-content
|
|
115
|
-
const contentLength = response.headers.get( '
|
|
115
|
+
const contentLength = response.headers.get( 'X-File-Size' ) || response.headers.get( 'Content-Length' );
|
|
116
116
|
const total = contentLength ? parseInt( contentLength ) : 0;
|
|
117
117
|
const lengthComputable = total !== 0;
|
|
118
118
|
let loaded = 0;
|
|
@@ -103,6 +103,7 @@ class MaterialLoader extends Loader {
|
|
|
103
103
|
if ( json.shininess !== undefined ) material.shininess = json.shininess;
|
|
104
104
|
if ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat;
|
|
105
105
|
if ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness;
|
|
106
|
+
if ( json.dispersion !== undefined ) material.dispersion = json.dispersion;
|
|
106
107
|
if ( json.iridescence !== undefined ) material.iridescence = json.iridescence;
|
|
107
108
|
if ( json.iridescenceIOR !== undefined ) material.iridescenceIOR = json.iridescenceIOR;
|
|
108
109
|
if ( json.iridescenceThicknessRange !== undefined ) material.iridescenceThicknessRange = json.iridescenceThicknessRange;
|
|
@@ -813,6 +813,8 @@ class ObjectLoader extends Loader {
|
|
|
813
813
|
if ( data.backgroundBlurriness !== undefined ) object.backgroundBlurriness = data.backgroundBlurriness;
|
|
814
814
|
if ( data.backgroundIntensity !== undefined ) object.backgroundIntensity = data.backgroundIntensity;
|
|
815
815
|
if ( data.backgroundRotation !== undefined ) object.backgroundRotation.fromArray( data.backgroundRotation );
|
|
816
|
+
|
|
817
|
+
if ( data.environmentIntensity !== undefined ) object.environmentIntensity = data.environmentIntensity;
|
|
816
818
|
if ( data.environmentRotation !== undefined ) object.environmentRotation.fromArray( data.environmentRotation );
|
|
817
819
|
|
|
818
820
|
break;
|
|
@@ -218,6 +218,8 @@ class Material extends EventDispatcher {
|
|
|
218
218
|
|
|
219
219
|
}
|
|
220
220
|
|
|
221
|
+
if ( this.dispersion !== undefined ) data.dispersion = this.dispersion;
|
|
222
|
+
|
|
221
223
|
if ( this.iridescence !== undefined ) data.iridescence = this.iridescence;
|
|
222
224
|
if ( this.iridescenceIOR !== undefined ) data.iridescenceIOR = this.iridescenceIOR;
|
|
223
225
|
if ( this.iridescenceThicknessRange !== undefined ) data.iridescenceThicknessRange = this.iridescenceThicknessRange;
|