Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replaced TwoPassDoubleSide with material.forceSinglePass #25239

Merged
merged 10 commits into from
Jan 26, 2023
3 changes: 1 addition & 2 deletions editor/js/Sidebar.Material.js
Original file line number Diff line number Diff line change
Expand Up @@ -306,8 +306,7 @@ function SidebarMaterial( editor ) {
const materialSideOptions = {
0: 'Front',
1: 'Back',
2: 'Double',
3: 'TwoPassDouble'
2: 'Double'
};

const materialSide = new SidebarMaterialConstantProperty( editor, 'side', strings.getKey( 'sidebar/material/side' ), materialSideOptions );
Expand Down
16 changes: 16 additions & 0 deletions editor/js/Sidebar.Object.js
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,16 @@ function SidebarObject( editor ) {

container.add( objectFrustumCulledRow );

// renderForceSinglePass

const objectrenderForceSinglePassRow = new UIRow();
const objectrenderForceSinglePass = new UICheckbox().onChange( update );

objectrenderForceSinglePassRow.add( new UIText( strings.getKey( 'sidebar/object/renderforcesinglepass' ) ).setWidth( '90px' ) );
objectrenderForceSinglePassRow.add( objectrenderForceSinglePass );

container.add( objectrenderForceSinglePassRow );

// renderOrder

const objectRenderOrderRow = new UIRow();
Expand Down Expand Up @@ -527,6 +537,12 @@ function SidebarObject( editor ) {

}

if ( object.renderForceSinglePass !== objectrenderForceSinglePass.getValue() ) {

editor.execute( new SetValueCommand( editor, object, 'renderForceSinglePass', objectrenderForceSinglePass.getValue() ) );

}

if ( object.renderOrder !== objectRenderOrder.getValue() ) {

editor.execute( new SetValueCommand( editor, object, 'renderOrder', objectRenderOrder.getValue() ) );
Expand Down
1 change: 1 addition & 0 deletions examples/webgl_buffergeometry_instancing.html
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@
//

const mesh = new THREE.Mesh( geometry, material );
mesh.renderForceSinglePass = true;
scene.add( mesh );

//
Expand Down
2 changes: 1 addition & 1 deletion examples/webgl_geometry_convex.html
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@
const meshMaterial = new THREE.MeshLambertMaterial( {
color: 0xffffff,
opacity: 0.5,
side: THREE.TwoPassDoubleSide,
side: THREE.DoubleSide,
transparent: true
} );

Expand Down
1 change: 0 additions & 1 deletion src/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ export const VSMShadowMap = 3;
export const FrontSide = 0;
export const BackSide = 1;
export const DoubleSide = 2;
export const TwoPassDoubleSide = 3;
mrdoob marked this conversation as resolved.
Show resolved Hide resolved
export const NoBlending = 0;
export const NormalBlending = 1;
export const AdditiveBlending = 2;
Expand Down
3 changes: 3 additions & 0 deletions src/core/Object3D.js
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ class Object3D extends EventDispatcher {
this.receiveShadow = false;

this.frustumCulled = true;
this.renderForceSinglePass = false;
this.renderOrder = 0;

this.animations = [];
Expand Down Expand Up @@ -712,6 +713,7 @@ class Object3D extends EventDispatcher {
if ( this.receiveShadow === true ) object.receiveShadow = true;
if ( this.visible === false ) object.visible = false;
if ( this.frustumCulled === false ) object.frustumCulled = false;
if ( this.renderForceSinglePass === true ) object.renderForceSinglePass = true;
if ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;
if ( Object.keys( this.userData ).length > 0 ) object.userData = this.userData;

Expand Down Expand Up @@ -942,6 +944,7 @@ class Object3D extends EventDispatcher {
this.receiveShadow = source.receiveShadow;

this.frustumCulled = source.frustumCulled;
this.renderForceSinglePass = source.renderForceSinglePass;
this.renderOrder = source.renderOrder;

this.userData = JSON.parse( JSON.stringify( source.userData ) );
Expand Down
1 change: 1 addition & 0 deletions src/loaders/ObjectLoader.js
Original file line number Diff line number Diff line change
Expand Up @@ -977,6 +977,7 @@ class ObjectLoader extends Loader {

if ( data.visible !== undefined ) object.visible = data.visible;
if ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;
if ( data.renderForceSinglePass !== undefined ) object.renderForceSinglePass = data.renderForceSinglePass;
if ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;
if ( data.userData !== undefined ) object.userData = data.userData;
if ( data.layers !== undefined ) object.layers.mask = data.layers;
Expand Down
10 changes: 5 additions & 5 deletions src/renderers/WebGLRenderer.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import {
REVISION,
BackSide,
TwoPassDoubleSide,
FrontSide,
DoubleSide,
RGBAFormat,
HalfFloatType,
FloatType,
Expand Down Expand Up @@ -828,7 +828,7 @@ function WebGLRenderer( parameters = {} ) {

function prepare( material, scene, object ) {

if ( material.transparent === true && material.side === TwoPassDoubleSide ) {
if ( material.transparent === true && material.side === DoubleSide && object.renderForceSinglePass === false ) {

material.side = BackSide;
material.needsUpdate = true;
Expand All @@ -838,7 +838,7 @@ function WebGLRenderer( parameters = {} ) {
material.needsUpdate = true;
getProgram( material, scene, object );

material.side = TwoPassDoubleSide;
material.side = DoubleSide;

} else {

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

material.onBeforeRender( _this, scene, camera, geometry, object, group );

if ( material.transparent === true && material.side === TwoPassDoubleSide ) {
if ( material.transparent === true && material.side === DoubleSide && object.renderForceSinglePass === false ) {

material.side = BackSide;
material.needsUpdate = true;
Expand All @@ -1320,7 +1320,7 @@ function WebGLRenderer( parameters = {} ) {
material.needsUpdate = true;
_this.renderBufferDirect( camera, scene, geometry, material, object, group );

material.side = TwoPassDoubleSide;
material.side = DoubleSide;

} else {

Expand Down
4 changes: 2 additions & 2 deletions src/renderers/webgl/WebGLShadowMap.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { FrontSide, BackSide, DoubleSide, TwoPassDoubleSide, NearestFilter, PCFShadowMap, VSMShadowMap, RGBADepthPacking, NoBlending } from '../../constants.js';
import { FrontSide, BackSide, DoubleSide, NearestFilter, PCFShadowMap, VSMShadowMap, RGBADepthPacking, NoBlending } from '../../constants.js';
import { WebGLRenderTarget } from '../WebGLRenderTarget.js';
import { MeshDepthMaterial } from '../../materials/MeshDepthMaterial.js';
import { MeshDistanceMaterial } from '../../materials/MeshDistanceMaterial.js';
Expand Down Expand Up @@ -28,7 +28,7 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {

_maxTextureSize = _capabilities.maxTextureSize;

const shadowSide = { [ FrontSide ]: BackSide, [ BackSide ]: FrontSide, [ DoubleSide ]: DoubleSide, [ TwoPassDoubleSide ]: DoubleSide };
const shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };
mrdoob marked this conversation as resolved.
Show resolved Hide resolved

const shadowMaterialVertical = new ShaderMaterial( {
defines: {
Expand Down