Преглед изворни кода

Fixed alpha depth pre test

David Catuhe пре 8 година
родитељ
комит
de5e4ee6a7

Разлика између датотеке није приказан због своје велике величине
+ 2099 - 2099
dist/preview release/babylon.d.ts


Разлика између датотеке није приказан због своје велике величине
+ 34 - 34
dist/preview release/babylon.js


+ 18 - 3
dist/preview release/babylon.max.js

@@ -16204,6 +16204,18 @@ var BABYLON;
             sortedArray.sort(sortCompareFn);
             for (subIndex = 0; subIndex < sortedArray.length; subIndex++) {
                 subMesh = sortedArray[subIndex];
+                if (transparent) {
+                    var material = subMesh.getMaterial();
+                    if (material.needDepthPrePass) {
+                        var engine = material.getScene().getEngine();
+                        engine.setColorWrite(false);
+                        engine.setAlphaTesting(true);
+                        engine.setAlphaMode(BABYLON.Engine.ALPHA_DISABLE);
+                        subMesh.render(false);
+                        engine.setAlphaTesting(false);
+                        engine.setColorWrite(true);
+                    }
+                }
                 subMesh.render(transparent);
             }
         };
@@ -16300,16 +16312,19 @@ var BABYLON;
         RenderingGroup.prototype.dispatch = function (subMesh) {
             var material = subMesh.getMaterial();
             var mesh = subMesh.getMesh();
-            if (material.needDepthPrePass) {
-                this._depthOnlySubMeshes.push(subMesh);
-            }
             if (material.needAlphaBlending() || mesh.visibility < 1.0 || mesh.hasVertexAlpha) {
                 this._transparentSubMeshes.push(subMesh);
             }
             else if (material.needAlphaTesting()) {
+                if (material.needDepthPrePass) {
+                    this._depthOnlySubMeshes.push(subMesh);
+                }
                 this._alphaTestSubMeshes.push(subMesh);
             }
             else {
+                if (material.needDepthPrePass) {
+                    this._depthOnlySubMeshes.push(subMesh);
+                }
                 this._opaqueSubMeshes.push(subMesh); // Opaque
             }
             if (mesh._edgesRenderer) {

Разлика између датотеке није приказан због своје велике величине
+ 2099 - 2099
dist/preview release/babylon.module.d.ts


Разлика између датотеке није приказан због своје велике величине
+ 34 - 34
dist/preview release/babylon.worker.js


Разлика између датотеке није приказан због своје велике величине
+ 2730 - 2730
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.d.ts


Разлика између датотеке није приказан због своје велике величине
+ 34 - 34
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.js


+ 18 - 3
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.max.js

@@ -16204,6 +16204,18 @@ var BABYLON;
             sortedArray.sort(sortCompareFn);
             for (subIndex = 0; subIndex < sortedArray.length; subIndex++) {
                 subMesh = sortedArray[subIndex];
+                if (transparent) {
+                    var material = subMesh.getMaterial();
+                    if (material.needDepthPrePass) {
+                        var engine = material.getScene().getEngine();
+                        engine.setColorWrite(false);
+                        engine.setAlphaTesting(true);
+                        engine.setAlphaMode(BABYLON.Engine.ALPHA_DISABLE);
+                        subMesh.render(false);
+                        engine.setAlphaTesting(false);
+                        engine.setColorWrite(true);
+                    }
+                }
                 subMesh.render(transparent);
             }
         };
@@ -16300,16 +16312,19 @@ var BABYLON;
         RenderingGroup.prototype.dispatch = function (subMesh) {
             var material = subMesh.getMaterial();
             var mesh = subMesh.getMesh();
-            if (material.needDepthPrePass) {
-                this._depthOnlySubMeshes.push(subMesh);
-            }
             if (material.needAlphaBlending() || mesh.visibility < 1.0 || mesh.hasVertexAlpha) {
                 this._transparentSubMeshes.push(subMesh);
             }
             else if (material.needAlphaTesting()) {
+                if (material.needDepthPrePass) {
+                    this._depthOnlySubMeshes.push(subMesh);
+                }
                 this._alphaTestSubMeshes.push(subMesh);
             }
             else {
+                if (material.needDepthPrePass) {
+                    this._depthOnlySubMeshes.push(subMesh);
+                }
                 this._opaqueSubMeshes.push(subMesh); // Opaque
             }
             if (mesh._edgesRenderer) {

Разлика између датотеке није приказан због своје велике величине
+ 2730 - 2730
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.module.d.ts


+ 24 - 5
src/Rendering/babylon.renderingGroup.ts

@@ -183,7 +183,7 @@
          */
         private static renderSorted(subMeshes: SmartArray<SubMesh>, sortCompareFn: (a: SubMesh, b: SubMesh) => number, cameraPosition: Vector3, transparent: boolean): void {
             let subIndex = 0;
-            let subMesh;
+            let subMesh: SubMesh;
             for (; subIndex < subMeshes.length; subIndex++) {
                 subMesh = subMeshes.data[subIndex];
                 subMesh._alphaIndex = subMesh.getMesh().alphaIndex;
@@ -195,6 +195,21 @@
 
             for (subIndex = 0; subIndex < sortedArray.length; subIndex++) {
                 subMesh = sortedArray[subIndex];
+
+                if (transparent) {
+                    let material = subMesh.getMaterial();
+
+                    if (material.needDepthPrePass) {
+                        let engine = material.getScene().getEngine();
+                        engine.setColorWrite(false);
+                        engine.setAlphaTesting(true);
+                        engine.setAlphaMode(Engine.ALPHA_DISABLE);
+                        subMesh.render(false);
+                        engine.setAlphaTesting(false);
+                        engine.setColorWrite(true);
+                    }
+                }
+
                 subMesh.render(transparent);
             }
         }
@@ -302,15 +317,19 @@
             var material = subMesh.getMaterial();
             var mesh = subMesh.getMesh();
 
-            if (material.needDepthPrePass) {
-                this._depthOnlySubMeshes.push(subMesh);
-            }
-
             if (material.needAlphaBlending() || mesh.visibility < 1.0 || mesh.hasVertexAlpha) { // Transparent
                 this._transparentSubMeshes.push(subMesh);
             } else if (material.needAlphaTesting()) { // Alpha test
+                if (material.needDepthPrePass) {
+                    this._depthOnlySubMeshes.push(subMesh);
+                }
+                
                 this._alphaTestSubMeshes.push(subMesh);
             } else {
+                if (material.needDepthPrePass) {
+                    this._depthOnlySubMeshes.push(subMesh);
+                }
+                
                 this._opaqueSubMeshes.push(subMesh); // Opaque
             }