Jump to content

  • Log In with Google      Sign In   
  • Create Account


#ActualRavyne

Posted 22 July 2013 - 02:39 PM

Dealing with resolution is difficult if you want pixel-accurate results like you're accustomed to seeing on a Gameboy or one of the older consoles.

 

There are a few approaches -- 

 

Firstly, if you absolutely have to have pixel-perfect results between effective resolutions, then you'll need to create two distinct sets of sprites (EDIT -- that is, if you also want highest-available resolution, or a smaller resolution that isn't a common denominator of 1080p and 720p) -- One designed for 720p, and another designed for 1080p. I would either derive both from the same source image at 2x 1080p scale (scaling down by half for 1080p, and by 2/3rds for 720p), that will give you good-quality output from the same source. Alternatively, you can create both sets by hand at each resolution -- that'll look best, but be essentially 2x the work through production and all subsequent revisions. Keep in mind that you'll need to adjust for logical pixels of 2x2-4x4 real pixels if you want that pixelated look, but full-resolution, hand-drawn raster art is nice too, and still looks very distinct from vector-art a'la flash.

 

Secondly, you could just create high-res, 2x-1080p artwork like in the first version, but let your engine do the scaling at run-time, either by direct-scaling in your projection matrix, or by rendering to a smaller back-buffer that uses the logical resolution (the one that matches the blocky pixels naturally) and then up-scaling it for output. The later approach can give better results since you can apply your own scaling method, rather than relying on the GPU to do it (probably a box-filter), and optionally can apply algorithms like scale-2x if you like.

 

Finally, if the desired amount of pixelation lines up, certain lower-resolutions scale up perfectly to both 720p and 1080p -- for example, if designed for a logical resolution of 640x360, then it scales perfectly by a factor of two to 720p and by a factor of three to 1080p. If that's a good match for the desired amount of pixelation, this is definately the way to go because it gives pixel-perfect results in both cases, with no additional work, without starting from over-size sprites, and the scaling can be done in-engine. 640x360 is probably the only practical resolution if you want to use every pixel on the screen in both modes (320x180 is the next one down, and that's really pixelated already). Others are decent candidates if you can accept some letterboxing (say, 420x240 -- although that's not perfectly 16:9 either).

 

 

Then, there's the whole other issue of whether or not the game could simply be made to adapt to different resolution using the same art -- basically, you just see more of the world at once. This is a viable approach too, you just have to be aware of how it can impact competitive (especially) and cooperative play, as well as how it impacts level design.


#1Ravyne

Posted 22 July 2013 - 02:38 PM

Dealing with resolution is difficult if you want pixel-accurate results like you're accustomed to seeing on a Gameboy or one of the older consoles.

 

There are a few approaches -- 

 

Firstly, if you absolutely have to have pixel-perfect results between effective resolutions, then you'll need to create two distinct sets of sprites -- One designed for 720p, and another designed for 1080p. I would either derive both from the same source image at 2x 1080p scale (scaling down by half for 1080p, and by 2/3rds for 720p), that will give you good-quality output from the same source. Alternatively, you can create both sets by hand at each resolution -- that'll look best, but be essentially 2x the work through production and all subsequent revisions. Keep in mind that you'll need to adjust for logical pixels of 2x2-4x4 real pixels if you want that pixelated look, but full-resolution, hand-drawn raster art is nice too, and still looks very distinct from vector-art a'la flash.

 

Secondly, you could just create high-res, 2x-1080p artwork like in the first version, but let your engine do the scaling at run-time, either by direct-scaling in your projection matrix, or by rendering to a smaller back-buffer that uses the logical resolution (the one that matches the blocky pixels naturally) and then up-scaling it for output. The later approach can give better results since you can apply your own scaling method, rather than relying on the GPU to do it (probably a box-filter), and optionally can apply algorithms like scale-2x if you like.

 

Finally, if the desired amount of pixelation lines up, certain lower-resolutions scale up perfectly to both 720p and 1080p -- for example, if designed for a logical resolution of 640x360, then it scales perfectly by a factor of two to 720p and by a factor of three to 1080p. If that's a good match for the desired amount of pixelation, this is definately the way to go because it gives pixel-perfect results in both cases, with no additional work, without starting from over-size sprites, and the scaling can be done in-engine. 640x360 is probably the only practical resolution if you want to use every pixel on the screen in both modes (320x180 is the next one down, and that's really pixelated already). Others are decent candidates if you can accept some letterboxing (say, 420x240 -- although that's not perfectly 16:9 either).

 

 

Then, there's the whole other issue of whether or not the game could simply be made to adapt to different resolution using the same art -- basically, you just see more of the world at once. This is a viable approach too, you just have to be aware of how it can impact competitive (especially) and cooperative play, as well as how it impacts level design.


PARTNERS