-
Notifications
You must be signed in to change notification settings - Fork 3.7k
Add support for GLTF extension: EXT_mesh_primitive_edge_visibility #12859
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
![]() @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? |
@danielzhong oh I think that comment is part of this comment thread: #12859 (comment) I would just open an issue for now. |
The
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
There should be test model that uses 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 |
Thanks for the feedback, it’s fixed |
Thanks for the updates @danielzhong, and for the feedback @javagl!
![]() @markschlosseratbentley Are there any additional updates expected from KhronosGroup/glTF#2479 that will need to be reflected here? |
@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. |
|
No updates that I am aware of. I believe the only mismatch would be the following, quoted from @pmconne above:
From @danielzhong:
@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. |
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. |
@danielzhong I'm seeing tests failing here which are not failing when running against the See output1) 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 See output1) 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> |
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:More details: Edge Visibility
Example

(green edge = hard edge; red edge = silhouette edge):
Issue number and link
#12765
Testing plan
Added Unit test for Edge Frame Buffer, MRT & Shader Color Attachments, Decoding logic, Shader Generation, etc.
Real Time Demo
Local Test File:
super_simple_3.bim-tiles.zip
How to Run:
http-server ./ --cors=X-Correlation-Id
Make sure change your local host address in the code!
((green edge = hard edge; red edge = silhouette edge):)

🔍Review Notes
getWebGLStub.js
to support MRT in coverage tests.Bug Fix Summary
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.clearCommand
inEdgeFramebuffer.js
.getWebGLStub.js
to support MRT in coverage tests.Author checklist
CONTRIBUTORS.md
CHANGES.md
with a short summary of my change