|
@@ -13189,7 +13189,7 @@ var shadowmask_pars_fragment = "float getShadowMask() {\n\tfloat shadow = 1.0;\n
|
|
|
|
|
|
var skinbase_vertex = "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif";
|
|
|
|
|
|
-var skinning_pars_vertex = "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif";
|
|
|
+var skinning_pars_vertex = "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tuniform int boneTextureSize;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tfloat j = i * 4.0;\n\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\ty = dy * ( y + 0.5 );\n\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\treturn bone;\n\t}\n#endif";
|
|
|
|
|
|
var skinning_vertex = "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif";
|
|
|
|
|
@@ -18630,7 +18630,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
|
|
|
parameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',
|
|
|
|
|
|
- '#define MAX_BONES ' + parameters.maxBones,
|
|
|
( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',
|
|
|
( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',
|
|
|
|
|
@@ -18675,7 +18674,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
parameters.flatShading ? '#define FLAT_SHADED' : '',
|
|
|
|
|
|
parameters.skinning ? '#define USE_SKINNING' : '',
|
|
|
- parameters.useVertexTexture ? '#define BONE_TEXTURE' : '',
|
|
|
|
|
|
parameters.morphTargets ? '#define USE_MORPHTARGETS' : '',
|
|
|
parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',
|
|
@@ -19195,8 +19193,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
|
|
|
const isWebGL2 = capabilities.isWebGL2;
|
|
|
const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;
|
|
|
- const floatVertexTextures = capabilities.floatVertexTextures;
|
|
|
- const maxVertexUniforms = capabilities.maxVertexUniforms;
|
|
|
const vertexTextures = capabilities.vertexTextures;
|
|
|
let precision = capabilities.precision;
|
|
|
|
|
@@ -19218,42 +19214,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
SpriteMaterial: 'sprite'
|
|
|
};
|
|
|
|
|
|
- function getMaxBones( object ) {
|
|
|
-
|
|
|
- const skeleton = object.skeleton;
|
|
|
- const bones = skeleton.bones;
|
|
|
-
|
|
|
- if ( floatVertexTextures ) {
|
|
|
-
|
|
|
- return 1024;
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
- // default for when object is not specified
|
|
|
- // ( for example when prebuilding shader to be used with multiple objects )
|
|
|
- //
|
|
|
- // - leave some extra space for other uniforms
|
|
|
- // - limit here is ANGLE's 254 max uniform vectors
|
|
|
- // (up to 54 should be safe)
|
|
|
-
|
|
|
- const nVertexUniforms = maxVertexUniforms;
|
|
|
- const nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 );
|
|
|
-
|
|
|
- const maxBones = Math.min( nVertexMatrices, bones.length );
|
|
|
-
|
|
|
- if ( maxBones < bones.length ) {
|
|
|
-
|
|
|
- console.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' );
|
|
|
- return 0;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- return maxBones;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
function getParameters( material, lights, shadows, scene, object ) {
|
|
|
|
|
|
const fog = scene.fog;
|
|
@@ -19268,8 +19228,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
// heuristics to create shader parameters according to lights in the scene
|
|
|
// (not to blow over maxLights budget)
|
|
|
|
|
|
- const maxBones = object.isSkinnedMesh ? getMaxBones( object ) : 0;
|
|
|
-
|
|
|
if ( material.precision !== null ) {
|
|
|
|
|
|
precision = capabilities.getMaxPrecision( material.precision );
|
|
@@ -19405,9 +19363,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
sizeAttenuation: material.sizeAttenuation,
|
|
|
logarithmicDepthBuffer: logarithmicDepthBuffer,
|
|
|
|
|
|
- skinning: object.isSkinnedMesh === true && maxBones > 0,
|
|
|
- maxBones: maxBones,
|
|
|
- useVertexTexture: floatVertexTextures,
|
|
|
+ skinning: object.isSkinnedMesh === true,
|
|
|
|
|
|
morphTargets: geometry.morphAttributes.position !== undefined,
|
|
|
morphNormals: geometry.morphAttributes.normal !== undefined,
|
|
@@ -19513,7 +19469,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
array.push( parameters.vertexUvs );
|
|
|
array.push( parameters.fogExp2 );
|
|
|
array.push( parameters.sizeAttenuation );
|
|
|
- array.push( parameters.maxBones );
|
|
|
array.push( parameters.morphTargetsCount );
|
|
|
array.push( parameters.morphAttributeCount );
|
|
|
array.push( parameters.numDirLights );
|
|
@@ -19610,48 +19565,46 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
_programLayers.enable( 2 );
|
|
|
if ( parameters.skinning )
|
|
|
_programLayers.enable( 3 );
|
|
|
- if ( parameters.useVertexTexture )
|
|
|
- _programLayers.enable( 4 );
|
|
|
if ( parameters.morphTargets )
|
|
|
- _programLayers.enable( 5 );
|
|
|
+ _programLayers.enable( 4 );
|
|
|
if ( parameters.morphNormals )
|
|
|
- _programLayers.enable( 6 );
|
|
|
+ _programLayers.enable( 5 );
|
|
|
if ( parameters.morphColors )
|
|
|
- _programLayers.enable( 7 );
|
|
|
+ _programLayers.enable( 6 );
|
|
|
if ( parameters.premultipliedAlpha )
|
|
|
- _programLayers.enable( 8 );
|
|
|
+ _programLayers.enable( 7 );
|
|
|
if ( parameters.shadowMapEnabled )
|
|
|
- _programLayers.enable( 9 );
|
|
|
+ _programLayers.enable( 8 );
|
|
|
if ( parameters.physicallyCorrectLights )
|
|
|
- _programLayers.enable( 10 );
|
|
|
+ _programLayers.enable( 9 );
|
|
|
if ( parameters.doubleSided )
|
|
|
- _programLayers.enable( 11 );
|
|
|
+ _programLayers.enable( 10 );
|
|
|
if ( parameters.flipSided )
|
|
|
- _programLayers.enable( 12 );
|
|
|
+ _programLayers.enable( 11 );
|
|
|
if ( parameters.useDepthPacking )
|
|
|
- _programLayers.enable( 13 );
|
|
|
+ _programLayers.enable( 12 );
|
|
|
if ( parameters.dithering )
|
|
|
- _programLayers.enable( 14 );
|
|
|
+ _programLayers.enable( 13 );
|
|
|
if ( parameters.specularIntensityMap )
|
|
|
- _programLayers.enable( 15 );
|
|
|
+ _programLayers.enable( 14 );
|
|
|
if ( parameters.specularColorMap )
|
|
|
- _programLayers.enable( 16 );
|
|
|
+ _programLayers.enable( 15 );
|
|
|
if ( parameters.transmission )
|
|
|
- _programLayers.enable( 17 );
|
|
|
+ _programLayers.enable( 16 );
|
|
|
if ( parameters.transmissionMap )
|
|
|
- _programLayers.enable( 18 );
|
|
|
+ _programLayers.enable( 17 );
|
|
|
if ( parameters.thicknessMap )
|
|
|
- _programLayers.enable( 19 );
|
|
|
+ _programLayers.enable( 18 );
|
|
|
if ( parameters.sheen )
|
|
|
- _programLayers.enable( 20 );
|
|
|
+ _programLayers.enable( 19 );
|
|
|
if ( parameters.sheenColorMap )
|
|
|
- _programLayers.enable( 21 );
|
|
|
+ _programLayers.enable( 20 );
|
|
|
if ( parameters.sheenRoughnessMap )
|
|
|
- _programLayers.enable( 22 );
|
|
|
+ _programLayers.enable( 21 );
|
|
|
if ( parameters.decodeVideoTexture )
|
|
|
- _programLayers.enable( 23 );
|
|
|
+ _programLayers.enable( 22 );
|
|
|
if ( parameters.opaque )
|
|
|
- _programLayers.enable( 24 );
|
|
|
+ _programLayers.enable( 23 );
|
|
|
|
|
|
array.push( _programLayers.mask );
|
|
|
|
|
@@ -27752,7 +27705,7 @@ function WebGLRenderer( parameters = {} ) {
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- p_uniforms.setOptional( _gl, skeleton, 'boneMatrices' );
|
|
|
+ console.warn( 'THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required.' );
|
|
|
|
|
|
}
|
|
|
|