AcademySoftwareFoundation / AcademySoftwareFoundation/OpenRV
[Bug]: RVOverlay rendering diagonal line
- Dominant language
- C++
- Stars
- 764
- Forks
- 246
- Avg merge
- 6d 12h
- Merged PRs (30d)
- 13
Description
### What happened?
We use the `RVOverlay` node to make stereo floating windows, using similar property commands to those below. This worked as expected up through `RB-2.2.0-VFX2023`, but as of `RB-3.1.X-VFX2024` renders a diagonal line through the middle of the image.
I've confirmed the issue also exists in the latest OpenRV `main` branch, 4.0.0 (3f56ee12).
To reproduce:
1. `rv [ solid,red=1,green=1,blue=1,width=1920,height=1080.movieproc solid,red=1,green=1,blue=1,width=1920,height=1080.movieproc`
2. Open a python console, and execute the following commands:
```
commands.newProperty("sourceGroup000000_overlay.window:DCinema_left.eye", commands.IntType, 1)
commands.setIntProperty("sourceGroup000000_overlay.window:DCinema_left.eye", [0], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_left.windowActive", commands.IntType, 1)
commands.setIntProperty("sourceGroup000000_overlay.window:DCinema_left.windowActive", [1], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_left.outlineActive", commands.IntType, 1)
commands.setIntProperty("sourceGroup000000_overlay.window:DCinema_left.outlineActive", [0], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_left.firstFrame", commands.IntType, 1)
commands.setIntProperty("sourceGroup000000_overlay.window:DCinema_left.firstFrame", [1], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_left.windowColor", commands.FloatType, 4)
commands.setFloatProperty("sourceGroup000000_overlay.window:DCinema_left.windowColor", [0.0, 0.0, 0.0, 1.0], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_left.outlineColor", commands.FloatType, 4)
commands.setFloatProperty("sourceGroup000000_overlay.window:DCinema_left.outlineColor", [0.13, 0.42, 0.58, 1.0], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_left.pixelScale", commands.FloatType, 2)
commands.setFloatProperty("sourceGroup000000_overlay.window:DCinema_left.pixelScale", [1920.0, 804.0], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_left.windowULx", commands.FloatType, 1)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_left.windowLLx", commands.FloatType, 1)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_left.windowURx", commands.FloatType, 1)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_left.windowLRx", commands.FloatType, 1)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_left.windowULy", commands.FloatType, 1)
commands.setFloatProperty("sourceGroup000000_overlay.window:DCinema_left.windowULy", [804.0], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_left.windowLLy", commands.FloatType, 1)
commands.setFloatProperty("sourceGroup000000_overlay.window:DCinema_left.windowLLy", [0.0], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_left.windowURy", commands.FloatType, 1)
commands.setFloatProperty("sourceGroup000000_overlay.window:DCinema_left.windowURy", [804.0], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_left.windowLRy", commands.FloatType, 1)
commands.setFloatProperty("sourceGroup000000_overlay.window:DCinema_left.windowLRy", [0.0], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_left.antialias", commands.IntType, 1)
commands.setIntProperty("sourceGroup000000_overlay.window:DCinema_left.antialias", [1], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_right.eye", commands.IntType, 1)
commands.setIntProperty("sourceGroup000000_overlay.window:DCinema_right.eye", [1], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_right.windowActive", commands.IntType, 1)
commands.setIntProperty("sourceGroup000000_overlay.window:DCinema_right.windowActive", [1], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_right.outlineActive", commands.IntType, 1)
commands.setIntProperty("sourceGroup000000_overlay.window:DCinema_right.outlineActive", [0], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_right.firstFrame", commands.IntType, 1)
commands.setIntProperty("sourceGroup000000_overlay.window:DCinema_right.firstFrame", [1], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_right.windowColor", commands.FloatType, 4)
commands.setFloatProperty("sourceGroup000000_overlay.window:DCinema_right.windowColor", [0.0, 0.0, 0.0, 1.0], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_right.outlineColor", commands.FloatType, 4)
commands.setFloatProperty("sourceGroup000000_overlay.window:DCinema_right.outlineColor", [0.13, 0.42, 0.58, 1.0], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_right.pixelScale", commands.FloatType, 2)
commands.setFloatProperty("sourceGroup000000_overlay.window:DCinema_right.pixelScale", [1920.0, 804.0], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_right.windowULx", commands.FloatType, 1)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_right.windowLLx", commands.FloatType, 1)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_right.windowURx", commands.FloatType, 1)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_right.windowLRx", commands.FloatType, 1)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_right.windowULy", commands.FloatType, 1)
commands.setFloatProperty("sourceGroup000000_overlay.window:DCinema_right.windowULy", [804.0], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_right.windowLLy", commands.FloatType, 1)
commands.setFloatProperty("sourceGroup000000_overlay.window:DCinema_right.windowLLy", [0.0], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_right.windowURy", commands.FloatType, 1)
commands.setFloatProperty("sourceGroup000000_overlay.window:DCinema_right.windowURy", [804.0], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_right.windowLRy", commands.FloatType, 1)
commands.setFloatProperty("sourceGroup000000_overlay.window:DCinema_right.windowLRy", [0.0], True)
commands.newProperty("sourceGroup000000_overlay.window:DCinema_right.antialias", commands.IntType, 1)
commands.setIntProperty("sourceGroup000000_overlay.window:DCinema_right.antialias", [1], True)
commands.setFloatProperty("sourceGroup000000_sourceStereo.stereo.relativeOffset", [0.0], True)
commands.setFloatProperty("sourceGroup000000_sourceStereo.stereo.rightOffset", [0.0], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_left.eye", commands.IntType, 1)
commands.setIntProperty("sourceGroup000000_overlay.window:HD_left.eye", [0], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_left.windowActive", commands.IntType, 1)
commands.setIntProperty("sourceGroup000000_overlay.window:HD_left.windowActive", [0], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_left.outlineActive", commands.IntType, 1)
commands.setIntProperty("sourceGroup000000_overlay.window:HD_left.outlineActive", [0], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_left.firstFrame", commands.IntType, 1)
commands.setIntProperty("sourceGroup000000_overlay.window:HD_left.firstFrame", [1], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_left.windowColor", commands.FloatType, 4)
commands.setFloatProperty("sourceGroup000000_overlay.window:HD_left.windowColor", [0.0, 0.0, 0.0, 1.0], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_left.outlineColor", commands.FloatType, 4)
commands.setFloatProperty("sourceGroup000000_overlay.window:HD_left.outlineColor", [0.13, 0.42, 0.58, 1.0], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_left.pixelScale", commands.FloatType, 2)
commands.setFloatProperty("sourceGroup000000_overlay.window:HD_left.pixelScale", [1920.0, 804.0], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_left.windowULx", commands.FloatType, 1)
commands.newProperty("sourceGroup000000_overlay.window:HD_left.windowLLx", commands.FloatType, 1)
commands.newProperty("sourceGroup000000_overlay.window:HD_left.windowURx", commands.FloatType, 1)
commands.newProperty("sourceGroup000000_overlay.window:HD_left.windowLRx", commands.FloatType, 1)
commands.newProperty("sourceGroup000000_overlay.window:HD_left.windowULy", commands.FloatType, 1)
commands.setFloatProperty("sourceGroup000000_overlay.window:HD_left.windowULy", [804.0], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_left.windowLLy", commands.FloatType, 1)
commands.setFloatProperty("sourceGroup000000_overlay.window:HD_left.windowLLy", [0.0], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_left.windowURy", commands.FloatType, 1)
commands.setFloatProperty("sourceGroup000000_overlay.window:HD_left.windowURy", [804.0], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_left.windowLRy", commands.FloatType, 1)
commands.setFloatProperty("sourceGroup000000_overlay.window:HD_left.windowLRy", [0.0], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_left.antialias", commands.IntType, 1)
commands.setIntProperty("sourceGroup000000_overlay.window:HD_left.antialias", [1], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_right.eye", commands.IntType, 1)
commands.setIntProperty("sourceGroup000000_overlay.window:HD_right.eye", [1], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_right.windowActive", commands.IntType, 1)
commands.setIntProperty("sourceGroup000000_overlay.window:HD_right.windowActive", [0], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_right.outlineActive", commands.IntType, 1)
commands.setIntProperty("sourceGroup000000_overlay.window:HD_right.outlineActive", [0], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_right.firstFrame", commands.IntType, 1)
commands.setIntProperty("sourceGroup000000_overlay.window:HD_right.firstFrame", [1], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_right.windowColor", commands.FloatType, 4)
commands.setFloatProperty("sourceGroup000000_overlay.window:HD_right.windowColor", [0.0, 0.0, 0.0, 1.0], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_right.outlineColor", commands.FloatType, 4)
commands.setFloatProperty("sourceGroup000000_overlay.window:HD_right.outlineColor", [0.13, 0.42, 0.58, 1.0], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_right.pixelScale", commands.FloatType, 2)
commands.setFloatProperty("sourceGroup000000_overlay.window:HD_right.pixelScale", [1920.0, 804.0], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_right.windowULx", commands.FloatType, 1)
commands.newProperty("sourceGroup000000_overlay.window:HD_right.windowLLx", commands.FloatType, 1)
commands.newProperty("sourceGroup000000_overlay.window:HD_right.windowURx", commands.FloatType, 1)
commands.newProperty("sourceGroup000000_overlay.window:HD_right.windowLRx", commands.FloatType, 1)
commands.newProperty("sourceGroup000000_overlay.window:HD_right.windowULy", commands.FloatType, 1)
commands.setFloatProperty("sourceGroup000000_overlay.window:HD_right.windowULy", [804.0], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_right.windowLLy", commands.FloatType, 1)
commands.setFloatProperty("sourceGroup000000_overlay.window:HD_right.windowLLy", [0.0], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_right.windowURy", commands.FloatType, 1)
commands.setFloatProperty("sourceGroup000000_overlay.window:HD_right.windowURy", [804.0], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_right.windowLRy", commands.FloatType, 1)
commands.setFloatProperty("sourceGroup000000_overlay.window:HD_right.windowLRy", [0.0], True)
commands.newProperty("sourceGroup000000_overlay.window:HD_right.antialias", commands.IntType, 1)
commands.setIntProperty("sourceGroup000000_overlay.window:HD_right.antialias", [1], True)
commands.setFloatProperty("sourceGroup000000_overlay.window:DCinema_left.windowULx", [17.0], True)
commands.setFloatProperty("sourceGroup000000_overlay.window:DCinema_right.windowULx", [10.0], True)
commands.setFloatProperty("sourceGroup000000_overlay.window:DCinema_left.windowURx", [1910.0], True)
commands.setFloatProperty("sourceGroup000000_overlay.window:DCinema_right.windowURx", [1893.0], True)
```
The result will be a black line rendered diagonally through the center of the image:
### List all the operating systems versions where this is happening
Linux RHEL 9.6
### On what computer hardware is this happening?
HP Z8 G4 workstation, nVidia NVIDIA RTX A6000, 40 cores (Intel Xeon Gold 6242R 3.1), 191 GB RAM
### Relevant console log output
```shell
```
### Environment variables
_No response_
### Extra information
_No response_
### Code of Conduct
- [x] I agree to follow this project's Code of Conduct
Contributor guide
Research direction
Start with the RVOverlay rendering path and reproduce the issue using the supplied rv command and Python console property commands on the current main branch. Compare the rendering with RB-2.2.0-VFX2023 and RB-3.1.X-VFX2024; done means the stereo floating-window image renders without the diagonal line.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp, python
- Domain
- computer-graphics
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100