-
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
3D Tiles - Request scheduling improvements #5509
Comments
Time slicing and/or sorting of recieved tiles ended up not being something worth even investigating since there wasn't really anything to time slice or sort. If you monitor the processing queue it never really fills up since it drains very quickly. On a rare occasion it would get up to 10 things to process but again those would drain quickly. I threw some sorting and time slicing in there anyway and there was not benefit. Request canceling (whether going out of view or artificially raising the maxSSE while cam is moving so they don't even get request to begin with) was weird because while the cancel numbers are good (for some flights you could cancel 1/3 of the requests) The total load times are pretty much the same, maybe 10% depending on the scenario. [ ] Going of the observation, perhaps we can extend niche use case of prefetching the flyTo spot to more useful general case by prefetching tiles where the cam will be in N Frames or just the final camera drift stopping point. This will be slightly nuanced since it will interfere with offscreen canceling so those tiles may need a pretched tag and this tag should be removed if they are no longer on the flight path or if the user stops the camera suddenly while it was drifting. Or revamp the frustum culling so that its a swept volume instead of just the frustum for this frame. If doing swept volume, will need another priority for tiles in the near sweep vs far sweep. Didn't see much advantage for http2 (maybe this will come into play more when I experiment with smaller tile sizes). "Stagger renders for better request throughput" seems like it's missing the big picture, it optimizes for total load time at the expense of perceived perf, it will have even worse pop-in and longer delays between visual updates, while it maybe faster it will feel slower. Tabling this for now. Priority colorization is displayed as a heat map(black loads first, white loads last). This is done with with monitoring min and max values of your priority so that you can get a tight bounds on the exposure mapping that is used to bring it down to 0-1 range. I didn't go with filmic or something that can linearize it a little better because we actually do want smearing of lower values(higher priorities) so that they can be better distinguished (bigger relative jumps between values when they get mapped down into 0-1) (and it's totally ok if there "z-fighting" on higher values (much lower priorities, stuff in the background) when the get mapped down because its absolutely a trade-off worth making). Freeze frame is sufficient to get a grasp of whats going on and having a dynamic secondary camera would be to much effort for a value that is already realized with freeze frame. Tabling for now. I wanted prioritization to look like a heat diffusion from the camera, so this was done by adding the view space distances of distance to near plane and distance to screen center plane. Because space is distorted stuff near to the camera but on also near edge of the screen might have similar priority to something further back but in the center of the screen. for each z slice priority should fall off to the side For mixing matching priorities I'm currently trying to map it like a number system. say you had 3 priorities that you wanted to distinguish and there were clear breaks between each. since the request scheduler sees low values as higher priorities, the highest priority category would be you 100's digit, next highest 10's digit and lowest would be 1's digit. Then you can tone map the value knowing the range of values are between 0-1000 and then do 1-tonemapped result. If there aren't clear breaks between priorities then they'll need to bleed into each other a bit with a more careful weighting scheme. Starvation was done by separating out the queues into each category then swiping across the heads of the queues and pushing them the active request queue. Unifiying the priorities also helped for different sources that fall into the same category (ex: nyc photogram, nyc 3d buildings both fall into the 3d tiles bucket (apparently no good way to distinguish between sources inside requests scheduler)) Currently looking into percieved perf stuff at the moment, have a tileset for investigating smaller tiles sizes but was hitting the 'nomralized result is not a number' error. Tabling average load time stats until those are investigated. |
@loshjawrence just a reminder to also post the gif compare. |
Just adding a note about google earth. protocol is "http/2+quic/43" ours is "http2 spdy".Typical request size is in the 10's of KB (Ours are in the 100's). Most of it is x-protobuf, available for use by others as well. Doesn't seem like they do any fancy feature detection for placing their vertices in the most important spots to reduce mesh size (An example of what I'm talking about would be something like the paper |
Request
pool to avoid allocating manyRequest
objects.The text was updated successfully, but these errors were encountered: