super-three 0.161.0 → 0.163.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +822 -1332
- package/build/three.module.js +820 -1328
- package/build/three.module.min.js +1 -1
- package/examples/jsm/controls/DragControls.js +91 -30
- package/examples/jsm/controls/OrbitControls.js +32 -6
- package/examples/jsm/controls/TransformControls.js +9 -9
- package/examples/jsm/exporters/GLTFExporter.js +30 -3
- package/examples/jsm/exporters/USDZExporter.js +15 -0
- package/examples/jsm/geometries/TextGeometry.js +10 -2
- package/examples/jsm/interactive/HTMLMesh.js +7 -9
- package/examples/jsm/interactive/InteractiveGroup.js +15 -25
- package/examples/jsm/libs/fflate.module.js +694 -496
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +1 -8723
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +1 -8734
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/libs/tween.module.js +32 -14
- package/examples/jsm/lines/LineMaterial.js +0 -2
- package/examples/jsm/loaders/3DMLoader.js +13 -21
- package/examples/jsm/loaders/3MFLoader.js +2 -0
- package/examples/jsm/loaders/EXRLoader.js +89 -19
- package/examples/jsm/loaders/FBXLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +6 -0
- package/examples/jsm/loaders/KTX2Loader.js +2 -6
- package/examples/jsm/loaders/LUT3dlLoader.js +0 -15
- package/examples/jsm/loaders/LUTCubeLoader.js +0 -14
- package/examples/jsm/loaders/LUTImageLoader.js +0 -14
- package/examples/jsm/loaders/RGBMLoader.js +16 -0
- package/examples/jsm/loaders/VOXLoader.js +9 -2
- package/examples/jsm/loaders/VRMLLoader.js +6 -2
- package/examples/jsm/misc/GPUComputationRenderer.js +0 -6
- package/examples/jsm/misc/ProgressiveLightMap.js +1 -0
- package/examples/jsm/nodes/Nodes.js +15 -8
- package/examples/jsm/nodes/accessors/AccessorsUtils.js +10 -0
- package/examples/jsm/nodes/accessors/BatchNode.js +78 -0
- package/examples/jsm/nodes/accessors/ClippingNode.js +144 -0
- package/examples/jsm/nodes/accessors/InstanceNode.js +25 -2
- package/examples/jsm/nodes/accessors/MaterialNode.js +2 -2
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +2 -12
- package/examples/jsm/nodes/accessors/MorphNode.js +20 -10
- package/examples/jsm/nodes/accessors/NormalNode.js +12 -2
- package/examples/jsm/nodes/accessors/ReferenceNode.js +87 -29
- package/examples/jsm/nodes/accessors/RendererReferenceNode.js +29 -0
- package/examples/jsm/nodes/accessors/SkinningNode.js +31 -10
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +18 -0
- package/examples/jsm/nodes/accessors/TangentNode.js +8 -2
- package/examples/jsm/nodes/accessors/TextureNode.js +30 -7
- package/examples/jsm/nodes/accessors/UniformsNode.js +140 -0
- package/examples/jsm/nodes/code/CodeNode.js +6 -0
- package/examples/jsm/nodes/core/AssignNode.js +68 -12
- package/examples/jsm/nodes/core/Node.js +67 -6
- package/examples/jsm/nodes/core/NodeBuilder.js +23 -24
- package/examples/jsm/nodes/core/NodeFrame.js +8 -8
- package/examples/jsm/nodes/core/NodeUtils.js +2 -2
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- package/examples/jsm/nodes/core/UniformNode.js +20 -0
- package/examples/jsm/nodes/display/BlendModeNode.js +30 -1
- package/examples/jsm/nodes/display/NormalMapNode.js +3 -5
- package/examples/jsm/nodes/display/PassNode.js +17 -1
- package/examples/jsm/nodes/display/ToneMappingNode.js +8 -4
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +6 -0
- package/examples/jsm/nodes/fog/FogExp2Node.js +4 -5
- package/examples/jsm/nodes/fog/FogNode.js +13 -3
- package/examples/jsm/nodes/fog/FogRangeNode.js +4 -3
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +12 -69
- package/examples/jsm/nodes/materials/NodeMaterial.js +70 -17
- package/examples/jsm/nodes/math/CondNode.js +42 -7
- package/examples/jsm/nodes/math/MathNode.js +20 -0
- package/examples/jsm/nodes/pmrem/PMREMNode.js +193 -0
- package/examples/jsm/nodes/pmrem/PMREMUtils.js +288 -0
- package/examples/jsm/nodes/shadernode/ShaderNode.js +1 -1
- package/examples/jsm/nodes/utils/ArrayElementNode.js +0 -6
- package/examples/jsm/nodes/utils/EquirectUVNode.js +1 -1
- package/examples/jsm/nodes/utils/LoopNode.js +2 -0
- package/examples/jsm/nodes/utils/StorageArrayElementNode.js +91 -0
- package/examples/jsm/objects/QuadMesh.js +7 -23
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/GlitchPass.js +0 -3
- package/examples/jsm/postprocessing/LUTPass.js +5 -71
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +0 -1
- package/examples/jsm/postprocessing/SSAOPass.js +0 -3
- package/examples/jsm/renderers/common/Animation.js +3 -0
- package/examples/jsm/renderers/common/Background.js +3 -3
- package/examples/jsm/renderers/common/ClippingContext.js +165 -0
- package/examples/jsm/renderers/common/Info.js +11 -19
- package/examples/jsm/renderers/common/PostProcessing.js +12 -4
- package/examples/jsm/renderers/common/RenderContext.js +3 -1
- package/examples/jsm/renderers/common/RenderContexts.js +2 -13
- package/examples/jsm/renderers/common/RenderObject.js +46 -3
- package/examples/jsm/renderers/common/RenderObjects.js +2 -0
- package/examples/jsm/renderers/common/Renderer.js +113 -39
- package/examples/jsm/renderers/common/StorageBufferAttribute.js +2 -2
- package/examples/jsm/renderers/common/StorageInstancedBufferAttribute.js +17 -0
- package/examples/jsm/renderers/common/Textures.js +3 -13
- package/examples/jsm/renderers/common/UniformsGroup.js +6 -4
- package/examples/jsm/renderers/common/extras/PMREMGenerator.js +777 -0
- package/examples/jsm/renderers/common/nodes/NodeStorageBuffer.js +23 -0
- package/examples/jsm/renderers/common/nodes/NodeUniformBuffer.js +23 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +6 -18
- package/examples/jsm/renderers/webgl/WebGLBackend.js +174 -30
- package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +141 -0
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +136 -11
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +8 -2
- package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +1 -0
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +90 -0
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +3 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -2
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +67 -37
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +20 -43
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +32 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +94 -20
- package/examples/jsm/shaders/OutputShader.js +4 -0
- package/examples/jsm/utils/GPUStatsPanel.js +10 -45
- package/examples/jsm/utils/SkeletonUtils.js +14 -3
- package/examples/jsm/utils/TextureUtils.js +1 -1
- package/examples/jsm/webxr/VRButton.js +13 -5
- package/examples/jsm/webxr/XRButton.js +0 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +8 -0
- package/package.json +4 -3
- package/src/Three.Legacy.js +20 -0
- package/src/Three.js +0 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/constants.js +4 -7
- package/src/core/BufferAttribute.js +0 -11
- package/src/core/BufferGeometry.js +23 -29
- package/src/core/Object3D.js +21 -7
- package/src/core/Raycaster.js +18 -4
- package/src/core/RenderTarget.js +44 -21
- package/src/extras/PMREMGenerator.js +11 -0
- package/src/extras/curves/EllipseCurve.js +2 -2
- package/src/helpers/SpotLightHelper.js +18 -1
- package/src/loaders/DataTextureLoader.js +0 -4
- package/src/loaders/MaterialLoader.js +1 -0
- package/src/loaders/ObjectLoader.js +4 -1
- package/src/materials/Material.js +2 -1
- package/src/materials/MeshBasicMaterial.js +3 -0
- package/src/materials/MeshLambertMaterial.js +3 -0
- package/src/materials/MeshPhongMaterial.js +3 -0
- package/src/materials/MeshStandardMaterial.js +3 -0
- package/src/materials/ShaderMaterial.js +0 -4
- package/src/math/Quaternion.js +13 -12
- package/src/math/Spherical.js +4 -5
- package/src/math/Vector3.js +7 -7
- package/src/objects/BatchedMesh.js +4 -3
- package/src/objects/InstancedMesh.js +63 -0
- package/src/objects/Mesh.js +0 -1
- package/src/renderers/WebGLCubeRenderTarget.js +1 -10
- package/src/renderers/WebGLRenderer.js +70 -136
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -0
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +2 -10
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +2 -16
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +14 -0
- package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +11 -2
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +32 -22
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +23 -0
- package/src/renderers/shaders/ShaderChunk.js +2 -0
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +3 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/points.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib.js +3 -2
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +10 -1
- package/src/renderers/webgl/WebGLAttributes.js +6 -33
- package/src/renderers/webgl/WebGLBackground.js +18 -0
- package/src/renderers/webgl/WebGLBindingStates.js +14 -51
- package/src/renderers/webgl/WebGLBufferRenderer.js +3 -25
- package/src/renderers/webgl/WebGLCapabilities.js +2 -12
- package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
- package/src/renderers/webgl/WebGLExtensions.js +4 -19
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +3 -25
- package/src/renderers/webgl/WebGLLights.js +6 -32
- package/src/renderers/webgl/WebGLMaterials.js +26 -4
- package/src/renderers/webgl/WebGLMorphtargets.js +79 -210
- package/src/renderers/webgl/WebGLProgram.js +30 -48
- package/src/renderers/webgl/WebGLPrograms.js +5 -14
- package/src/renderers/webgl/WebGLRenderStates.js +8 -6
- package/src/renderers/webgl/WebGLState.js +21 -75
- package/src/renderers/webgl/WebGLTextures.js +143 -275
- package/src/renderers/webgl/WebGLUniformsGroups.js +1 -1
- package/src/renderers/webgl/WebGLUtils.js +6 -57
- package/src/renderers/webxr/WebXRDepthSensing.js +2 -3
- package/src/renderers/webxr/WebXRManager.js +2 -2
- package/src/scenes/Scene.js +14 -0
- package/src/textures/Texture.js +6 -24
- package/examples/jsm/nodes/core/ArrayUniformNode.js +0 -26
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
- package/src/renderers/WebGL1Renderer.js +0 -7
- package/src/renderers/WebGLMultipleRenderTargets.js +0 -82
|
@@ -20,24 +20,26 @@ function WebGLCubeUVMaps( renderer ) {
|
|
|
20
20
|
|
|
21
21
|
if ( isEquirectMap || isCubeMap ) {
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
let renderTarget = cubeUVmaps.get( texture );
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
const currentPMREMVersion = renderTarget !== undefined ? renderTarget.texture.pmremVersion : 0;
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
if ( texture.isRenderTargetTexture && texture.pmremVersion !== currentPMREMVersion ) {
|
|
28
28
|
|
|
29
29
|
if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );
|
|
30
30
|
|
|
31
31
|
renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture, renderTarget ) : pmremGenerator.fromCubemap( texture, renderTarget );
|
|
32
|
+
renderTarget.texture.pmremVersion = texture.pmremVersion;
|
|
33
|
+
|
|
32
34
|
cubeUVmaps.set( texture, renderTarget );
|
|
33
35
|
|
|
34
36
|
return renderTarget.texture;
|
|
35
37
|
|
|
36
38
|
} else {
|
|
37
39
|
|
|
38
|
-
if (
|
|
40
|
+
if ( renderTarget !== undefined ) {
|
|
39
41
|
|
|
40
|
-
return
|
|
42
|
+
return renderTarget.texture;
|
|
41
43
|
|
|
42
44
|
} else {
|
|
43
45
|
|
|
@@ -47,7 +49,9 @@ function WebGLCubeUVMaps( renderer ) {
|
|
|
47
49
|
|
|
48
50
|
if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );
|
|
49
51
|
|
|
50
|
-
|
|
52
|
+
renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );
|
|
53
|
+
renderTarget.texture.pmremVersion = texture.pmremVersion;
|
|
54
|
+
|
|
51
55
|
cubeUVmaps.set( texture, renderTarget );
|
|
52
56
|
|
|
53
57
|
texture.addEventListener( 'dispose', onTextureDispose );
|
|
@@ -49,29 +49,14 @@ function WebGLExtensions( gl ) {
|
|
|
49
49
|
|
|
50
50
|
},
|
|
51
51
|
|
|
52
|
-
init: function (
|
|
53
|
-
|
|
54
|
-
if ( capabilities.isWebGL2 ) {
|
|
55
|
-
|
|
56
|
-
getExtension( 'EXT_color_buffer_float' );
|
|
57
|
-
getExtension( 'WEBGL_clip_cull_distance' );
|
|
58
|
-
|
|
59
|
-
} else {
|
|
60
|
-
|
|
61
|
-
getExtension( 'WEBGL_depth_texture' );
|
|
62
|
-
getExtension( 'OES_texture_float' );
|
|
63
|
-
getExtension( 'OES_texture_half_float' );
|
|
64
|
-
getExtension( 'OES_texture_half_float_linear' );
|
|
65
|
-
getExtension( 'OES_standard_derivatives' );
|
|
66
|
-
getExtension( 'OES_element_index_uint' );
|
|
67
|
-
getExtension( 'OES_vertex_array_object' );
|
|
68
|
-
getExtension( 'ANGLE_instanced_arrays' );
|
|
69
|
-
|
|
70
|
-
}
|
|
52
|
+
init: function () {
|
|
71
53
|
|
|
54
|
+
getExtension( 'EXT_color_buffer_float' );
|
|
55
|
+
getExtension( 'WEBGL_clip_cull_distance' );
|
|
72
56
|
getExtension( 'OES_texture_float_linear' );
|
|
73
57
|
getExtension( 'EXT_color_buffer_half_float' );
|
|
74
58
|
getExtension( 'WEBGL_multisampled_render_to_texture' );
|
|
59
|
+
getExtension( 'WEBGL_render_shared_exponent' );
|
|
75
60
|
|
|
76
61
|
},
|
|
77
62
|
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
function WebGLIndexedBufferRenderer( gl, extensions, info
|
|
2
|
-
|
|
3
|
-
const isWebGL2 = capabilities.isWebGL2;
|
|
1
|
+
function WebGLIndexedBufferRenderer( gl, extensions, info ) {
|
|
4
2
|
|
|
5
3
|
let mode;
|
|
6
4
|
|
|
@@ -31,28 +29,7 @@ function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {
|
|
|
31
29
|
|
|
32
30
|
if ( primcount === 0 ) return;
|
|
33
31
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if ( isWebGL2 ) {
|
|
37
|
-
|
|
38
|
-
extension = gl;
|
|
39
|
-
methodName = 'drawElementsInstanced';
|
|
40
|
-
|
|
41
|
-
} else {
|
|
42
|
-
|
|
43
|
-
extension = extensions.get( 'ANGLE_instanced_arrays' );
|
|
44
|
-
methodName = 'drawElementsInstancedANGLE';
|
|
45
|
-
|
|
46
|
-
if ( extension === null ) {
|
|
47
|
-
|
|
48
|
-
console.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );
|
|
49
|
-
return;
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
extension[ methodName ]( mode, count, type, start * bytesPerElement, primcount );
|
|
32
|
+
gl.drawElementsInstanced( mode, count, type, start * bytesPerElement, primcount );
|
|
56
33
|
|
|
57
34
|
info.update( count, mode, primcount );
|
|
58
35
|
|
|
@@ -63,6 +40,7 @@ function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {
|
|
|
63
40
|
if ( drawCount === 0 ) return;
|
|
64
41
|
|
|
65
42
|
const extension = extensions.get( 'WEBGL_multi_draw' );
|
|
43
|
+
|
|
66
44
|
if ( extension === null ) {
|
|
67
45
|
|
|
68
46
|
for ( let i = 0; i < drawCount; i ++ ) {
|
|
@@ -150,7 +150,7 @@ function shadowCastingAndTexturingLightsFirst( lightA, lightB ) {
|
|
|
150
150
|
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
-
function WebGLLights( extensions
|
|
153
|
+
function WebGLLights( extensions ) {
|
|
154
154
|
|
|
155
155
|
const cache = new UniformsCache();
|
|
156
156
|
|
|
@@ -399,41 +399,15 @@ function WebGLLights( extensions, capabilities ) {
|
|
|
399
399
|
|
|
400
400
|
if ( rectAreaLength > 0 ) {
|
|
401
401
|
|
|
402
|
-
if (
|
|
402
|
+
if ( extensions.has( 'OES_texture_float_linear' ) === true ) {
|
|
403
403
|
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
if ( extensions.has( 'OES_texture_float_linear' ) === true ) {
|
|
407
|
-
|
|
408
|
-
state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;
|
|
409
|
-
state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;
|
|
410
|
-
|
|
411
|
-
} else {
|
|
412
|
-
|
|
413
|
-
state.rectAreaLTC1 = UniformsLib.LTC_HALF_1;
|
|
414
|
-
state.rectAreaLTC2 = UniformsLib.LTC_HALF_2;
|
|
415
|
-
|
|
416
|
-
}
|
|
404
|
+
state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;
|
|
405
|
+
state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;
|
|
417
406
|
|
|
418
407
|
} else {
|
|
419
408
|
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
if ( extensions.has( 'OES_texture_float_linear' ) === true ) {
|
|
423
|
-
|
|
424
|
-
state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;
|
|
425
|
-
state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;
|
|
426
|
-
|
|
427
|
-
} else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) {
|
|
428
|
-
|
|
429
|
-
state.rectAreaLTC1 = UniformsLib.LTC_HALF_1;
|
|
430
|
-
state.rectAreaLTC2 = UniformsLib.LTC_HALF_2;
|
|
431
|
-
|
|
432
|
-
} else {
|
|
433
|
-
|
|
434
|
-
console.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' );
|
|
435
|
-
|
|
436
|
-
}
|
|
409
|
+
state.rectAreaLTC1 = UniformsLib.LTC_HALF_1;
|
|
410
|
+
state.rectAreaLTC2 = UniformsLib.LTC_HALF_2;
|
|
437
411
|
|
|
438
412
|
}
|
|
439
413
|
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { BackSide } from '../../constants.js';
|
|
2
2
|
import { getUnlitUniformColorSpace } from '../shaders/UniformsUtils.js';
|
|
3
|
+
import { Euler } from '../../math/Euler.js';
|
|
4
|
+
import { Matrix4 } from '../../math/Matrix4.js';
|
|
5
|
+
|
|
6
|
+
const _e1 = /*@__PURE__*/ new Euler();
|
|
7
|
+
const _m1 = /*@__PURE__*/ new Matrix4();
|
|
3
8
|
|
|
4
9
|
function WebGLMaterials( renderer, properties ) {
|
|
5
10
|
|
|
@@ -209,12 +214,30 @@ function WebGLMaterials( renderer, properties ) {
|
|
|
209
214
|
|
|
210
215
|
}
|
|
211
216
|
|
|
212
|
-
const
|
|
217
|
+
const materialProperties = properties.get( material );
|
|
218
|
+
|
|
219
|
+
const envMap = materialProperties.envMap;
|
|
220
|
+
const envMapRotation = materialProperties.envMapRotation;
|
|
213
221
|
|
|
214
222
|
if ( envMap ) {
|
|
215
223
|
|
|
216
224
|
uniforms.envMap.value = envMap;
|
|
217
225
|
|
|
226
|
+
_e1.copy( envMapRotation );
|
|
227
|
+
|
|
228
|
+
// accommodate left-handed frame
|
|
229
|
+
_e1.x *= - 1; _e1.y *= - 1; _e1.z *= - 1;
|
|
230
|
+
|
|
231
|
+
if ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) {
|
|
232
|
+
|
|
233
|
+
// environment maps which are not cube render targets or PMREMs follow a different convention
|
|
234
|
+
_e1.y *= - 1;
|
|
235
|
+
_e1.z *= - 1;
|
|
236
|
+
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
uniforms.envMapRotation.value.setFromMatrix4( _m1.makeRotationFromEuler( _e1 ) );
|
|
240
|
+
|
|
218
241
|
uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;
|
|
219
242
|
|
|
220
243
|
uniforms.reflectivity.value = material.reflectivity;
|
|
@@ -370,11 +393,10 @@ function WebGLMaterials( renderer, properties ) {
|
|
|
370
393
|
|
|
371
394
|
}
|
|
372
395
|
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
if ( envMap ) {
|
|
396
|
+
if ( material.envMap ) {
|
|
376
397
|
|
|
377
398
|
//uniforms.envMap.value = material.envMap; // part of uniforms common
|
|
399
|
+
|
|
378
400
|
uniforms.envMapIntensity.value = material.envMapIntensity;
|
|
379
401
|
|
|
380
402
|
}
|
|
@@ -3,289 +3,158 @@ import { DataArrayTexture } from '../../textures/DataArrayTexture.js';
|
|
|
3
3
|
import { Vector4 } from '../../math/Vector4.js';
|
|
4
4
|
import { Vector2 } from '../../math/Vector2.js';
|
|
5
5
|
|
|
6
|
-
function numericalSort( a, b ) {
|
|
7
|
-
|
|
8
|
-
return a[ 0 ] - b[ 0 ];
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
function absNumericalSort( a, b ) {
|
|
13
|
-
|
|
14
|
-
return Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
6
|
function WebGLMorphtargets( gl, capabilities, textures ) {
|
|
19
7
|
|
|
20
|
-
const influencesList = {};
|
|
21
|
-
const morphInfluences = new Float32Array( 8 );
|
|
22
8
|
const morphTextures = new WeakMap();
|
|
23
9
|
const morph = new Vector4();
|
|
24
10
|
|
|
25
|
-
const workInfluences = [];
|
|
26
|
-
|
|
27
|
-
for ( let i = 0; i < 8; i ++ ) {
|
|
28
|
-
|
|
29
|
-
workInfluences[ i ] = [ i, 0 ];
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
|
|
33
11
|
function update( object, geometry, program ) {
|
|
34
12
|
|
|
35
13
|
const objectInfluences = object.morphTargetInfluences;
|
|
36
14
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
// instead of using attributes, the WebGL 2 code path encodes morph targets
|
|
40
|
-
// into an array of data textures. Each layer represents a single morph target.
|
|
41
|
-
|
|
42
|
-
const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
|
|
43
|
-
const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
|
|
44
|
-
|
|
45
|
-
let entry = morphTextures.get( geometry );
|
|
46
|
-
|
|
47
|
-
if ( entry === undefined || entry.count !== morphTargetsCount ) {
|
|
48
|
-
|
|
49
|
-
if ( entry !== undefined ) entry.texture.dispose();
|
|
15
|
+
// instead of using attributes, the WebGL 2 code path encodes morph targets
|
|
16
|
+
// into an array of data textures. Each layer represents a single morph target.
|
|
50
17
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const hasMorphColors = geometry.morphAttributes.color !== undefined;
|
|
18
|
+
const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
|
|
19
|
+
const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
|
|
54
20
|
|
|
55
|
-
|
|
56
|
-
const morphNormals = geometry.morphAttributes.normal || [];
|
|
57
|
-
const morphColors = geometry.morphAttributes.color || [];
|
|
21
|
+
let entry = morphTextures.get( geometry );
|
|
58
22
|
|
|
59
|
-
|
|
23
|
+
if ( entry === undefined || entry.count !== morphTargetsCount ) {
|
|
60
24
|
|
|
61
|
-
|
|
62
|
-
if ( hasMorphNormals === true ) vertexDataCount = 2;
|
|
63
|
-
if ( hasMorphColors === true ) vertexDataCount = 3;
|
|
25
|
+
if ( entry !== undefined ) entry.texture.dispose();
|
|
64
26
|
|
|
65
|
-
|
|
66
|
-
|
|
27
|
+
const hasMorphPosition = geometry.morphAttributes.position !== undefined;
|
|
28
|
+
const hasMorphNormals = geometry.morphAttributes.normal !== undefined;
|
|
29
|
+
const hasMorphColors = geometry.morphAttributes.color !== undefined;
|
|
67
30
|
|
|
68
|
-
|
|
31
|
+
const morphTargets = geometry.morphAttributes.position || [];
|
|
32
|
+
const morphNormals = geometry.morphAttributes.normal || [];
|
|
33
|
+
const morphColors = geometry.morphAttributes.color || [];
|
|
69
34
|
|
|
70
|
-
|
|
71
|
-
width = capabilities.maxTextureSize;
|
|
35
|
+
let vertexDataCount = 0;
|
|
72
36
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
37
|
+
if ( hasMorphPosition === true ) vertexDataCount = 1;
|
|
38
|
+
if ( hasMorphNormals === true ) vertexDataCount = 2;
|
|
39
|
+
if ( hasMorphColors === true ) vertexDataCount = 3;
|
|
76
40
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
texture.needsUpdate = true;
|
|
41
|
+
let width = geometry.attributes.position.count * vertexDataCount;
|
|
42
|
+
let height = 1;
|
|
80
43
|
|
|
81
|
-
|
|
44
|
+
if ( width > capabilities.maxTextureSize ) {
|
|
82
45
|
|
|
83
|
-
|
|
46
|
+
height = Math.ceil( width / capabilities.maxTextureSize );
|
|
47
|
+
width = capabilities.maxTextureSize;
|
|
84
48
|
|
|
85
|
-
|
|
49
|
+
}
|
|
86
50
|
|
|
87
|
-
|
|
88
|
-
const morphNormal = morphNormals[ i ];
|
|
89
|
-
const morphColor = morphColors[ i ];
|
|
51
|
+
const buffer = new Float32Array( width * height * 4 * morphTargetsCount );
|
|
90
52
|
|
|
91
|
-
|
|
53
|
+
const texture = new DataArrayTexture( buffer, width, height, morphTargetsCount );
|
|
54
|
+
texture.type = FloatType;
|
|
55
|
+
texture.needsUpdate = true;
|
|
92
56
|
|
|
93
|
-
|
|
57
|
+
// fill buffer
|
|
94
58
|
|
|
95
|
-
|
|
59
|
+
const vertexDataStride = vertexDataCount * 4;
|
|
96
60
|
|
|
97
|
-
|
|
61
|
+
for ( let i = 0; i < morphTargetsCount; i ++ ) {
|
|
98
62
|
|
|
99
|
-
|
|
63
|
+
const morphTarget = morphTargets[ i ];
|
|
64
|
+
const morphNormal = morphNormals[ i ];
|
|
65
|
+
const morphColor = morphColors[ i ];
|
|
100
66
|
|
|
101
|
-
|
|
102
|
-
buffer[ offset + stride + 1 ] = morph.y;
|
|
103
|
-
buffer[ offset + stride + 2 ] = morph.z;
|
|
104
|
-
buffer[ offset + stride + 3 ] = 0;
|
|
67
|
+
const offset = width * height * 4 * i;
|
|
105
68
|
|
|
106
|
-
|
|
69
|
+
for ( let j = 0; j < morphTarget.count; j ++ ) {
|
|
107
70
|
|
|
108
|
-
|
|
71
|
+
const stride = j * vertexDataStride;
|
|
109
72
|
|
|
110
|
-
|
|
73
|
+
if ( hasMorphPosition === true ) {
|
|
111
74
|
|
|
112
|
-
|
|
113
|
-
buffer[ offset + stride + 5 ] = morph.y;
|
|
114
|
-
buffer[ offset + stride + 6 ] = morph.z;
|
|
115
|
-
buffer[ offset + stride + 7 ] = 0;
|
|
75
|
+
morph.fromBufferAttribute( morphTarget, j );
|
|
116
76
|
|
|
117
|
-
|
|
77
|
+
buffer[ offset + stride + 0 ] = morph.x;
|
|
78
|
+
buffer[ offset + stride + 1 ] = morph.y;
|
|
79
|
+
buffer[ offset + stride + 2 ] = morph.z;
|
|
80
|
+
buffer[ offset + stride + 3 ] = 0;
|
|
118
81
|
|
|
119
|
-
|
|
82
|
+
}
|
|
120
83
|
|
|
121
|
-
|
|
84
|
+
if ( hasMorphNormals === true ) {
|
|
122
85
|
|
|
123
|
-
|
|
124
|
-
buffer[ offset + stride + 9 ] = morph.y;
|
|
125
|
-
buffer[ offset + stride + 10 ] = morph.z;
|
|
126
|
-
buffer[ offset + stride + 11 ] = ( morphColor.itemSize === 4 ) ? morph.w : 1;
|
|
86
|
+
morph.fromBufferAttribute( morphNormal, j );
|
|
127
87
|
|
|
128
|
-
|
|
88
|
+
buffer[ offset + stride + 4 ] = morph.x;
|
|
89
|
+
buffer[ offset + stride + 5 ] = morph.y;
|
|
90
|
+
buffer[ offset + stride + 6 ] = morph.z;
|
|
91
|
+
buffer[ offset + stride + 7 ] = 0;
|
|
129
92
|
|
|
130
93
|
}
|
|
131
94
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
entry = {
|
|
135
|
-
count: morphTargetsCount,
|
|
136
|
-
texture: texture,
|
|
137
|
-
size: new Vector2( width, height )
|
|
138
|
-
};
|
|
95
|
+
if ( hasMorphColors === true ) {
|
|
139
96
|
|
|
140
|
-
|
|
97
|
+
morph.fromBufferAttribute( morphColor, j );
|
|
141
98
|
|
|
142
|
-
|
|
99
|
+
buffer[ offset + stride + 8 ] = morph.x;
|
|
100
|
+
buffer[ offset + stride + 9 ] = morph.y;
|
|
101
|
+
buffer[ offset + stride + 10 ] = morph.z;
|
|
102
|
+
buffer[ offset + stride + 11 ] = ( morphColor.itemSize === 4 ) ? morph.w : 1;
|
|
143
103
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
morphTextures.delete( geometry );
|
|
147
|
-
|
|
148
|
-
geometry.removeEventListener( 'dispose', disposeTexture );
|
|
104
|
+
}
|
|
149
105
|
|
|
150
106
|
}
|
|
151
107
|
|
|
152
|
-
geometry.addEventListener( 'dispose', disposeTexture );
|
|
153
|
-
|
|
154
108
|
}
|
|
155
109
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
morphInfluencesSum += objectInfluences[ i ];
|
|
163
|
-
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;
|
|
167
|
-
|
|
168
|
-
program.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );
|
|
169
|
-
program.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );
|
|
170
|
-
|
|
171
|
-
program.getUniforms().setValue( gl, 'morphTargetsTexture', entry.texture, textures );
|
|
172
|
-
program.getUniforms().setValue( gl, 'morphTargetsTextureSize', entry.size );
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
} else {
|
|
176
|
-
|
|
177
|
-
// When object doesn't have morph target influences defined, we treat it as a 0-length array
|
|
178
|
-
// This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences
|
|
179
|
-
|
|
180
|
-
const length = objectInfluences === undefined ? 0 : objectInfluences.length;
|
|
110
|
+
entry = {
|
|
111
|
+
count: morphTargetsCount,
|
|
112
|
+
texture: texture,
|
|
113
|
+
size: new Vector2( width, height )
|
|
114
|
+
};
|
|
181
115
|
|
|
182
|
-
|
|
116
|
+
morphTextures.set( geometry, entry );
|
|
183
117
|
|
|
184
|
-
|
|
118
|
+
function disposeTexture() {
|
|
185
119
|
|
|
186
|
-
|
|
120
|
+
texture.dispose();
|
|
187
121
|
|
|
188
|
-
|
|
122
|
+
morphTextures.delete( geometry );
|
|
189
123
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
influences[ i ] = [ i, 0 ];
|
|
193
|
-
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
influencesList[ geometry.id ] = influences;
|
|
197
|
-
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
// Collect influences
|
|
201
|
-
|
|
202
|
-
for ( let i = 0; i < length; i ++ ) {
|
|
203
|
-
|
|
204
|
-
const influence = influences[ i ];
|
|
205
|
-
|
|
206
|
-
influence[ 0 ] = i;
|
|
207
|
-
influence[ 1 ] = objectInfluences[ i ];
|
|
124
|
+
geometry.removeEventListener( 'dispose', disposeTexture );
|
|
208
125
|
|
|
209
126
|
}
|
|
210
127
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
for ( let i = 0; i < 8; i ++ ) {
|
|
214
|
-
|
|
215
|
-
if ( i < length && influences[ i ][ 1 ] ) {
|
|
128
|
+
geometry.addEventListener( 'dispose', disposeTexture );
|
|
216
129
|
|
|
217
|
-
|
|
218
|
-
workInfluences[ i ][ 1 ] = influences[ i ][ 1 ];
|
|
219
|
-
|
|
220
|
-
} else {
|
|
221
|
-
|
|
222
|
-
workInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER;
|
|
223
|
-
workInfluences[ i ][ 1 ] = 0;
|
|
224
|
-
|
|
225
|
-
}
|
|
130
|
+
}
|
|
226
131
|
|
|
227
|
-
|
|
132
|
+
//
|
|
133
|
+
if ( object.isInstancedMesh === true && object.morphTexture !== null ) {
|
|
228
134
|
|
|
229
|
-
|
|
135
|
+
program.getUniforms().setValue( gl, 'morphTexture', object.morphTexture, textures );
|
|
230
136
|
|
|
231
|
-
|
|
232
|
-
const morphNormals = geometry.morphAttributes.normal;
|
|
137
|
+
} else {
|
|
233
138
|
|
|
234
139
|
let morphInfluencesSum = 0;
|
|
235
140
|
|
|
236
|
-
for ( let i = 0; i <
|
|
237
|
-
|
|
238
|
-
const influence = workInfluences[ i ];
|
|
239
|
-
const index = influence[ 0 ];
|
|
240
|
-
const value = influence[ 1 ];
|
|
241
|
-
|
|
242
|
-
if ( index !== Number.MAX_SAFE_INTEGER && value ) {
|
|
243
|
-
|
|
244
|
-
if ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) {
|
|
245
|
-
|
|
246
|
-
geometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] );
|
|
247
|
-
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
if ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) {
|
|
251
|
-
|
|
252
|
-
geometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] );
|
|
253
|
-
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
morphInfluences[ i ] = value;
|
|
257
|
-
morphInfluencesSum += value;
|
|
258
|
-
|
|
259
|
-
} else {
|
|
260
|
-
|
|
261
|
-
if ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) {
|
|
262
|
-
|
|
263
|
-
geometry.deleteAttribute( 'morphTarget' + i );
|
|
264
|
-
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
if ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) {
|
|
268
|
-
|
|
269
|
-
geometry.deleteAttribute( 'morphNormal' + i );
|
|
270
|
-
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
morphInfluences[ i ] = 0;
|
|
141
|
+
for ( let i = 0; i < objectInfluences.length; i ++ ) {
|
|
274
142
|
|
|
275
|
-
|
|
143
|
+
morphInfluencesSum += objectInfluences[ i ];
|
|
276
144
|
|
|
277
145
|
}
|
|
278
146
|
|
|
279
|
-
// GLSL shader uses formula baseinfluence * base + sum(target * influence)
|
|
280
|
-
// This allows us to switch between absolute morphs and relative morphs without changing shader code
|
|
281
|
-
// When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence)
|
|
282
147
|
const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;
|
|
283
148
|
|
|
149
|
+
|
|
284
150
|
program.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );
|
|
285
|
-
program.getUniforms().setValue( gl, 'morphTargetInfluences',
|
|
151
|
+
program.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );
|
|
286
152
|
|
|
287
153
|
}
|
|
288
154
|
|
|
155
|
+
program.getUniforms().setValue( gl, 'morphTargetsTexture', entry.texture, textures );
|
|
156
|
+
program.getUniforms().setValue( gl, 'morphTargetsTextureSize', entry.size );
|
|
157
|
+
|
|
289
158
|
}
|
|
290
159
|
|
|
291
160
|
return {
|