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
|
@@ -14,7 +14,6 @@ import WebGPUAttributeUtils from './utils/WebGPUAttributeUtils.js';
|
|
|
14
14
|
import WebGPUBindingUtils from './utils/WebGPUBindingUtils.js';
|
|
15
15
|
import WebGPUPipelineUtils from './utils/WebGPUPipelineUtils.js';
|
|
16
16
|
import WebGPUTextureUtils from './utils/WebGPUTextureUtils.js';
|
|
17
|
-
import WebGPU from '../../capabilities/WebGPU.js';
|
|
18
17
|
|
|
19
18
|
//
|
|
20
19
|
|
|
@@ -45,7 +44,6 @@ class WebGPUBackend extends Backend {
|
|
|
45
44
|
|
|
46
45
|
this.trackTimestamp = ( parameters.trackTimestamp === true );
|
|
47
46
|
|
|
48
|
-
this.adapter = null;
|
|
49
47
|
this.device = null;
|
|
50
48
|
this.context = null;
|
|
51
49
|
this.colorBuffer = null;
|
|
@@ -68,44 +66,55 @@ class WebGPUBackend extends Backend {
|
|
|
68
66
|
|
|
69
67
|
const parameters = this.parameters;
|
|
70
68
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
69
|
+
// create the device if it is not passed with parameters
|
|
70
|
+
|
|
71
|
+
let device;
|
|
74
72
|
|
|
75
|
-
|
|
73
|
+
if ( parameters.device === undefined ) {
|
|
76
74
|
|
|
77
|
-
|
|
75
|
+
const adapterOptions = {
|
|
76
|
+
powerPreference: parameters.powerPreference
|
|
77
|
+
};
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
const adapter = await navigator.gpu.requestAdapter( adapterOptions );
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
if ( adapter === null ) {
|
|
82
|
+
|
|
83
|
+
throw new Error( 'WebGPUBackend: Unable to create WebGPU adapter.' );
|
|
84
|
+
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// feature support
|
|
82
88
|
|
|
83
|
-
|
|
89
|
+
const features = Object.values( GPUFeatureName );
|
|
84
90
|
|
|
85
|
-
|
|
91
|
+
const supportedFeatures = [];
|
|
86
92
|
|
|
87
|
-
|
|
93
|
+
for ( const name of features ) {
|
|
88
94
|
|
|
89
|
-
|
|
95
|
+
if ( adapter.features.has( name ) ) {
|
|
90
96
|
|
|
91
|
-
|
|
97
|
+
supportedFeatures.push( name );
|
|
92
98
|
|
|
93
|
-
|
|
99
|
+
}
|
|
94
100
|
|
|
95
101
|
}
|
|
96
102
|
|
|
97
|
-
|
|
103
|
+
const deviceDescriptor = {
|
|
104
|
+
requiredFeatures: supportedFeatures,
|
|
105
|
+
requiredLimits: parameters.requiredLimits
|
|
106
|
+
};
|
|
98
107
|
|
|
99
|
-
|
|
100
|
-
requiredFeatures: supportedFeatures,
|
|
101
|
-
requiredLimits: parameters.requiredLimits
|
|
102
|
-
};
|
|
108
|
+
device = await adapter.requestDevice( deviceDescriptor );
|
|
103
109
|
|
|
104
|
-
|
|
110
|
+
} else {
|
|
111
|
+
|
|
112
|
+
device = parameters.device;
|
|
113
|
+
|
|
114
|
+
}
|
|
105
115
|
|
|
106
116
|
const context = ( parameters.context !== undefined ) ? parameters.context : renderer.domElement.getContext( 'webgpu' );
|
|
107
117
|
|
|
108
|
-
this.adapter = adapter;
|
|
109
118
|
this.device = device;
|
|
110
119
|
this.context = context;
|
|
111
120
|
|
|
@@ -871,7 +880,7 @@ class WebGPUBackend extends Backend {
|
|
|
871
880
|
|
|
872
881
|
// draw
|
|
873
882
|
|
|
874
|
-
const drawRange =
|
|
883
|
+
const drawRange = renderObject.drawRange;
|
|
875
884
|
const firstVertex = drawRange.start;
|
|
876
885
|
|
|
877
886
|
const instanceCount = this.getInstanceCount( renderObject );
|
|
@@ -1220,27 +1229,9 @@ class WebGPUBackend extends Backend {
|
|
|
1220
1229
|
|
|
1221
1230
|
}
|
|
1222
1231
|
|
|
1223
|
-
async hasFeatureAsync( name ) {
|
|
1224
|
-
|
|
1225
|
-
const adapter = this.adapter || await WebGPU.getStaticAdapter();
|
|
1226
|
-
|
|
1227
|
-
//
|
|
1228
|
-
|
|
1229
|
-
return adapter.features.has( name );
|
|
1230
|
-
|
|
1231
|
-
}
|
|
1232
|
-
|
|
1233
1232
|
hasFeature( name ) {
|
|
1234
1233
|
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
console.warn( 'WebGPUBackend: WebGPU adapter has not been initialized yet. Please use hasFeatureAsync instead' );
|
|
1238
|
-
|
|
1239
|
-
return false;
|
|
1240
|
-
|
|
1241
|
-
}
|
|
1242
|
-
|
|
1243
|
-
return this.adapter.features.has( name );
|
|
1234
|
+
return this.device.features.has( name );
|
|
1244
1235
|
|
|
1245
1236
|
}
|
|
1246
1237
|
|
|
@@ -1272,9 +1263,6 @@ class WebGPUBackend extends Backend {
|
|
|
1272
1263
|
|
|
1273
1264
|
}
|
|
1274
1265
|
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
1266
|
copyFramebufferToTexture( texture, renderContext ) {
|
|
1279
1267
|
|
|
1280
1268
|
const renderContextData = this.get( renderContext );
|
|
@@ -254,6 +254,21 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
254
254
|
|
|
255
255
|
}
|
|
256
256
|
|
|
257
|
+
generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
258
|
+
|
|
259
|
+
if ( shaderStage === 'fragment' ) {
|
|
260
|
+
|
|
261
|
+
// TODO handle i32 or u32 --> uvSnippet, array_index: A, ddx, ddy
|
|
262
|
+
return `textureSampleGrad( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] } )`;
|
|
263
|
+
|
|
264
|
+
} else {
|
|
265
|
+
|
|
266
|
+
console.error( `WebGPURenderer: THREE.TextureNode.gradient() does not support ${ shaderStage } shader.` );
|
|
267
|
+
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
}
|
|
271
|
+
|
|
257
272
|
generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
258
273
|
|
|
259
274
|
if ( shaderStage === 'fragment' ) {
|
|
@@ -522,7 +537,7 @@ ${ flowData.code }
|
|
|
522
537
|
|
|
523
538
|
getFragCoord() {
|
|
524
539
|
|
|
525
|
-
return this.getBuiltin( 'position', 'fragCoord', 'vec4<f32>' ) + '.
|
|
540
|
+
return this.getBuiltin( 'position', 'fragCoord', 'vec4<f32>' ) + '.xyz';
|
|
526
541
|
|
|
527
542
|
}
|
|
528
543
|
|
|
@@ -64,7 +64,6 @@ class WebGPUAttributeUtils {
|
|
|
64
64
|
|
|
65
65
|
if ( ( bufferAttribute.isStorageBufferAttribute || bufferAttribute.isStorageInstancedBufferAttribute ) && bufferAttribute.itemSize === 3 ) {
|
|
66
66
|
|
|
67
|
-
bufferAttribute.itemSize = 4;
|
|
68
67
|
array = new array.constructor( bufferAttribute.count * 4 );
|
|
69
68
|
|
|
70
69
|
for ( let i = 0; i < bufferAttribute.count; i ++ ) {
|
|
@@ -73,6 +72,10 @@ class WebGPUAttributeUtils {
|
|
|
73
72
|
|
|
74
73
|
}
|
|
75
74
|
|
|
75
|
+
// Update BufferAttribute
|
|
76
|
+
bufferAttribute.itemSize = 4;
|
|
77
|
+
bufferAttribute.array = array;
|
|
78
|
+
|
|
76
79
|
}
|
|
77
80
|
|
|
78
81
|
const size = array.byteLength + ( ( 4 - ( array.byteLength % 4 ) ) % 4 ); // ensure 4 byte alignment, see #20441
|
|
@@ -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
|
|
|
@@ -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
|
};
|
|
@@ -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/constants.js
CHANGED
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;
|
|
@@ -49,16 +49,16 @@ const INV_PHI = 1 / PHI;
|
|
|
49
49
|
// Vertices of a dodecahedron (except the opposites, which represent the
|
|
50
50
|
// same axis), used as axis directions evenly spread on a sphere.
|
|
51
51
|
const _axisDirections = [
|
|
52
|
-
/*@__PURE__*/ new Vector3(
|
|
53
|
-
/*@__PURE__*/ new Vector3( - 1, 1, 1 ),
|
|
54
|
-
/*@__PURE__*/ new Vector3( 1, 1, - 1 ),
|
|
55
|
-
/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),
|
|
56
|
-
/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),
|
|
57
|
-
/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),
|
|
58
|
-
/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),
|
|
59
|
-
/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),
|
|
52
|
+
/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ),
|
|
60
53
|
/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),
|
|
61
|
-
/*@__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 ) ];
|
|
62
62
|
|
|
63
63
|
/**
|
|
64
64
|
* This class generates a Prefiltered, Mipmapped Radiance Environment Map
|
|
@@ -444,12 +444,13 @@ class PMREMGenerator {
|
|
|
444
444
|
const renderer = this._renderer;
|
|
445
445
|
const autoClear = renderer.autoClear;
|
|
446
446
|
renderer.autoClear = false;
|
|
447
|
+
const n = this._lodPlanes.length;
|
|
447
448
|
|
|
448
|
-
for ( let i = 1; i <
|
|
449
|
+
for ( let i = 1; i < n; i ++ ) {
|
|
449
450
|
|
|
450
451
|
const sigma = Math.sqrt( this._sigmas[ i ] * this._sigmas[ i ] - this._sigmas[ i - 1 ] * this._sigmas[ i - 1 ] );
|
|
451
452
|
|
|
452
|
-
const poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ];
|
|
453
|
+
const poleAxis = _axisDirections[ ( n - i - 1 ) % _axisDirections.length ];
|
|
453
454
|
|
|
454
455
|
this._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );
|
|
455
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;
|
|
@@ -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;
|
|
@@ -68,6 +68,7 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
|
|
|
68
68
|
|
|
69
69
|
this._anisotropy = 0;
|
|
70
70
|
this._clearcoat = 0;
|
|
71
|
+
this._dispersion = 0;
|
|
71
72
|
this._iridescence = 0;
|
|
72
73
|
this._sheen = 0.0;
|
|
73
74
|
this._transmission = 0;
|
|
@@ -130,6 +131,24 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
|
|
|
130
131
|
|
|
131
132
|
}
|
|
132
133
|
|
|
134
|
+
get dispersion() {
|
|
135
|
+
|
|
136
|
+
return this._dispersion;
|
|
137
|
+
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
set dispersion( value ) {
|
|
141
|
+
|
|
142
|
+
if ( this._dispersion > 0 !== value > 0 ) {
|
|
143
|
+
|
|
144
|
+
this.version ++;
|
|
145
|
+
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
this._dispersion = value;
|
|
149
|
+
|
|
150
|
+
}
|
|
151
|
+
|
|
133
152
|
get sheen() {
|
|
134
153
|
|
|
135
154
|
return this._sheen;
|
|
@@ -188,6 +207,7 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
|
|
|
188
207
|
this.clearcoatNormalMap = source.clearcoatNormalMap;
|
|
189
208
|
this.clearcoatNormalScale.copy( source.clearcoatNormalScale );
|
|
190
209
|
|
|
210
|
+
this.dispersion = source.dispersion;
|
|
191
211
|
this.ior = source.ior;
|
|
192
212
|
|
|
193
213
|
this.iridescence = source.iridescence;
|
|
@@ -152,6 +152,7 @@ class BatchedMesh extends Mesh {
|
|
|
152
152
|
this._multiDrawCounts = new Int32Array( maxGeometryCount );
|
|
153
153
|
this._multiDrawStarts = new Int32Array( maxGeometryCount );
|
|
154
154
|
this._multiDrawCount = 0;
|
|
155
|
+
this._multiDrawInstances = null;
|
|
155
156
|
this._visibilityChanged = true;
|
|
156
157
|
|
|
157
158
|
// Local matrix per geometry by using data texture
|
|
@@ -593,6 +594,28 @@ class BatchedMesh extends Mesh {
|
|
|
593
594
|
|
|
594
595
|
}
|
|
595
596
|
|
|
597
|
+
getInstanceCountAt( id ) {
|
|
598
|
+
|
|
599
|
+
if ( this._multiDrawInstances === null ) return null;
|
|
600
|
+
|
|
601
|
+
return this._multiDrawInstances[ id ];
|
|
602
|
+
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
setInstanceCountAt( id, instanceCount ) {
|
|
606
|
+
|
|
607
|
+
if ( this._multiDrawInstances === null ) {
|
|
608
|
+
|
|
609
|
+
this._multiDrawInstances = new Int32Array( this._maxGeometryCount ).fill( 1 );
|
|
610
|
+
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
this._multiDrawInstances[ id ] = instanceCount;
|
|
614
|
+
|
|
615
|
+
return id;
|
|
616
|
+
|
|
617
|
+
}
|
|
618
|
+
|
|
596
619
|
// get bounding box and compute it if it doesn't exist
|
|
597
620
|
getBoundingBoxAt( id, target ) {
|
|
598
621
|
|