Skip to content

Conversation

danielzhong
Copy link

@danielzhong danielzhong commented Aug 30, 2025

Description

This PR implements the proposed GLTF extension EXT_mesh_primitive_edge_visibility, enabling edge rendering for glTF mesh primitives. It adds multi-pass rendering to avoid z-fighting, and implements decoding, creation, and rendering of both hard and silhouette edges:

  • Parsing and handling mesh primitive data of visibility (edge type: HIDDEN, SILHOUETTE, HARD, REPEATED) and silhouette normal.
  • Hard edge & silhouette edge rendering.
  • Multi-pass rendering path (CESIUM_3D_TILE_EDGES) to draw edges before surfaces (CESIUM_3D_TILE).
  • Feature ID/Depth integration to ensure edges display correctly without Z fighting and overlapping.

More details: Edge Visibility

Example
(green edge = hard edge; red edge = silhouette edge):
image

Issue number and link

#12765

Testing plan

How to Run:

  1. Download the file and host: http-server ./ --cors=X-Correlation-Id
  2. Open sandcastle and paste:
const viewer = new Cesium.Viewer("cesiumContainer", {
 
  infoBox: false,
 
  selectionIndicator: false,
 
  shadows: true,
 
  shouldAnimate: true,
 
});
const tileset = await Cesium.Cesium3DTileset.fromUrl(
 
  "http://172.20.20.20:8081/tileset.json"
 
);
 
viewer.scene.primitives.add(tileset);
 
await viewer.zoomTo(tileset);

Make sure change your local host address in the code!

((green edge = hard edge; red edge = silhouette edge):)
image

🔍Review Notes

  • The glTF extension’s material support is not included in this PR. I'm planning to set all edges default to black.
  • Updated getWebGLStub.js to support MRT in coverage tests.
  • This PR is ready to review!

Bug Fix Summary

  • Edge rendering was incorrect because GL_LINES and edge primitives shared the same VAO. Fixed by creating a separate VAO for edge rendering.
  • Added an edge-rendering pipeline stage in modelFS.glsl. The model runtime primitive couldn’t detect the render tag (it runs too early), so I introduced a uniform flag to detect when the pipeline stage is active.
  • MRT couldn’t clear buffers/color attachments. Fixed by using clearCommand in EdgeFramebuffer.js.
  • MRT was failing unit tests. Fixed by updating getWebGLStub.js to support MRT in coverage tests.
  • Silhouette edges bug: in top-down views, the silhouette normal calculation wasn’t accurate enough.

Author checklist

  • I have submitted a Contributor License Agreement
  • I have added my name to CONTRIBUTORS.md
  • I have updated CHANGES.md with a short summary of my change
  • I have added or updated unit tests to ensure consistent code coverage
  • I have updated the inline documentation, and included code examples where relevant
  • I have performed a self-review of my code
  • Change outline render color back to white
  • Fix issue where edge should not be visible through geometry

@danielzhong
Copy link
Author

danielzhong commented Sep 19, 2025

image

@lilleyse Not sure why I can't reference or reply. But yes, that’s the root cause. Do you think I should include the refactor in this PR, or would it be better to open a new PR for it later?

@lilleyse
Copy link
Contributor

@danielzhong oh I think that comment is part of this comment thread: #12859 (comment)

I would just open an issue for now.

@danielzhong
Copy link
Author

@lilleyse @ggetz Ready for next round review!

@javagl
Copy link
Contributor

javagl commented Sep 24, 2025

The EdgeVisibility.glb is invalid. The errors are

         {
                "code": "VALUE_NOT_IN_RANGE",
                "message": "Value 1 is out of range.",
                "severity": 0,
                "pointer": "/bufferViews/5/byteStride"
            },
            {
                "code": "VALUE_NOT_IN_RANGE",
                "message": "Value 1 is out of range.",
                "severity": 0,
                "pointer": "/bufferViews/12/byteStride"
            },

CesiumJS does not render anything for this model. (Opening and re-exporting it with gltf.report generates a model that can be rendered with CesiumJS. Whether or not that is related to the validation error remains to be investigated).


The model uses

  "extensionsUsed" : [
    "KHR_mesh_quantization",
    "EXT_mesh_features",
    "EXT_mesh_primitive_edge_visibility",
    "EXT_structural_metadata"
  ],

