Option to not ignore empty canvas area on PNG sprites
Moderator: GZDoom Developers
-
- Global Moderator
- Posts: 1116
- Joined: Mon Jul 21, 2008 4:08 am
- Preferred Pronouns: He/Him
- Graphics Processor: nVidia (Modern GZDoom)
Option to not ignore empty canvas area on PNG sprites
There are several applications for this, but the most common one is when it comes to A_OverlayRotate.
At the moment it's literally impossible to sync rotationof a multi-layer weapon, since even if you try to make all of its sprite use the same canvas size, GZDoom will ignore that and just crop them (I have no idea at which stage it happens or whether it can be controlled in any way). This shifts pivot points in such a way that I can't imagine how they could be synced, which leads to a lot of frustration.
Here's an example of a weapon that can't be rotated due to this:
At the moment it's literally impossible to sync rotationof a multi-layer weapon, since even if you try to make all of its sprite use the same canvas size, GZDoom will ignore that and just crop them (I have no idea at which stage it happens or whether it can be controlled in any way). This shifts pivot points in such a way that I can't imagine how they could be synced, which leads to a lot of frustration.
Here's an example of a weapon that can't be rotated due to this:
-
- Lead GZDoom+Raze Developer
- Posts: 49188
- Joined: Sat Jul 19, 2003 10:19 am
- Location: Germany
Re: Option to not ignore empty canvas area on PNG sprites
I think for HUD weapons this can be disabled these days.
That code was written at a time where all that empty space being rendered really hurt performance quite badly. But even the weakest graphics cards around these days tend to run circles around the hardware this was meant for.
Similar optimizations for in-game sprites and two sided walls still make sense, though, but those are far less critical.
That code was written at a time where all that empty space being rendered really hurt performance quite badly. But even the weakest graphics cards around these days tend to run circles around the hardware this was meant for.
Similar optimizations for in-game sprites and two sided walls still make sense, though, but those are far less critical.
-
- Posts: 13835
- Joined: Tue Jan 13, 2004 1:31 pm
- Preferred Pronouns: She/Her
Re: Option to not ignore empty canvas area on PNG sprites
It should be an option, in my opinion. There's still good reasons for having it. Further, the optimization can still happen if the image has an "anchor point" (similar to the offset) that can either be defined or automatically assumed by GZDoom.
-
- Lead GZDoom+Raze Developer
- Posts: 49188
- Joined: Sat Jul 19, 2003 10:19 am
- Location: Germany
Re: Option to not ignore empty canvas area on PNG sprites
For HUD sprites the optimization is not really needed anymore. When I implemented this stuff my graphics card was a Geforce 6800 which was choking under some mods that had two layers of huge weapon sprites. None of this ever was an issue anymore on the Geforce 8600 I got afterward. Where it is an issue is mostly empty sprites in the world. These can get close enough to the camera that you don't have just two of them, but enough to cause 10-20x overdraw of the entire screen with nothing. And that's still something that's not to be taken lightly on today's lower spec hardware.
-
- Global Moderator
- Posts: 1116
- Joined: Mon Jul 21, 2008 4:08 am
- Preferred Pronouns: He/Him
- Graphics Processor: nVidia (Modern GZDoom)
Re: Option to not ignore empty canvas area on PNG sprites
Another case is pendulum-like world objects (for example, in my case it's hanging bodies that will sway when shot). But that case could be solved but adding a feature that allows setting a pivot point for world sprites.
-
- Posts: 8197
- Joined: Sun Jan 28, 2007 3:55 pm
- Preferred Pronouns: He/Him
- Location: QZDoom Maintenance Team
Re: Option to not ignore empty canvas area on PNG sprites
I'd love to see this implemented.
In the mean time Jekyll, what you can do as a workaround is use cvars to align parts of your weapon so you don't have to restart the game over and over again.
In the mean time Jekyll, what you can do as a workaround is use cvars to align parts of your weapon so you don't have to restart the game over and over again.
-
- Global Moderator
- Posts: 1116
- Joined: Mon Jul 21, 2008 4:08 am
- Preferred Pronouns: He/Him
- Graphics Processor: nVidia (Modern GZDoom)
Re: Option to not ignore empty canvas area on PNG sprites
It could be a flag. Something like DONTCULLCANVAS or DONTCROPCANVAS, maybe. The optimization may not be needed, but I guess disabling the crop unconditionally would probably mess with some of the existing mods, because there's probably a couple out there that used A_OverlayPivot acounting for the crop.Rachael wrote:It should be an option, in my opinion. There's still good reasons for having it. Further, the optimization can still happen if the image has an "anchor point" (similar to the offset) that can either be defined or automatically assumed by GZDoom.
Maybe an extra argument of A_OverlayPivot could work too.
Last edited by Jekyll Grim Payne on Thu Aug 26, 2021 8:27 am, edited 1 time in total.
-
- Posts: 8197
- Joined: Sun Jan 28, 2007 3:55 pm
- Preferred Pronouns: He/Him
- Location: QZDoom Maintenance Team
Re: Option to not ignore empty canvas area on PNG sprites
Correct me if I'm wrong, Graf:
Cropping occurs when loading the resources only for the first time. So it'd have to be something that might require a restart.
Cropping occurs when loading the resources only for the first time. So it'd have to be something that might require a restart.
-
- Lead GZDoom+Raze Developer
- Posts: 49188
- Joined: Sat Jul 19, 2003 10:19 am
- Location: Germany
Re: Option to not ignore empty canvas area on PNG sprites
No. Cropping occurs when rendering them by narrowing the part of the texture that gets mapped. The texture itself is never altered.
-
- Posts: 8197
- Joined: Sun Jan 28, 2007 3:55 pm
- Preferred Pronouns: He/Him
- Location: QZDoom Maintenance Team
Re: Option to not ignore empty canvas area on PNG sprites
And it's done.
Addressing both Graf and Rachael, I took what you two said and combined it into one. There's an option in the menus, and by default, the trimmer is now disabled.
Addressing both Graf and Rachael, I took what you two said and combined it into one. There's an option in the menus, and by default, the trimmer is now disabled.
-
- Global Moderator
- Posts: 1116
- Joined: Mon Jul 21, 2008 4:08 am
- Preferred Pronouns: He/Him
- Graphics Processor: nVidia (Modern GZDoom)
Re: Option to not ignore empty canvas area on PNG sprites
Hey. While I really appreciate the effort, this really isn't what I had in mind at all. I fail to see how a menu option be useful to mod authors.Major Cooke wrote:And it's done.
Addressing both Graf and Rachael, I took what you two said and combined it into one. There's an option in the menus, and by default, the trimmer is now disabled.
The point of my original suggestion was that the author should be allowed to force no trimming on *specific* sprites, so that *specific* sprites would be 100% guaranteed to be correctly positioned when rotated/scaled. Like in the example I posted, where it was just 1 weapon in a whole mod.
Having an option to do this to *all* sprites, and to have the player change that option, seems like a fun debug feature, maybe, but it doesn't address the original issue at all.
-
- Posts: 8197
- Joined: Sun Jan 28, 2007 3:55 pm
- Preferred Pronouns: He/Him
- Location: QZDoom Maintenance Team
Re: Option to not ignore empty canvas area on PNG sprites
Hmmm. The only thing I could think of without expanding the images directly is to set an option via TEXTURES lump. Something as simple as:
...could suffice, if Graf doesn't have a problem with it.
Code: Select all
NoTrim ASDFA0
-
- Posts: 13835
- Joined: Tue Jan 13, 2004 1:31 pm
- Preferred Pronouns: She/Her
Re: Option to not ignore empty canvas area on PNG sprites
As long as the entire image doesn't have to be redefined in the process, because that's a massive pain in the backside.
-
- Posts: 8197
- Joined: Sun Jan 28, 2007 3:55 pm
- Preferred Pronouns: He/Him
- Location: QZDoom Maintenance Team
Re: Option to not ignore empty canvas area on PNG sprites
Agreed. I don't want to have to redefine the whole thing when a simple "NoTrim <name>" can suffice. So that's what I'm shooting for. Like how "remap" or "define" is used. Simplicity without going through the headache of having to jot down all the image sizes for the canvas, etc.
-
- Posts: 8197
- Joined: Sun Jan 28, 2007 3:55 pm
- Preferred Pronouns: He/Him
- Location: QZDoom Maintenance Team
Re: Option to not ignore empty canvas area on PNG sprites
Here we go. I added an option for both inside and out of a sprite definition.