浏览代码

swithch from materia.premultipledAlpha to material.blend = THREE.PremultipiedAlphaBlending.

Ben Houston 9 年之前
父节点
当前提交
64a1eb9406

+ 1 - 5
examples/webgl_materials_transparency.html

@@ -108,11 +108,7 @@
 					metalness: 0.9,
 					roughness: 1.0,
 					shading: THREE.SmoothShading,
-					premultipliedAlpha: true,
-					blending: THREE.CustomBlending,
-					blendSrc: THREE.OneFactor,	// output of shader must be premultiplied
-					blendDst: THREE.OneMinusSrcAlphaFactor,
-					blendEquation: THREE.AddEquation,
+					blending: THREE.PremultipiedAlphaBlending,
 					transparent: true
 				} );
 

+ 1 - 0
src/Three.js

@@ -156,6 +156,7 @@ THREE.AdditiveBlending = 2;
 THREE.SubtractiveBlending = 3;
 THREE.MultiplyBlending = 4;
 THREE.CustomBlending = 5;
+THREE.PremultipiedAlphaBlending = 6;
 
 // custom blending equations
 // (numbers start from 100 not to clash with other

+ 0 - 4
src/materials/Material.js

@@ -40,8 +40,6 @@ THREE.Material = function () {
 
 	this.alphaTest = 0;
 
-	this.premultipliedAlpha = false;
-
 	this.overdraw = 0; // Overdrawn pixels (typically between 0 and 1) for fixing antialiasing gaps in CanvasRenderer
 
 	this.visible = true;
@@ -185,8 +183,6 @@ THREE.Material.prototype = {
 
 		}
 
-		if( this.premultipliedAlpha ) data.premultipliedAlpha = this.premultipliedAlpha;
-
 		if ( this.size !== undefined ) data.size = this.size;
 		if ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;
 

+ 2 - 1
src/renderers/webgl/WebGLPrograms.js

@@ -175,12 +175,13 @@ THREE.WebGLPrograms = function ( renderer, capabilities ) {
 			shadowMapEnabled: renderer.shadowMap.enabled && object.receiveShadow && lights.shadows.length > 0,
 			shadowMapType: renderer.shadowMap.type,
 
-			premultipliedAlpha: material.premultipliedAlpha,
+			premultipliedAlpha: ( material.blending === THREE.PremultipiedAlphaBlending ),
 			alphaTest: material.alphaTest,
 			doubleSided: material.side === THREE.DoubleSide,
 			flipSided: material.side === THREE.BackSide
 
 		};
+
 		return parameters;
 
 	};

+ 5 - 0
src/renderers/webgl/WebGLState.js

@@ -230,6 +230,11 @@ THREE.WebGLState = function ( gl, extensions, paramThreeToGL ) {
 				gl.blendEquation( gl.FUNC_ADD );
 				gl.blendFunc( gl.ZERO, gl.SRC_COLOR );
 
+			} else if( blending === THREE.PremultipiedAlphaBlending ) {
+
+				gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );
+				gl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );
+
 			} else {
 
 				gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );