RLVa: @setsphere vision-restriction effects not rendered on Vulkan (port sphere effect pass) #284

Closed
opened 2026-10-04 06:05:19 +00:00 by sky_line · 1 comment
Owner

RLVa @setsphere (the sphere vision effect, RlvSphereEffect) does nothing on the Vulkan renderer. Objects use it to restrict vision: darken, blur or tint everything beyond a distance from the wearer or camera, with tweening between min/max distance and value. It's common in RLV traps, blindfolds and "dimmed vision" items.

Findings (code):

  • rlveffects.cpp keeps all the command/modifier plumbing (mode, origin, colour, dist min/max/extend, params, tween, value min/max).
  • RlvSphereEffect has no render path left: the GL pipeline's sphere pass went with the GL renderer and was never ported to the clean Vulkan pipeline. The command is accepted and nothing is drawn.
  • RlvOverlayEffect (@setoverlay) is still consumed in llviewerwindow.cpp; check whether it renders correctly under VK too.

Port:

  • A clean VK post-process pass after the HDR resolve / tonemap, before UI. It reads scene depth, reconstructs distance from the sphere origin (avatar or camera, per mode), and applies the effect between dist min/max (+ extend), per the RLVa spec.
    • Modes: blend to colour, blur, blur + variable, and any others RLVa defines.
    • Alpha/value tweening.
  • Multiple concurrent sphere effects (several objects) combine like they did in RLVa (check LLVfxManager ordering).
  • Must not be bypassable via graphics settings (it's a restriction). It must also apply in snapshots, as RLVa did, and in mirrors / reflection captures where relevant.
  • Verify against the RLVa reference (Kitty's RLVa docs for @setsphere_*).
RLVa `@setsphere` (the sphere vision effect, `RlvSphereEffect`) does nothing on the Vulkan renderer. Objects use it to restrict vision: darken, blur or tint everything beyond a distance from the wearer or camera, with tweening between min/max distance and value. It's common in RLV traps, blindfolds and "dimmed vision" items. **Findings (code):** - `rlveffects.cpp` keeps all the command/modifier plumbing (mode, origin, colour, dist min/max/extend, params, tween, value min/max). - `RlvSphereEffect` has no render path left: the GL pipeline's sphere pass went with the GL renderer and was never ported to the clean Vulkan pipeline. The command is accepted and nothing is drawn. - `RlvOverlayEffect` (`@setoverlay`) is still consumed in `llviewerwindow.cpp`; check whether it renders correctly under VK too. **Port:** - A clean VK post-process pass after the HDR resolve / tonemap, before UI. It reads scene depth, reconstructs distance from the sphere origin (avatar or camera, per mode), and applies the effect between dist min/max (+ extend), per the RLVa spec. - Modes: blend to colour, blur, blur + variable, and any others RLVa defines. - Alpha/value tweening. - Multiple concurrent sphere effects (several objects) combine like they did in RLVa (check `LLVfxManager` ordering). - Must not be bypassable via graphics settings (it's a restriction). It must also apply in snapshots, as RLVa did, and in mirrors / reflection captures where relevant. - Verify against the RLVa reference (Kitty's RLVa docs for @setsphere_*).
Author
Owner

Done in cb9a6befab (RLVa @setsphere effects on Vulkan). Closing.

Done in cb9a6befab (RLVa @setsphere effects on Vulkan). Closing.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#284
No description provided.