There should be test model that uses EXT_mesh_primitive_edge_visibility and only EXT_mesh_primitive_edge_visibility - no other extension that might interfere with the baseline test for this extension. Such a model would also be useful, eventually, in the context of KhronosGroup/glTF#2479 , for implementors to test.


I did not peform a thorough review of this PR! It only caught my attention due to #12914 . And when I saw https://github.com/CesiumGS/cesium/pull/12859/files/1c9ba9d2415aa507cce107d91938d10c9e707cd1#diff-20964905fdcbaf8679c56d995e848ed68a3c0f08d868ad38c5d794145b0fbbc6R70, I thought: Wait, that can hardly be right. Edge visibility and feature IDs are totally unrelated. Maybe these defines are the crux here, and maybe there is some if (hasFeatureIds) doThis(); else dont(); that I overlooked and that prevents this from being executed when no feature IDs are present. If this is the case, it should be documented more extensively. And if this is the case, then it should thoroughly explain why it can rely on the featureId_0, and not any other feature ID.
// We know that featureId_0 is present here, because [text]

@danielzhong
Copy link
Author

The EdgeVisibility.glb is invalid. The errors are

         {
                "code": "VALUE_NOT_IN_RANGE",
                "message": "Value 1 is out of range.",
                "severity": 0,
                "pointer": "/bufferViews/5/byteStride"
            },
            {
                "code": "VALUE_NOT_IN_RANGE",
                "message": "Value 1 is out of range.",
                "severity": 0,
                "pointer": "/bufferViews/12/byteStride"
            },

CesiumJS does not render anything for this model. (Opening and re-exporting it with gltf.report generates a model that can be rendered with CesiumJS. Whether or not that is related to the validation error remains to be investigated).

The model uses

  "extensionsUsed" : [
    "KHR_mesh_quantization",
    "EXT_mesh_features",
    "EXT_mesh_primitive_edge_visibility",
    "EXT_structural_metadata"
  ],

There should be test model that uses EXT_mesh_primitive_edge_visibility and only EXT_mesh_primitive_edge_visibility - no other extension that might interfere with the baseline test for this extension. Such a model would also be useful, eventually, in the context of KhronosGroup/glTF#2479 , for implementors to test.

I did not peform a thorough review of this PR! It only caught my attention due to #12914 . And when I saw https://github.com/CesiumGS/cesium/pull/12859/files/1c9ba9d2415aa507cce107d91938d10c9e707cd1#diff-20964905fdcbaf8679c56d995e848ed68a3c0f08d868ad38c5d794145b0fbbc6R70, I thought: Wait, that can hardly be right. Edge visibility and feature IDs are totally unrelated. Maybe these defines are the crux here, and maybe there is some if (hasFeatureIds) doThis(); else dont(); that I overlooked and that prevents this from being executed when no feature IDs are present. If this is the case, it should be documented more extensively. And if this is the case, then it should thoroughly explain why it can rely on the featureId_0, and not any other feature ID. // We know that featureId_0 is present here, because [text]

Thanks for the feedback, it’s fixed

@ggetz
Copy link
Contributor

ggetz commented Oct 7, 2025

Thanks for the updates @danielzhong, and for the feedback @javagl!

@danielzhong

  1. After merging in main, I'm noticing quite a few failing unit tests when running locally with the command npm run test (not including Use eye coordinates for voxel raymarching #12933 (comment)). Are you able to see the same?

  2. I noticed that here the edge rendering uses white, but in iTwinJS that edge rendering seems to default to black. I'm not positive, but should they also default to black here?

image

@markschlosseratbentley Are there any additional updates expected from KhronosGroup/glTF#2479 that will need to be reflected here?

@pmconne
Copy link
Contributor

pmconne commented Oct 7, 2025

@ggetz the glTF extension specifies that a material may be provided for the edges, or if one is not provided, the material of the corresponding triangle mesh should be used. In that latter case the edges would draw in the same color as the surface. That is iTwin.js' default behavior as well. iTwin.js also permits aspects of the material to be overridden by the display style; in your screenshot, the color has been overridden to black.

My understanding is that @danielzhong has not yet implemented support for the material portions of the extension spec in CesiumJS. But the spec is complete in this regard.

@danielzhong
Copy link
Author

danielzhong commented Oct 7, 2025

