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
|
@@ -3,296 +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();
|
|
50
|
-
|
|
51
|
-
const hasMorphPosition = geometry.morphAttributes.position !== undefined;
|
|
52
|
-
const hasMorphNormals = geometry.morphAttributes.normal !== undefined;
|
|
53
|
-
const hasMorphColors = geometry.morphAttributes.color !== undefined;
|
|
54
|
-
|
|
55
|
-
const morphTargets = geometry.morphAttributes.position || [];
|
|
56
|
-
const morphNormals = geometry.morphAttributes.normal || [];
|
|
57
|
-
const morphColors = geometry.morphAttributes.color || [];
|
|
58
|
-
|
|
59
|
-
let vertexDataCount = 0;
|
|
60
|
-
|
|
61
|
-
if ( hasMorphPosition === true ) vertexDataCount = 1;
|
|
62
|
-
if ( hasMorphNormals === true ) vertexDataCount = 2;
|
|
63
|
-
if ( hasMorphColors === true ) vertexDataCount = 3;
|
|
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.
|
|
64
17
|
|
|
65
|
-
|
|
66
|
-
|
|
18
|
+
const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
|
|
19
|
+
const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
|
|
67
20
|
|
|
68
|
-
|
|
21
|
+
let entry = morphTextures.get( geometry );
|
|
69
22
|
|
|
70
|
-
|
|
71
|
-
width = capabilities.maxTextureSize;
|
|
23
|
+
if ( entry === undefined || entry.count !== morphTargetsCount ) {
|
|
72
24
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const buffer = new Float32Array( width * height * 4 * morphTargetsCount );
|
|
25
|
+
if ( entry !== undefined ) entry.texture.dispose();
|
|
76
26
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
27
|
+
const hasMorphPosition = geometry.morphAttributes.position !== undefined;
|
|
28
|
+
const hasMorphNormals = geometry.morphAttributes.normal !== undefined;
|
|
29
|
+
const hasMorphColors = geometry.morphAttributes.color !== undefined;
|
|
80
30
|
|
|
81
|
-
|
|
31
|
+
const morphTargets = geometry.morphAttributes.position || [];
|
|
32
|
+
const morphNormals = geometry.morphAttributes.normal || [];
|
|
33
|
+
const morphColors = geometry.morphAttributes.color || [];
|
|
82
34
|
|
|
83
|
-
|
|
35
|
+
let vertexDataCount = 0;
|
|
84
36
|
|
|
85
|
-
|
|
37
|
+
if ( hasMorphPosition === true ) vertexDataCount = 1;
|
|
38
|
+
if ( hasMorphNormals === true ) vertexDataCount = 2;
|
|
39
|
+
if ( hasMorphColors === true ) vertexDataCount = 3;
|
|
86
40
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
const morphColor = morphColors[ i ];
|
|
41
|
+
let width = geometry.attributes.position.count * vertexDataCount;
|
|
42
|
+
let height = 1;
|
|
90
43
|
|
|
91
|
-
|
|
44
|
+
if ( width > capabilities.maxTextureSize ) {
|
|
92
45
|
|
|
93
|
-
|
|
46
|
+
height = Math.ceil( width / capabilities.maxTextureSize );
|
|
47
|
+
width = capabilities.maxTextureSize;
|
|
94
48
|
|
|
95
|
-
|
|
49
|
+
}
|
|
96
50
|
|
|
97
|
-
|
|
51
|
+
const buffer = new Float32Array( width * height * 4 * morphTargetsCount );
|
|
98
52
|
|
|
99
|
-
|
|
53
|
+
const texture = new DataArrayTexture( buffer, width, height, morphTargetsCount );
|
|
54
|
+
texture.type = FloatType;
|
|
55
|
+
texture.needsUpdate = true;
|
|
100
56
|
|
|
101
|
-
|
|
102
|
-
buffer[ offset + stride + 1 ] = morph.y;
|
|
103
|
-
buffer[ offset + stride + 2 ] = morph.z;
|
|
104
|
-
buffer[ offset + stride + 3 ] = 0;
|
|
57
|
+
// fill buffer
|
|
105
58
|
|
|
106
|
-
|
|
59
|
+
const vertexDataStride = vertexDataCount * 4;
|
|
107
60
|
|
|
108
|
-
|
|
61
|
+
for ( let i = 0; i < morphTargetsCount; i ++ ) {
|
|
109
62
|
|
|
110
|
-
|
|
63
|
+
const morphTarget = morphTargets[ i ];
|
|
64
|
+
const morphNormal = morphNormals[ i ];
|
|
65
|
+
const morphColor = morphColors[ i ];
|
|
111
66
|
|
|
112
|
-
|
|
113
|
-
buffer[ offset + stride + 5 ] = morph.y;
|
|
114
|
-
buffer[ offset + stride + 6 ] = morph.z;
|
|
115
|
-
buffer[ offset + stride + 7 ] = 0;
|
|
67
|
+
const offset = width * height * 4 * i;
|
|
116
68
|
|
|
117
|
-
|
|
69
|
+
for ( let j = 0; j < morphTarget.count; j ++ ) {
|
|
118
70
|
|
|
119
|
-
|
|
71
|
+
const stride = j * vertexDataStride;
|
|
120
72
|
|
|
121
|
-
|
|
73
|
+
if ( hasMorphPosition === true ) {
|
|
122
74
|
|
|
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;
|
|
75
|
+
morph.fromBufferAttribute( morphTarget, j );
|
|
127
76
|
|
|
128
|
-
|
|
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;
|
|
129
81
|
|
|
130
82
|
}
|
|
131
83
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
entry = {
|
|
135
|
-
count: morphTargetsCount,
|
|
136
|
-
texture: texture,
|
|
137
|
-
size: new Vector2( width, height )
|
|
138
|
-
};
|
|
139
|
-
|
|
140
|
-
morphTextures.set( geometry, entry );
|
|
141
|
-
|
|
142
|
-
function disposeTexture() {
|
|
143
|
-
|
|
144
|
-
texture.dispose();
|
|
145
|
-
|
|
146
|
-
morphTextures.delete( geometry );
|
|
147
|
-
|
|
148
|
-
geometry.removeEventListener( 'dispose', disposeTexture );
|
|
149
|
-
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
geometry.addEventListener( 'dispose', disposeTexture );
|
|
84
|
+
if ( hasMorphNormals === true ) {
|
|
153
85
|
|
|
154
|
-
|
|
86
|
+
morph.fromBufferAttribute( morphNormal, j );
|
|
155
87
|
|
|
156
|
-
|
|
157
|
-
|
|
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;
|
|
158
92
|
|
|
159
|
-
|
|
93
|
+
}
|
|
160
94
|
|
|
161
|
-
|
|
95
|
+
if ( hasMorphColors === true ) {
|
|
162
96
|
|
|
163
|
-
|
|
97
|
+
morph.fromBufferAttribute( morphColor, j );
|
|
164
98
|
|
|
165
|
-
|
|
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;
|
|
166
103
|
|
|
167
|
-
|
|
104
|
+
}
|
|
168
105
|
|
|
169
106
|
}
|
|
170
107
|
|
|
171
|
-
const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
program.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );
|
|
175
|
-
program.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );
|
|
176
|
-
|
|
177
108
|
}
|
|
178
109
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
// When object doesn't have morph target influences defined, we treat it as a 0-length array
|
|
185
|
-
// This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences
|
|
110
|
+
entry = {
|
|
111
|
+
count: morphTargetsCount,
|
|
112
|
+
texture: texture,
|
|
113
|
+
size: new Vector2( width, height )
|
|
114
|
+
};
|
|
186
115
|
|
|
187
|
-
|
|
116
|
+
morphTextures.set( geometry, entry );
|
|
188
117
|
|
|
189
|
-
|
|
118
|
+
function disposeTexture() {
|
|
190
119
|
|
|
191
|
-
|
|
120
|
+
texture.dispose();
|
|
192
121
|
|
|
193
|
-
|
|
122
|
+
morphTextures.delete( geometry );
|
|
194
123
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
for ( let i = 0; i < length; i ++ ) {
|
|
198
|
-
|
|
199
|
-
influences[ i ] = [ i, 0 ];
|
|
200
|
-
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
influencesList[ geometry.id ] = influences;
|
|
204
|
-
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// Collect influences
|
|
208
|
-
|
|
209
|
-
for ( let i = 0; i < length; i ++ ) {
|
|
210
|
-
|
|
211
|
-
const influence = influences[ i ];
|
|
212
|
-
|
|
213
|
-
influence[ 0 ] = i;
|
|
214
|
-
influence[ 1 ] = objectInfluences[ i ];
|
|
124
|
+
geometry.removeEventListener( 'dispose', disposeTexture );
|
|
215
125
|
|
|
216
126
|
}
|
|
217
127
|
|
|
218
|
-
|
|
128
|
+
geometry.addEventListener( 'dispose', disposeTexture );
|
|
219
129
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
if ( i < length && influences[ i ][ 1 ] ) {
|
|
223
|
-
|
|
224
|
-
workInfluences[ i ][ 0 ] = influences[ i ][ 0 ];
|
|
225
|
-
workInfluences[ i ][ 1 ] = influences[ i ][ 1 ];
|
|
226
|
-
|
|
227
|
-
} else {
|
|
228
|
-
|
|
229
|
-
workInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER;
|
|
230
|
-
workInfluences[ i ][ 1 ] = 0;
|
|
231
|
-
|
|
232
|
-
}
|
|
130
|
+
}
|
|
233
131
|
|
|
234
|
-
|
|
132
|
+
//
|
|
133
|
+
if ( object.isInstancedMesh === true && object.morphTexture !== null ) {
|
|
235
134
|
|
|
236
|
-
|
|
135
|
+
program.getUniforms().setValue( gl, 'morphTexture', object.morphTexture, textures );
|
|
237
136
|
|
|
238
|
-
|
|
239
|
-
const morphNormals = geometry.morphAttributes.normal;
|
|
137
|
+
} else {
|
|
240
138
|
|
|
241
139
|
let morphInfluencesSum = 0;
|
|
242
140
|
|
|
243
|
-
for ( let i = 0; i <
|
|
244
|
-
|
|
245
|
-
const influence = workInfluences[ i ];
|
|
246
|
-
const index = influence[ 0 ];
|
|
247
|
-
const value = influence[ 1 ];
|
|
248
|
-
|
|
249
|
-
if ( index !== Number.MAX_SAFE_INTEGER && value ) {
|
|
141
|
+
for ( let i = 0; i < objectInfluences.length; i ++ ) {
|
|
250
142
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
geometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] );
|
|
254
|
-
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
if ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) {
|
|
258
|
-
|
|
259
|
-
geometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] );
|
|
260
|
-
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
morphInfluences[ i ] = value;
|
|
264
|
-
morphInfluencesSum += value;
|
|
265
|
-
|
|
266
|
-
} else {
|
|
267
|
-
|
|
268
|
-
if ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) {
|
|
269
|
-
|
|
270
|
-
geometry.deleteAttribute( 'morphTarget' + i );
|
|
271
|
-
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
if ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) {
|
|
275
|
-
|
|
276
|
-
geometry.deleteAttribute( 'morphNormal' + i );
|
|
277
|
-
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
morphInfluences[ i ] = 0;
|
|
281
|
-
|
|
282
|
-
}
|
|
143
|
+
morphInfluencesSum += objectInfluences[ i ];
|
|
283
144
|
|
|
284
145
|
}
|
|
285
146
|
|
|
286
|
-
// GLSL shader uses formula baseinfluence * base + sum(target * influence)
|
|
287
|
-
// This allows us to switch between absolute morphs and relative morphs without changing shader code
|
|
288
|
-
// When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence)
|
|
289
147
|
const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;
|
|
290
148
|
|
|
149
|
+
|
|
291
150
|
program.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );
|
|
292
|
-
program.getUniforms().setValue( gl, 'morphTargetInfluences',
|
|
151
|
+
program.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );
|
|
293
152
|
|
|
294
153
|
}
|
|
295
154
|
|
|
155
|
+
program.getUniforms().setValue( gl, 'morphTargetsTexture', entry.texture, textures );
|
|
156
|
+
program.getUniforms().setValue( gl, 'morphTargetsTextureSize', entry.size );
|
|
157
|
+
|
|
296
158
|
}
|
|
297
159
|
|
|
298
160
|
return {
|
|
@@ -142,19 +142,6 @@ function getToneMappingFunction( functionName, toneMapping ) {
|
|
|
142
142
|
|
|
143
143
|
}
|
|
144
144
|
|
|
145
|
-
function generateExtensions( parameters ) {
|
|
146
|
-
|
|
147
|
-
const chunks = [
|
|
148
|
-
( parameters.extensionDerivatives || !! parameters.envMapCubeUVHeight || parameters.bumpMap || parameters.normalMapTangentSpace || parameters.clearcoatNormalMap || parameters.flatShading || parameters.alphaToCoverage || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',
|
|
149
|
-
( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '',
|
|
150
|
-
( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '',
|
|
151
|
-
( parameters.extensionShaderTextureLOD || parameters.envMap || parameters.transmission ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : ''
|
|
152
|
-
];
|
|
153
|
-
|
|
154
|
-
return chunks.filter( filterEmptyLine ).join( '\n' );
|
|
155
|
-
|
|
156
|
-
}
|
|
157
|
-
|
|
158
145
|
function generateVertexExtensions( parameters ) {
|
|
159
146
|
|
|
160
147
|
const chunks = [
|
|
@@ -257,11 +244,7 @@ function resolveIncludes( string ) {
|
|
|
257
244
|
|
|
258
245
|
}
|
|
259
246
|
|
|
260
|
-
const shaderChunkMap = new Map(
|
|
261
|
-
[ 'encodings_fragment', 'colorspace_fragment' ], // @deprecated, r154
|
|
262
|
-
[ 'encodings_pars_fragment', 'colorspace_pars_fragment' ], // @deprecated, r154
|
|
263
|
-
[ 'output_fragment', 'opaque_fragment' ], // @deprecated, r154
|
|
264
|
-
] );
|
|
247
|
+
const shaderChunkMap = new Map();
|
|
265
248
|
|
|
266
249
|
function includeReplacer( match, include ) {
|
|
267
250
|
|
|
@@ -322,27 +305,21 @@ function generatePrecision( parameters ) {
|
|
|
322
305
|
precision ${parameters.precision} int;
|
|
323
306
|
precision ${parameters.precision} sampler2D;
|
|
324
307
|
precision ${parameters.precision} samplerCube;
|
|
308
|
+
precision ${parameters.precision} sampler3D;
|
|
309
|
+
precision ${parameters.precision} sampler2DArray;
|
|
310
|
+
precision ${parameters.precision} sampler2DShadow;
|
|
311
|
+
precision ${parameters.precision} samplerCubeShadow;
|
|
312
|
+
precision ${parameters.precision} sampler2DArrayShadow;
|
|
313
|
+
precision ${parameters.precision} isampler2D;
|
|
314
|
+
precision ${parameters.precision} isampler3D;
|
|
315
|
+
precision ${parameters.precision} isamplerCube;
|
|
316
|
+
precision ${parameters.precision} isampler2DArray;
|
|
317
|
+
precision ${parameters.precision} usampler2D;
|
|
318
|
+
precision ${parameters.precision} usampler3D;
|
|
319
|
+
precision ${parameters.precision} usamplerCube;
|
|
320
|
+
precision ${parameters.precision} usampler2DArray;
|
|
325
321
|
`;
|
|
326
322
|
|
|
327
|
-
if ( parameters.isWebGL2 ) {
|
|
328
|
-
|
|
329
|
-
precisionstring += `precision ${parameters.precision} sampler3D;
|
|
330
|
-
precision ${parameters.precision} sampler2DArray;
|
|
331
|
-
precision ${parameters.precision} sampler2DShadow;
|
|
332
|
-
precision ${parameters.precision} samplerCubeShadow;
|
|
333
|
-
precision ${parameters.precision} sampler2DArrayShadow;
|
|
334
|
-
precision ${parameters.precision} isampler2D;
|
|
335
|
-
precision ${parameters.precision} isampler3D;
|
|
336
|
-
precision ${parameters.precision} isamplerCube;
|
|
337
|
-
precision ${parameters.precision} isampler2DArray;
|
|
338
|
-
precision ${parameters.precision} usampler2D;
|
|
339
|
-
precision ${parameters.precision} usampler3D;
|
|
340
|
-
precision ${parameters.precision} usamplerCube;
|
|
341
|
-
precision ${parameters.precision} usampler2DArray;
|
|
342
|
-
`;
|
|
343
|
-
|
|
344
|
-
}
|
|
345
|
-
|
|
346
323
|
if ( parameters.precision === 'highp' ) {
|
|
347
324
|
|
|
348
325
|
precisionstring += '\n#define HIGH_PRECISION';
|
|
@@ -491,8 +468,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
491
468
|
const envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );
|
|
492
469
|
const envMapCubeUVSize = generateCubeUVSize( parameters );
|
|
493
470
|
|
|
494
|
-
const customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );
|
|
495
|
-
|
|
496
471
|
const customVertexExtensions = generateVertexExtensions( parameters );
|
|
497
472
|
|
|
498
473
|
const customDefines = generateDefines( defines );
|
|
@@ -523,8 +498,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
523
498
|
|
|
524
499
|
prefixFragment = [
|
|
525
500
|
|
|
526
|
-
customExtensions,
|
|
527
|
-
|
|
528
501
|
'#define SHADER_TYPE ' + parameters.shaderType,
|
|
529
502
|
'#define SHADER_NAME ' + parameters.shaderName,
|
|
530
503
|
|
|
@@ -646,10 +619,10 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
646
619
|
|
|
647
620
|
parameters.morphTargets ? '#define USE_MORPHTARGETS' : '',
|
|
648
621
|
parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',
|
|
649
|
-
( parameters.morphColors
|
|
650
|
-
( parameters.morphTargetsCount > 0
|
|
651
|
-
( parameters.morphTargetsCount > 0
|
|
652
|
-
( parameters.morphTargetsCount > 0
|
|
622
|
+
( parameters.morphColors ) ? '#define USE_MORPHCOLORS' : '',
|
|
623
|
+
( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_TEXTURE' : '',
|
|
624
|
+
( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_TEXTURE_STRIDE ' + parameters.morphTextureStride : '',
|
|
625
|
+
( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '',
|
|
653
626
|
parameters.doubleSided ? '#define DOUBLE_SIDED' : '',
|
|
654
627
|
parameters.flipSided ? '#define FLIP_SIDED' : '',
|
|
655
628
|
|
|
@@ -663,7 +636,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
663
636
|
parameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '',
|
|
664
637
|
|
|
665
638
|
parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
|
|
666
|
-
( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',
|
|
667
639
|
|
|
668
640
|
'uniform mat4 modelMatrix;',
|
|
669
641
|
'uniform mat4 modelViewMatrix;',
|
|
@@ -767,8 +739,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
767
739
|
|
|
768
740
|
prefixFragment = [
|
|
769
741
|
|
|
770
|
-
customExtensions,
|
|
771
|
-
|
|
772
742
|
generatePrecision( parameters ),
|
|
773
743
|
|
|
774
744
|
'#define SHADER_TYPE ' + parameters.shaderType,
|
|
@@ -805,6 +775,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
805
775
|
parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',
|
|
806
776
|
parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',
|
|
807
777
|
|
|
778
|
+
parameters.dispersion ? '#define USE_DISPERSION' : '',
|
|
779
|
+
|
|
808
780
|
parameters.iridescence ? '#define USE_IRIDESCENCE' : '',
|
|
809
781
|
parameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',
|
|
810
782
|
parameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',
|
|
@@ -856,7 +828,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
856
828
|
parameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',
|
|
857
829
|
|
|
858
830
|
parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
|
|
859
|
-
( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',
|
|
860
831
|
|
|
861
832
|
'uniform mat4 viewMatrix;',
|
|
862
833
|
'uniform vec3 cameraPosition;',
|
|
@@ -891,7 +862,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
891
862
|
vertexShader = unrollLoops( vertexShader );
|
|
892
863
|
fragmentShader = unrollLoops( fragmentShader );
|
|
893
864
|
|
|
894
|
-
if ( parameters.
|
|
865
|
+
if ( parameters.isRawShaderMaterial !== true ) {
|
|
895
866
|
|
|
896
867
|
// GLSL 3.0 conversion for built-in materials and ShaderMaterial
|
|
897
868
|
|
|
@@ -899,14 +870,12 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
899
870
|
|
|
900
871
|
prefixVertex = [
|
|
901
872
|
customVertexExtensions,
|
|
902
|
-
'precision mediump sampler2DArray;',
|
|
903
873
|
'#define attribute in',
|
|
904
874
|
'#define varying out',
|
|
905
875
|
'#define texture2D texture'
|
|
906
876
|
].join( '\n' ) + '\n' + prefixVertex;
|
|
907
877
|
|
|
908
878
|
prefixFragment = [
|
|
909
|
-
'precision mediump sampler2DArray;',
|
|
910
879
|
'#define varying in',
|
|
911
880
|
( parameters.glslVersion === GLSL3 ) ? '' : 'layout(location = 0) out highp vec4 pc_fragColor;',
|
|
912
881
|
( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',
|
|
@@ -13,7 +13,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
13
13
|
const _activeChannels = new Set();
|
|
14
14
|
const programs = [];
|
|
15
15
|
|
|
16
|
-
const IS_WEBGL2 = capabilities.isWebGL2;
|
|
17
16
|
const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;
|
|
18
17
|
const SUPPORTS_VERTEX_TEXTURES = capabilities.vertexTextures;
|
|
19
18
|
|
|
@@ -130,6 +129,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
130
129
|
|
|
131
130
|
const HAS_ANISOTROPY = material.anisotropy > 0;
|
|
132
131
|
const HAS_CLEARCOAT = material.clearcoat > 0;
|
|
132
|
+
const HAS_DISPERSION = material.dispersion > 0;
|
|
133
133
|
const HAS_IRIDESCENCE = material.iridescence > 0;
|
|
134
134
|
const HAS_SHEEN = material.sheen > 0;
|
|
135
135
|
const HAS_TRANSMISSION = material.transmission > 0;
|
|
@@ -177,8 +177,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
177
177
|
|
|
178
178
|
const parameters = {
|
|
179
179
|
|
|
180
|
-
isWebGL2: IS_WEBGL2,
|
|
181
|
-
|
|
182
180
|
shaderID: shaderID,
|
|
183
181
|
shaderType: material.type,
|
|
184
182
|
shaderName: material.name,
|
|
@@ -231,6 +229,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
231
229
|
clearcoatNormalMap: HAS_CLEARCOAT_NORMALMAP,
|
|
232
230
|
clearcoatRoughnessMap: HAS_CLEARCOAT_ROUGHNESSMAP,
|
|
233
231
|
|
|
232
|
+
dispersion: HAS_DISPERSION,
|
|
233
|
+
|
|
234
234
|
iridescence: HAS_IRIDESCENCE,
|
|
235
235
|
iridescenceMap: HAS_IRIDESCENCEMAP,
|
|
236
236
|
iridescenceThicknessMap: HAS_IRIDESCENCE_THICKNESSMAP,
|
|
@@ -353,16 +353,9 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
353
353
|
|
|
354
354
|
index0AttributeName: material.index0AttributeName,
|
|
355
355
|
|
|
356
|
-
extensionDerivatives: HAS_EXTENSIONS && material.extensions.derivatives === true,
|
|
357
|
-
extensionFragDepth: HAS_EXTENSIONS && material.extensions.fragDepth === true,
|
|
358
|
-
extensionDrawBuffers: HAS_EXTENSIONS && material.extensions.drawBuffers === true,
|
|
359
|
-
extensionShaderTextureLOD: HAS_EXTENSIONS && material.extensions.shaderTextureLOD === true,
|
|
360
356
|
extensionClipCullDistance: HAS_EXTENSIONS && material.extensions.clipCullDistance === true && extensions.has( 'WEBGL_clip_cull_distance' ),
|
|
361
357
|
extensionMultiDraw: HAS_EXTENSIONS && material.extensions.multiDraw === true && extensions.has( 'WEBGL_multi_draw' ),
|
|
362
358
|
|
|
363
|
-
rendererExtensionFragDepth: IS_WEBGL2 || extensions.has( 'EXT_frag_depth' ),
|
|
364
|
-
rendererExtensionDrawBuffers: IS_WEBGL2 || extensions.has( 'WEBGL_draw_buffers' ),
|
|
365
|
-
rendererExtensionShaderTextureLod: IS_WEBGL2 || extensions.has( 'EXT_shader_texture_lod' ),
|
|
366
359
|
rendererExtensionParallelShaderCompile: extensions.has( 'KHR_parallel_shader_compile' ),
|
|
367
360
|
|
|
368
361
|
customProgramCacheKey: material.customProgramCacheKey()
|
|
@@ -478,47 +471,47 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
478
471
|
|
|
479
472
|
_programLayers.disableAll();
|
|
480
473
|
|
|
481
|
-
if ( parameters.isWebGL2 )
|
|
482
|
-
_programLayers.enable( 0 );
|
|
483
474
|
if ( parameters.supportsVertexTextures )
|
|
484
|
-
_programLayers.enable(
|
|
475
|
+
_programLayers.enable( 0 );
|
|
485
476
|
if ( parameters.instancing )
|
|
486
|
-
_programLayers.enable(
|
|
477
|
+
_programLayers.enable( 1 );
|
|
487
478
|
if ( parameters.instancingColor )
|
|
488
|
-
_programLayers.enable(
|
|
479
|
+
_programLayers.enable( 2 );
|
|
489
480
|
if ( parameters.instancingMorph )
|
|
490
|
-
_programLayers.enable(
|
|
481
|
+
_programLayers.enable( 3 );
|
|
491
482
|
if ( parameters.matcap )
|
|
492
|
-
_programLayers.enable(
|
|
483
|
+
_programLayers.enable( 4 );
|
|
493
484
|
if ( parameters.envMap )
|
|
494
|
-
_programLayers.enable(
|
|
485
|
+
_programLayers.enable( 5 );
|
|
495
486
|
if ( parameters.normalMapObjectSpace )
|
|
496
|
-
_programLayers.enable(
|
|
487
|
+
_programLayers.enable( 6 );
|
|
497
488
|
if ( parameters.normalMapTangentSpace )
|
|
498
|
-
_programLayers.enable(
|
|
489
|
+
_programLayers.enable( 7 );
|
|
499
490
|
if ( parameters.clearcoat )
|
|
500
|
-
_programLayers.enable(
|
|
491
|
+
_programLayers.enable( 8 );
|
|
501
492
|
if ( parameters.iridescence )
|
|
502
|
-
_programLayers.enable(
|
|
493
|
+
_programLayers.enable( 9 );
|
|
503
494
|
if ( parameters.alphaTest )
|
|
504
|
-
_programLayers.enable(
|
|
495
|
+
_programLayers.enable( 10 );
|
|
505
496
|
if ( parameters.vertexColors )
|
|
506
|
-
_programLayers.enable(
|
|
497
|
+
_programLayers.enable( 11 );
|
|
507
498
|
if ( parameters.vertexAlphas )
|
|
508
|
-
_programLayers.enable(
|
|
499
|
+
_programLayers.enable( 12 );
|
|
509
500
|
if ( parameters.vertexUv1s )
|
|
510
|
-
_programLayers.enable(
|
|
501
|
+
_programLayers.enable( 13 );
|
|
511
502
|
if ( parameters.vertexUv2s )
|
|
512
|
-
_programLayers.enable(
|
|
503
|
+
_programLayers.enable( 14 );
|
|
513
504
|
if ( parameters.vertexUv3s )
|
|
514
|
-
_programLayers.enable(
|
|
505
|
+
_programLayers.enable( 15 );
|
|
515
506
|
if ( parameters.vertexTangents )
|
|
516
|
-
_programLayers.enable(
|
|
507
|
+
_programLayers.enable( 16 );
|
|
517
508
|
if ( parameters.anisotropy )
|
|
518
|
-
_programLayers.enable(
|
|
509
|
+
_programLayers.enable( 17 );
|
|
519
510
|
if ( parameters.alphaHash )
|
|
520
|
-
_programLayers.enable(
|
|
511
|
+
_programLayers.enable( 18 );
|
|
521
512
|
if ( parameters.batching )
|
|
513
|
+
_programLayers.enable( 19 );
|
|
514
|
+
if ( parameters.dispersion )
|
|
522
515
|
_programLayers.enable( 20 );
|
|
523
516
|
|
|
524
517
|
array.push( _programLayers.mask );
|