-
Notifications
You must be signed in to change notification settings - Fork 3.5k
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
Terrain / imagery rendering overhaul #7061
Conversation
Update Cesium master to latest from AnalyticalGraphics
Also add tile state change reporting for debugging.
Somewhat hackily at the moment.
Unless they were rendered last frame.
GlobeSurfaceTileProvider.
Awesome, @kring, thanks. Do you have planned changes left on your end, or are you just waiting for more feedback? Does anyone else have any feedback here? I'm going to take another look now, but barring any issues I think we want to get this merged today or tomorrow to give it as much time in master as possible. Thanks! |
@kring I can confirm your update fixed the problem I was seeing with loading, thanks again. Now I'm seeing some unexpected behavior when setting In 1.54, if throttleRequests is false, As expected, |
Just noticed cancelled requests is 0 even with throttling on, so something changed under the hood that maybe I'm just not aware of? |
Here are some rough numbers comparing 1.54 and this branch across several different views. Bandwidth/data savings are just as impressive as runtime loading performance. Once this is merged into master, I'll probably re-run these tests again with some additional vetting just to make sure everything is on the up-and-up.
Also note, since I used locally cached tiles, this is the "best" case for master. With a clear cache I would expect master would fair even worse since it has to request more tiles. Overall, this branch kicks ass, but the savings can be vastly different from view to view. With the views I used, this branch seems to load the tests 1.4x to 2.3x times faster and uses ~33% less data/bandwidth overall. There might be some better views to test with as well. From the intangibles, this branch also loads things in a way that makes it appear even faster to end users, no more back to front waiting for the world to pop-in. We can't discount user impression when talking about the hard numbers. My testing methodology or assumptions might get some tweaks, since I have some open questions to Kevin about RequestStatistics differences in this branch. 1.54Overall: 19.7 MB of tiles loaded. (Via Chrome Network tab) Grand canyon horizon: 4818 ms Everest: 5034 ms AGI top-down: 2787 ms fill-tilesOverall: 13.3 MB of tiles loaded. (Via Chrome Network tab) Grand canyon horizon: 3391 ms Everest: 3850 ms AGI top-down: 1166ms |
Played with a bunch of Sandcastle examples and didn't run into any other problems, so this PR gets a 👍 from me (outside of that one question about request statistics). |
* <code>absoluteEpsilon<code>. <code>false</code> if <code>left</code> is greater or if the two | ||
* values are nearly equal. | ||
*/ | ||
CesiumMath.leftIsLessThanRight = function(left, right, absoluteEpsilon) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should these just be lessThan
, lessThanOrEqualTo
, etc? We don't call the function leftIsEqualToRight
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thought my names made the use clearer. Order doesn't matter in equals
, so being precise is less important there. But if you all feel strongly about it I'm happy to rename them.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I do like this because otherwise I'd have to go look up the documentation whenever using this to check which way it's comparing them. This way it's self-documenting.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Right than left is standard, so this seems a little pedantic. In Check
we just call these functions greaterThan
lessThan
etc https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Source/Core/Check.js#L89
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's fair. Sounds like we should change it for consistency here then @kring .
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I honestly don't care either way, but Check
isn't public so I wouldn't necessarily use that as the decision maker.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thought we had functions like this all over the code, but to might surprise, JulianDate is the only place I could find them (outside of Check). While I'm on board with renaming them for consistency, I don't want it to hold up this PR which really needs time to stew in master.
If someone wants to open a separate PR to clean things up before the next release, I'll review and merge it ASAP.
@mramato yeah
More discussion of this from back in June: |
Oh and yeah I think everything has been addressed up to this point. |
Fine by me, I actually never liked what we had anyway. @lilleyse @loshjawrence @OmarShehata were you already aware of this and are you okay with it? Any concerns that would prevent us from merging this? Assuming no one else has anything, I'm fine with merging this today. |
The last time I set throttle to false it totally trashed streaming performance for camera-moving scenarios on 3dtiles. I guess I can copy the Request and RequestScheduler files over and remeasure some things. |
Thanks. Just let us know ASAP if there are any actionable concerns for this PR going into master, while I'm sure it might affect some of the branches you have in-flight, unless there's some sort of architectural showstopper, that shouldn't hold up this PR. |
Using the changes in Request and RequestScheduler from this PR on our staging branch looks harmless from my testing. Any diff's seem to be within the noise. Orig: Ring's changes: Ready to merge |
@mramato Good with me as well. |
Since this branch was a bit out of date, I merged in master. Assuming it passes without any surprises, I'll merge this up. |
@kring are there any new GitHub issues we should write up (such as those unchecked boxes?) Other than that, I'm going to merge. I encourage everyone to continue to put things through their paces in master and also report any unusual problems you might find over the next few weeks. |
While writing up a forum post, I was amused by the fact that this overhaul is going to be released exactly 6 years after initial terrain support was added (3/1/13 in version b14): https://github.com/AnalyticalGraphicsInc/cesium/blob/master/CHANGES.md#b14---2013-03-01 Some guy named @kring did all the work on it back then. How times have changed. |
This is not ready to merge yet, but I'm opening it now to track remaining problems and ideas, some of which will go on the roadmap rather than being implemented prior to merging this branch.
Required:
QuadtreePrimitive.preloadAncestors
be?Test with the new BVH data from the modified server and make sure that it's still working as expected and providing a benefit.Tested it and found it provided no benefit, removed it.Broken Sandcastle examples:
Nice to have:
Future:
QuadtreePrimitive.preloadAncestors
is true.