Thanks for the updates @danielzhong, and for the feedback @javagl!

@danielzhong

  1. After merging in main, I'm noticing quite a few failing unit tests when running locally with the command npm run test (not including Use eye coordinates for voxel raymarching #12933 (comment)). Are you able to see the same?
  2. I noticed that here the edge rendering uses white, but in iTwinJS that edge rendering seems to default to black. I'm not positive, but should they also default to black here?
image @markschlosseratbentley Are there any additional updates expected from [KhronosGroup/glTF#2479](https://github.com/KhronosGroup/glTF/pull/2479) that will need to be reflected here?
  1. I can see some unit tests failing as well, including those related to terrain data and similar components. I don’t think my changes should have affected those unit tests, right?
  2. I'm currently hardcoding the color to white by default for better visibility. This is just a temporary solution while I work on adding the material support in the tileset publisher. I expect to handle the proper color decoding in Cesium soon. For now, the hardcoded line simply forces a single color and doesn’t have any real meaning, it will be removed later and replaced with the default color defined in the glTF extension (which already provides a default color).

@markschlosseratbentley
Copy link
Contributor

markschlosseratbentley commented Oct 8, 2025

@ggetz

@markschlosseratbentley Are there any additional updates expected from KhronosGroup/glTF#2479 that will need to be reflected here?

No updates that I am aware of. I believe the only mismatch would be the following, quoted from @pmconne above:

My understanding is that @danielzhong has not yet implemented support for the material portions of the extension spec in CesiumJS. But the spec is complete in this regard.

From @danielzhong:

I expect to handle the proper color decoding in Cesium soon. For now, the hardcoded line simply forces a single color and doesn’t have any real meaning, it will be removed later and replaced with the default color defined in the glTF extension (which already provides a default color).

@danielzhong - A followup PR for that might make sense, or were you planning on adding that material color decoding as part of this PR? If it is planned as part of this PR, I think we should add an unresolved comment on this PR about it.

@danielzhong
Copy link
Author

@ggetz

@markschlosseratbentley Are there any additional updates expected from KhronosGroup/glTF#2479 that will need to be reflected here?

No updates that I am aware of. I believe the only mismatch would be the following, quoted from @pmconne above:

My understanding is that @danielzhong has not yet implemented support for the material portions of the extension spec in CesiumJS. But the spec is complete in this regard.

From @danielzhong:

I expect to handle the proper color decoding in Cesium soon. For now, the hardcoded line simply forces a single color and doesn’t have any real meaning, it will be removed later and replaced with the default color defined in the glTF extension (which already provides a default color).

@danielzhong - A followup PR for that might make sense, or were you planning on adding that material color decoding as part of this PR? If it is planned as part of this PR, I think we should add an unresolved comment on this PR about it.

Thanks for the summary. I would prefer follow up PR.

@ggetz
Copy link
Contributor

ggetz commented Oct 9, 2025

iTwin.js also permits aspects of the material to be overridden by the display style; in your screenshot, the color has been overridden to black...My understanding is that @danielzhong has not yet implemented support for the material portions of the extension spec in CesiumJS.

Understood, thanks! I asked to confirm a reasonable default color in the interim until the material portions are implemented in a future PR. It seems like there's consensus here that white is fine.

At a later point, we'll likely want to add an API similar to that in iTwinJS to adjust the display style of edges at runtime. However, that's out of scope for this PR in my opinion.

@ggetz
Copy link
Contributor

ggetz commented Oct 9, 2025

I can see some unit tests failing as well, including those related to terrain data and similar components. I don’t think my changes should have affected those unit tests, right?

@danielzhong I'm seeing tests failing here which are not failing when running against the main branch. And some of them appear to be specific to the edge rendering. For example:

See output
1) validates EdgeDetection shader code and texture sampling
     Scene/Model/EdgeVisibilityRendering
     Expected '#version 300 es
#ifdef GL_FRAGMENT_PRECISION_HIGH
    precision highp float;
    precision highp int;
#else
    precision mediump float;
    precision mediump int;
    #define highp mediump
#endif

