alvr-org/ALVR

Flickering/aliasing effects

Opened this issue · 0 comments

Description

Short version:
Fine details (like lines) show flickering or aliasing effects resulting in a visually unstable experience.

Longer version:
I compared Meta Quest Link (with maxed out resolution, i.e. on its 1.3x setting) with ALVR where I tried to replicate Meta Quest Link's resolution as truthfully as possible. Interestingly for me, while Meta Quest Link's image quality shows the typical compression "smushedness", I perceived it as visually "more stable" and less flickering than ALVR's output. It took me some time to understand why I felt this way. And I think I understand now: Meta Quest Link seems to handle fine lines better than ALVR, maybe by using some anti-aliasing functionality.

I've created a recording that demonstrates the issue:

  • I used ALVR's Debug commands (Start Recording / Stop Recordings) to record a few seconds as a raw h265 file.
  • I imported the recording into Blender, applied a simple 2D stabilization & cropped the video to show only the books on the Steam VR Home bookshelf, and exported the stabilized video in its cropped resolution (274x376), using PNG as video codec. (To go absolutely sure I retain the original effect, I also made sure to use "nearest neighbor" filtering in all of Blender's scaling/transform settings - but because I exported the video without scaling / any resolution change anyway, this should not really have been relevant.)
  • I was not sure if GitHub applies additional scaling/filtering & compression, causing the effect to disappear. Therefore, I went sure and created an 1080p-upscaled version of a part of the exported file (again, using nearest neighbor scaling). And here it is:
enlarged.mp4

I would have liked to upload the stabilized original as well - but GitHub rejected the 18 MB file as being too large. I therefore applied a super careful compression to the original and provide it here:

original-carefully-compressed.mp4

I would have liked to also provide a Meta Quest Link comparison video recording from the same perspective - but as the built-in camera app is not working while in Link mode (and because it would produce a heavily post-processed video anyway), I don't quite know how I would produce something like that. But if you want to see for yourself: Maybe it's already sufficient to compare the look of the lines of the Steam VR "void" floor: When using Meta Quest Link, there are effectively no aliasing effects. When using ALVR, the aliasing effects are noticeable.

General Troubleshooting

  • I carefully followed the instructions in the README and successfully completed the setup wizard
  • I read the ALVR GitHub Wiki

Environment

Hardware

CPU: Intel(R) Core(TM) i9-14900HX, 2200 MHz

GPU: NVIDIA GeForce RTX 4070 Laptop GPU

GPU Driver Version: 32.0.15.6103

Audio: Realtek High Definition Audio(SST)

Installation

ALVR Version: ALVR streamer v21.0.0-dev01+nightly.2024.12.12

ALVR Settings File:

session.json
{
  "server_version": "21.0.0-dev01+nightly.2024.12.12",
  "drivers_backup": {
    "alvr_path": "<...>",
    "other_paths": []
  },
  "openvr_config": {
    "eye_resolution_width": 2688,
    "eye_resolution_height": 2912,
    "target_eye_resolution_width": 2688,
    "target_eye_resolution_height": 2912,
    "tracking_ref_only": false,
    "enable_vive_tracker_proxy": false,
    "minimum_idr_interval_ms": 100,
    "adapter_index": 0,
    "codec": 1,
    "h264_profile": 0,
    "refresh_rate": 72,
    "use_10bit_encoder": true,
    "use_full_range_encoding": true,
    "encoding_gamma": 1.0,
    "enable_hdr": false,
    "force_hdr_srgb_correction": false,
    "clamp_hdr_extended_range": false,
    "enable_pre_analysis": false,
    "enable_vbaq": false,
    "enable_hmqb": false,
    "use_preproc": false,
    "preproc_sigma": 4,
    "preproc_tor": 7,
    "amd_encoder_quality_preset": 2,
    "rate_control_mode": 0,
    "filler_data": false,
    "entropy_coding": 1,
    "force_sw_encoding": false,
    "sw_thread_count": 0,
    "controller_is_tracker": false,
    "controllers_enabled": true,
    "body_tracking_vive_enabled": false,
    "body_tracking_has_legs": false,
    "enable_foveated_encoding": false,
    "foveation_center_size_x": 0.0,
    "foveation_center_size_y": 0.0,
    "foveation_center_shift_x": 0.0,
    "foveation_center_shift_y": 0.0,
    "foveation_edge_ratio_x": 0.0,
    "foveation_edge_ratio_y": 0.0,
    "enable_color_correction": false,
    "brightness": 0.0,
    "contrast": 0.0,
    "saturation": 0.0,
    "gamma": 0.0,
    "sharpening": 0.0,
    "linux_async_compute": false,
    "linux_async_reprojection": false,
    "nvenc_quality_preset": 4,
    "nvenc_tuning_preset": 2,
    "nvenc_multi_pass": 1,
    "nvenc_adaptive_quantization_mode": 2,
    "nvenc_low_delay_key_frame_scale": -1,
    "nvenc_refresh_rate": -1,
    "enable_intra_refresh": false,
    "intra_refresh_period": -1,
    "intra_refresh_count": -1,
    "max_num_ref_frames": -1,
    "gop_length": -1,
    "p_frame_strategy": -1,
    "nvenc_rate_control_mode": -1,
    "rc_buffer_size": -1,
    "rc_initial_delay": -1,
    "rc_max_bitrate": -1,
    "rc_average_bitrate": -1,
    "nvenc_enable_weighted_prediction": false,
    "capture_frame_dir": "/tmp",
    "amd_bitrate_corruption_fix": false,
    "use_separate_hand_trackers": true,
    "_controller_profile": 1,
    "_server_impl_debug": false,
    "_client_impl_debug": false,
    "_server_core_debug": false,
    "_client_core_debug": false,
    "_conncection_debug": false,
    "_sockets_debug": false,
    "_server_gfx_debug": false,
    "_client_gfx_debug": false,
    "_encoder_debug": false,
    "_decoder_debug": false
  },
  "client_connections": {
      <...>
  },
  "session_settings": {
    "video": {
      "passthrough": {
        "enabled": false,
        "content": {
          "AugmentedReality": {
            "brightness": 0.4
          },
          "Blend": {
            "opacity": 0.5
          },
          "variant": "AugmentedReality"
        }
      },
      "bitrate": {
        "gui_collapsed": false,
        "mode": {
          "ConstantMbps": 300,
          "Adaptive": {
            "gui_collapsed": false,
            "saturation_multiplier": 0.95,
            "max_throughput_mbps": {
              "enabled": false,
              "content": 100
            },
            "min_throughput_mbps": {
              "enabled": false,
              "content": 5
            },
            "max_network_latency_ms": {
              "enabled": false,
              "content": 8
            },
            "encoder_latency_limiter": {
              "enabled": true,
              "content": {
                "max_saturation_multiplier": 0.9
              }
            },
            "decoder_latency_limiter": {
              "enabled": true,
              "content": {
                "gui_collapsed": false,
                "max_decoder_latency_ms": 30,
                "latency_overstep_frames": 90,
                "latency_overstep_multiplier": 0.99
              }
            }
          },
          "variant": "ConstantMbps"
        },
        "adapt_to_framerate": {
          "enabled": false,
          "content": {
            "framerate_reset_threshold_multiplier": 2.0
          }
        },
        "history_size": 256,
        "image_corruption_fix": false
      },
      "preferred_codec": {
        "variant": "Hevc"
      },
      "foveated_encoding": {
        "enabled": false,
        "content": {
          "force_enable": false,
          "center_size_x": 0.45,
          "center_size_y": 0.4,
          "center_shift_x": 0.4,
          "center_shift_y": 0.1,
          "edge_ratio_x": 4.0,
          "edge_ratio_y": 5.0
        }
      },
      "color_correction": {
        "enabled": false,
        "content": {
          "brightness": 0.0,
          "contrast": 0.0,
          "saturation": -2.2351742e-8,
          "gamma": 1.0,
          "sharpening": 0.59999996
        }
      },
      "max_buffering_frames": 2.0,
      "buffering_history_weight": 0.9,
      "encoder_config": {
        "gui_collapsed": false,
        "rate_control_mode": {
          "variant": "Cbr"
        },
        "filler_data": false,
        "h264_profile": {
          "variant": "High"
        },
        "entropy_coding": {
          "variant": "Cavlc"
        },
        "use_10bit": true,
        "server_overrides_use_10bit": true,
        "use_full_range": true,
        "server_overrides_use_full_range": false,
        "encoding_gamma": 1.0,
        "server_overrides_encoding_gamma": false,
        "enable_hdr": false,
        "server_overrides_enable_hdr": false,
        "force_hdr_srgb_correction": false,
        "clamp_hdr_extended_range": false,
        "nvenc": {
          "gui_collapsed": false,
          "quality_preset": {
            "variant": "P4"
          },
          "tuning_preset": {
            "variant": "LowLatency"
          },
          "multi_pass": {
            "variant": "QuarterResolution"
          },
          "adaptive_quantization_mode": {
            "variant": "Temporal"
          },
          "low_delay_key_frame_scale": -1,
          "refresh_rate": -1,
          "enable_intra_refresh": false,
          "intra_refresh_period": -1,
          "intra_refresh_count": -1,
          "max_num_ref_frames": -1,
          "gop_length": -1,
          "p_frame_strategy": -1,
          "rate_control_mode": -1,
          "rc_buffer_size": -1,
          "rc_initial_delay": -1,
          "rc_max_bitrate": -1,
          "rc_average_bitrate": -1,
          "enable_weighted_prediction": false
        },
        "amf": {
          "gui_collapsed": true,
          "quality_preset": {
            "variant": "Speed"
          },
          "enable_vbaq": false,
          "enable_hmqb": false,
          "use_preproc": false,
          "preproc_sigma": 4,
          "preproc_tor": 7,
          "enable_pre_analysis": false
        },
        "software": {
          "force_software_encoding": false,
          "thread_count": 0
        }
      },
      "force_software_decoder": false,
      "mediacodec_extra_options": {
        "gui_collapsed": true,
        "key": "",
        "value": {
          "ty": {
            "variant": "Int32"
          },
          "value": "0"
        },
        "content": [
          [
            "operating-rate",
            {
              "ty": {
                "variant": "Int32"
              },
              "value": "2147483647"
            }
          ],
          [
            "priority",
            {
              "ty": {
                "variant": "Int32"
              },
              "value": "0"
            }
          ],
          [
            "vendor.qti-ext-dec-low-latency.enable",
            {
              "ty": {
                "variant": "Int32"
              },
              "value": "1"
            }
          ]
        ]
      },
      "transcoding_view_resolution": {
        "Scale": 1.0,
        "Absolute": {
          "width": 2704,
          "height": {
            "set": true,
            "content": 2912
          }
        },
        "variant": "Absolute"
      },
      "emulated_headset_view_resolution": {
        "Scale": 1.0,
        "Absolute": {
          "width": 2704,
          "height": {
            "set": true,
            "content": 2912
          }
        },
        "variant": "Absolute"
      },
      "preferred_fps": 72.0,
      "adapter_index": 0,
      "clientside_foveation": {
        "enabled": false,
        "content": {
          "mode": {
            "Static": {
              "level": {
                "variant": "High"
              }
            },
            "Dynamic": {
              "max_level": {
                "variant": "High"
              }
            },
            "variant": "Dynamic"
          },
          "vertical_offset_deg": 0.0
        }
      }
    },
    "audio": {
      "game_audio": {
        "enabled": true,
        "content": {
          "gui_collapsed": true,
          "device": {
            "set": false,
            "content": {
              "NameSubstring": "",
              "Index": 0,
              "variant": "NameSubstring"
            }
          },
          "mute_when_streaming": true,
          "buffering": {
            "gui_collapsed": true,
            "average_buffering_ms": 50,
            "batch_ms": 10
          }
        }
      },
      "microphone": {
        "enabled": false,
        "content": {
          "gui_collapsed": true,
          "devices": {
            "Custom": {
              "sink": {
                "NameSubstring": "",
                "Index": 0,
                "variant": "NameSubstring"
              },
              "source": {
                "NameSubstring": "",
                "Index": 0,
                "variant": "NameSubstring"
              }
            },
            "variant": "Automatic"
          },
          "buffering": {
            "gui_collapsed": true,
            "average_buffering_ms": 50,
            "batch_ms": 10
          }
        }
      }
    },
    "headset": {
      "position_recentering_mode": {
        "Local": {
          "view_height": 1.5
        },
        "variant": "LocalFloor"
      },
      "rotation_recentering_mode": {
        "variant": "Yaw"
      },
      "controllers": {
        "enabled": true,
        "content": {
          "gui_collapsed": false,
          "tracked": true,
          "hand_skeleton": {
            "enabled": true,
            "content": {
              "steamvr_input_2_0": true,
              "predict": false
            }
          },
          "multimodal_tracking": false,
          "hand_tracking_interaction": {
            "enabled": false,
            "content": {
              "only_touch": false,
              "pinch_touch_distance": 0.0,
              "pinch_trigger_distance": 0.25,
              "curl_touch_distance": 2.0,
              "curl_trigger_distance": 2.5,
              "joystick_deadzone": 40.0,
              "joystick_offset_horizontal": 0.0,
              "joystick_offset_vertical": 0.0,
              "joystick_range": 1.0,
              "activation_delay": 50,
              "deactivation_delay": 100,
              "repeat_delay": 100
            }
          },
          "steamvr_pipeline_frames": 3.0,
          "haptics": {
            "enabled": true,
            "content": {
              "gui_collapsed": true,
              "intensity_multiplier": 1.0,
              "amplitude_curve": 1.0,
              "min_duration_s": 0.01
            }
          },
          "emulation_mode": {
            "Custom": {
              "serial_number": "ALVR Controller",
              "button_set": {
                "gui_collapsed": false,
                "element": "/user/hand/left/input/a/click",
                "content": []
              }
            },
            "variant": "Quest2Touch"
          },
          "extra_openvr_props": {
            "gui_collapsed": true,
            "element": {
              "key": {
                "variant": "TrackingSystemNameString"
              },
              "value": ""
            },
            "content": []
          },
          "linear_velocity_cutoff": 0.05,
          "angular_velocity_cutoff": 10.0,
          "left_controller_position_offset": {
            "gui_collapsed": true,
            "content": [
              0.0,
              0.0,
              -0.11
            ]
          },
          "left_controller_rotation_offset": {
            "gui_collapsed": true,
            "content": [
              -20.0,
              0.0,
              0.0
            ]
          },
          "left_hand_tracking_position_offset": {
            "gui_collapsed": true,
            "content": [
              0.04,
              -0.02,
              -0.13
            ]
          },
          "left_hand_tracking_rotation_offset": {
            "gui_collapsed": true,
            "content": [
              0.0,
              -45.0,
              -90.0
            ]
          },
          "button_mappings": {
            "set": false,
            "content": {
              "gui_collapsed": false,
              "key": "/user/hand/left/input/a/click",
              "value": {
                "gui_collapsed": false,
                "element": {
                  "destination": "/user/hand/left/input/a/click",
                  "mapping_type": {
                    "HysteresisThreshold": {
                      "value": 0.5,
                      "deviation": 0.05
                    },
                    "BinaryToScalar": {
                      "off": 0.0,
                      "on": 1.0
                    },
                    "Remap": {
                      "min": 0.0,
                      "max": 1.0
                    },
                    "variant": "Passthrough"
                  },
                  "binary_conditions": {
                    "gui_collapsed": true,
                    "element": "/user/hand/left/input/trigger/touch",
                    "content": []
                  }
                },
                "content": []
              },
              "content": []
            }
          },
          "button_mapping_config": {
            "gui_collapsed": true,
            "click_threshold": {
              "value": 0.5,
              "deviation": 0.05
            },
            "touch_threshold": {
              "value": 0.1,
              "deviation": 0.05
            },
            "force_threshold": 0.8
          }
        }
      },
      "emulation_mode": {
        "Custom": {
          "serial_number": "Unknown"
        },
        "variant": "Quest2"
      },
      "extra_openvr_props": {
        "gui_collapsed": true,
        "element": {
          "key": {
            "variant": "TrackingSystemNameString"
          },
          "value": ""
        },
        "content": []
      },
      "tracking_ref_only": false,
      "enable_vive_tracker_proxy": false,
      "face_tracking": {
        "enabled": false,
        "content": {
          "gui_collapsed": true,
          "sources": {
            "eye_tracking_fb": true,
            "face_tracking_fb": true,
            "eye_expressions_htc": true,
            "lip_expressions_htc": true
          },
          "sink": {
            "VrchatEyeOsc": {
              "port": 9000
            },
            "variant": "VrchatEyeOsc"
          }
        }
      },
      "body_tracking": {
        "enabled": false,
        "content": {
          "gui_collapsed": true,
          "sources": {
            "body_tracking_fb": {
              "enabled": true,
              "content": {
                "full_body": true
              }
            }
          },
          "sink": {
            "VrchatBodyOsc": {
              "port": 9000
            },
            "variant": "FakeViveTracker"
          },
          "tracked": true
        }
      },
      "vmc": {
        "enabled": false,
        "content": {
          "gui_collapsed": true,
          "host": "127.0.0.1",
          "port": 39539,
          "publish": true,
          "orientation_correction": true
        }
      }
    },
    "connection": {
      "stream_protocol": {
        "variant": "Udp"
      },
      "client_discovery": {
        "enabled": true,
        "content": {
          "auto_trust_clients": false
        }
      },
      "wired_client_type": {
        "Custom": "alvr.client",
        "variant": "Github"
      },
      "wired_client_autolaunch": true,
      "on_connect_script": "",
      "on_disconnect_script": "",
      "avoid_video_glitching": false,
      "packet_size": 1400,
      "stream_port": 9944,
      "web_server_port": 8082,
      "osc_local_port": 9942,
      "server_send_buffer_bytes": {
        "Custom": 100000,
        "variant": "Maximum"
      },
      "server_recv_buffer_bytes": {
        "Custom": 100000,
        "variant": "Maximum"
      },
      "client_send_buffer_bytes": {
        "Custom": 100000,
        "variant": "Maximum"
      },
      "client_recv_buffer_bytes": {
        "Custom": 100000,
        "variant": "Maximum"
      },
      "max_queued_server_video_frames": 1024,
      "statistics_history_size": 256,
      "minimum_idr_interval_ms": 100,
      "dscp": {
        "set": false,
        "content": {
          "ClassSelector": 7,
          "AssuredForwarding": {
            "class": 4,
            "drop_probability": {
              "variant": "Low"
            }
          },
          "variant": "ExpeditedForwarding"
        }
      }
    },
    "extra": {
      "steamvr_launcher": {
        "driver_launch_action": {
          "variant": "UnregisterOtherDriversAtStartup"
        },
        "open_close_steamvr_with_dashboard": false
      },
      "capture": {
        "startup_video_recording": false,
        "rolling_video_files": {
          "enabled": false,
          "content": {
            "duration_s": 5
          }
        },
        "capture_frame_dir": "/tmp"
      },
      "logging": {
        "show_notification_tip": true,
        "prefer_backtrace": false,
        "notification_level": {
          "variant": "Warning"
        },
        "client_log_report_level": {
          "enabled": true,
          "content": {
            "variant": "Error"
          }
        },
        "show_raw_events": {
          "enabled": false,
          "content": {
            "hide_spammy_events": false
          }
        },
        "log_to_disk": false,
        "log_tracking": false,
        "log_button_presses": false,
        "log_haptics": false,
        "debug_groups": {
          "server_impl": false,
          "client_impl": false,
          "server_core": false,
          "client_core": false,
          "connection": false,
          "sockets": false,
          "server_gfx": false,
          "client_gfx": false,
          "encoder": false,
          "decoder": false
        }
      },
      "patches": {
        "linux_async_compute": false,
        "linux_async_reprojection": false
      },
      "open_setup_wizard": false
    }
  }
}

SteamVR Version: 2.8.8

Install Type:

  • Packaged (exe, deb, rpm, etc)
  • Portable (zip)
  • Source

OS Name and Version (winver on Windows or grep PRETTY_NAME /etc/os-release on most Linux distributions): Windows 11, Version 24H2