I recently upgraded my T300 wheelbase to the Simagic Alpha Mini. I had a few custom made rims and the TM Open Wheel rim that I wanted to try to get working on the Simagic base, including all the buttons. After a few days of hardware exploring, learning about nRF24 & logic analyzers and packet disassembly I managed to figure out the important bits of the wireless protocol Simagic uses and make my rims work with the base directly.

I put all the info over at a github repository if someone else wants to do the same, or perhaps the opposite attaching a Simagic rim to another base :)

Simagic rim getting probed

Here’s a new version of the VR eye accomodation fix, with a few new features. On the original accomodation fix side there is now ability to have different color toning settings for daytime and night stages (with interpolation for other times of day). This is primarily because previously I was not happy with having to make a compromise with the contrast on the gamma setting, I wanted it higher for daytime but that made the nights too dark. So now being able to set different gamma for different times of day allows for better look in both cases. Its still not quite perfect as in some stages like Scotland the lighting is not entirely consistent with other stages.

An extra feature I implemented is haze reduction, which reduces the fog in daytime good weather conditions which is too thick in some stages like Finland. It works properly only in some locations (Finland, Wales, Poland primarily) as I had to limit its effectiveness so it wouldn’t bring any unfair advantage in worse weather conditions where thick fog is intentional. Here is a comparison screenshot from Finland stage:
Haze reduction

Another feature I added is overriding some vegetation pixel shaders from the game which makes most of the vegetation use alpha-to-coverage for much less aliased appearance when MSAA is enabled. This was primarily motivated by wanting to remove the weird distracting dither effect from the trees. This dithering removal looks like this (view the image in full size), the better aliased vegetation isn’t so well visible in a static screenshot but it looks much smoother in motion:

Download v2.0 of the mod from here, read the readme for instructions.

As before, the default config is made for the Vive Pro. Other headsets, especially LCD panel ones might need some adjustments. Also the mod should work without VR as well, but in that case you probably will want to disable at least the accomodation area override setting (overrideArea=0 into the config).

Here’s a quick update to the DCS VR Shaders mod for DCS version The ENABLE_HMD_MASK & MASKSIZE settings are removed in this version as DCS now includes a correctly implemented headset mask. Everything else seems to be as before, though this version is not very heavily tested.

Download from here.

Yet another update for the VR shaders performance mod – which is now called just “VR shaders mod” because it does more than just performance improvements.
List of changes for this version:
– Renamed the mod to ‘DCS World VR shaders mod’
– Compatibility with DCS World version (23.5.2020)
– Removed MSAA_MASKSIZE setting as ED “cloned” it to DCS itself
– Added multi-sampled terrain shadow sampling (less aliased shadows with MSAA)
– Added alpha-to-coverage support for trees and tree flat shadows (less aliased trees with MSAA)
– Fixed ship wakes being permanently “burned in” with high water detail
– Simple transparent objects rendering setting (off by default – not well tested)
– Fixed some issues with NVG especially with NVG_GAIN_ADJUSTS_POSITION enabled

Get it from DCS forums: here.

It has new AToC and multisampled terrain texture sampling features which make shadows on terrain, trees and tree flat shadows less aliased with MSAA enabled. Comparison screenshot is here, again in motion the difference is more visible.

Yet another DCS shaders performance update is available on the DCS forums here.

Its compatible with beta and fixes a few issues that have accumulated over time. There is also a setting to keep bloom enabled, it seems to have a much smaller performance hit noways.

It also contains a new feature: Supersampling for the albedo (diffuse) textures. It is a very performance-cheap way to get improved clarity especially for the cockpit labels and stuff. So instead of having to supersample the entire rendered scene to get more sharpness, it will sample the diffuse texture multiple times.

The difference looks like this:
diffuse supersampling
Even with just 2x sampling the text labels (like “FIRE EXTGH”) are much sharper and its performance hit is very neglible, almost any GPU tha runs DCS in VR probably can do 4x without any noticeable hit. It looks even better in the headset than in the screenshot. With it its possible to turn down the pixel density quite a bit without getting a blurry cockpit, and then use the performance headroom to do 4xMSAA for smoother geometry edges.