#define USE_IBL_LIGHTING
#define DIFFUSE_IBL
#define CUSTOM_SPHERICAL_HARMONICS
#define HAS_NORMALS
#define HAS_COLOR_0
#define USE_METALLIC_ROUGHNESS
#define HAS_METALLIC_FACTOR
#define HAS_DOUBLE_SIDED_MATERIAL
#define METADATA_PICKING_VALUE_TYPE float
#define METADATA_PICKING_VALUE_STRING 0.0
#define METADATA_PICKING_VALUE_COMPONENT_X 0.0
#define METADATA_PICKING_VALUE_COMPONENT_Y 0.0
#define METADATA_PICKING_VALUE_COMPONENT_Z 0.0
#define METADATA_PICKING_VALUE_COMPONENT_W 0.0
#define LIGHTING_PBR
#define HAS_EDGE_VISIBILITY
#define HAS_EDGE_VISIBILITY_MRT
#define OES_texture_float_linear

#define OES_texture_float


#line 0
layout(location = 0) out vec4 out_FragColor;

uniform float czm_log2FarDepthFromNearPlusOne;
uniform vec4 czm_viewport;
uniform vec2 czm_currentFrustum;
uniform  ... to contain 'texture(czm_edgeIdTexture, screenCoord)'.
Error: Expected '#version 300 es
#ifdef GL_FRAGMENT_PRECISION_HIGH
    precision highp float;
    precision highp int;
#else
    precision mediump float;
    precision mediump int;
    #define highp mediump
#endif
#define USE_IBL_LIGHTING
#define DIFFUSE_IBL
#define CUSTOM_SPHERICAL_HARMONICS
#define HAS_NORMALS
#define HAS_COLOR_0
#define USE_METALLIC_ROUGHNESS
#define HAS_METALLIC_FACTOR
#define HAS_DOUBLE_SIDED_MATERIAL
#define METADATA_PICKING_VALUE_TYPE float
#define METADATA_PICKING_VALUE_STRING 0.0
#define METADATA_PICKING_VALUE_COMPONENT_X 0.0
#define METADATA_PICKING_VALUE_COMPONENT_Y 0.0
#define METADATA_PICKING_VALUE_COMPONENT_Z 0.0
#define METADATA_PICKING_VALUE_COMPONENT_W 0.0
#define LIGHTING_PBR
#define HAS_EDGE_VISIBILITY
#define HAS_EDGE_VISIBILITY_MRT
#define OES_texture_float_linear
#define OES_texture_float
#line 0
layout(location = 0) out vec4 out_FragColor;
uniform float czm_log2FarDepthFromNearPlusOne;
uniform vec4 czm_viewport;
uniform vec2 czm_currentFrustum;
uniform  ... to contain 'texture(czm_edgeIdTexture, screenCoord)'.
    at <Jasmine>
    at UserContext.<anonymous> (packages/engine/Specs/Scene/Model/EdgeVisibilityRenderingSpec.js:194:28 <- Build/Specs/SpecList.js:290158:28)
     Expected '#version 300 es
#ifdef GL_FRAGMENT_PRECISION_HIGH
    precision highp float;
    precision highp int;
#else
    precision mediump float;
    precision mediump int;
    #define highp mediump
#endif

#define USE_IBL_LIGHTING
#define DIFFUSE_IBL
#define CUSTOM_SPHERICAL_HARMONICS
#define HAS_NORMALS
#define HAS_COLOR_0
#define USE_METALLIC_ROUGHNESS
#define HAS_METALLIC_FACTOR
#define HAS_DOUBLE_SIDED_MATERIAL
#define METADATA_PICKING_VALUE_TYPE float
#define METADATA_PICKING_VALUE_STRING 0.0
#define METADATA_PICKING_VALUE_COMPONENT_X 0.0
#define METADATA_PICKING_VALUE_COMPONENT_Y 0.0
#define METADATA_PICKING_VALUE_COMPONENT_Z 0.0
#define METADATA_PICKING_VALUE_COMPONENT_W 0.0
#define LIGHTING_PBR
#define HAS_EDGE_VISIBILITY
#define HAS_EDGE_VISIBILITY_MRT
#define OES_texture_float_linear

#define OES_texture_float


#line 0
layout(location = 0) out vec4 out_FragColor;

uniform float czm_log2FarDepthFromNearPlusOne;
uniform vec4 czm_viewport;
uniform vec2 czm_currentFrustum;
uniform  ... to contain 'edgeFeatureId != currentFeatureId'.
Error: Expected '#version 300 es
#ifdef GL_FRAGMENT_PRECISION_HIGH
    precision highp float;
    precision highp int;
