Przeglądaj źródła

Fix bugs with viewport with mirrors and VR postprocesses

David Catuhe 8 lat temu
rodzic
commit
68cd8dd23b
30 zmienionych plików z 4617 dodań i 4552 usunięć
  1. 2 1
      Tools/Gulp/config.json
  2. 1078 1076
      dist/preview release/babylon.d.ts
  3. 42 42
      dist/preview release/babylon.js
  4. 22 3
      dist/preview release/babylon.max.js
  5. 1078 1076
      dist/preview release/babylon.module.d.ts
  6. 46 46
      dist/preview release/babylon.worker.js
  7. 979 977
      dist/preview release/customConfigurations/minimalGLTFViewer/babylon.d.ts
  8. 44 44
      dist/preview release/customConfigurations/minimalGLTFViewer/babylon.js
  9. 22 3
      dist/preview release/customConfigurations/minimalGLTFViewer/babylon.max.js
  10. 979 977
      dist/preview release/customConfigurations/minimalGLTFViewer/babylon.module.d.ts
  11. 3 3
      dist/preview release/gui/babylon.gui.d.ts
  12. 18 18
      dist/preview release/gui/babylon.gui.js
  13. 3 3
      dist/preview release/gui/babylon.gui.min.js
  14. 3 3
      dist/preview release/gui/babylon.gui.module.d.ts
  15. 263 263
      dist/preview release/inspector/babylon.inspector.bundle.js
  16. 3 3
      dist/preview release/inspector/babylon.inspector.min.js
  17. 2 2
      dist/preview release/loaders/babylon.glTF1FileLoader.min.js
  18. 1 1
      dist/preview release/loaders/babylon.glTF2FileLoader.min.js
  19. 2 2
      dist/preview release/loaders/babylon.glTFFileLoader.min.js
  20. 1 1
      dist/preview release/loaders/babylon.objFileLoader.min.js
  21. 1 1
      dist/preview release/materialsLibrary/babylon.customMaterial.min.js
  22. 1 1
      dist/preview release/materialsLibrary/babylon.shadowOnlyMaterial.min.js
  23. 1 1
      dist/preview release/materialsLibrary/babylon.waterMaterial.min.js
  24. 1 1
      dist/preview release/postProcessesLibrary/babylon.asciiArtPostProcess.min.js
  25. 1 1
      dist/preview release/postProcessesLibrary/babylon.digitalRainPostProcess.min.js
  26. 2 0
      src/Materials/Textures/babylon.mirrorTexture.ts
  27. 3 1
      src/PostProcess/RenderPipeline/Pipelines/babylon.defaultRenderingPipeline.ts
  28. 11 1
      src/PostProcess/babylon.postProcess.ts
  29. 1 1
      src/PostProcess/babylon.vrDistortionCorrectionPostProcess.ts
  30. 4 0
      src/babylon.engine.ts

+ 2 - 1
Tools/Gulp/config.json

@@ -593,10 +593,11 @@
                 "geometry.fragment"
             ],
             "shaderIncludes": [
+                "mrtFragmentDeclaration",
                 "bones300Declaration",
                 "instances300Declaration",
                 "instancesVertex",
-                "bonesVertex"
+                "bonesVertex"               
             ]
         },
         "postProcesses" : 

Plik diff jest za duży
+ 1078 - 1076
dist/preview release/babylon.d.ts


Plik diff jest za duży
+ 42 - 42
dist/preview release/babylon.js


Plik diff jest za duży
+ 22 - 3
dist/preview release/babylon.max.js


Plik diff jest za duży
+ 1078 - 1076
dist/preview release/babylon.module.d.ts


Plik diff jest za duży
+ 46 - 46
dist/preview release/babylon.worker.js


Plik diff jest za duży
+ 979 - 977
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.d.ts


Plik diff jest za duży
+ 44 - 44
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.js


Plik diff jest za duży
+ 22 - 3
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.max.js


