Explorar o código

Merge pull request #4682 from RaananW/validation-viewer

Validation tests viewer
Raanan Weber %!s(int64=7) %!d(string=hai) anos
pai
achega
b76cff9937
Modificáronse 54 ficheiros con 138 adicións e 72 borrados
  1. 4 2
      .travis.yml
  2. 35 0
      Tools/Gulp/gulpfile.js
  3. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Control.png
  4. BIN=BIN
      Viewer/tests/validation/ReferenceImages/ControlDefault.png
  5. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Diffuse.png
  6. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Emissive.png
  7. BIN=BIN
      Viewer/tests/validation/ReferenceImages/MainColorEnv0-0.png
  8. BIN=BIN
      Viewer/tests/validation/ReferenceImages/MainColorEnv0-100.png
  9. BIN=BIN
      Viewer/tests/validation/ReferenceImages/MainColorEnv0-50.png
  10. BIN=BIN
      Viewer/tests/validation/ReferenceImages/MainColorEnv100-0.png
  11. BIN=BIN
      Viewer/tests/validation/ReferenceImages/MainColorEnv100-100.png
  12. BIN=BIN
      Viewer/tests/validation/ReferenceImages/MainColorEnv100-50.png
  13. BIN=BIN
      Viewer/tests/validation/ReferenceImages/MainColorEnv50-0.png
  14. BIN=BIN
      Viewer/tests/validation/ReferenceImages/MainColorEnv50-100.png
  15. BIN=BIN
      Viewer/tests/validation/ReferenceImages/MainColorEnv50-50.png
  16. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular0-0.png
  17. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular0-100.png
  18. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular0-25.png
  19. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular0-50.png
  20. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular0-75.png
  21. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular100-0.png
  22. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular100-100.png
  23. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular100-25.png
  24. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular100-50.png
  25. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular100-75.png
  26. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular25-0.png
  27. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular25-100.png
  28. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular25-25.png
  29. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular25-50.png
  30. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular25-75.png
  31. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular50-0.png
  32. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular50-100.png
  33. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular50-25.png
  34. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular50-50.png
  35. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular50-75.png
  36. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular75-0.png
  37. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular75-100.png
  38. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular75-25.png
  39. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular75-50.png
  40. BIN=BIN
      Viewer/tests/validation/ReferenceImages/Specular75-75.png
  41. BIN=BIN
      Viewer/tests/validation/ReferenceImages/SpecularEnv0-0.png
  42. BIN=BIN
      Viewer/tests/validation/ReferenceImages/SpecularEnv0-100.png
  43. BIN=BIN
      Viewer/tests/validation/ReferenceImages/SpecularEnv0-50.png
  44. BIN=BIN
      Viewer/tests/validation/ReferenceImages/SpecularEnv100-0.png
  45. BIN=BIN
      Viewer/tests/validation/ReferenceImages/SpecularEnv100-100.png
  46. BIN=BIN
      Viewer/tests/validation/ReferenceImages/SpecularEnv100-50.png
  47. BIN=BIN
      Viewer/tests/validation/ReferenceImages/SpecularEnv50-0.png
  48. BIN=BIN
      Viewer/tests/validation/ReferenceImages/SpecularEnv50-100.png
  49. BIN=BIN
      Viewer/tests/validation/ReferenceImages/SpecularEnv50-50.png
  50. 44 8
      Viewer/tests/validation/config.json
  51. 1 1
      Viewer/tests/validation/integration.js
  52. 14 20
      Viewer/tests/validation/karma.conf.browserstack.js
  53. 39 40
      Viewer/tests/validation/validation.js
  54. 1 1
      dist/preview release/what's new.md

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 4 - 2
.travis.yml


+ 35 - 0
Tools/Gulp/gulpfile.js

