|
@@ -9029,8 +9029,6 @@
|
|
_lookTarget = new Vector3(),
|
|
_lookTarget = new Vector3(),
|
|
_lightPositionWorld = new Vector3(),
|
|
_lightPositionWorld = new Vector3(),
|
|
|
|
|
|
- _renderList = [],
|
|
|
|
-
|
|
|
|
_MorphingFlag = 1,
|
|
_MorphingFlag = 1,
|
|
|
|
|
|
_NumberOfMaterialVariants = ( _MorphingFlag ) + 1,
|
|
_NumberOfMaterialVariants = ( _MorphingFlag ) + 1,
|
|
@@ -9257,46 +9255,7 @@
|
|
|
|
|
|
// set object matrices & frustum culling
|
|
// set object matrices & frustum culling
|
|
|
|
|
|
- _renderList.length = 0;
|
|
|
|
-
|
|
|
|
- projectObject( scene, camera, shadowCamera );
|
|
|
|
-
|
|
|
|
- // render shadow map
|
|
|
|
- // render regular objects
|
|
|
|
-
|
|
|
|
- for ( var j = 0, jl = _renderList.length; j < jl; j ++ ) {
|
|
|
|
-
|
|
|
|
- var object = _renderList[ j ];
|
|
|
|
- var geometry = _objects.update( object );
|
|
|
|
- var material = object.material;
|
|
|
|
-
|
|
|
|
- if ( material && material.isMultiMaterial ) {
|
|
|
|
-
|
|
|
|
- var groups = geometry.groups;
|
|
|
|
- var materials = material.materials;
|
|
|
|
-
|
|
|
|
- for ( var k = 0, kl = groups.length; k < kl; k ++ ) {
|
|
|
|
-
|
|
|
|
- var group = groups[ k ];
|
|
|
|
- var groupMaterial = materials[ group.materialIndex ];
|
|
|
|
-
|
|
|
|
- if ( groupMaterial.visible === true ) {
|
|
|
|
-
|
|
|
|
- var depthMaterial = getDepthMaterial( object, groupMaterial, isPointLight, _lightPositionWorld );
|
|
|
|
- _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- } else {
|
|
|
|
-
|
|
|
|
- var depthMaterial = getDepthMaterial( object, material, isPointLight, _lightPositionWorld );
|
|
|
|
- _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
|
|
+ renderObject( scene, camera, shadowCamera, isPointLight );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@@ -9424,7 +9383,7 @@
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- function projectObject( object, camera, shadowCamera ) {
|
|
|
|
|
|
+ function renderObject( object, camera, shadowCamera, isPointLight ) {
|
|
|
|
|
|
if ( object.visible === false ) return;
|
|
if ( object.visible === false ) return;
|
|
|
|
|
|
@@ -9434,12 +9393,33 @@
|
|
|
|
|
|
if ( object.castShadow && ( object.frustumCulled === false || _frustum.intersectsObject( object ) === true ) ) {
|
|
if ( object.castShadow && ( object.frustumCulled === false || _frustum.intersectsObject( object ) === true ) ) {
|
|
|
|
|
|
|
|
+ object.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );
|
|
|
|
+
|
|
|
|
+ var geometry = _objects.update( object );
|
|
var material = object.material;
|
|
var material = object.material;
|
|
|
|
|
|
- if ( material.visible === true ) {
|
|
|
|
|
|
+ if ( Array.isArray( material ) ) {
|
|
|
|
+
|
|
|
|
+ var groups = geometry.groups;
|
|
|
|
+
|
|
|
|
+ for ( var k = 0, kl = groups.length; k < kl; k ++ ) {
|
|
|
|
+
|
|
|
|
+ var group = groups[ k ];
|
|
|
|
+ var groupMaterial = material[ group.materialIndex ];
|
|
|
|
+
|
|
|
|
+ if ( groupMaterial && groupMaterial.visible === true ) {
|
|
|
|
|
|
- object.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );
|
|
|
|
- _renderList.push( object );
|
|
|
|
|
|
+ var depthMaterial = getDepthMaterial( object, groupMaterial, isPointLight, _lightPositionWorld );
|
|
|
|
+ _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } else if ( material.visible === true ) {
|
|
|
|
+
|
|
|
|
+ var depthMaterial = getDepthMaterial( object, material, isPointLight, _lightPositionWorld );
|
|
|
|
+ _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@@ -9451,7 +9431,7 @@
|
|
|
|
|
|
for ( var i = 0, l = children.length; i < l; i ++ ) {
|
|
for ( var i = 0, l = children.length; i < l; i ++ ) {
|
|
|
|
|
|
- projectObject( children[ i ], camera, shadowCamera );
|
|
|
|
|
|
+ renderObject( children[ i ], camera, shadowCamera );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@@ -15108,8 +15088,7 @@
|
|
} else if ( geometry.isGeometry ) {
|
|
} else if ( geometry.isGeometry ) {
|
|
|
|
|
|
var fvA, fvB, fvC;
|
|
var fvA, fvB, fvC;
|
|
- var isFaceMaterial = ( material && material.isMultiMaterial );
|
|
|
|
- var materials = isFaceMaterial === true ? material.materials : null;
|
|
|
|
|
|
+ var isMultiMaterial = Array.isArray( material );
|
|
|
|
|
|
var vertices = geometry.vertices;
|
|
var vertices = geometry.vertices;
|
|
var faces = geometry.faces;
|
|
var faces = geometry.faces;
|
|
@@ -15121,7 +15100,7 @@
|
|
for ( var f = 0, fl = faces.length; f < fl; f ++ ) {
|
|
for ( var f = 0, fl = faces.length; f < fl; f ++ ) {
|
|
|
|
|
|
var face = faces[ f ];
|
|
var face = faces[ f ];
|
|
- var faceMaterial = isFaceMaterial === true ? materials[ face.materialIndex ] : material;
|
|
|
|
|
|
+ var faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material;
|
|
|
|
|
|
if ( faceMaterial === undefined ) continue;
|
|
if ( faceMaterial === undefined ) continue;
|
|
|
|
|
|
@@ -21084,56 +21063,36 @@
|
|
|
|
|
|
if ( object.frustumCulled === false || isObjectViewable( object ) === true ) {
|
|
if ( object.frustumCulled === false || isObjectViewable( object ) === true ) {
|
|
|
|
|
|
- var material = object.material;
|
|
|
|
-
|
|
|
|
- if ( material.visible === true ) {
|
|
|
|
-
|
|
|
|
- if ( _this.sortObjects === true ) {
|
|
|
|
-
|
|
|
|
- _vector3.setFromMatrixPosition( object.matrixWorld );
|
|
|
|
- _vector3.applyMatrix4( _projScreenMatrix );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- var geometry = objects.update( object );
|
|
|
|
-
|
|
|
|
- if ( material.isMultiMaterial ) {
|
|
|
|
-
|
|
|
|
- var groups = geometry.groups;
|
|
|
|
- var materials = material.materials;
|
|
|
|
|
|
+ if ( _this.sortObjects === true ) {
|
|
|
|
|
|
- if ( groups.length > 0 ) {
|
|
|
|
|
|
+ _vector3.setFromMatrixPosition( object.matrixWorld );
|
|
|
|
+ _vector3.applyMatrix4( _projScreenMatrix );
|
|
|
|
|
|
- // push a render item for each group of the geometry
|
|
|
|
-
|
|
|
|
- for ( var i = 0, l = groups.length; i < l; i ++ ) {
|
|
|
|
-
|
|
|
|
- var group = groups[ i ];
|
|
|
|
- var groupMaterial = materials[ group.materialIndex ];
|
|
|
|
-
|
|
|
|
- if ( groupMaterial === undefined ) {
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- console.warn( 'THREE.WebGLRenderer: MultiMaterial has insufficient amount of materials for geometry. %i material(s) expected but only %i provided.', groups.length, materials.length );
|
|
|
|
|
|
+ var geometry = objects.update( object );
|
|
|
|
+ var material = object.material;
|
|
|
|
|
|
- } else if ( groupMaterial.visible === true ) {
|
|
|
|
|
|
+ if ( Array.isArray( material ) ) {
|
|
|
|
|
|
- pushRenderItem( object, geometry, groupMaterial, _vector3.z, group );
|
|
|
|
|
|
+ var groups = geometry.groups;
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for ( var i = 0, l = groups.length; i < l; i ++ ) {
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ var group = groups[ i ];
|
|
|
|
+ var groupMaterial = material[ group.materialIndex ];
|
|
|
|
|
|
- } else {
|
|
|
|
|
|
+ if ( groupMaterial && groupMaterial.visible === true ) {
|
|
|
|
|
|
- console.warn( 'THREE.WebGLRenderer: MultiMaterial can not be used without groups.' );
|
|
|
|
|
|
+ pushRenderItem( object, geometry, groupMaterial, _vector3.z, group );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- } else {
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- pushRenderItem( object, geometry, material, _vector3.z, null );
|
|
|
|
|
|
+ } else if ( material.visible === true ) {
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ pushRenderItem( object, geometry, material, _vector3.z, null );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@@ -28190,74 +28149,6 @@
|
|
|
|
|
|
RawShaderMaterial.prototype.isRawShaderMaterial = true;
|
|
RawShaderMaterial.prototype.isRawShaderMaterial = true;
|
|
|
|
|
|
- /**
|
|
|
|
- * @author mrdoob / http://mrdoob.com/
|
|
|
|
- */
|
|
|
|
-
|
|
|
|
- function MultiMaterial( materials ) {
|
|
|
|
-
|
|
|
|
- this.uuid = _Math.generateUUID();
|
|
|
|
-
|
|
|
|
- this.type = 'MultiMaterial';
|
|
|
|
-
|
|
|
|
- this.materials = Array.isArray( materials ) ? materials : [];
|
|
|
|
-
|
|
|
|
- this.visible = true;
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- Object.assign( MultiMaterial.prototype, {
|
|
|
|
-
|
|
|
|
- isMultiMaterial: true,
|
|
|
|
-
|
|
|
|
- toJSON: function ( meta ) {
|
|
|
|
-
|
|
|
|
- var output = {
|
|
|
|
- metadata: {
|
|
|
|
- version: 4.2,
|
|
|
|
- type: 'material',
|
|
|
|
- generator: 'MaterialExporter'
|
|
|
|
- },
|
|
|
|
- uuid: this.uuid,
|
|
|
|
- type: this.type,
|
|
|
|
- materials: []
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- var materials = this.materials;
|
|
|
|
-
|
|
|
|
- for ( var i = 0, l = materials.length; i < l; i ++ ) {
|
|
|
|
-
|
|
|
|
- var material = materials[ i ].toJSON( meta );
|
|
|
|
- delete material.metadata;
|
|
|
|
-
|
|
|
|
- output.materials.push( material );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- output.visible = this.visible;
|
|
|
|
-
|
|
|
|
- return output;
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- clone: function () {
|
|
|
|
-
|
|
|
|
- var material = new this.constructor();
|
|
|
|
-
|
|
|
|
- for ( var i = 0; i < this.materials.length; i ++ ) {
|
|
|
|
-
|
|
|
|
- material.materials.push( this.materials[ i ].clone() );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- material.visible = this.visible;
|
|
|
|
-
|
|
|
|
- return material;
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- } );
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* @author WestLangley / http://github.com/WestLangley
|
|
* @author WestLangley / http://github.com/WestLangley
|
|
*
|
|
*
|
|
@@ -28934,7 +28825,6 @@
|
|
RawShaderMaterial: RawShaderMaterial,
|
|
RawShaderMaterial: RawShaderMaterial,
|
|
ShaderMaterial: ShaderMaterial,
|
|
ShaderMaterial: ShaderMaterial,
|
|
PointsMaterial: PointsMaterial,
|
|
PointsMaterial: PointsMaterial,
|
|
- MultiMaterial: MultiMaterial,
|
|
|
|
MeshPhysicalMaterial: MeshPhysicalMaterial,
|
|
MeshPhysicalMaterial: MeshPhysicalMaterial,
|
|
MeshStandardMaterial: MeshStandardMaterial,
|
|
MeshStandardMaterial: MeshStandardMaterial,
|
|
MeshPhongMaterial: MeshPhongMaterial,
|
|
MeshPhongMaterial: MeshPhongMaterial,
|
|
@@ -41451,8 +41341,24 @@
|
|
|
|
|
|
function MeshFaceMaterial( materials ) {
|
|
function MeshFaceMaterial( materials ) {
|
|
|
|
|
|
- console.warn( 'THREE.MeshFaceMaterial has been renamed to THREE.MultiMaterial.' );
|
|
|
|
- return new MultiMaterial( materials );
|
|
|
|
|
|
+ console.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' );
|
|
|
|
+ return materials;
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function MultiMaterial( materials ) {
|
|
|
|
+
|
|
|
|
+ if ( materials === undefined ) materials = [];
|
|
|
|
+
|
|
|
|
+ console.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' );
|
|
|
|
+ materials.isMultiMaterial = true;
|
|
|
|
+ materials.materials = materials;
|
|
|
|
+ materials.clone = function () {
|
|
|
|
+
|
|
|
|
+ return materials.slice();
|
|
|
|
+
|
|
|
|
+ };
|
|
|
|
+ return materials;
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@@ -43037,7 +42943,6 @@
|
|
exports.RawShaderMaterial = RawShaderMaterial;
|
|
exports.RawShaderMaterial = RawShaderMaterial;
|
|
exports.ShaderMaterial = ShaderMaterial;
|
|
exports.ShaderMaterial = ShaderMaterial;
|
|
exports.PointsMaterial = PointsMaterial;
|
|
exports.PointsMaterial = PointsMaterial;
|
|
- exports.MultiMaterial = MultiMaterial;
|
|
|
|
exports.MeshPhysicalMaterial = MeshPhysicalMaterial;
|
|
exports.MeshPhysicalMaterial = MeshPhysicalMaterial;
|
|
exports.MeshStandardMaterial = MeshStandardMaterial;
|
|
exports.MeshStandardMaterial = MeshStandardMaterial;
|
|
exports.MeshPhongMaterial = MeshPhongMaterial;
|
|
exports.MeshPhongMaterial = MeshPhongMaterial;
|
|
@@ -43189,6 +43094,7 @@
|
|
exports.LineStrip = LineStrip;
|
|
exports.LineStrip = LineStrip;
|
|
exports.LinePieces = LinePieces;
|
|
exports.LinePieces = LinePieces;
|
|
exports.MeshFaceMaterial = MeshFaceMaterial;
|
|
exports.MeshFaceMaterial = MeshFaceMaterial;
|
|
|
|
+ exports.MultiMaterial = MultiMaterial;
|
|
exports.PointCloud = PointCloud;
|
|
exports.PointCloud = PointCloud;
|
|
exports.Particle = Particle;
|
|
exports.Particle = Particle;
|
|
exports.ParticleSystem = ParticleSystem;
|
|
exports.ParticleSystem = ParticleSystem;
|