Skip to content

Commit

Permalink
Merge branch 'gltf-opaque' into transmission-alpha
Browse files Browse the repository at this point in the history
  • Loading branch information
mrdoob committed Aug 25, 2021
2 parents 58760fa + 72fa2c4 commit 74d7b74
Show file tree
Hide file tree
Showing 12 changed files with 175 additions and 200 deletions.
70 changes: 33 additions & 37 deletions build/three.js
Original file line number Diff line number Diff line change
Expand Up @@ -19210,20 +19210,25 @@
if (_clippingEnabled === true) clipping.beginShadows();
const shadowsArray = currentRenderState.state.shadowsArray;
shadowMap.render(shadowsArray, scene, camera);
currentRenderState.setupLights(_this.physicallyCorrectLights);
currentRenderState.setupLightsView(camera);
if (_clippingEnabled === true) clipping.endShadows(); //

if (this.info.autoReset === true) this.info.reset(); //

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) {
// resolve multisample renderbuffers to a single-sample texture if necessary
Expand Down Expand Up @@ -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) {
const needsAntialias = _antialias === true && capabilities.isWebGL2 === true;
const renderTargetType = needsAntialias ? WebGLMultisampleRenderTarget : WebGLRenderTarget;
Expand Down Expand Up @@ -19366,40 +19383,19 @@
textures.updateRenderTargetMipmap(_transmissionRenderTarget);

_this.setRenderTarget(currentRenderTarget);

renderObjects(transmissiveObjects, scene, camera);
}

function renderObjects(renderList, scene, camera) {
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);
}
}
Expand Down
2 changes: 1 addition & 1 deletion build/three.min.js

Large diffs are not rendered by default.

94 changes: 44 additions & 50 deletions build/three.module.js
Original file line number Diff line number Diff line change
Expand Up @@ -25881,9 +25881,6 @@ function WebGLRenderer( parameters = {} ) {

shadowMap.render( shadowsArray, scene, camera );

currentRenderState.setupLights( _this.physicallyCorrectLights );
currentRenderState.setupLightsView( camera );

if ( _clippingEnabled === true ) clipping.endShadows();

//
Expand All @@ -25896,13 +25893,25 @@ function WebGLRenderer( parameters = {} ) {

// render scene

const opaqueObjects = currentRenderList.opaque;
const transmissiveObjects = currentRenderList.transmissive;
const transparentObjects = currentRenderList.transparent;
currentRenderState.setupLights( _this.physicallyCorrectLights );

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 );
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 );

}

//

Expand Down Expand Up @@ -26087,7 +26096,25 @@ function WebGLRenderer( parameters = {} ) {

}

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 ) {

Expand Down Expand Up @@ -26123,55 +26150,22 @@ function WebGLRenderer( parameters = {} ) {

_this.setRenderTarget( currentRenderTarget );

renderObjects( transmissiveObjects, scene, camera );

}

function renderObjects( renderList, scene, camera ) {

const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;

if ( camera.isArrayCamera ) {

const cameras = camera.cameras;

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 i = 0, l = renderList.length; i < l; i ++ ) {

for ( let j = 0, jl = renderList.length; j < jl; j ++ ) {
const renderItem = renderList[ i ];

const renderItem = renderList[ j ];
const object = renderItem.object;
const geometry = renderItem.geometry;
const material = overrideMaterial === null ? renderItem.material : overrideMaterial;
const group = renderItem.group;

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 );

Expand Down
4 changes: 2 additions & 2 deletions examples/jsm/loaders/GLTFLoader.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
FileLoader,
FrontSide,
Group,
GLTFOpaqueBlending,
ImageBitmapLoader,
InterleavedBuffer,
InterleavedBufferAttribute,
Expand All @@ -37,7 +38,6 @@ import {
NearestFilter,
NearestMipmapLinearFilter,
NearestMipmapNearestFilter,
NoBlending,
NumberKeyframeTrack,
Object3D,
OrthographicCamera,
Expand Down Expand Up @@ -3119,7 +3119,7 @@ class GLTFParser {

} else {

materialParams.blending = NoBlending;
materialParams.blending = GLTFOpaqueBlending;
materialParams.transparent = false;

if ( alphaMode === ALPHA_MODES.MASK ) {
Expand Down
Binary file modified examples/screenshots/webxr_vr_sandbox.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading

0 comments on commit 74d7b74

Please sign in to comment.