@@ -208,22 +208,28 @@ const LightShadow = Class.create(/** @lends LightShadow.prototype */{
208
208
renderer . clear ( clearColor ) ;
209
209
camera . updateViewProjectionMatrix ( ) ;
210
210
semantic . setCamera ( camera ) ;
211
- renderer . forceMaterial = shadowMaterial ;
212
- this . renderShadowScene ( renderer ) ;
213
- delete renderer . forceMaterial ;
211
+ this . renderShadowScene ( renderer , shadowMaterial ) ;
214
212
framebuffer . unbind ( ) ;
215
213
semantic . setCamera ( currentCamera ) ;
216
214
renderer . viewport ( ) ;
217
215
} ,
218
- renderShadowScene ( renderer ) {
216
+ renderShadowScene ( renderer , shadowMaterial ) {
217
+ const preForceMaterial = renderer . forceMaterial ;
218
+
219
219
const renderList = renderer . renderList ;
220
220
renderList . traverse ( ( mesh ) => {
221
221
if ( isNeedRenderMesh ( mesh ) ) {
222
+ renderer . forceMaterial = mesh . material . getShadowMaterial ( shadowMaterial ) ;
222
223
renderer . renderMesh ( mesh ) ;
223
224
}
224
225
} , ( instancedMeshes ) => {
225
- renderer . renderInstancedMeshes ( instancedMeshes . filter ( mesh => isNeedRenderMesh ( mesh ) ) ) ;
226
+ if ( instancedMeshes . length ) {
227
+ renderer . forceMaterial = instancedMeshes [ 0 ] . material . getShadowMaterial ( shadowMaterial ) ;
228
+ renderer . renderInstancedMeshes ( instancedMeshes . filter ( mesh => isNeedRenderMesh ( mesh ) ) ) ;
229
+ }
226
230
} ) ;
231
+
232
+ renderer . forceMaterial = preForceMaterial ;
227
233
} ,
228
234
showShadowMap ( ) {
229
235
this . renderer . on ( 'afterRender' , ( ) => {
0 commit comments