Browse Source

Fixed sky material

luaacro 9 năm trước cách đây
mục cha
commit
941068fb43

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 39 - 6
materialsLibrary/dist/babylon.skyMaterial.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 1
materialsLibrary/dist/babylon.skyMaterial.min.js


+ 20 - 7
materialsLibrary/materials/sky/babylon.skyMaterial.ts

@@ -16,15 +16,28 @@ module BABYLON {
     
     export class SkyMaterial extends Material {
         // Public members
+        @serialize()
         public luminance: number = 1.0;
+        
+        @serialize()
 		public turbidity: number = 10.0;
+        
+        @serialize()
 		public rayleigh: number = 2.0;
-		public mieCoefficient: number = 0.005;
-		public mieDirectionalG: number = 0.8;
+		
+        @serialize()
+        public mieCoefficient: number = 0.005;
+		
+        @serialize()
+        public mieDirectionalG: number = 0.8;
         
         public distance: number = 500;
+        
+        @serialize()
         public inclination: number = 0.49;
-		public azimuth: number = 0.25;
+		
+        @serialize()
+        public azimuth: number = 0.25;
         
         // Private members
         private _sunPosition: Vector3 = Vector3.Zero();
@@ -190,10 +203,7 @@ module BABYLON {
             }
             
             // Fog
-            if (scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) {
-                this._effect.setFloat4("vFogInfos", scene.fogMode, scene.fogStart, scene.fogEnd, scene.fogDensity);
-                this._effect.setColor3("vFogColor", scene.fogColor);
-            }
+            MaterialHelper.BindFogParameters(scene, mesh, this._effect);
             
             // Sky
             this._effect.setFloat("luminance", this.luminance);
@@ -223,6 +233,7 @@ module BABYLON {
         }
 
         public clone(name: string): SkyMaterial {
+            /*
             var newMaterial = new SkyMaterial(name, this.getScene());
 
             // Base material
@@ -238,6 +249,8 @@ module BABYLON {
             newMaterial.azimuth = this.azimuth;
             
             return newMaterial;
+            */
+            return SerializationHelper.Clone<SkyMaterial>(() => new SkyMaterial(name, this.getScene()), this);
         }
 		
 		public serialize(): any {

+ 4 - 45
materialsLibrary/materials/sky/sky.fragment.fx

@@ -7,9 +7,7 @@ varying vec3 vPositionW;
 varying vec4 vColor;
 #endif
 
-#ifdef CLIPPLANE
-varying float fClipDistance;
-#endif
+#include<clipPlaneFragmentDeclaration>
 
 // Sky
 uniform float luminance;
@@ -20,40 +18,7 @@ uniform float mieDirectionalG;
 uniform vec3 sunPosition;
 
 // Fog
-#ifdef FOG
-#define FOGMODE_NONE    0.
-#define FOGMODE_EXP     1.
-#define FOGMODE_EXP2    2.
-#define FOGMODE_LINEAR  3.
-#define E 2.71828
-
-uniform vec4 vFogInfos;
-uniform vec3 vFogColor;
-varying float fFogDistance;
-
-float CalcFogFactor()
-{
-	float fogCoeff = 1.0;
-	float fogStart = vFogInfos.y;
-	float fogEnd = vFogInfos.z;
-	float fogDensity = vFogInfos.w;
-
-	if (FOGMODE_LINEAR == vFogInfos.x)
-	{
-		fogCoeff = (fogEnd - fFogDistance) / (fogEnd - fogStart);
-	}
-	else if (FOGMODE_EXP == vFogInfos.x)
-	{
-		fogCoeff = 1.0 / pow(E, fFogDistance * fogDensity);
-	}
-	else if (FOGMODE_EXP2 == vFogInfos.x)
-	{
-		fogCoeff = 1.0 / pow(E, fFogDistance * fFogDistance * fogDensity * fogDensity);
-	}
-
-	return clamp(fogCoeff, 0.0, 1.0);
-}
-#endif
+#include<fogFragmentDeclaration>
 
 // Constants
 const float e = 2.71828182845904523536028747135266249775724709369995957;
@@ -123,10 +88,7 @@ vec3 Uncharted2Tonemap(vec3 x)
 
 void main(void) {
 	// Clip plane
-#ifdef CLIPPLANE
-	if (fClipDistance > 0.0)
-		discard;
-#endif
+#include<clipPlaneFragment>
 
 	/**
 	*--------------------------------------------------------------------------------------------------
@@ -202,10 +164,7 @@ void main(void) {
 	// Composition
 	vec4 color = vec4(baseColor.rgb, alpha);
 
-#ifdef FOG
-	float fog = CalcFogFactor();
-	color.rgb = fog * color.rgb + (1.0 - fog) * vFogColor;
-#endif
+#include<fogFragment>
 
 	gl_FragColor = color;
 }

+ 4 - 14
materialsLibrary/materials/sky/sky.vertex.fx

@@ -22,14 +22,8 @@ varying vec3 vPositionW;
 varying vec4 vColor;
 #endif
 
-#ifdef CLIPPLANE
-uniform vec4 vClipPlane;
-varying float fClipDistance;
-#endif
-
-#ifdef FOG
-varying float fFogDistance;
-#endif
+#include<clipPlaneVertexDeclaration>
+#include<fogVertexDeclaration>
 
 void main(void) {
 	gl_Position = viewProjection * world * vec4(position, 1.0);
@@ -38,14 +32,10 @@ void main(void) {
 	vPositionW = vec3(worldPos);
 
 	// Clip plane
-#ifdef CLIPPLANE
-	fClipDistance = dot(worldPos, vClipPlane);
-#endif
+#include<clipPlaneVertex>
 
 	// Fog
-#ifdef FOG
-	fFogDistance = (view * worldPos).z;
-#endif
+#include<fogVertex>
 
 	// Vertex color
 #ifdef VERTEXCOLOR