Plik diff jest za duży
+ 979 - 977
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.module.d.ts


+ 3 - 3
dist/preview release/gui/babylon.gui.d.ts

@@ -636,7 +636,7 @@ declare module BABYLON.GUI {
 
 
 declare module BABYLON.GUI {
-    class KeyOptions {
+    class KeyPropertySet {
         width?: string;
         height?: string;
         paddingLeft?: string;
@@ -657,8 +657,8 @@ declare module BABYLON.GUI {
         defaultButtonColor: string;
         defaultButtonBackground: string;
         protected _getTypeName(): string;
-        private _createKey(key, options?);
-        addKeysRow(keys: Array<string>, options?: Array<KeyOptions>): void;
+        private _createKey(key, propertySet?);
+        addKeysRow(keys: Array<string>, propertySets?: Array<KeyPropertySet>): void;
         private _connectedInputText;
         private _onFocusObserver;
         private _onBlurObserver;

+ 18 - 18
dist/preview release/gui/babylon.gui.js

@@ -4106,12 +4106,12 @@ var BABYLON;
 (function (BABYLON) {
     var GUI;
     (function (GUI) {
-        var KeyOptions = (function () {
-            function KeyOptions() {
+        var KeyPropertySet = (function () {
+            function KeyPropertySet() {
             }
-            return KeyOptions;
+            return KeyPropertySet;
         }());
-        GUI.KeyOptions = KeyOptions;
+        GUI.KeyPropertySet = KeyPropertySet;
         var VirtualKeyboard = (function (_super) {
             __extends(VirtualKeyboard, _super);
             function VirtualKeyboard() {
@@ -4130,17 +4130,17 @@ var BABYLON;
             VirtualKeyboard.prototype._getTypeName = function () {
                 return "VirtualKeyboard";
             };
-            VirtualKeyboard.prototype._createKey = function (key, options) {
+            VirtualKeyboard.prototype._createKey = function (key, propertySet) {
                 var _this = this;
                 var button = GUI.Button.CreateSimpleButton(key, key);
-                button.width = options && options.width ? options.width : this.defaultButtonWidth;
-                button.height = options && options.height ? options.height : this.defaultButtonHeight;
-                button.color = options && options.color ? options.color : this.defaultButtonColor;
-                button.background = options && options.background ? options.background : this.defaultButtonBackground;
-                button.paddingLeft = options && options.paddingLeft ? options.paddingLeft : this.defaultButtonPaddingLeft;
-                button.paddingRight = options && options.paddingRight ? options.paddingRight : this.defaultButtonPaddingRight;
-                button.paddingTop = options && options.paddingTop ? options.paddingTop : this.defaultButtonPaddingTop;
-                button.paddingBottom = options && options.paddingBottom ? options.paddingBottom : this.defaultButtonPaddingBottom;
+                button.width = propertySet && propertySet.width ? propertySet.width : this.defaultButtonWidth;
+                button.height = propertySet && propertySet.height ? propertySet.height : this.defaultButtonHeight;
+                button.color = propertySet && propertySet.color ? propertySet.color : this.defaultButtonColor;
+                button.background = propertySet && propertySet.background ? propertySet.background : this.defaultButtonBackground;
+                button.paddingLeft = propertySet && propertySet.paddingLeft ? propertySet.paddingLeft : this.defaultButtonPaddingLeft;
+                button.paddingRight = propertySet && propertySet.paddingRight ? propertySet.paddingRight : this.defaultButtonPaddingRight;
+                button.paddingTop = propertySet && propertySet.paddingTop ? propertySet.paddingTop : this.defaultButtonPaddingTop;
+                button.paddingBottom = propertySet && propertySet.paddingBottom ? propertySet.paddingBottom : this.defaultButtonPaddingBottom;
                 button.thickness = 0;
                 button.isFocusInvisible = true;
                 button.onPointerUpObservable.add(function () {
@@ -4148,16 +4148,16 @@ var BABYLON;
                 });
                 return button;
             };
-            VirtualKeyboard.prototype.addKeysRow = function (keys, options) {
+            VirtualKeyboard.prototype.addKeysRow = function (keys, propertySets) {
                 var panel = new GUI.StackPanel();
                 panel.isVertical = false;
                 panel.isFocusInvisible = true;
                 for (var i = 0; i < keys.length; i++) {
-                    var keyOptions = null;
-                    if (options && options.length === keys.length) {
-                        keyOptions = options[i];
+                    var properties = null;
+                    if (propertySets && propertySets.length === keys.length) {
+                        properties = propertySets[i];
                     }
-                    panel.addControl(this._createKey(keys[i], keyOptions));
+                    panel.addControl(this._createKey(keys[i], properties));
                 }
                 this.addControl(panel);
             };

Plik diff jest za duży
+ 3 - 3
dist/preview release/gui/babylon.gui.min.js


+ 3 - 3
dist/preview release/gui/babylon.gui.module.d.ts

@@ -636,7 +636,7 @@ declare module BABYLON.GUI {
 
 /// <reference path="../../../dist/preview release/babylon.d.ts" />
 declare module BABYLON.GUI {
-    class KeyOptions {
+    class KeyPropertySet {
         width?: string;
         height?: string;
         paddingLeft?: string;
@@ -657,8 +657,8 @@ declare module BABYLON.GUI {
         defaultButtonColor: string;
         defaultButtonBackground: string;
         protected _getTypeName(): string;
-        private _createKey(key, options?);
-        addKeysRow(keys: Array<string>, options?: Array<KeyOptions>): void;
+        private _createKey(key, propertySet?);
+        addKeysRow(keys: Array<string>, propertySets?: Array<KeyPropertySet>): void;
         private _connectedInputText;
         private _onFocusObserver;
         private _onBlurObserver;

Plik diff jest za duży
+ 263 - 263
dist/preview release/inspector/babylon.inspector.bundle.js


Plik diff jest za duży
+ 3 - 3
dist/preview release/inspector/babylon.inspector.min.js


Plik diff jest za duży
+ 2 - 2
dist/preview release/loaders/babylon.glTF1FileLoader.min.js


Plik diff jest za duży
+ 1 - 1
dist/preview release/loaders/babylon.glTF2FileLoader.min.js


Plik diff jest za duży
+ 2 - 2
dist/preview release/loaders/babylon.glTFFileLoader.min.js


Plik diff jest za duży
+ 1 - 1
dist/preview release/loaders/babylon.objFileLoader.min.js


Plik diff jest za duży
+ 1 - 1
dist/preview release/materialsLibrary/babylon.customMaterial.min.js


Plik diff jest za duży
+ 1 - 1
dist/preview release/materialsLibrary/babylon.shadowOnlyMaterial.min.js


Plik diff jest za duży
+ 1 - 1
dist/preview release/materialsLibrary/babylon.waterMaterial.min.js


Plik diff jest za duży
+ 1 - 1
dist/preview release/postProcessesLibrary/babylon.asciiArtPostProcess.min.js


Plik diff jest za duży
+ 1 - 1
dist/preview release/postProcessesLibrary/babylon.digitalRainPostProcess.min.js


+ 2 - 0
src/Materials/Textures/babylon.mirrorTexture.ts

@@ -61,6 +61,8 @@ module BABYLON {
         constructor(name: string, size: any, scene: Scene, generateMipMaps?: boolean, type: number = Engine.TEXTURETYPE_UNSIGNED_INT, samplingMode = Texture.BILINEAR_SAMPLINGMODE, generateDepthBuffer = true) {
             super(name, size, scene, generateMipMaps, true, type, false, samplingMode, generateDepthBuffer);
 
+            this.ignoreCameraViewport = true;
+
             this.onBeforeRenderObservable.add(() => {
                 Matrix.ReflectionToRef(this.mirrorPlane, this._mirrorMatrix);
                 this._savedViewMatrix = scene.getViewMatrix();

+ 3 - 1
src/PostProcess/RenderPipeline/Pipelines/babylon.defaultRenderingPipeline.ts

@@ -223,8 +223,10 @@
                 this.imageProcessing = new BABYLON.ImageProcessingPostProcess("imageProcessing",  1.0, null, BABYLON.Texture.BILINEAR_SAMPLINGMODE, engine, false, this._defaultPipelineTextureType);
                 if (this._hdr) {
                     this.addEffect(new PostProcessRenderEffect(engine, this.ImageProcessingPostProcessId, () => { return this.imageProcessing; }, true));
+                } else {
+                    this._scene.imageProcessingConfiguration.applyByPostProcess = false;
                 }
-            }
+            } 
 
 			if (this.fxaaEnabled) {
                 this.fxaa = new FxaaPostProcess("fxaa", 1.0, null, Texture.BILINEAR_SAMPLINGMODE, engine, false, this._defaultPipelineTextureType);

+ 11 - 1
src/PostProcess/babylon.postProcess.ts

@@ -20,6 +20,7 @@
         public scaleMode = Engine.SCALEMODE_FLOOR;
         public alwaysForcePOT = false;
         public samples = 1;
+        public adaptScaleToCurrentViewport = false;
 
         private _camera: Camera;
         private _scene: Scene;
@@ -221,9 +222,18 @@
                 var requiredWidth = ((sourceTexture ? sourceTexture.width : this._engine.getRenderingCanvas().width) * <number>this._options) | 0;
                 var requiredHeight = ((sourceTexture ? sourceTexture.height : this._engine.getRenderingCanvas().height) * <number>this._options) | 0;
 
-                var desiredWidth = (<PostProcessOptions>this._options).width || requiredWidth;
+                var desiredWidth = ((<PostProcessOptions>this._options).width || requiredWidth);
                 var desiredHeight = (<PostProcessOptions>this._options).height || requiredHeight;
 
+                if (this.adaptScaleToCurrentViewport) {
+                    let currentViewport = engine.currentViewport;
+
+                    if (currentViewport) {
+                        desiredWidth *= currentViewport.width;
+                        desiredHeight *= currentViewport.height;
+                    }
+                }
+
                 if (this.renderTargetSamplingMode === Texture.TRILINEAR_SAMPLINGMODE || this.alwaysForcePOT) {
                     if (!(<PostProcessOptions>this._options).width) {
                         desiredWidth = engine.needPOTTextures ? Tools.GetExponentOfTwo(desiredWidth, maxSize, this.scaleMode) : desiredWidth;

+ 1 - 1
src/PostProcess/babylon.vrDistortionCorrectionPostProcess.ts

@@ -10,7 +10,6 @@
         private _scaleFactor: Vector2;
         private _lensCenter: Vector2;
 
-        //ANY
         constructor(name: string, camera: Camera, isRightEye: boolean, vrMetrics: VRCameraMetrics) {
             super(name, "vrDistortionCorrection", [
                 'LensCenter',
@@ -23,6 +22,7 @@
             this._distortionFactors = vrMetrics.distortionK;
             this._postProcessScaleFactor = vrMetrics.postProcessScaleFactor;
             this._lensCenterOffset = vrMetrics.lensCenterOffset;
+            this.adaptScaleToCurrentViewport = true;
 
             this.onSizeChangedObservable.add(() => {
                 this.aspectRatio = this.width * .5 / this.height;

+ 4 - 0
src/babylon.engine.ts

@@ -711,6 +711,10 @@
             return this._textureFormatInUse;
         }
 
+        public get currentViewport(): Viewport {
+            return this._cachedViewport;
+        }
+
         // Empty texture
         public get emptyTexture(): InternalTexture {
             if (!this._emptyTexture) {