Просмотр исходного кода

Nightly + alphaCutOff for stdMat

David Catuhe 7 лет назад
Родитель
Сommit
e8d7ac0d2b

Разница между файлами не показана из-за своего большого размера
+ 2102 - 2098
Playground/babylon.d.txt


Разница между файлами не показана из-за своего большого размера
+ 10983 - 10979
dist/preview release/babylon.d.ts


Разница между файлами не показана из-за своего большого размера
+ 18 - 18
dist/preview release/babylon.js


Разница между файлами не показана из-за своего большого размера
+ 14 - 5
dist/preview release/babylon.max.js


Разница между файлами не показана из-за своего большого размера
+ 14 - 5
dist/preview release/babylon.no-module.max.js


Разница между файлами не показана из-за своего большого размера
+ 18 - 18
dist/preview release/babylon.worker.js


Разница между файлами не показана из-за своего большого размера
+ 14 - 5
dist/preview release/es6.js


Разница между файлами не показана из-за своего большого размера
+ 22 - 22
dist/preview release/viewer/babylon.viewer.js


Разница между файлами не показана из-за своего большого размера
+ 14 - 5
dist/preview release/viewer/babylon.viewer.max.js


+ 1 - 0
dist/preview release/what's new.md

@@ -114,6 +114,7 @@
 - Added unlit material extension support to glTF 2.0 loader. ([bghgary](https://github.com/bghgary))
 - (Viewer) Viewer's declaration file automatically generated ([RaananW](https://github.com/RaananW))
 - New serialize and parse functions for effect layers (Highlight and Glow layers) ([julien-moreau](https://github.com/julien-moreau))
+- Added alphaCutOff support for StandardMaterial ([deltakosh](https://github.com/deltakosh))
 
 ## Bug fixes
 

+ 11 - 1
src/Materials/babylon.standardMaterial.ts

@@ -241,6 +241,12 @@ module BABYLON {
         @serialize()
         public invertRefractionY = true;
 
+        /**
+         * Defines the alpha limits in alpha test mode
+         */
+        @serialize()
+        public alphaCutOff = 0.4;        
+
         @serialize("useLightmapAsShadowmap")
         private _useLightmapAsShadowmap = false;
         @expandToProperty("_markAllSubMeshesAsTexturesDirty")
@@ -876,7 +882,7 @@ module BABYLON {
                     "vClipPlane", "diffuseMatrix", "ambientMatrix", "opacityMatrix", "reflectionMatrix", "emissiveMatrix", "specularMatrix", "bumpMatrix", "normalMatrix", "lightmapMatrix", "refractionMatrix",
                     "diffuseLeftColor", "diffuseRightColor", "opacityParts", "reflectionLeftColor", "reflectionRightColor", "emissiveLeftColor", "emissiveRightColor", "refractionLeftColor", "refractionRightColor",
                     "vReflectionPosition", "vReflectionSize",
-                    "logarithmicDepthConstant", "vTangentSpaceParams"
+                    "logarithmicDepthConstant", "vTangentSpaceParams", "alphaCutOff"
                 ];
 
                 var samplers = ["diffuseSampler", "ambientSampler", "opacitySampler", "reflectionCubeSampler", "reflection2DSampler", "emissiveSampler", "specularSampler", "bumpSampler", "lightmapSampler", "refractionCubeSampler", "refraction2DSampler"]
@@ -1054,6 +1060,10 @@ module BABYLON {
                         if (this._diffuseTexture && StandardMaterial.DiffuseTextureEnabled) {
                             this._uniformBuffer.updateFloat2("vDiffuseInfos", this._diffuseTexture.coordinatesIndex, this._diffuseTexture.level);
                             MaterialHelper.BindTextureMatrix(this._diffuseTexture, this._uniformBuffer, "diffuse");
+
+                            if (this._diffuseTexture.hasAlpha) {
+                                effect.setFloat("alphaCutOff", this.alphaCutOff);
+                            }
                         }
 
                         if (this._ambientTexture && StandardMaterial.AmbientTextureEnabled) {

+ 5 - 1
src/Shaders/default.fragment.fx

@@ -121,6 +121,10 @@ uniform sampler2D refraction2DSampler;
 	uniform sampler2D specularSampler;
 #endif
 
+#ifdef ALPHATEST
+	uniform float alphaCutOff;
+#endif
+
 // Fresnel
 #include<fresnelFunction>
 
@@ -192,7 +196,7 @@ void main(void) {
 	baseColor = texture2D(diffuseSampler, vDiffuseUV + uvOffset);
 
 	#ifdef ALPHATEST
-		if (baseColor.a < 0.4)
+		if (baseColor.a < alphaCutOff)
 			discard;
 	#endif