Kaynağa Gözat

Add support for inverse cubic reflection mode

Popov72 4 yıl önce
ebeveyn
işleme
1b3eeeb46c

+ 2 - 1
src/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.ts

@@ -161,7 +161,8 @@ export abstract class ReflectionTextureBaseBlock extends NodeMaterialBlock {
         defines.setValue(this._defineLocalCubicName, (<any>texture).boundingBoxSize ? true : false, true);
         defines.setValue(this._defineExplicitName, texture.coordinatesMode === Constants.TEXTURE_EXPLICIT_MODE, true);
         defines.setValue(this._defineSkyboxName, texture.coordinatesMode === Constants.TEXTURE_SKYBOX_MODE, true);
-        defines.setValue(this._defineCubicName, texture.coordinatesMode === Constants.TEXTURE_CUBIC_MODE, true);
+        defines.setValue(this._defineCubicName, texture.coordinatesMode === Constants.TEXTURE_CUBIC_MODE || texture.coordinatesMode === Constants.TEXTURE_INVCUBIC_MODE, true);
+        defines.setValue("INVERTCUBICMAP", texture.coordinatesMode === Constants.TEXTURE_INVCUBIC_MODE, true);
         defines.setValue(this._defineSphericalName, texture.coordinatesMode === Constants.TEXTURE_SPHERICAL_MODE, true);
         defines.setValue(this._definePlanarName, texture.coordinatesMode === Constants.TEXTURE_PLANAR_MODE, true);
         defines.setValue(this._defineProjectionName, texture.coordinatesMode === Constants.TEXTURE_PROJECTION_MODE, true);

+ 5 - 1
src/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.ts

@@ -973,7 +973,11 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
         });
 
         state._emitFunctionFromInclude("pbrDirectLightingFalloffFunctions", comments);
-        state._emitFunctionFromInclude("pbrBRDFFunctions", comments);
+        state._emitFunctionFromInclude("pbrBRDFFunctions", comments, {
+            replaceStrings: [
+                { search: /REFLECTIONMAP_SKYBOX/g, replace: reflectionBlock?._defineSkyboxName ?? "REFLECTIONMAP_SKYBOX" }
+            ]
+        });
         state._emitFunctionFromInclude("hdrFilteringFunctions", comments);
 
         state._emitFunctionFromInclude("pbrDirectLightingFunctions", comments, {

+ 2 - 2
src/Shaders/ShadersInclude/reflectionFunction.fx

@@ -81,7 +81,7 @@ vec3 computeCubicCoords(vec4 worldPos, vec3 worldNormal, vec3 eyePosition, mat4
 
     coords = vec3(reflectionMatrix * vec4(coords, 0));
 
-    #ifdef INVERTCUBICMAP // This is not (yet) supported by Node Material
+    #ifdef INVERTCUBICMAP
         coords.y *= -1.0;
     #endif
 
@@ -99,7 +99,7 @@ vec3 computeCubicLocalCoords(vec4 worldPos, vec3 worldNormal, vec3 eyePosition,
 
     coords = vec3(reflectionMatrix * vec4(coords, 0));
 
-    #ifdef INVERTCUBICMAP // This is not (yet) supported by Node Material
+    #ifdef INVERTCUBICMAP
         coords.y *= -1.0;
     #endif