This exact scene with the same settings in VR runs avg. at ~30 FPS, max at ~40 FPS and dips a few times (sun rise/set) to 19 FPS as the light shafts are a real GPU bottleneck here.
However, I never set my VR games to epic settings as not all are a win (quality & immersion wise), so turning those few GPU quality settings down results at it running at about avg. ~40 FPS,
and you don’t want to hear 40 FPS and VR in the same sentence right but it’s really my CPU here that caps the frame rate and so we get a very similar result with or without VR.
I do actually like to look at it in VR, async timewarp works marvelously, and the scale of the scene is pretty giant so you don’t really notice the translation errors when moving you head around.
Ou, no, sorry for not explicitly stating, I was speaking about async timewarp fixing rotation when under headset refresh rate, so that it feels smooth along those 3 axis, but since it only works on rotation and not translation, you do notice fairly fast, especially in small areas that rotation is smooth but translation is not, but here you don’t notice it as much, because of the big open world scale of the scene and that makes it surprisingly solid VR experience.
When you say 95% percent of the time you are bottlenecked by the CPU, then is this with the out of the box UE4 multithreading that uses ~ 1 1/2 cores maximum?
Or is this with all four cores maxed out with a custom made thread manager?
Also, does the CPU load scale linearly with the number of ships in waveworks? (10 ships need only 1/100 CPU than 1000 ships)
Sorry for a delay, was at a conference last two days. Thank you, glad you like it! It’s with UE4 multithreading, so CPU usage is not maxed out, it just becomes a bottleneck in a game. I could push for more, but my goal was really to get to a 1000 ships, so I really didn’t see much point in taking a few days more to hack something like that together and then make it lets say 3000 if I was luck not to hit other problems (unlikely), I was thinking that if I could go 10 000 it would be worth it but didn’t really see a realistic way to do it at this time. You could use tricks like, the ships at the distance ticking at a lower rate and maybe get relatively close and no one would even notice (you would start to hit other bottlnecks soon as well), but I tried to avoid that so that the whole project is clearer and easier to understand, every ship is the same in every aspect. Also the surface area is getting pretty big so you wouldn’t really notice that many more ships on the screen when looking at the horizon; you could say that from that point of view we are close to the point of diminishing returns.
Yes it does scale pretty linearly, for WaveWorks we would be talking in a context of readback for ocean surface, very efficient.
It is true that with 1000 ships you are already at a point where 3000 ships or more would not make much difference to any gameplay.
In your fps listing in the first post, are you gpu bound or cpu bound?
If it is not too much work and if you find the time, can you check the following with the stat unit console command to get game thread time (and cpu usage, i.e. cores used), draw call time and gpu time
only ocean, no ships
only ocean calm waters
only ocean rough sea
ocean and 10 ships
ocean and 100 ships
ocean and 1000 ships
It would be great to get a feeling how game-ready such a WaveWorks integration, i.e. some detailed performance figures.
Mate, c’mon, cards on the table: how much of the cpu bottleneck comes from the ocean and how much from the ships? Is the ocean any usable the next 1o years if it clogs up your i7 processor or is this just some academic exercise? How taxed out would he i7 be with just the ocean and 10 ships? Still bottlenecked, I suppose…
Sorry, haven’t had time to get all the info for you, don’t want to make any promises that I will, we’re shipping a game with this tech in 3 weeks so that’s really my only focus right now, hope you understand.
The ocean is pretty cheap if we’re talking about the visuals and readback of the displacements, expect to pay something like or less than 1.0 ms for it, modern CPU & GPU wise - depending on how you use it and you do have 3 detail settings in the API.
If you look at the official NVIDIA docs they list GTX 680 running at 1.0ms (high detail) and Core i7-2600K running at 1.1ms (normal detail) and I can confirm that.
In this case the CPU is bottlenecked by the buoyancy, that really has nothing to do with the WaveWorks itself (it uses the displacements data and that’s it), you have to implement that on your own.
WaveWork is design for real-time applications, especially games, but you can use it for whatever you want. I’ve uploaded NVIDIA’s WaveWorks PDF to my Amazon drive for you, it’s a pretty interesting read!
EDIT: no if you would have 10 ships it would have been linearly less taxed, at least in my buoyancy implementation. So 10 ships si super easy on your CPU, no problem at all, something like 1.2ms for everything, ocean and ships.