Forum Discussion
raidho36
12 years agoExplorer
Tricks to acheive high framerate
So it's a known problem already that 60 fps is way too low, this alone causes serious problems with perception such as smearing and strobing (and judder in between of them), and solving one of them on...
raidho36
12 years agoExplorer
18 Gb/s makes for 20 megabytes per 120 fps frame, this is barely enough for 2.5k display and not enough by 50% for 4k display, so improvements have to be made, especially if we're talking about >300 real fps at this resolution.
I haven't programmed anythng in this aspect yet, but I think first step is using something like triplebuffer. You constantly render stuff to buffer 1, and every frame the buffer 2 and 3 swap around, where buffer 2 is previous frame and buffer 3 is it's displacement map. When you swap render buffers, you swap buffers 1 and 2, then you build a displacement map and swap buffer 1 with buffer 3. This way you're getting your new frame to buffer 2 and displacement map to buffer 3, while having buffer 1 for rendering. But I don't know whether it's even possible to make the GPU work that way - to constantly swap around buffer 2 and 3 even while the rendering is in progress. I'm positive the hardware is capable of it, there's no technical difficulty with XORring 2 values out of set of 3 when invoked by interrupt, but it needs special driver if there's no such support.
I can come up with something like this in emulation mode I guess, but not before my working shift is over, it should be a week, but might be three. For one thing there should be this kind of triple-buffering emulation, that's easy part, and for other thing there should be displacement shader, and this is more complicated, I don't think I have enough qualification to write a shader that wouldn't produce insane amounts of artifacts due to lack of initial data. But we've all seen such techniques and it worked - the anti-shake camera filter is easiest example.
I haven't programmed anythng in this aspect yet, but I think first step is using something like triplebuffer. You constantly render stuff to buffer 1, and every frame the buffer 2 and 3 swap around, where buffer 2 is previous frame and buffer 3 is it's displacement map. When you swap render buffers, you swap buffers 1 and 2, then you build a displacement map and swap buffer 1 with buffer 3. This way you're getting your new frame to buffer 2 and displacement map to buffer 3, while having buffer 1 for rendering. But I don't know whether it's even possible to make the GPU work that way - to constantly swap around buffer 2 and 3 even while the rendering is in progress. I'm positive the hardware is capable of it, there's no technical difficulty with XORring 2 values out of set of 3 when invoked by interrupt, but it needs special driver if there's no such support.
I can come up with something like this in emulation mode I guess, but not before my working shift is over, it should be a week, but might be three. For one thing there should be this kind of triple-buffering emulation, that's easy part, and for other thing there should be displacement shader, and this is more complicated, I don't think I have enough qualification to write a shader that wouldn't produce insane amounts of artifacts due to lack of initial data. But we've all seen such techniques and it worked - the anti-shake camera filter is easiest example.
Quick Links
- Horizon Developer Support
- Quest User Forums
- Troubleshooting Forum for problems with a game or app
- Quest Support for problems with your device
Other Meta Support
Related Content
- 2 months ago
- 3 months ago
- 1 year ago