Skip to content

Tags: oneup03/VRto3D

Tags

latest

Toggle latest's commit message
Add ghost reduction and LeiaSR anti-crosstalk controls

Every stereo display leaks some of each eye into the other, and how
visible that is depends on the brightness difference between the eyes.
Two global levers go at the top of the Shader tab, applied last in the
display-correction pass, in linear light via a plain 2.2 power:
- Contrast (1.0 = off) squeezes toward mid-grey, shrinking |L - R|
  directly.
- Black Lift (0.0 = off) raises the black floor. Displays that cancel
  crosstalk themselves (LeiaSR) pre-subtract the opposite eye, which
  drives dark pixels below black; the clamped part is what survives as
  a ghost, and lift gives it room. Where nothing cancels it does nothing.
Both are global on purpose: a correction applied to one eye and not the
other is itself new inter-eye difference, which ghosts in turn. Both
defaults are exact no-ops the shader branches on, so existing profiles
render identically, and screenshots are taken before the pass. The
Vulkan repack shader gets the same step (push-constant block 96 -> 112
bytes, SPIR-V regenerated).

On LeiaSR the panel's own cancellation can now be tuned as well, through
SR-lib's new anti-crosstalk controls on our raw SDK weaver: mode
(Display Default / Off / Static / Dynamic), strength (0-300% of the
panel's measured factors) and the weaver's contrast (50-100%, which
squeezes the image much like our Contrast lever). Good first values
from testing: SR Anti-Crosstalk 130%, SR Contrast 97%, Contrast 0.95.
Raising strength cancels more but clips more, which is what Black Lift
is for, so the two sit together at the top of the section. They show
only while LeiaSR is the output, and only if the installed SR runtime
offers the interface. They are display settings rather than part of our
shader pass, so they apply whether or not the correction shader is
enabled. The presenter reads the panel's defaults from each new weaver,
logs them, and calls into SR on the render thread only when a value
changes.

Submodules:
- VRto3DLib: the five new keys (shader_ghost_contrast,
  shader_ghost_lift, sr_crosstalk_mode, sr_crosstalk_strength,
  sr_weaver_contrast), global and per-game.
- SR-lib: moves to the api_expansion branch for SR.hpp's anti-crosstalk
  controls; vrto3d.vcxproj adds the SR-lib root to the include path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

V5.0.0

Toggle V5.0.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Merge pull request #26 from oneup03/direct_experiment

# VRto3D — Direct Mode Release

The big one: VRto3D now renders and presents stereo 3D **natively/in direct mode**, instead of relying on ReShade + external tools. This unlocks a full menu of output formats, an in-3D settings UI, auto-depth, proper screenshots, and native **Linux support**.

## 🎬 Native 3D output modes
All modes are produced directly by the driver (no ReShade required):
- **Side-by-Side** and **Top-and-Bottom**
- **Row Interlaced** / **Column Interlaced**
- **Checkerboard**
- **All Anaglyph flavors** (Red/Cyan, Green/Magenta, Blue/Amber, + Dubois/deghosted/half-color variants)
- **Dual Display / Dual Display Flip** — for dual-projector or dual-monitor setups
- **Frame-Packed** modes — switches the display into a frame-packed HDMI mode
- **LeiaSR** — autostereoscopic weaving with tracking built in (Midlife Crisis / Eff's tracking incorporated — **no separate app needed**)
- **NvidiaDX9** — 3D Vision output, rebuilt on top of the new **NV3D-Lib**
- **WibbleWobble** — frame-sequential output (installer fetches the required WibbleWobble beta automatically)
- **VirtualDesktop** mode (replaces the old `vd_fsbs_hack`)
- **Mono** mode

## 🐧 Linux support (new)
- Full Linux port with **Wayland and X11** presenters and a **Vulkan** rendering path
- **evdev**-based input and OSD on Linux
- Frame-packed modeline wiring on X11; WibbleWobble streaming to `wwserver`
- Linux install script + CI build workflow
- Not extensively tested

## 🖥️ On-Screen Display (OSD)
- **ImGUI-based in-headset menu** to edit **every** VRto3D setting — no more hand-editing config files (**Ctrl+Home** or **Start + D-Pad Down**)
- **Gamepad navigation** for the OSD
- **Download the latest game profiles** directly from the OSD
- **Display-correction shader**: a final-pass color correction applied to the composited image — per-channel **Lift / Gamma / Gain** plus an adjustable contrast curve — to tame ghosting/crosstalk and match brightness on displays that need it
- Buttons to take a screenshot, open the profile/screenshot folders, and reset to factory defaults
- **Stereo cursor**: optional per-eye software cursor drawn at adjustable **depth and size**, plus **hide-cursor** and **lock/confine-cursor** options — all saved per profile
- **Auto Exit SteamVR**: optionally shut SteamVR down automatically when the game closes

## 🔎 Auto-Depth
- **Auto-Depth** feature that works in any game (behaves like auto-convergence, depth-buffer driven)
- Comfort-target and smoothing controls, plus optional sample logging for tuning

## 🎯 Head tracking
- **LeiaSR built-in head tracking** — sensitivity, deadzone, per-axis limits, One-Euro filter smoothing, and the track mode (Yaw/Pitch up to Full 6DOF) are all tunable, so no separate tracking app is required
- **OpenTrack tuning** — position deadzone, zoom smoothing, and max-zoom controls for XInput/OpenTrack head tracking; you can also disable the built-in SR tracking to feed the OpenTrack port from an external source (OpenTrack, VertoXR, …)

## 📸 Screenshots
- Captures a **normal** and a **cross-view** image each time
- Trigger from the OSD (**Misc → Take Screenshot**) or the **Ctrl+F12** hotkey
- Fixed black/blank screenshots

## ⌨️ Hotkeys & profiles
- Reworked user hotkeys; **"Toggle" mode now supports multiple presets**
- **Start + D-Pad Up** now mirrors the **Ctrl + F8** focus hotkey
- Hotkey changes apply live without a restart
- **All shipped game profiles migrated to portable key names** (cross-platform)

## 📦 Installer
- New Windows installer (Inno Setup): picks release / pre-release / local build, detects SteamVR, optional cleanup of legacy ReShade and third-party drivers, optional WibbleWobble + LeiaSR setup

## 🛠️ Fixes & polish
- Overhauled focus / always-on-top handling (unified `ComputeWantOnTop` focus policy; fixes overlay stuck-on-top after game exit; consistent auto-focus)
- Numerous DX9 stability, color, and freeze fixes
- Fixed screen tearing, multi-layer sizing, UEVR rendering/stutter, RealVR reconnect, recenter reliability, DPI-scaling bug
- sRGB present chain fixes for correct (non-dark) output

V4.1.0

Toggle V4.1.0's commit message
Fix init on extended display

V4.0.2

Toggle V4.0.2's commit message
Fix FoV loading in profiles

V4.0.1

Toggle V4.0.1's commit message
Auto-update changelog.md from GitHub releases

V4.0.0

Toggle V4.0.0's commit message
Update Readme

V3.4.1

Toggle V3.4.1's commit message
Add RE4 config

V3.4.0

Toggle V3.4.0's commit message
Move position/yaw hotkey under disable hotkeys section; update readme

V3.3.0

Toggle V3.3.0's commit message
Add changelog to release

V3.2.0

Toggle V3.2.0's commit message
Update Expedition 33