Browse Source

Handle right handed scenes for the reflection block

Popov72 5 years ago
parent
commit
6d3b91b2d1

+ 7 - 0
src/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.ts

@@ -44,6 +44,8 @@ export abstract class ReflectionTextureBaseBlock extends NodeMaterialBlock {
     public _defineEquirectangularFixedName: string;
     /** @hidden */
     public _defineSkyboxName: string;
+    /** @hidden */
+    public _defineOppositeZ: string;
     protected _cubeSamplerName: string;
     protected _2DSamplerName: string;
     protected _positionUVWName: string;
@@ -208,6 +210,7 @@ export abstract class ReflectionTextureBaseBlock extends NodeMaterialBlock {
         this._defineMirroredEquirectangularFixedName = state._getFreeDefineName("REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED");
         this._defineEquirectangularFixedName = state._getFreeDefineName("REFLECTIONMAP_EQUIRECTANGULAR_FIXED");
         this._defineSkyboxName = state._getFreeDefineName("REFLECTIONMAP_SKYBOX");
+        this._defineOppositeZ = state._getFreeDefineName("REFLECTIONMAP_OPPOSITEZ");
 
         this._reflectionMatrixName = state._getFreeVariableName("reflectionMatrix");
 
@@ -323,6 +326,10 @@ export abstract class ReflectionTextureBaseBlock extends NodeMaterialBlock {
                 vec3 ${this._reflectionVectorName} = vec3(0, 0, 0);
             #endif
 
+            #ifdef ${this._defineOppositeZ}
+                ${this._reflectionVectorName}.z *= -1.0;
+            #endif
+
             #ifdef ${this._define3DName}
                 vec3 ${this._reflectionCoordsName} = ${this._reflectionVectorName};
             #else

+ 3 - 2
src/Materials/Node/Blocks/PBR/reflectionBlock.ts

@@ -166,6 +166,7 @@ export class ReflectionBlock extends ReflectionTextureBaseBlock {
         defines.setValue(this._defineLODReflectionAlpha, reflectionTexture!.lodLevelInAlpha);
         defines.setValue(this._defineLinearSpecularReflection, reflectionTexture!.linearSpecularLOD);
         defines.setValue(this._defineLODBasedMicroSurface, this._scene.getEngine().getCaps().textureLOD);
+        defines.setValue(this._defineOppositeZ, this._scene.useRightHandedSystem ? !reflectionTexture!.invertZ : reflectionTexture!.invertZ);
 
         defines.setValue("SPHERICAL_HARMONICS", this.useSphericalHarmonics);
 
@@ -278,7 +279,7 @@ export class ReflectionBlock extends ReflectionTextureBaseBlock {
         code +=
             `#if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)
                 vec3 ${reflectionVectorName} = vec3(${this._reflectionMatrixName} * vec4(${this.worldNormal.associatedVariableName}.xyz, 0)).xyz;
-                #ifdef REFLECTIONMAP_OPPOSITEZ
+                #ifdef ${this._defineOppositeZ}
                     ${reflectionVectorName}.z *= -1.0;
                 #endif
                 ${this._vEnvironmentIrradianceName} = computeEnvironmentIrradiance(${reflectionVectorName});
@@ -383,7 +384,7 @@ export class ReflectionBlock extends ReflectionTextureBaseBlock {
                         vec3 ${finalIrradianceVector} = vec3(${this._reflectionMatrixName} * vec4(${normalVarName}.xyz, 0)).xyz;
                     #endif
 
-                    #ifdef REFLECTIONMAP_OPPOSITEZ
+                    #ifdef ${this._defineOppositeZ}
                     ${finalIrradianceVector}.z *= -1.0;
                     #endif