@@ -1092,6 +1092,41 @@ gulp.task("tests-viewer-validation-karma", ["tests-viewer-validation-transpile"]
 });
 
 /**
+ * Launches the KARMA validation tests in ff or virtual screen ff on travis for a quick analysis during the build.
+ * (Can only be launch on any branches.)
+ */
+gulp.task("tests-viewer-validation-virtualscreen", ["tests-viewer-validation-transpile"], function (done) {
+    var kamaServerOptions = {
+        configFile: __dirname + "/../../Viewer/tests/validation/karma.conf.js",
+        singleRun: true,
+        browsers: ['Firefox']
+    };
+
+    var server = new karmaServer(kamaServerOptions, done);
+    server.start();
+});
+
+/**
+ * Launches the KARMA validation tests in browser stack for remote and cross devices validation tests.
+ * (Can only be launch from secure branches.)
+ */
+gulp.task("tests-viewer-validation-browserstack", ["tests-viewer-validation-transpile"], function (done) {
+    if (!process.env.BROWSER_STACK_USERNAME) {
+        done();
+        return;
+    }
+
+    var kamaServerOptions = {
+        configFile: __dirname + "/../../Viewer/tests/validation/karma.conf.browserstack.js",
+        singleRun: true
+    };
+
+    var server = new karmaServer(kamaServerOptions, done);
+    server.start();
+});
+
+
+/**
  * Transpiles viewer typescript unit tests. 
  */
 gulp.task("tests-viewer-validation-transpile", function (done) {

BIN=BIN
Viewer/tests/validation/ReferenceImages/Control.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/ControlDefault.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Diffuse.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Emissive.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/MainColorEnv0-0.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/MainColorEnv0-100.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/MainColorEnv0-50.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/MainColorEnv100-0.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/MainColorEnv100-100.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/MainColorEnv100-50.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/MainColorEnv50-0.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/MainColorEnv50-100.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/MainColorEnv50-50.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular0-0.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular0-100.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular0-25.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular0-50.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular0-75.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular100-0.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular100-100.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular100-25.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular100-50.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular100-75.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular25-0.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular25-100.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular25-25.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular25-50.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular25-75.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular50-0.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular50-100.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular50-25.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular50-50.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular50-75.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular75-0.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular75-100.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular75-25.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular75-50.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/Specular75-75.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/SpecularEnv0-0.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/SpecularEnv0-100.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/SpecularEnv0-50.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/SpecularEnv100-0.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/SpecularEnv100-100.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/SpecularEnv100-50.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/SpecularEnv50-0.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/SpecularEnv50-100.png


BIN=BIN
Viewer/tests/validation/ReferenceImages/SpecularEnv50-50.png


+ 44 - 8
Viewer/tests/validation/config.json

@@ -2,10 +2,46 @@
     "root": "",
     "tests": [
         {
+            "title": "Diffuse",
+            "createMesh": true,
+            "createMaterial": true,
+            "configuration": {
+                "extends": "extended",
+                "castShadow": true,
+                "model": {
+                    "material": {
+                        "albedoColor": {
+                            "r": 0,
+                            "g": 0,
+                            "b": 1
+                        },
+                        "reflectivityColor": {
+                            "r": 0,
+                            "g": 0,
+                            "b": 0
+                        },
+                        "microSurface": 0
+                    }
+                }
+            },
+            "referenceImage": "Diffuse.png"
+        },
+        {
+            "title": "BrainStem Environment",
+            "configuration": {
+                "extends": "extended"
+            },
+            "model": "/dist/assets/BrainStem/BrainStem.gltf",
+            "referenceImage": "BrainStemEnv.png",
+            "enableEnvironment": true
+        }
+    ],
+    "allTests": [
+        {
             "title": "Control Default",
             "createMesh": true,
             "configuration": {
-                "extends": "default"
+                "extends": "minimal"
             },
             "referenceImage": "ControlDefault.png"
         },
@@ -254,11 +290,11 @@
             "enableEnvironment": true
         },
         {
-            "title": "Specular {{glos * 25}} - {{spec * 25}}",
+            "title": "Specular {{glos * 50}} - {{spec * 50}}",
             "createMesh": true,
             "createMaterial": true,
             "repeatVariables": "glos,spec",
-            "repeatTimes": "5,5",
+            "repeatTimes": "3,3",
             "configuration": {
                 "extends": "extended",
                 "castShadow": true,
@@ -270,15 +306,15 @@
                             "b": 1
                         },
                         "reflectivityColor": {
-                            "r": "{{spec / 4}}",
-                            "g": "{{spec / 4}}",
-                            "b": "{{spec / 4}}"
+                            "r": "{{spec / 2}}",
+                            "g": "{{spec / 2}}",
+                            "b": "{{spec / 2}}"
                         },
-                        "microSurface": "{{glos / 4}}"
+                        "microSurface": "{{glos / 2}}"
                     }
                 }
             },
