• Hey Guest! Ever feel like entering a Game Jam, but the time limit is always too much pressure? We get it... You lead a hectic life and dedicating 3 whole days to make a game just doesn't work for you! So, why not enter the GMC SLOW JAM? Take your time! Kick back and make your game over 4 months! Interested? Then just click here!

Scaling assets, or scaling the screen

S

seanm

Guest
Hey, I'm considering just scaling up all of my assets individually, because the motion looks much smoother if you scale up the assets individually.

But I don't know which one looks better in terms of the rotated sprites.



I personally like the first and the last one, but the one in the middle is going to be the easiest to use in terms of how the motion looks, and how much effort it takes.


Appreciate any feedback you can give; so long as your feedback isn't, "why would you scale the assets seperately, thats stupid, don't do that"
 

RangerX

Member
I would say 3, 1 and 2 would be my order of preference. But Siolfor got a point there, number 1 might look good in motion.
 
S

seanm

Guest
When I say in motion, I specifically mean the player, not the rotated sprites. The physics of the player is super blocky in the first example, because the view is scaled up 4x.

Basically, the only reason I want to do this is specifically because of the players jump arc. When the player jumps and then slows down at the apex, it looks super jerky.

So the motion goes from least smooth, to most smooth, from left to right. in my images.

I might just bite the bullet and scale all of my assets up 4x individually.
But this also means that the lowest native resolution I could offer would be 1920x1080, and I would have to downscale and risk artifacts if someone wanted a lower resolution.

@RangerX I don't know if you have any tricks for smoothing out the jump arc without going through all of this hassle.
This issue is not a problem for a game like hyper light drifter, as the player isn't moving in such a floating point manner in that game. But the jump arc really bothers me when I scale low res art up.
 

RangerX

Member
Well, my first reaction here is to be surprised. GMS allow sub-pixel movement so I wonder why you get that jerkyness in the first place. Unless your magnifying a very low res game there. In that case you might want to double its assets size, double everything. (am doing that in my game, sort of a pain but its having its uses)
 

Ninety

Member
Normally not a fan of the "scaled low-res pixel art" style, but your assets are so small you'll need it. If you're scaling assets anyway, you might as well go for the highest level of visual fidelity, so I'd go with 3.
 
M

Mystborn

Guest
Definitely not the middle one. It just doesn't look that good to me. If the sprites were naturally bigger, then the first style would be the best (to keep a uniform pixel size), but since your sprites seem so small I would recommend the third one.
 
S

seanm

Guest
Thanks for the replies everyone, I'm going to do the following.

1) start out with unscaled assets.
2) scale the view, resize the application surface, and window.
3) allow the view, and the player to move in sub pixel amounts, then round based on the amount of scale.

Code:
draw_sprite(...., round(x*global.scale)/global.scale,round(y*global.scale)/global.scale ...)
So lets say I'm scaling by 4x.
this kind of rounding allows the player/view to move in increments of 0.25. When scaled up, the player can move in increments of 1, instead of 4.
So its 4x smoother.


This lets me have mostly pixel perfect scaling (as any view scaling cannot guarantee nothing will distort; surface stretching can guarantee this however), and allows everything to move as smoothly as it possibly can.


cheers everyone.
 

Yal

šŸ§ *penguin noises*
GMC Elder
I definitely prefer #1 - having upscaled assets rotated gives you "diagonal pixels" and it just looks fake.
 
J

Jaqueta

Guest
I'm not sure if this would work because alpha the alpha channel is weird but...
Maybe you could draw the player in a surface, and upscale the surface? In theory, it would look like pixels, but still would look smooth for the movement.
 
S

seanm

Guest
@Jaqueta would be the same thing as upscaling the sprites individually.

@Yal @amusudan
Unfortunately, with the first option, the player looks awful when in motion. Im scaling the screen up 4x, and so the player can only move in units of 4, which looks incredibly blocky when jumping.

If the view was snapped to the player it would look fine, but the view follows a point in between the player and the mouse, so you can really see how blocky the players movement is.
 
A

amusudan

Guest
Well, it's really up to you! Maybe you could post a gif so we could see the blocky movement for ourselves? :)
 
S

seanm

Guest
There's no way you could see what's happening in a gif. @amusudan

But here is basically what the difference between the first scaling method, and the last scaling method look like.

It looks super jerky and gross.

The original cave story looks like this. It was a great, successful game, despite looking like there was always an earthquake going on in the game.
But I'm trying to avoid this problem.

http://host-a.net/u/seanmombo/smoothnessDemo.exe
 

Nocturne

Friendly Tyrant
Forum Staff
Admin
No.3 ftw. This is 2016! Yes, "pixel purists" will say you can't have rotated pixels, but that's just a (imho) retro snob attitude. I see a LOT of new games that use pixel art to great effect but that use rotated pixels. I see no issue with it and the games still look amazing. Also note that it's incredibly easy to do. Just double (or triple or quadruple) the size of the app surface n startup and it'll do it for you. 1 pixel becomes 4 (or more) "sub-pixels" on screen. So if the NATIVE game is 160x120 for example, and the view PORT is 800x600 then make the app surface the same size as the view port (which would be a five times scale up and give you lovely and clean rotated pixels).
 
M

mariospants

Guest
Agreed with Nocturne on the whole rotated pixels thing: it's a look/style now, it's not a restriction. Unless you're emulating or making a game to specific constraints, go for it (I know I am).
 
Top