It can be controlled with _HMD.hlsl setting ENABLE_DIFFUSE_SS, the default is 4x.

I have been having problems with floor level constantly changing on its own with the HTC Vive and nothing I try seems to fix the problem so I made a tool for quickly re-calibrating the floor from within the SteamVR dashboard. All that is required is to place one controller on the floor and clicking the floor fix button from the new dashboard app (it appears next to “Steam” and “Desktop”). See the video below.

Download the FloorFix tool from here (v1.0). Extract the zip somewhere and run ViveFloorFix.exe. If you get an error about missing msvcp140.dll then install the VS2015 runtime using the included vc_redist.x86.exe.

Update: OpenVR Advanced Settings has added a similar floor fix feature in a nicer package, you should use that instead of this. :)

edit: Note there currently seems to be a memory leak in the OpenVR SDK which can make FloorFix eat up excessive amounts of RAM over time. Restarting it every few days at least seems to be enough, I’ll make some workaround if Valve does not fix the issue in time (it is reported here)

I recently got hold of the Oculus Rift DK1 but ran into a bit of a problem with the fact that my Nvidia card only has four display outputs which all were already in use. So to use the Rift I’d need to unplug one monitor, use a HDMI switch or a HDMI splitter. The splitter seemed like the best option but active splitters seemed very expensive and I read about EDID problems with passive splitters.

Cheap passive HDMI splitter

Cheap passive HDMI splitter

The EDID problem comes when you have two displays (a monitor and the Rift) at the end of the single HDMI output and Windows (or the video card) pretty much randomly uses the EDID from either one – and when it uses the one from the monitor the Oculus SDK will not detect the Rift as being attached and cannot read the information from it. A way to avoid this issue is to plug in the Rift first, let windows detect it and then plug in the monitor. But this is clumbersome and needs to be done on every reboot so it is not very practical.

Thinking about what to do about this the solution was simple: Make Windows not see the desktop monitor at all by cutting off the DDC pins from the HDMI cable that goes to the monitor. DDC is used for communicating the EDID and with those gone Windows will only be able to talk to the Rift. This of course means the Rift must be attached to have something visible in the monitor and the monitor will be limited to resolutions supported by the Rift, but in my case this is not a problem as the Rift reports it can support 1920×1200 which is the native resolution of the monitor I use.

In practice the easiest way to get rid of the DDC pins was to remove them from a HDMI to DVI adapter that goes to the monitor. In the DVI connector DDC data & clock are in pins 6 and 7:


Female side of the DVI connector. Pins number 6 and 7 are the DDC clock and data pins used for reading EDID information.

These were easy to remove with a pair of pliers, you need to be a bit careful to not bend the other pins too much but these adapters are also very cheap so its not a huge loss for it to go wrong. My result:


This is the male DVI side of a HDMI to DVI adapter with the DDC pins cut off.

I use this with a cheap passive HDMI splitter that cost 10 euros and it works well. One problem I did notice is that if I turn off the Rift box I get some signal errors visible on the monitor image, possibly the signal gets too weak when the unpowered Rift box is attached in the cable. It can be avoided by just keeping the Rift powered at all times or by unplugging the power cable from the Rift box instead of just turning it off (Reading the EDID from the Rift still works even with the box unpowered). Some shorter cables might help as well.

edit: Also I noticed that when you unplug the USB cable the rift display turns off so it is an easy way to unpower the rift when its not in use, while keeping the control box on.

Rift and the Dell monitor displaying the same image, but Windows only sees the Rift EDID information.

Rift and the Dell monitor displaying the same image, but Windows only sees the Rift EDID information.

Finally got around adding all the old content to a new WordPress based site I have been working on for almost an year now. Never enough time for finishing anything… But now it’s done, and I might post some junk here more frequently as well.

My new year went nicely in the middle of a pitch black forest hunting some newly published geocaches, GC4W4N5 and GC4W4RX. FTF on both \o/

New domain

The site was moved from kegetys.net to kegetys.fi domain, but the old domain remains functional as a redirect