-            "referenceImage": "Specular{{glos * 25}}-{{spec * 25}}.png"
+            "referenceImage": "Specular{{glos * 50}}-{{spec * 50}}.png"
         },
         {
             "title": "BrainStem",

+ 1 - 1
Viewer/tests/validation/integration.js

@@ -67,7 +67,7 @@ window.onload = function () {
                                 }
                                 catch (e) {
                                     if (screenshot) {
-                                        console.error(screenshot);
+                                        //console.error(screenshot);
                                     }
                                     deferredDone(e);
                                 }

+ 14 - 20
Viewer/tests/validation/karma.conf.browserstack.js

@@ -9,27 +9,21 @@ module.exports = function (config) {
         browserDisconnectTolerance: 3,
         concurrency: 1,
 
-        urlRoot: '/karma',
+        urlRoot: '/karma/',
 
         frameworks: ['mocha', 'chai', 'sinon'],
 
         files: [
-            './dist/preview release/earcut.min.js',
-            './Tools/DevLoader/BabylonLoader.js',
             './tests/validation/index.css',
             './tests/validation/integration.js',
-            './favicon.ico',
-            { pattern: 'dist/**/*', watched: false, included: false, served: true },
-            { pattern: 'assets/**/*', watched: false, included: false, served: true },
-            { pattern: 'tests/**/*', watched: false, included: false, served: true },
-            { pattern: 'Playground/scenes/**/*', watched: false, included: false, served: true },
-            { pattern: 'Playground/textures/**/*', watched: false, included: false, served: true },
-            { pattern: 'Playground/sounds/**/*', watched: false, included: false, served: true },
-            { pattern: 'Tools/DevLoader/**/*', watched: false, included: false, served: true },            
-            { pattern: 'Tools/Gulp/config.json', watched: false, included: false, served: true },
+            './tests/build/test.js',
+            './tests/validation/validation.js',
+            { pattern: './tests/**/*', watched: false, included: false, served: true },
+            { pattern: './dist/assets/**/*', watched: false, included: false, served: true },
         ],
         proxies: {
-            '/': '/base/'
+            '/tests/': '/base/tests/',
+            '/dist/assets/': '/base//dist/assets/'
         },
 
         port: 1338,
@@ -44,7 +38,7 @@ module.exports = function (config) {
         browserStack: {
             project: 'Babylon JS Validation Tests',
             video: false,
-            debug : 'true',
+            debug: 'true',
             timeout: 1200,
             build: process.env.TRAVIS_BUILD_NUMBER,
             username: process.env.BROWSER_STACK_USERNAME,
@@ -75,16 +69,16 @@ module.exports = function (config) {
             bs_chrome_android: {
                 base: 'BrowserStack',
                 os: 'Android',
-                os_version : '8.0',
-                device : 'Google Pixel',
-                real_mobile : 'true'
+                os_version: '8.0',
+                device: 'Google Pixel',
+                real_mobile: 'true'
             },
             bs_safari_ios: {
                 base: 'BrowserStack',
                 os: 'ios',
-                os_version : '10.3',
-                device : 'iPhone 7',
-                real_mobile : 'true'
+                os_version: '10.3',
+                device: 'iPhone 7',
+                real_mobile: 'true'
             }
         },
         browsers: ['bs_chrome_android'],

+ 39 - 40
Viewer/tests/validation/validation.js

@@ -138,6 +138,8 @@ function evaluate(test, resultCanvas, result, renderImage, index, waitRing, done
 
     var renderB64 = saveRenderImage(renderData, currentViewer.canvas);
     renderImage.src = renderB64;
+
+    // save all reference images
     // downloadDataUrlFromJavascript(test.referenceImage, renderB64)
 
     done(testRes, renderB64);
@@ -151,11 +153,6 @@ function runTest(index, done) {
 
     var test = Object.assign({}, config.tests[index]);
 
-    //process params
-    /*if (params) {
-        processTest(test, "", params);
-    }*/
-
     var container = document.createElement("div");
     container.id = "container#" + index;
     container.className = "container";
@@ -236,35 +233,42 @@ function runTest(index, done) {
 
     // create a new viewer
     currentViewer && currentViewer.dispose();
-    currentViewer = null;
-    currentScene = null;
-    viewerElement.innerHTML = '';
-    currentViewer = new BabylonViewer.DefaultViewer(viewerElement, configuration);
-
-    currentViewer.onInitDoneObservable.add(() => {
-
-        var currentFrame = 0;
-        var waitForFrame = test.waitForFrame || 0;
-
-        if (test.model) {
-            currentViewer.initModel(test.model);
-        } else if (test.createMesh) {
-            prepareMeshForViewer(currentViewer, configuration, test);
-        }
-
-        currentViewer.onModelLoadedObservable.add((model) => {
-            currentViewer.onFrameRenderedObservable.add(() => {
-                if (test.animationTest && !currentFrame) {
-                    model.playAnimation(model.getAnimationNames()[0]);
-                }
-                if (currentFrame === waitForFrame) {
-                    currentViewer.sceneManager.scene.executeWhenReady(() => {
-                        evaluate(test, resultCanvas, result, renderImage, index, waitRing, done);
-                    });
-                }
-                currentFrame++;
+    currentViewer && currentViewer.engine.dispose();
+
+    setTimeout(() => {
+        currentViewer = null;
+        currentScene = null;
+        viewerElement.innerHTML = '';
+        currentViewer = new BabylonViewer.DefaultViewer(viewerElement, configuration);
+
+        currentViewer.onInitDoneObservable.add(() => {
+
+            var currentFrame = 0;
+            var waitForFrame = test.waitForFrame || 0;
+
+            currentViewer.onModelLoadedObservable.add((model) => {
+                console.log("model loaded");
+                currentViewer.onFrameRenderedObservable.add(() => {
+                    console.log("frame rendered", currentFrame, model.meshes.every(m => m.isReady()));
+                    if (test.animationTest && !currentFrame) {
+                        model.playAnimation(model.getAnimationNames()[0]);
+                    }
+                    if (currentFrame === waitForFrame) {
+                        currentViewer.onFrameRenderedObservable.clear();
+                        currentViewer.sceneManager.scene.executeWhenReady(() => {
+                            evaluate(test, resultCanvas, result, renderImage, index, waitRing, done);
+                        });
+                    }
+                    currentFrame++;
+                });
             });
-        })
+
+            if (test.model) {
+                currentViewer.initModel(test.model);
+            } else if (test.createMesh) {
+                prepareMeshForViewer(currentViewer, configuration, test);
+            }
+        });
     });
 }
 
@@ -274,16 +278,11 @@ function prepareMeshForViewer(viewer, configuration, test) {
     let sphereMesh = BABYLON.Mesh.CreateSphere('sphere-' + test.title, 20, 1.0, viewer.sceneManager.scene);
     if (test.createMaterial) {
         let material = new BABYLON.PBRMaterial("sphereMat", viewer.sceneManager.scene);
-        /* material.useAlphaFresnel = material.needAlphaBlending();
-         material.backFaceCulling = material.forceDepthWrite;
-         material.twoSidedLighting = true;
-         material.useSpecularOverAlpha = false;
-         material.useRadianceOverAlpha = false;
-         material.usePhysicalLightFalloff = true;
-         material.forceNormalForward = true;*/
         sphereMesh.material = material;
     }
     meshModel.addMesh(sphereMesh, true);
+    meshModel.rootMesh.position.y = 0.5;
+    console.log("sphere created");
 }
 
 function init() {

+ 1 - 1
dist/preview release/what's new.md

@@ -148,7 +148,7 @@
 - Viewer is not using Engine.LastCreatedScene anymore, to support multiple viewers in a single page [#4500](https://github.com/BabylonJS/Babylon.js/issues/4500) ([RaananW](https://github.com/RaananW))
 - Template location was ignored if html was defined ([RaananW](https://github.com/RaananW))
 - Drag and Drop only worked if a model was already loaded before ([RaananW](https://github.com/RaananW))
-- It was not possible to add new custom optimizers, only to use existing ones ([RaananW](https://github.com/RaananW))
+- It was not possible to add new custom optimizers, only use existing ones ([RaananW](https://github.com/RaananW))
 
 ### Loaders