#else
    precision mediump float;
    precision mediump int;
    #define highp mediump
#endif
#define USE_IBL_LIGHTING
#define DIFFUSE_IBL
#define CUSTOM_SPHERICAL_HARMONICS
#define HAS_NORMALS
#define HAS_COLOR_0
#define USE_METALLIC_ROUGHNESS
#define HAS_METALLIC_FACTOR
#define HAS_DOUBLE_SIDED_MATERIAL
#define METADATA_PICKING_VALUE_TYPE float
#define METADATA_PICKING_VALUE_STRING 0.0
#define METADATA_PICKING_VALUE_COMPONENT_X 0.0
#define METADATA_PICKING_VALUE_COMPONENT_Y 0.0
#define METADATA_PICKING_VALUE_COMPONENT_Z 0.0
#define METADATA_PICKING_VALUE_COMPONENT_W 0.0
#define LIGHTING_PBR
#define HAS_EDGE_VISIBILITY
#define HAS_EDGE_VISIBILITY_MRT
#define OES_texture_float_linear
#define OES_texture_float
#line 0
layout(location = 0) out vec4 out_FragColor;
uniform float czm_log2FarDepthFromNearPlusOne;
uniform vec4 czm_viewport;
uniform vec2 czm_currentFrustum;
uniform  ... to contain 'edgeFeatureId != currentFeatureId'.
    at <Jasmine>
    at UserContext.<anonymous> (packages/engine/Specs/Scene/Model/EdgeVisibilityRenderingSpec.js:203:28 <- Build/Specs/SpecList.js:290165:28)
     Expected '#version 300 es
#ifdef GL_FRAGMENT_PRECISION_HIGH
    precision highp float;
    precision highp int;
#else
    precision mediump float;
    precision mediump int;
    #define highp mediump
#endif

#define USE_IBL_LIGHTING
#define DIFFUSE_IBL
#define CUSTOM_SPHERICAL_HARMONICS
#define HAS_NORMALS
#define HAS_COLOR_0
#define USE_METALLIC_ROUGHNESS
#define HAS_METALLIC_FACTOR
#define HAS_DOUBLE_SIDED_MATERIAL
#define METADATA_PICKING_VALUE_TYPE float
#define METADATA_PICKING_VALUE_STRING 0.0
#define METADATA_PICKING_VALUE_COMPONENT_X 0.0
#define METADATA_PICKING_VALUE_COMPONENT_Y 0.0
#define METADATA_PICKING_VALUE_COMPONENT_Z 0.0
#define METADATA_PICKING_VALUE_COMPONENT_W 0.0
#define LIGHTING_PBR
#define HAS_EDGE_VISIBILITY
#define HAS_EDGE_VISIBILITY_MRT
#define OES_texture_float_linear

#define OES_texture_float


#line 0
layout(location = 0) out vec4 out_FragColor;

uniform float czm_log2FarDepthFromNearPlusOne;
uniform vec4 czm_viewport;
uniform vec2 czm_currentFrustum;
uniform  ... to contain 'gl_FragCoord.z > globeDepth'.
Error: Expected '#version 300 es
#ifdef GL_FRAGMENT_PRECISION_HIGH
    precision highp float;
    precision highp int;
#else
    precision mediump float;
    precision mediump int;
    #define highp mediump
#endif
#define USE_IBL_LIGHTING
#define DIFFUSE_IBL
#define CUSTOM_SPHERICAL_HARMONICS
#define HAS_NORMALS
#define HAS_COLOR_0
#define USE_METALLIC_ROUGHNESS
#define HAS_METALLIC_FACTOR
#define HAS_DOUBLE_SIDED_MATERIAL
#define METADATA_PICKING_VALUE_TYPE float
#define METADATA_PICKING_VALUE_STRING 0.0
#define METADATA_PICKING_VALUE_COMPONENT_X 0.0
#define METADATA_PICKING_VALUE_COMPONENT_Y 0.0
#define METADATA_PICKING_VALUE_COMPONENT_Z 0.0
#define METADATA_PICKING_VALUE_COMPONENT_W 0.0
#define LIGHTING_PBR
#define HAS_EDGE_VISIBILITY
#define HAS_EDGE_VISIBILITY_MRT
#define OES_texture_float_linear
#define OES_texture_float
#line 0
layout(location = 0) out vec4 out_FragColor;
uniform float czm_log2FarDepthFromNearPlusOne;
uniform vec4 czm_viewport;
uniform vec2 czm_currentFrustum;
uniform  ... to contain 'gl_FragCoord.z > globeDepth'.
    at <Jasmine>
    at UserContext.<anonymous> (packages/engine/Specs/Scene/Model/EdgeVisibilityRenderingSpec.js:207:28 <- Build/Specs/SpecList.js:290167:28)

