|
@@ -30,8 +30,6 @@ function WebGLShadowMap( _renderer, _lights, _objects, capabilities ) {
|
|
_lookTarget = new Vector3(),
|
|
_lookTarget = new Vector3(),
|
|
_lightPositionWorld = new Vector3(),
|
|
_lightPositionWorld = new Vector3(),
|
|
|
|
|
|
- _renderList = [],
|
|
|
|
-
|
|
|
|
_MorphingFlag = 1,
|
|
_MorphingFlag = 1,
|
|
|
|
|
|
_NumberOfMaterialVariants = ( _MorphingFlag ) + 1,
|
|
_NumberOfMaterialVariants = ( _MorphingFlag ) + 1,
|
|
@@ -258,46 +256,7 @@ function WebGLShadowMap( _renderer, _lights, _objects, capabilities ) {
|
|
|
|
|
|
// 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 );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@@ -425,7 +384,7 @@ function WebGLShadowMap( _renderer, _lights, _objects, capabilities ) {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- function projectObject( object, camera, shadowCamera ) {
|
|
|
|
|
|
+ function renderObject( object, camera, shadowCamera, isPointLight ) {
|
|
|
|
|
|
if ( object.visible === false ) return;
|
|
if ( object.visible === false ) return;
|
|
|
|
|
|
@@ -435,12 +394,33 @@ function WebGLShadowMap( _renderer, _lights, _objects, capabilities ) {
|
|
|
|
|
|
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 ) {
|
|
|
|
+
|
|
|
|
+ var depthMaterial = getDepthMaterial( object, groupMaterial, isPointLight, _lightPositionWorld );
|
|
|
|
+ _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } else if ( material.visible === true ) {
|
|
|
|
|
|
- object.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );
|
|
|
|
- _renderList.push( object );
|
|
|
|
|
|
+ var depthMaterial = getDepthMaterial( object, material, isPointLight, _lightPositionWorld );
|
|
|
|
+ _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@@ -452,7 +432,7 @@ function WebGLShadowMap( _renderer, _lights, _objects, capabilities ) {
|
|
|
|
|
|
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 );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|