|
@@ -19210,20 +19210,25 @@
|
|
if (_clippingEnabled === true) clipping.beginShadows();
|
|
if (_clippingEnabled === true) clipping.beginShadows();
|
|
const shadowsArray = currentRenderState.state.shadowsArray;
|
|
const shadowsArray = currentRenderState.state.shadowsArray;
|
|
shadowMap.render(shadowsArray, scene, camera);
|
|
shadowMap.render(shadowsArray, scene, camera);
|
|
- currentRenderState.setupLights(_this.physicallyCorrectLights);
|
|
|
|
- currentRenderState.setupLightsView(camera);
|
|
|
|
if (_clippingEnabled === true) clipping.endShadows(); //
|
|
if (_clippingEnabled === true) clipping.endShadows(); //
|
|
|
|
|
|
if (this.info.autoReset === true) this.info.reset(); //
|
|
if (this.info.autoReset === true) this.info.reset(); //
|
|
|
|
|
|
background.render(currentRenderList, scene); // render scene
|
|
background.render(currentRenderList, scene); // render scene
|
|
|
|
|
|
- const opaqueObjects = currentRenderList.opaque;
|
|
|
|
- const transmissiveObjects = currentRenderList.transmissive;
|
|
|
|
- const transparentObjects = currentRenderList.transparent;
|
|
|
|
- if (opaqueObjects.length > 0) renderObjects(opaqueObjects, scene, camera);
|
|
|
|
- if (transmissiveObjects.length > 0) renderTransmissiveObjects(opaqueObjects, transmissiveObjects, scene, camera);
|
|
|
|
- if (transparentObjects.length > 0) renderObjects(transparentObjects, scene, camera); //
|
|
|
|
|
|
+ currentRenderState.setupLights(_this.physicallyCorrectLights);
|
|
|
|
+
|
|
|
|
+ if (camera.isArrayCamera) {
|
|
|
|
+ const cameras = camera.cameras;
|
|
|
|
+
|
|
|
|
+ for (let i = 0, l = cameras.length; i < l; i++) {
|
|
|
|
+ const camera2 = cameras[i];
|
|
|
|
+ renderScene(currentRenderList, scene, camera2, camera2.viewport);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ renderScene(currentRenderList, scene, camera);
|
|
|
|
+ } //
|
|
|
|
+
|
|
|
|
|
|
if (_currentRenderTarget !== null) {
|
|
if (_currentRenderTarget !== null) {
|
|
// resolve multisample renderbuffers to a single-sample texture if necessary
|
|
// resolve multisample renderbuffers to a single-sample texture if necessary
|
|
@@ -19336,7 +19341,19 @@
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- function renderTransmissiveObjects(opaqueObjects, transmissiveObjects, scene, camera) {
|
|
|
|
|
|
+ function renderScene(currentRenderList, scene, camera, viewport) {
|
|
|
|
+ const opaqueObjects = currentRenderList.opaque;
|
|
|
|
+ const transmissiveObjects = currentRenderList.transmissive;
|
|
|
|
+ const transparentObjects = currentRenderList.transparent;
|
|
|
|
+ currentRenderState.setupLightsView(camera);
|
|
|
|
+ if (transmissiveObjects.length > 0) renderTransmissionPass(opaqueObjects, scene, camera);
|
|
|
|
+ if (viewport) state.viewport(_currentViewport.copy(viewport));
|
|
|
|
+ if (opaqueObjects.length > 0) renderObjects(opaqueObjects, scene, camera);
|
|
|
|
+ if (transmissiveObjects.length > 0) renderObjects(transmissiveObjects, scene, camera);
|
|
|
|
+ if (transparentObjects.length > 0) renderObjects(transparentObjects, scene, camera);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function renderTransmissionPass(opaqueObjects, scene, camera) {
|
|
if (_transmissionRenderTarget === null) {
|
|
if (_transmissionRenderTarget === null) {
|
|
const needsAntialias = _antialias === true && capabilities.isWebGL2 === true;
|
|
const needsAntialias = _antialias === true && capabilities.isWebGL2 === true;
|
|
const renderTargetType = needsAntialias ? WebGLMultisampleRenderTarget : WebGLRenderTarget;
|
|
const renderTargetType = needsAntialias ? WebGLMultisampleRenderTarget : WebGLRenderTarget;
|
|
@@ -19366,40 +19383,19 @@
|
|
textures.updateRenderTargetMipmap(_transmissionRenderTarget);
|
|
textures.updateRenderTargetMipmap(_transmissionRenderTarget);
|
|
|
|
|
|
_this.setRenderTarget(currentRenderTarget);
|
|
_this.setRenderTarget(currentRenderTarget);
|
|
-
|
|
|
|
- renderObjects(transmissiveObjects, scene, camera);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
function renderObjects(renderList, scene, camera) {
|
|
function renderObjects(renderList, scene, camera) {
|
|
const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;
|
|
const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;
|
|
|
|
|
|
- if (camera.isArrayCamera) {
|
|
|
|
- const cameras = camera.cameras;
|
|
|
|
|
|
+ for (let i = 0, l = renderList.length; i < l; i++) {
|
|
|
|
+ const renderItem = renderList[i];
|
|
|
|
+ const object = renderItem.object;
|
|
|
|
+ const geometry = renderItem.geometry;
|
|
|
|
+ const material = overrideMaterial === null ? renderItem.material : overrideMaterial;
|
|
|
|
+ const group = renderItem.group;
|
|
|
|
|
|
- for (let i = 0, l = cameras.length; i < l; i++) {
|
|
|
|
- const camera2 = cameras[i];
|
|
|
|
- state.viewport(_currentViewport.copy(camera2.viewport));
|
|
|
|
- currentRenderState.setupLightsView(camera2);
|
|
|
|
-
|
|
|
|
- for (let j = 0, jl = renderList.length; j < jl; j++) {
|
|
|
|
- const renderItem = renderList[j];
|
|
|
|
- const object = renderItem.object;
|
|
|
|
- const geometry = renderItem.geometry;
|
|
|
|
- const material = overrideMaterial === null ? renderItem.material : overrideMaterial;
|
|
|
|
- const group = renderItem.group;
|
|
|
|
-
|
|
|
|
- if (object.layers.test(camera2.layers)) {
|
|
|
|
- renderObject(object, scene, camera2, geometry, material, group);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- for (let j = 0, jl = renderList.length; j < jl; j++) {
|
|
|
|
- const renderItem = renderList[j];
|
|
|
|
- const object = renderItem.object;
|
|
|
|
- const geometry = renderItem.geometry;
|
|
|
|
- const material = overrideMaterial === null ? renderItem.material : overrideMaterial;
|
|
|
|
- const group = renderItem.group;
|
|
|
|
|
|
+ if (object.layers.test(camera.layers)) {
|
|
renderObject(object, scene, camera, geometry, material, group);
|
|
renderObject(object, scene, camera, geometry, material, group);
|
|
}
|
|
}
|
|
}
|
|
}
|