I'm also seeing test failures that I suspect might be related, such as these AutomaticUniform and color blending specs:

See output
1) has czm_pass and czm_passCesium3DTileClassification
     Renderer/AutomaticUniforms
     Expected context to render 255,255,255,255, but rendered: 0,0,0,255
    at <Jasmine>
    at UserContext.<anonymous> (packages/engine/Specs/Renderer/AutomaticUniformSpec.js:2053:10 <- Build/Specs/SpecList.js:4550:10)
    at <Jasmine>

2) has czm_pass and czm_passOpaque
     Renderer/AutomaticUniforms
     Expected context to render 255,255,255,255, but rendered: 0,0,0,255
    at <Jasmine>
    at UserContext.<anonymous> (packages/engine/Specs/Renderer/AutomaticUniformSpec.js:2067:10 <- Build/Specs/SpecList.js:4559:10)
    at <Jasmine>

3) has czm_pass and czm_passTranslucent
     Renderer/AutomaticUniforms
     Expected context to render 255,255,255,255, but rendered: 0,0,0,255
    at <Jasmine>
    at UserContext.<anonymous> (packages/engine/Specs/Renderer/AutomaticUniformSpec.js:2081:10 <- Build/Specs/SpecList.js:4568:10)
    at <Jasmine>

4) has czm_pass and czm_passOverlay
     Renderer/AutomaticUniforms
     Expected context to render 255,255,255,255, but rendered: 0,0,0,255
    at <Jasmine>
    at UserContext.<anonymous> (packages/engine/Specs/Renderer/AutomaticUniformSpec.js:2095:10 <- Build/Specs/SpecList.js:4577:10)
    at <Jasmine>

5) sets colorBlendMode
     Scene/Cesium3DTileset
     hl yellow+alpha .r: Expected 0 to be greater than 100.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3464:59 <- Build/Specs/SpecList.js:184163:59
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     hl yellow+alpha .g: Expected 0 to equal epsilon 80, 1.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3468:59 <- Build/Specs/SpecList.js:184165:59
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     replace yellow+alpha .r: Expected 0 to be greater than 100.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3500:12 <- Build/Specs/SpecList.js:184187:64
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     replace yellow+alpha .g: Expected 0 to be greater than 100.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3506:12 <- Build/Specs/SpecList.js:184189:64
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     replace yellow+alpha .b: Expected 0 to equal epsilon 80, 1.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3512:12 <- Build/Specs/SpecList.js:184191:64
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     mix yellow+alpha .r: Expected 0 to be greater than 0.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3582:60 <- Build/Specs/SpecList.js:184239:60
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     mix yellow+alpha .g: Expected 0 to be greater than 0.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3583:60 <- Build/Specs/SpecList.js:184240:60
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     mix yellow+alpha .b: Expected 0 to equal epsilon 80, 1.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3586:12 <- Build/Specs/SpecList.js:184241:60
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>

6) sets colorBlendMode when vertex texture fetch is not supported
     Scene/Cesium3DTileset
     hl yellow+alpha .r: Expected 0 to be greater than 100.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3464:59 <- Build/Specs/SpecList.js:184163:59
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     hl yellow+alpha .g: Expected 0 to equal epsilon 80, 1.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3468:59 <- Build/Specs/SpecList.js:184165:59
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     replace yellow+alpha .r: Expected 0 to be greater than 100.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3500:12 <- Build/Specs/SpecList.js:184187:64
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     replace yellow+alpha .g: Expected 0 to be greater than 100.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3506:12 <- Build/Specs/SpecList.js:184189:64
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     replace yellow+alpha .b: Expected 0 to equal epsilon 80, 1.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3512:12 <- Build/Specs/SpecList.js:184191:64
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     mix yellow+alpha .r: Expected 0 to be greater than 0.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3582:60 <- Build/Specs/SpecList.js:184239:60
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     mix yellow+alpha .g: Expected 0 to be greater than 0.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3583:60 <- Build/Specs/SpecList.js:184240:60
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     mix yellow+alpha .b: Expected 0 to equal epsilon 80, 1.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3586:12 <- Build/Specs/SpecList.js:184241:60
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>

