Hi Mark.
I may have a similar issue: Self made 3D tiles terrain, precision problem at edges problem - #8 by Marco13
Of course, my issue may be unrelated as Iβm manually creating my gltf files and tilesets so take everything I say with a grain of saltβ¦
I have a self-made 3d tileset terrain generation pipeline which I tried to explain in the other thread. As Marco mentioned, there are a lot of instruments involved in the process and there might be an error or bug introduced in any stepβ¦ Being that said, Iβm trying to bring/snap edge vertices between 2 neighbour tiles together, in world coordinates. I expect to get a smooth output.
Iβve made tons of tests, like βtheoretical values calculated vs. actual values generatedβ which means what is expected numerically vs. what is generated at the end of my pipelineβ¦ I can say that the generated tileset edge vertices values are consistent with my theoritical calculations (see logs below), however there is always an offset like difference between the edges when rendering.
Let me share some of my logs here that supports my findings:
Below is the output of my gltf tile generation script, that calculates what 2 neighbour edge vertices should have as world positions. The values are mathematically calculated vertex positions at the edges. After this step, Iβm generating the glTF mesh accordingly. Units are meters (ECEF), Dist is euclidean distance, which is => np.linalg.norm(v1_world - v2_world)
The log format is:
mesh1VertexID <-> (corresponding) mesh2VertexID | Dist: Euclidean distance | vertex1_worldposition_xyz | vertex2_worldposition_xyz
...
Vertex 2825β 2842 Dist=0.000381 - [ 4216956.54676819 -3870190.02490234 2798999.42675781] - [ 4216956.54638672 -3870190.02490234 2798999.42675781]
Vertex 2827β 2844 Dist=0.000008 - [ 4216972.90526581 -3870166.22460938 2799010.28417969] - [ 4216972.90527344 -3870166.22460938 2799010.28417969]
Vertex 2833β 2847 Dist=0.000214 - [ 4216991.23117065 -3870144.2421875 2799022.44824219] - [ 4216991.23095703 -3870144.2421875 2799022.44824219]
Vertex 2838β 2852 Dist=0.000008 - [ 4217009.1674881 -3870121.89941406 2799034.35351562] - [ 4217009.16748047 -3870121.89941406 2799034.35351562]
Vertex 2842β 2857 Dist=0.000034 - [ 4217027.35452652 -3870099.78808594 2799046.42480469] - [ 4217027.35449219 -3870099.78808594 2799046.42480469]
Vertex 2847β 2861 Dist=0.000163 - [ 4217046.40641308 -3870078.47607422 2799059.0703125 ] - [ 4217046.40625 -3870078.47607422 2799059.0703125 ]
Vertex 2850β 2865 Dist=0.000550 - [ 4217065.36578417 -3870057.07861328 2799071.65527344] - [ 4217065.36523438 -3870057.07861328 2799071.65527344]
Vertex 2854β 2869 Dist=0.000019 - [ 4217084.37794876 -3870035.72998047 2799084.27441406] - [ 4217084.37792969 -3870035.72998047 2799084.27441406]
Vertex 2859β 2872 Dist=0.000259 - [ 4217101.18482971 -3870012.34375 2799095.4296875 ] - [ 4217101.18457031 -3870012.34375 2799095.4296875 ]
Vertex 2866β 2879 Dist=0.000458 - [ 4217117.85299683 -3869988.82910156 2799106.49316406] - [ 4217117.85253906 -3869988.82910156 2799106.49316406]
Vertex 2871β 2882 Dist=0.000053 - [ 4217132.49419403 -3869963.44189453 2799116.2109375 ] - [ 4217132.49414062 -3869963.44189453 2799116.2109375 ]
Vertex 2875β 2886 Dist=0.000626 - [ 4217142.8238678 -3869934.07177734 2799123.06738281] - [ 4217142.82324219 -3869934.07177734 2799123.06738281]
Vertex 2877β 2889 Dist=0.000214 - [ 4217150.45974731 -3869902.21289062 2799128.13574219] - [ 4217150.45996094 -3869902.21289062 2799128.13574219]
Vertex 2882β 2896 Dist=0.000160 - [ 4217156.24007416 -3869868.63964844 2799131.97265625] - [ 4217156.24023438 -3869868.63964844 2799131.97265625]
Vertex 2890β 2899 Dist=0.000191 - [ 4217161.32050323 -3869834.42041016 2799135.34472656] - [ 4217161.3203125 -3869834.42041016 2799135.34472656]
Vertex 2896β 2903 Dist=0.000008 - [ 4217166.35448456 -3869800.15820312 2799138.68554688] - [ 4217166.35449219 -3869800.15820312 2799138.68554688]
Vertex 2902β 2910 Dist=0.000397 - [ 4217170.84024048 -3869765.39013672 2799141.66308594] - [ 4217170.83984375 -3869765.39013672 2799141.66308594]
Vertex 2906β 2913 Dist=0.000130 - [ 4217176.48131561 -3869731.68945312 2799145.40722656] - [ 4217176.48144531 -3869731.68945312 2799145.40722656]
Vertex 2913β 2917 Dist=0.000145 - [ 4217182.61733246 -3869698.44580078 2799149.48046875] - [ 4217182.6171875 -3869698.44580078 2799149.48046875]
Vertex 2916β 2924 Dist=0.000076 - [ 4217189.09660339 -3869665.52001953 2799153.78125 ] - [ 4217189.09667969 -3869665.52001953 2799153.78125 ]
Vertex 2918β 2927 Dist=0.000549 - [ 4217197.42437744 -3869634.30126953 2799159.30859375] - [ 4217197.42382812 -3869634.30126953 2799159.30859375]
Vertex 2921β 2930 Dist=0.000458 - [ 4217207.8119812 -3869604.98583984 2799166.203125 ] - [ 4217207.81152344 -3869604.98583984 2799166.203125 ]
Vertex 2927β 2934 Dist=0.000290 - [ 4217219.57939148 -3869576.9453125 2799174.01367188] - [ 4217219.57910156 -3869576.9453125 2799174.01367188]
Vertex 2930β 2938 Dist=0.000671 - [ 4217231.76922607 -3869549.29492188 2799182.10546875] - [ 4217231.76855469 -3869549.29492188 2799182.10546875]
Vertex 2936β 2942 Dist=0.000000 - [ 4217244.12402344 -3869521.796875 2799190.30566406] - [ 4217244.12402344 -3869521.796875 2799190.30566406]
Vertex 2941β 2944 Dist=0.000565 - [ 4217256.6900177 -3869494.49365234 2799198.64648438] - [ 4217256.68945312 -3869494.49365234 2799198.64648438]
Vertex 2946β 2947 Dist=0.000565 - [ 4217269.18318176 -3869467.12353516 2799206.93847656] - [ 4217269.18261719 -3869467.12353516 2799206.93847656]
Vertex 2949β 2952 Dist=0.000397 - [ 4217280.26992798 -3869438.45458984 2799214.296875 ] - [ 4217280.26953125 -3869438.45458984 2799214.296875 ]
Vertex 2954β 2957 Dist=0.000381 - [ 4217290.07557678 -3869408.60205078 2799220.80566406] - [ 4217290.07519531 -3869408.60205078 2799220.80566406]
Vertex 2958β 2960 Dist=0.000458 - [ 4217300.03952026 -3869378.89599609 2799227.41894531] - [ 4217300.0390625 -3869378.89599609 2799227.41894531]
Vertex 2961β 2962 Dist=0.000046 - [ 4217311.86528015 -3869350.91015625 2799235.26855469] - [ 4217311.86523438 -3869350.91015625 2799235.26855469]
Vertex 2964β 2965 Dist=0.000153 - [ 4217324.64175415 -3869323.80175781 2799243.74902344] - [ 4217324.64160156 -3869323.80175781 2799243.74902344]
Vertex 2969β 2969 Dist=0.000549 - [ 4217337.32574463 -3869296.60839844 2799252.16796875] - [ 4217337.32519531 -3869296.60839844 2799252.16796875]
Vertex 2972β 2971 Dist=0.000488 - [ 4217350.73583984 -3869270.0859375 2799261.06933594] - [ 4217350.73535156 -3869270.0859375 2799261.06933594]
Vertex 2975β 2974 Dist=0.000092 - [ 4217364.1524353 -3869243.56933594 2799269.97460938] - [ 4217364.15234375 -3869243.56933594 2799269.97460938]
Vertex 2977β 2976 Dist=0.000122 - [ 4217377.7208252 -3869217.19287109 2799278.98046875] - [ 4217377.72070312 -3869217.19287109 2799278.98046875]
Vertex 3611β 2978 Dist=0.000153 - [ 4217393.38882446 -3869192.75585938 2799289.37988281] - [ 4217393.38867188 -3869192.75585938 2799289.37988281]
Below is the output of validation script, which reads the previously generated gltf files and compare the edge vertices world positions.
...
Vertex 2825β 2842 Dist=0.000381 - [ 4216956.54676819 -3870190.02490234 2798999.42675781] - [ 4216956.54638672 -3870190.02490234 2798999.42675781]
Vertex 2827β 2844 Dist=0.000008 - [ 4216972.90526581 -3870166.22460938 2799010.28417969] - [ 4216972.90527344 -3870166.22460938 2799010.28417969]
Vertex 2833β 2847 Dist=0.000214 - [ 4216991.23117065 -3870144.2421875 2799022.44824219] - [ 4216991.23095703 -3870144.2421875 2799022.44824219]
Vertex 2838β 2852 Dist=0.000008 - [ 4217009.1674881 -3870121.89941406 2799034.35351562] - [ 4217009.16748047 -3870121.89941406 2799034.35351562]
Vertex 2842β 2857 Dist=0.000034 - [ 4217027.35452652 -3870099.78808594 2799046.42480469] - [ 4217027.35449219 -3870099.78808594 2799046.42480469]
Vertex 2847β 2861 Dist=0.000163 - [ 4217046.40641308 -3870078.47607422 2799059.0703125 ] - [ 4217046.40625 -3870078.47607422 2799059.0703125 ]
Vertex 2850β 2865 Dist=0.000550 - [ 4217065.36578417 -3870057.07861328 2799071.65527344] - [ 4217065.36523438 -3870057.07861328 2799071.65527344]
Vertex 2854β 2869 Dist=0.000019 - [ 4217084.37794876 -3870035.72998047 2799084.27441406] - [ 4217084.37792969 -3870035.72998047 2799084.27441406]
Vertex 2859β 2872 Dist=0.000259 - [ 4217101.18482971 -3870012.34375 2799095.4296875 ] - [ 4217101.18457031 -3870012.34375 2799095.4296875 ]
Vertex 2866β 2879 Dist=0.000458 - [ 4217117.85299683 -3869988.82910156 2799106.49316406] - [ 4217117.85253906 -3869988.82910156 2799106.49316406]
Vertex 2871β 2882 Dist=0.000053 - [ 4217132.49419403 -3869963.44189453 2799116.2109375 ] - [ 4217132.49414062 -3869963.44189453 2799116.2109375 ]
Vertex 2875β 2886 Dist=0.000626 - [ 4217142.8238678 -3869934.07177734 2799123.06738281] - [ 4217142.82324219 -3869934.07177734 2799123.06738281]
Vertex 2877β 2889 Dist=0.000214 - [ 4217150.45974731 -3869902.21289062 2799128.13574219] - [ 4217150.45996094 -3869902.21289062 2799128.13574219]
Vertex 2882β 2896 Dist=0.000160 - [ 4217156.24007416 -3869868.63964844 2799131.97265625] - [ 4217156.24023438 -3869868.63964844 2799131.97265625]
Vertex 2890β 2899 Dist=0.000191 - [ 4217161.32050323 -3869834.42041016 2799135.34472656] - [ 4217161.3203125 -3869834.42041016 2799135.34472656]
Vertex 2896β 2903 Dist=0.000008 - [ 4217166.35448456 -3869800.15820312 2799138.68554688] - [ 4217166.35449219 -3869800.15820312 2799138.68554688]
Vertex 2902β 2910 Dist=0.000397 - [ 4217170.84024048 -3869765.39013672 2799141.66308594] - [ 4217170.83984375 -3869765.39013672 2799141.66308594]
Vertex 2906β 2913 Dist=0.000130 - [ 4217176.48131561 -3869731.68945312 2799145.40722656] - [ 4217176.48144531 -3869731.68945312 2799145.40722656]
Vertex 2913β 2917 Dist=0.000145 - [ 4217182.61733246 -3869698.44580078 2799149.48046875] - [ 4217182.6171875 -3869698.44580078 2799149.48046875]
Vertex 2916β 2924 Dist=0.000076 - [ 4217189.09660339 -3869665.52001953 2799153.78125 ] - [ 4217189.09667969 -3869665.52001953 2799153.78125 ]
Vertex 2918β 2927 Dist=0.000549 - [ 4217197.42437744 -3869634.30126953 2799159.30859375] - [ 4217197.42382812 -3869634.30126953 2799159.30859375]
Vertex 2921β 2930 Dist=0.000458 - [ 4217207.8119812 -3869604.98583984 2799166.203125 ] - [ 4217207.81152344 -3869604.98583984 2799166.203125 ]
Vertex 2927β 2934 Dist=0.000290 - [ 4217219.57939148 -3869576.9453125 2799174.01367188] - [ 4217219.57910156 -3869576.9453125 2799174.01367188]
Vertex 2930β 2938 Dist=0.000671 - [ 4217231.76922607 -3869549.29492188 2799182.10546875] - [ 4217231.76855469 -3869549.29492188 2799182.10546875]
Vertex 2936β 2942 Dist=0.000000 - [ 4217244.12402344 -3869521.796875 2799190.30566406] - [ 4217244.12402344 -3869521.796875 2799190.30566406]
Vertex 2941β 2944 Dist=0.000565 - [ 4217256.6900177 -3869494.49365234 2799198.64648438] - [ 4217256.68945312 -3869494.49365234 2799198.64648438]
Vertex 2946β 2947 Dist=0.000565 - [ 4217269.18318176 -3869467.12353516 2799206.93847656] - [ 4217269.18261719 -3869467.12353516 2799206.93847656]
Vertex 2949β 2952 Dist=0.000397 - [ 4217280.26992798 -3869438.45458984 2799214.296875 ] - [ 4217280.26953125 -3869438.45458984 2799214.296875 ]
Vertex 2954β 2957 Dist=0.000381 - [ 4217290.07557678 -3869408.60205078 2799220.80566406] - [ 4217290.07519531 -3869408.60205078 2799220.80566406]
Vertex 2958β 2960 Dist=0.000458 - [ 4217300.03952026 -3869378.89599609 2799227.41894531] - [ 4217300.0390625 -3869378.89599609 2799227.41894531]
Vertex 2961β 2962 Dist=0.000046 - [ 4217311.86528015 -3869350.91015625 2799235.26855469] - [ 4217311.86523438 -3869350.91015625 2799235.26855469]
Vertex 2964β 2965 Dist=0.000153 - [ 4217324.64175415 -3869323.80175781 2799243.74902344] - [ 4217324.64160156 -3869323.80175781 2799243.74902344]
Vertex 2969β 2969 Dist=0.000549 - [ 4217337.32574463 -3869296.60839844 2799252.16796875] - [ 4217337.32519531 -3869296.60839844 2799252.16796875]
Vertex 2972β 2971 Dist=0.000488 - [ 4217350.73583984 -3869270.0859375 2799261.06933594] - [ 4217350.73535156 -3869270.0859375 2799261.06933594]
Vertex 2975β 2974 Dist=0.000092 - [ 4217364.1524353 -3869243.56933594 2799269.97460938] - [ 4217364.15234375 -3869243.56933594 2799269.97460938]
Vertex 2977β 2976 Dist=0.000122 - [ 4217377.7208252 -3869217.19287109 2799278.98046875] - [ 4217377.72070312 -3869217.19287109 2799278.98046875]
Vertex 3611β 2978 Dist=0.000153 - [ 4217393.38882446 -3869192.75585938 2799289.37988281] - [ 4217393.38867188 -3869192.75585938 2799289.37988281]
If you compare the values in a text comparison tool, you will see the values are identical, which means Iβm able to store the correct world positions as I calculated and read them back. The distances are so small, almost millimeter level (0.001)
Despite being theoretical vs. actual values are so close, when rendering there is almost an offset like displacement between the edges. Say it is like ~10cm through the whole edge. The distance being so alarms my anomaly senses and makes me think it may not be related to floating point precision errors, because in that case the distance between the edges would be random instead of βoffset likeβ distance.
Below are some visual feedbacks from Unreal Engine 5.2, Cesium for unreal version 2.10.0:
The cube is 0.1 scaled, which means 10 cm each edge:
Iβm attaching the tileset:
yunus_3dtiles.zip (7.4 MB)
The feedbacks I shared may boost your debugging in case there is a general problem, this is why I shared a lot of stuff above. In that case, at the end my problem will also be resolved
Though it may be completely unrelated and most probably I have some problems in my pipelineβ¦