浏览代码

PBR: Fix Skybox

Sébastien Vandenberghe 9 年之前
父节点
当前提交
f5328aa2f8

文件差异内容过多而无法显示
+ 1 - 1
materialsLibrary/dist/babylon.pbrMaterial.js


文件差异内容过多而无法显示
+ 1 - 1
materialsLibrary/dist/babylon.pbrMaterial.min.js


+ 16 - 4
materialsLibrary/materials/pbr/pbr.fragment.fx

@@ -465,7 +465,7 @@ uniform sampler2D reflection2DSampler;
 #ifdef REFLECTIONMAP_SKYBOX
 varying vec3 vPositionUVW;
 #else
-    #ifdef REFLECTIONMAP_EQUIRECTANGULAR
+    #ifdef REFLECTIONMAP_EQUIRECTANGULAR_FIXED
     varying vec3 vDirectionW;
     #endif
 
@@ -476,7 +476,7 @@ varying vec3 vPositionUVW;
 
 vec3 computeReflectionCoords(vec4 worldPos, vec3 worldNormal)
 {
-#ifdef REFLECTIONMAP_EQUIRECTANGULAR
+#ifdef REFLECTIONMAP_EQUIRECTANGULAR_FIXED
     vec3 direction = normalize(vDirectionW);
 
     float t = clamp(direction.y * -0.5 + 0.5, 0., 1.0);
@@ -485,6 +485,16 @@ vec3 computeReflectionCoords(vec4 worldPos, vec3 worldNormal)
     return vec3(s, t, 0);
 #endif
 
+#ifdef REFLECTIONMAP_EQUIRECTANGULAR
+
+	vec3 cameraToVertex = normalize(worldPos.xyz - vEyePosition);
+	vec3 r = reflect(cameraToVertex, worldNormal);
+	float t = clamp(r.y * -0.5 + 0.5, 0., 1.0);
+	float s = atan(r.z, r.x) * RECIPROCAL_PI2 + 0.5;
+
+	return vec3(s, t, 0);
+#endif
+
 #ifdef REFLECTIONMAP_SPHERICAL
     vec3 viewDir = normalize(vec3(view * worldPos));
     vec3 viewNormal = normalize(vec3(view * vec4(worldNormal, 0.0)));
@@ -1263,8 +1273,10 @@ vec3 environmentIrradiance = vReflectionColor.rgb;
         #endif
 
         #ifdef USESPHERICALFROMREFLECTIONMAP
-            vec3 normalEnvironmentSpace = (reflectionMatrix * vec4(normalW, 1)).xyz;
-            environmentIrradiance = EnvironmentIrradiance(normalEnvironmentSpace);
+            #ifndef REFLECTIONMAP_SKYBOX
+                vec3 normalEnvironmentSpace = (reflectionMatrix * vec4(normalW, 1)).xyz;
+                environmentIrradiance = EnvironmentIrradiance(normalEnvironmentSpace);
+            #endif
         #else
             environmentRadiance = toLinearSpace(environmentRadiance.rgb);
             

+ 6 - 3
materialsLibrary/test/add/addpbr.js

@@ -16,13 +16,16 @@ window.preparePBR = function() {
     
     // Skybox
     var hdrSkybox = BABYLON.Mesh.CreateBox("hdrSkyBox", 1000.0, scene);
-    var hdrSkyboxMaterial = new BABYLON.StandardMaterial("skyBox", scene);
+    var hdrSkyboxMaterial = new BABYLON.PBRMaterial("skyBox", scene);
     hdrSkyboxMaterial.backFaceCulling = false;
     hdrSkyboxMaterial.reflectionTexture = hdrTexture.clone();
     hdrSkyboxMaterial.reflectionTexture.coordinatesMode = BABYLON.Texture.SKYBOX_MODE;
-    hdrSkyboxMaterial.diffuseColor = new BABYLON.Color3(0, 0, 0);
-    hdrSkyboxMaterial.specularColor = new BABYLON.Color3(0, 0, 0);
+    hdrSkyboxMaterial.microSurface = 1;
+    hdrSkyboxMaterial.specularColor = new BABYLON.Color3(1, 1, 1);
     hdrSkyboxMaterial.disableLighting = true;
+    hdrSkyboxMaterial.cameraExposure = 0.6;
+    hdrSkyboxMaterial.cameraContrast = 1.6;
+    hdrSkyboxMaterial.directIntensity = 0;
     hdrSkybox.material = hdrSkyboxMaterial;
     hdrSkybox.infiniteDistance = true;
     hdrSkybox.setEnabled(false);