提交 e53d1bb2 编写于 作者: A alteredq

WebGLDeferredRenderer: less buggy transparent materials skipping.

Because of deferred materials sharing and MeshFaceMaterials previous solution was causing disappearances of random parts.

There are still some disappearance glitches though if the scene includes some BufferGeometry objects. This was happening also before hiding transparent parts, so seems unrelated, more likely some bug in GL state handling for BufferGeometry rendering.
上级 514aad9a
......@@ -67,6 +67,10 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
//
var invisibleMaterial = new THREE.ShaderMaterial();
invisibleMaterial.visible = false;
var defaultNormalDepthMaterial = new THREE.ShaderMaterial( {
uniforms: THREE.UniformsUtils.clone( normalDepthShader.uniforms ),
......@@ -94,8 +98,17 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
var deferredMaterials = createDeferredMaterials( materials[ i ] );
colorMaterials.push( deferredMaterials.colorMaterial );
normalDepthMaterials.push( deferredMaterials.normalDepthMaterial );
if ( deferredMaterials.transparent ) {
colorMaterials.push( invisibleMaterial );
normalDepthMaterials.push( invisibleMaterial );
} else {
colorMaterials.push( deferredMaterials.colorMaterial );
normalDepthMaterials.push( deferredMaterials.normalDepthMaterial );
}
}
......@@ -108,6 +121,7 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
object.properties.colorMaterial = deferredMaterials.colorMaterial;
object.properties.normalDepthMaterial = deferredMaterials.normalDepthMaterial;
object.properties.transparent = deferredMaterials.transparent;
}
......@@ -174,7 +188,6 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
material.alphaTest = originalMaterial.alphaTest;
material.wireframe = originalMaterial.wireframe;
material.transparent = originalMaterial.transparent;
// uv repeat and offset setting priorities
// 1. color map
......@@ -272,7 +285,7 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
}
deferredMaterials.normalDepthMaterial.transparent = originalMaterial.transparent;
deferredMaterials.transparent = originalMaterial.transparent;
return deferredMaterials;
......@@ -471,8 +484,15 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
if ( object.material ) {
object.material = object.properties.colorMaterial;
if ( object.material.transparent ) object.visible = false;
if ( object.properties.transparent ) {
object.material = invisibleMaterial;
} else {
object.material = object.properties.colorMaterial;
}
}
......@@ -482,8 +502,15 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
if ( object.material ) {
object.material = object.properties.normalDepthMaterial;
if ( object.material.transparent ) object.visible = false;
if ( object.properties.transparent ) {
object.material = invisibleMaterial;
} else {
object.material = object.properties.normalDepthMaterial;
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册