The online racing simulator
TEST PATCH 0.6E6 (NOW E7 - 3D support)
(132 posts, closed, started )
Quote from hetner :The final distortion is probably done with a 2D bilineary interpolating table, and if I was writing that code I would make that do the re-sizing(50%) also, so that the only more workload needed was the big render. And i actually think that also would make the artifacts less, because it has more precise data to interpolate from.

The trouble with simply rendering the original render target at double resolution and distorting that straight to the screen is that this would give the same effect as using a texture that has no mipmaps and is too high a resolution for the target area. It would just be "dotty" and not correctly antialiased. In fact the antialiasing effect would be of varying quality across the image. In some small local areas near the eye centre, the scaling and position would be just right to interpolate 4 texels to give the intended resulting antialiased pixel. Just a little way from that area the scaling and position would be exactly in the wrong place and the output pixels would take their colour from alternate texels, missing out any data from the intermediate texels. Moving out from the centre it would get more and more dotty as the destination area becomes smaller and smaller, so the source texture's resolution is more and more too high. Near the corners it would just be really dotty, a lot worse even than the current version which already demonstrates (in the corners) the problem with rendering at too high a resolution.

The two stage option is to guarantee correct antialiasing on the first stage, because the position and scale are chosen so that the intermediate texels are always a perfect combination of 4 original texels. I don't really know how good the result of that would be. But the first thing I will do is make LFS choose a render target size that is "correct" (1 texel to 1 pixel scale) in the centre of the views, whatever output resolution you select. This will allow downsampling to perform some antialiasing on the final image and should help a bit. Also this simple update allows higher res Rifts to be used if you work at Oculus VR.
Somewhat unrelated. I've been playing with the Oculus Rift today, and my only complaints so far, is the fact that chat is super hard to read(due to the pixelation), and the GUI's that are right on the edges are hard to see(Though, I'm not sure what exactly you can do about that).

Though once the Consumer version of the OR comes out, I imagine the text being hard to read will go (mostly?) away.

Edit: I kinda like the way GUIs are in Minecraft with the Oculus Rift, where the GUI is stationary, but you're still able to look around the area(and the GUI). I think if that was a option/setting for LFS, that would be very nice.
T3charmy, I hope that the next version will help a lot with that because the text and interface screens will be bigger and fixed in space in front of you, so you can look around them, while they seem to sit in front of you attached to your car.

I've now done the automatic selection of render target size so the render target and screen size match at the view centres if you use larger output size (for downsampling or a higher resolution Rift).
Quote from Scawen :T3charmy, I hope that the next version will help a lot with that because the text and interface screens will be bigger and fixed in space in front of you, so you can look around them, while they seem to sit in front of you attached to your car.

Awesome, That's exactly how it is in minecraft, it's attached to a certain distance in front of the physical in-game character, So looking forward to that.
Quote from Scawen :
I've now done the automatic selection of render target size so the render target and screen size match at the view centres if you use larger output size (for downsampling or a higher resolution Rift).

Scawen, is there an option to force the ingame resolution to 1920x1200 ?
The maximum i can select is 1920x1080.
Attached images
possible_resolutions.jpg
Of cause you're right. It was just a brain fart from my side. I just did some test with a simple black and white grid. And it is very clear that a simple 2D bilineary interpolating or even bi-cubic for that matter is not handling sharp edges very well when source resolution gets too high as you said.

here is the result if anyone is interested:


But then i could not help it and tried to blur the image before processing with at 3x3 Gaussian kernel. And that of cause removed the artifacts from the end result but I don't think that approach is an option here, because of so many things.
Can you vary the strength of the blur so it only affects the edges?
Quote from T3charmy :I've been playing with the Oculus Rift today, and my only complaints so far, is the fact that chat is super hard to read(due to the pixelation), and the GUI's that are right on the edges are hard to see(Though, I'm not sure what exactly you can do about that).

Yeah, at first I have to point out again, that racing in VR is wonderful and i can´t really think of playing it on the old way again. Please keep in mind, that I was playing in front of a 2.5m projector screen in the past (2D not 3D)

Anyway there are some issues which still must be adressed.
(Some of them have to be solved by oculus itself).

Here my personal top3 issues:

1. low resolution --> goes to: oculus (or as workaround in lfs downsampling from higher res if possible)
2. 3D/VR GUI --> goes to: lfs
3. chromatic aberration correction --> goes to: lfs (isn´t there a solution in the Oculus SDK already?), else oculus for further research

Then maybe for a consumer release some more improvements should be achieved.
4. positional tracking --> goes to: oculus (workaround in lfs through a simple neck model)
5. lower latency --> oculus & lfs
6. still more FOV (don´t get me wrong 110° is already great, but human FOV is something around 180°) --> oculus
Quote from PeterN :Can you vary the strength of the blur so it only affects the edges?

Not easy and that would differently not do anything we like to the performance.

But it would be possible to pre-calculate an interpolation table that could weight all the source pixels perfect according to the distortion, but it would still demand quite some real-time multiplications per pixel. I am not sure if there is a technology that does this off the shelf already.
Quote from just2fast :Yeah, at first I have to point out again, that racing in VR is wonderful

Yes it is, I'm gonna set up my wheel, and play with that later tonight with the OR. That should be intresting. I also got lent a Razer Hydra by a friend of mine, though not much use for that in LFS...
The resolution is low and the screen door effect was so distracting that I modded my rift with a single side of a laminate pouch used for laminating photos etc. and LFS is without a doubt infinitly playable. Readability of menus aside it is the best experience I have had with the rift and I have had mine for months now. Even the floating HUD type information looks like its floating on the helmets visor somewhat.
Racing is no problem and very immersive. Without modding the screen with either the laminate or the 24"privacy screen from 3m (check mtbs3d). It wouldn't be playable for me. The SDE was too distracting.

LFS has the best integration I have seen yet. The immersion is superb!
Quote from PeterN :Can you vary the strength of the blur so it only affects the edges?

Maybe this is beginning to turn into off topic because this would be difficult to optimize for a realtime implementation. But i tried to vary a Gaussian kernel size so that it would approximately fit the scale change caused by the distortion and then using that as weight for calculating the target pixel. And the result is actually more sharp than the pre-blur method and more anti-aliased than the simple bilineary interpolate.

There are a lot of parameters to tweak for this to be perfect, but a one pixel wide grid is very ungrateful to try to anti-alias when distortion like this is applied. But this method would be able to re-size and distort at the same time and hence save a processing step while applying Anti-Alias in any amount one would like or have CPU/GPU overhead for. But again it is not as strait forward to implement as two steps, AA and then distortion.
Quote from just2fast :Scawen, is there an option to force the ingame resolution to 1920x1200 ?
The maximum i can select is 1920x1080.

No, LFS displays all the resolutions that DirectX allows. It's something to do with your monitor / Windows / DirextX. For example my monitor is 1920x1200 and I can select that option. I don't know if the 1080 is actually a problem or not - that depends how the Rift does its downsampling. If it takes whatever output you select and stretches that to its full screen, then the 1080 mode will stretch things vertically (roughly 10%) spreading 16:9 output to the 16:10 screen. But if the Rift software / firmware preserves the aspect ratio and adds some black areas above and below the 16:9 then there is no problem at all - LFS's implementation fits easily within 16:9 because I chose to render a square image for each eye.

Quote from hetner :Of cause you're right. It was just a brain fart from my side. I just did some test with a simple black and white grid. And it is very clear that a simple 2D bilineary interpolating or even bi-cubic for that matter is not handling sharp edges very well when source resolution gets too high as you said.

here is the result if anyone is interested:
https://dl.dropboxusercontent.com/u/14055155/gridAliased.png

But then i could not help it and tried to blur the image before processing with at 3x3 Gaussian kernel. And that of cause removed the artifacts from the end result but I don't think that approach is an option here, because of so many things.
https://dl.dropboxusercontent. ... 4055155/gridPreblured.png

Thanks for your demonstration images!

Quote from just2fast :3. chromatic aberration correction --> goes to: lfs (isn´t there a solution in the Oculus SDK already?), else oculus for further research

A solution is provided, in the form of a DX9 pixel shader. I plan to look into this (no guarantees) after I've implemented DX9.

Next test patch release is Rift updates including the 3D version of the 2D interface and higher resolution screen output (increasing the render target texture to suit the screen size - actually the render target texture is around 1.7 times the width of the selected output screen size!

After that I'm back onto the DX8 to DX9 conversion, followed by more Rift updates.

Disclaimer : That is the plan but I have noticed that my plans often change.

Quote from Rank Outsider :LFS has the best integration I have seen yet. The immersion is superb!

Thank you for the encouragement and the message on the Rift forums. There is still some way to go with the support and the good thing is we don't have to lose any more frame rate (unless some possible high quality options are selected) so it should just get better.
Sounds great with the next patch!

All the Rift demos that I have tried where down sampling is working I have selected 1920 x 1080 and the aspect ratio is preserved (Unity and UnReal engines). Hopefully that will apply here?
One thing I just thought of and I'm not sure if everyone knows this...

There is a device selector in LFS which may allow you to put LFS on the Rift without it appearing on your monitor, and to do this without touching any Windows desktop settings. I'm really not sure how it works or if it is convenient, so I'd like to hear about it.

At the bottom of the Graphics Options screen, just above the Z-buffer depth option, there is a button which has the name of your graphics card. If you click that button you may be able to select the device which will be used the next time you start LFS.

Please let me know if that is any help or if that was obvious anyway.
That's really helpful! I can now select 1920 x 1200 even though my monitor is 1920 x 1080. You only get the option available if you have your monitors set to extended.
Thanks for the feedback! Does 1920x1200 look any different from 1920x1080 mode?

EDIT : I've heard there may be a problem if you are using extended mode and you go full screen on the second device, then your mouse is able to wander back to the desktop device and if you click something there, bad things can happen... or not?
Quote from Scawen :Thanks for the feedback! Does 1920x1200 look any different from 1920x1080 mode?

EDIT : I've heard there may be a problem if you are using extended mode and you go full screen on the second device, then your mouse is able to wander back to the desktop device and if you click something there, bad things can happen... or not?

Yeah it look's a lot better because it isn't squeezed (still the same quality as 1280 x 800). I can only get it to work when I am in extended mode, but the mouse isn't able to move outside the game so it's fine. Is there a key assigned to recenter the camera? I am getting some drifting.
There is a camera resetting function, it is the text command /rift reset.

I recommend you do what I will set by default in the next patch : assign this text command to ALT+F12

- Options - Controls screen
- select wheel / joystick mode
- Click on the ALT+ tab
- Enter /rift reset in the ALT+F12 field

Doesn't have to be ALT+F12, any CTRL or ALT F key will do.
And that works in mouse / kb mode as well. It's on my notes to allow the CTRL+ and ALT+ tabs to be visible in mouse / kb mode.
Quote from Scawen :
At the bottom of the Graphics Options screen, just above the Z-buffer depth option, there is a button which has the name of your graphics card. If you click that button you may be able to select the device which will be used the next time you start LFS.

Hmm, yes the graphics card is shown, but nothing happens when I click there ...
Attached images
graphics_menu.jpg
Quote from Scawen :Hexagon said : "You only get the option available if you have your monitors set to extended."
https://www.lfsforum.net/showt ... php?p=1832338#post1832338

Maybe that will help?

Ok thanks, in extended mode i was able to set up a new custom resolution of 1920x1200 in the NVIDIA Panel, which then can be choosen in lfs.
(the button in the graphics option was available, but not necessary anymore).

Anyway....
I couldn´t see a difference between 1200x800 and 1920x1200!
Either downsampling is overrated or it simply doesn´t work.

Quote from Scawen :However, the render target size in LFS at the moment is chosen to suit a final screen output size of 1280x800, so I would expect that you would not get much benefit from choosing a higher screen size.

If i undestood you correctly Scawen, then you render internally always with 1200x800? So that means resolution will be upscaled first and then downscaled again --> useless atm?
Attached images
1280x800.jpg
1920x1200.jpg
Hello from germany,
i just wanted to say thanx for the Oculus Support!
I remember LFS long time ago but now years later i bought it
just for the Rift! And what can i say, its INCREDIBLE!
Thats the first racing game who really feels as if you are driving
for real, (i didnt tested iracing, dont like the monthly payday)
and pcars still no Rift support :/
But LFS is my new love with the Rift now, hehe, its freaky!!
And same time it feels so naturaly, looking around didnt worked
with trackir 100%, allways losing orientation somehow, but this
is like in reality, you dont think about, you just drive around
on this track.
And its at the same immersion level as Half Life 2, this two are now
my main demos for showing the Rift to VR newbies.
Thanx again!

Best regards
Nedo
Quote from just2fast :If i undestood you correctly Scawen, then you render internally always with 1200x800? So that means resolution will be upscaled first and then downscaled again --> useless atm?

I would agree it's useless until the next test patch, which renders to the appropriate render target surface size, around 1.7 times wider than whatever screen size you select. My version makes a new render target texture any time you change the screen size. In your version, render target surface is always 1.7 times 1280, the size to produce proper centre pixels on the native Rift resolution. Why 1.7 times? That is the scale increase at the centre of each eye's view from the render target to the screen.

Quote from Nedo :Hello from germany,
i just wanted to say thanx for the Oculus Support!
I remember LFS long time ago but now years later i bought it
just for the Rift! And what can i say, its INCREDIBLE!
Thats the first racing game who really feels as if you are driving
for real, (i didnt tested iracing, dont like the monthly payday)
and pcars still no Rift support :/

Thank you! Very encouraging - please keep an eye out for the next test patch which should be better!
Is there any ETA on the next patch? Will there be a fix for view drift? Neck model? Sorry to be a pain... can't help venting my excitement
This thread is closed

TEST PATCH 0.6E6 (NOW E7 - 3D support)
(132 posts, closed, started )
FGED GREDG RDFGDR GSFDG