|
@@ -75,6 +75,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
function getParameters( material, lights, shadows, scene, object ) {
|
|
|
|
|
|
const fog = scene.fog;
|
|
|
+ const geometry = object.geometry;
|
|
|
const environment = material.isMeshStandardMaterial ? scene.environment : null;
|
|
|
|
|
|
const envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );
|
|
@@ -99,6 +100,19 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
|
|
|
}
|
|
|
|
|
|
+ //
|
|
|
+
|
|
|
+ const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
|
|
|
+ const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
|
|
|
+
|
|
|
+ let morphTextureStride = 0;
|
|
|
+
|
|
|
+ if ( geometry.morphAttributes.position !== undefined ) morphTextureStride = 1;
|
|
|
+ if ( geometry.morphAttributes.normal !== undefined ) morphTextureStride = 2;
|
|
|
+ if ( geometry.morphAttributes.color !== undefined ) morphTextureStride = 3;
|
|
|
+
|
|
|
+ //
|
|
|
+
|
|
|
let vertexShader, fragmentShader;
|
|
|
let customVertexShaderID, customFragmentShaderID;
|
|
|
|
|
@@ -194,9 +208,9 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
|
|
|
combine: material.combine,
|
|
|
|
|
|
- vertexTangents: ( !! material.normalMap && !! object.geometry && !! object.geometry.attributes.tangent ),
|
|
|
+ vertexTangents: ( !! material.normalMap && !! geometry.attributes.tangent ),
|
|
|
vertexColors: material.vertexColors,
|
|
|
- vertexAlphas: material.vertexColors === true && !! object.geometry && !! object.geometry.attributes.color && object.geometry.attributes.color.itemSize === 4,
|
|
|
+ vertexAlphas: material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4,
|
|
|
vertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.displacementMap || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || !! material.sheenColorMap || !! material.sheenRoughnessMap,
|
|
|
uvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || material.transmission > 0 || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || material.sheen > 0 || !! material.sheenColorMap || !! material.sheenRoughnessMap ) && !! material.displacementMap,
|
|
|
|
|
@@ -213,9 +227,11 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
maxBones: maxBones,
|
|
|
useVertexTexture: floatVertexTextures,
|
|
|
|
|
|
- morphTargets: !! object.geometry && !! object.geometry.morphAttributes.position,
|
|
|
- morphNormals: !! object.geometry && !! object.geometry.morphAttributes.normal,
|
|
|
- morphTargetsCount: ( !! object.geometry && !! object.geometry.morphAttributes.position ) ? object.geometry.morphAttributes.position.length : 0,
|
|
|
+ morphTargets: geometry.morphAttributes.position !== undefined,
|
|
|
+ morphNormals: geometry.morphAttributes.normal !== undefined,
|
|
|
+ morphColors: geometry.morphAttributes.color !== undefined,
|
|
|
+ morphTargetsCount: morphTargetsCount,
|
|
|
+ morphTextureStride: morphTextureStride,
|
|
|
|
|
|
numDirLights: lights.directional.length,
|
|
|
numPointLights: lights.point.length,
|
|
@@ -316,6 +332,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
array.push( parameters.sizeAttenuation );
|
|
|
array.push( parameters.maxBones );
|
|
|
array.push( parameters.morphTargetsCount );
|
|
|
+ array.push( parameters.morphAttributeCount );
|
|
|
array.push( parameters.numDirLights );
|
|
|
array.push( parameters.numPointLights );
|
|
|
array.push( parameters.numSpotLights );
|
|
@@ -415,40 +432,42 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
_programLayers.enable( 5 );
|
|
|
if ( parameters.morphNormals )
|
|
|
_programLayers.enable( 6 );
|
|
|
- if ( parameters.premultipliedAlpha )
|
|
|
+ if ( parameters.morphColors )
|
|
|
_programLayers.enable( 7 );
|
|
|
- if ( parameters.shadowMapEnabled )
|
|
|
+ if ( parameters.premultipliedAlpha )
|
|
|
_programLayers.enable( 8 );
|
|
|
- if ( parameters.physicallyCorrectLights )
|
|
|
+ if ( parameters.shadowMapEnabled )
|
|
|
_programLayers.enable( 9 );
|
|
|
- if ( parameters.doubleSided )
|
|
|
+ if ( parameters.physicallyCorrectLights )
|
|
|
_programLayers.enable( 10 );
|
|
|
- if ( parameters.flipSided )
|
|
|
+ if ( parameters.doubleSided )
|
|
|
_programLayers.enable( 11 );
|
|
|
- if ( parameters.depthPacking )
|
|
|
+ if ( parameters.flipSided )
|
|
|
_programLayers.enable( 12 );
|
|
|
- if ( parameters.dithering )
|
|
|
+ if ( parameters.depthPacking )
|
|
|
_programLayers.enable( 13 );
|
|
|
- if ( parameters.specularIntensityMap )
|
|
|
+ if ( parameters.dithering )
|
|
|
_programLayers.enable( 14 );
|
|
|
- if ( parameters.specularColorMap )
|
|
|
+ if ( parameters.specularIntensityMap )
|
|
|
_programLayers.enable( 15 );
|
|
|
- if ( parameters.transmission )
|
|
|
+ if ( parameters.specularColorMap )
|
|
|
_programLayers.enable( 16 );
|
|
|
- if ( parameters.transmissionMap )
|
|
|
+ if ( parameters.transmission )
|
|
|
_programLayers.enable( 17 );
|
|
|
- if ( parameters.thicknessMap )
|
|
|
+ if ( parameters.transmissionMap )
|
|
|
_programLayers.enable( 18 );
|
|
|
- if ( parameters.sheen )
|
|
|
+ if ( parameters.thicknessMap )
|
|
|
_programLayers.enable( 19 );
|
|
|
- if ( parameters.sheenColorMap )
|
|
|
+ if ( parameters.sheen )
|
|
|
_programLayers.enable( 20 );
|
|
|
- if ( parameters.sheenRoughnessMap )
|
|
|
+ if ( parameters.sheenColorMap )
|
|
|
_programLayers.enable( 21 );
|
|
|
- if ( parameters.decodeVideoTexture )
|
|
|
+ if ( parameters.sheenRoughnessMap )
|
|
|
_programLayers.enable( 22 );
|
|
|
- if ( parameters.opaque )
|
|
|
+ if ( parameters.decodeVideoTexture )
|
|
|
_programLayers.enable( 23 );
|
|
|
+ if ( parameters.opaque )
|
|
|
+ _programLayers.enable( 24 );
|
|
|
|
|
|
array.push( _programLayers.mask );
|
|
|
|