7) sets colorBlendMode for textured tileset
     Scene/Cesium3DTileset
     hl yellow+alpha .r: Expected 0 to be greater than 100.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3464:59 <- Build/Specs/SpecList.js:184163:59
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     hl yellow+alpha .g: Expected 0 to equal epsilon 80, 1.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3468:59 <- Build/Specs/SpecList.js:184165:59
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     replace yellow+alpha .r: Expected 0 to be greater than 100.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3500:12 <- Build/Specs/SpecList.js:184187:64
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     replace yellow+alpha .g: Expected 0 to be greater than 100.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3506:12 <- Build/Specs/SpecList.js:184189:64
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     replace yellow+alpha .b: Expected 0 to equal epsilon 80, 1.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3512:12 <- Build/Specs/SpecList.js:184191:64
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     mix yellow+alpha .r: Expected 0 to be greater than 0.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3582:60 <- Build/Specs/SpecList.js:184239:60
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     mix yellow+alpha .g: Expected 0 to be greater than 0.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3583:60 <- Build/Specs/SpecList.js:184240:60
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     mix yellow+alpha .b: Expected 0 to equal epsilon 80, 1.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3586:12 <- Build/Specs/SpecList.js:184241:60
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>

8) sets colorBlendMode for instanced tileset
     Scene/Cesium3DTileset
     hl yellow+alpha .r: Expected 0 to be greater than 100.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3464:59 <- Build/Specs/SpecList.js:184163:59
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     hl yellow+alpha .g: Expected 0 to equal epsilon 80, 1.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3468:59 <- Build/Specs/SpecList.js:184165:59
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     replace yellow+alpha .r: Expected 0 to be greater than 100.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3500:12 <- Build/Specs/SpecList.js:184187:64
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     replace yellow+alpha .g: Expected 0 to be greater than 100.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3506:12 <- Build/Specs/SpecList.js:184189:64
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     replace yellow+alpha .b: Expected 0 to equal epsilon 80, 1.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3512:12 <- Build/Specs/SpecList.js:184191:64
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     mix yellow+alpha .r: Expected 0 to be greater than 0.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3582:60 <- Build/Specs/SpecList.js:184239:60
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     mix yellow+alpha .g: Expected 0 to be greater than 0.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3583:60 <- Build/Specs/SpecList.js:184240:60
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     mix yellow+alpha .b: Expected 0 to equal epsilon 80, 1.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3586:12 <- Build/Specs/SpecList.js:184241:60
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>

9) sets colorBlendMode for vertex color tileset
     Scene/Cesium3DTileset
     hl yellow+alpha .r: Expected 0 to be greater than 100.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3464:59 <- Build/Specs/SpecList.js:184163:59
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     hl yellow+alpha .g: Expected 0 to equal epsilon 80, 1.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3468:59 <- Build/Specs/SpecList.js:184165:59
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     replace yellow+alpha .r: Expected 0 to be greater than 100.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3500:12 <- Build/Specs/SpecList.js:184187:64
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     replace yellow+alpha .g: Expected 0 to be greater than 100.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3506:12 <- Build/Specs/SpecList.js:184189:64
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     replace yellow+alpha .b: Expected 0 to equal epsilon 80, 1.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3512:12 <- Build/Specs/SpecList.js:184191:64
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     mix yellow+alpha .r: Expected 0 to be greater than 0.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3582:60 <- Build/Specs/SpecList.js:184239:60
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     mix yellow+alpha .g: Expected 0 to be greater than 0.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3583:60 <- Build/Specs/SpecList.js:184240:60
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>
     mix yellow+alpha .b: Expected 0 to equal epsilon 80, 1.
    at <Jasmine>
    at packages/engine/Specs/Scene/Cesium3DTilesetSpec.js:3586:12 <- Build/Specs/SpecList.js:184241:60
    at compare (Specs/addDefaultMatchers.js:329:13 <- Build/Specs/karma-main.js:304:13)
    at <Jasmine>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants