Hacker News new | past | comments | ask | show | jobs | submit login
Isometric Pixel Art (slynyrd.com)
424 points by tosh on Dec 1, 2022 | hide | past | favorite | 87 comments



On a slightly related note, Three.js released a new version recently that has a pixel-shader postprocessor to give 3D scenes a isometric pixel-art feel: https://threejs.org/examples/?q=pixel#webgl_postprocessing_p...


Not the same method, but as I recall the developer of the game A Short Hike did a similar procedure - mostly to allow him to quickly draft 3D models and hide the low-poly models, artifacts, and "glitches" behind the pixel shader.

https://youtu.be/ZW8gWgpptI8 GDC presentation by the developer of A Short Hike

My review: a fun, calming, and enjoyable 2 hour game with a heartwarming ending.


I wonder if there's a way to keep the pixels on the diagonal of the crystal that's moving up and down consistent, i.e. move them all up and down 1 at a time, rather than blend it as the shape moves in fractions of a pixel. It'd help it look more pixel art.


This is one of the more challenging parts of turning 3D scenes into pixel art in real time — making them pixel perfect. There are definitely ways of doing it, but it honestly rarely gets closer to looking like pixel art that’s created pixel perfect to begin with.


Wow that looks indeed amazing. I can imagine a game that's 90% of the time isometric, but you can admire the scene in full 3D if you want.


IMO, Square Enix has perfected this style.

https://www.polygon.com/23278977/live-a-live-hd-2d-remake-sq...


Or even where you play through the first 99 levels thinking it's purely isometric pixel art, then on the final level, for the fight against the boss with perception-warping powers, it unexpectedly changes to a first-person shooter.


It would make a nice surprise.


There's a fair number of pixel-art games that are 3D models passed through a pixel filter. Dead Cells springs to mind.


That looks really cool. Kinda makes me want to do something with it immediately.


is it just me, or is there some weird perspective glitch on the ground grid?


that would be awesome for a Vandal Hearts-inspired game


That's awesome


I'm currently working on an isometric city builder game. It took me awhile to figure out how to depth sort all assets properly and quickly. I have walls that sit on the edge of a tile, i.e. they take up almost no floor space. Since my game will display the interior of buildings, this means the typical approach of sorting everything by the screen.y position (so long as every asset is a cube (or stack of cubes), or broken up into cubes) fails, because the bottom of the wall texture can be a whole tile-size away from the bottom of the asset.

I had to implement "snap to grid" calculations in the background for moving units inside buildings, meaning for the depth sorting algorithm, I pretend they are on a different tile (when needed). Unfortunately I dont have a video of this yet.

As for efficiency, I implemented static quads (for non moving items) and only draw items within the quads on screen. And for units/vehicles, I do a rectangle collision check (unit rectangle compare to screen space rectangle). It's very fast!

You can find progress updates on: https://www.reddit.com/r/Archapolis/

Or a few video logs at https://www.youtube.com/channel/UCUYLstskSLNcSkFg1giTBtQ


> the typical approach of sorting everything by the screen.y position

Shouldn't that be sorting by the world.y position? Ie, northness, rather than northness + altitude = world.y + world.z = screen.y.

I'm not sure about how much it matters for your game particularly (you don't seem to have world.z coordinates), but in general screen-space operations are a recipe for that sort of bugs, and should be avoided whenever practical.


Caveat: I dont have any experience with 3D games, so we may not be speaking the same dialect.

My game is an "old fashioned" isometric game, meaning it is a 2D game through and through. All assets are square (for top down) or rectangle (for isometric) sprites. Of course, since it's pretending to be a 3D game, you have to draw/place the isometric tiles oddly so the inner rhombus (or hexagon, which is what an isometric cube is without shading) are drawn flush, since the graphics engine is working with rectangles. Thus the sprite's rectangles overlap like this: https://i.imgur.com/NTNHvbL.png

In order to simulate a camera looking into a 3D world, I need to draw everything from the top of the screen to the bottom, in that order, so assets with height are drawn over everything behind it (in world space)

For simulating world height (e.g. something flying one tile off the ground), you just need to move the sprite's screen.y position up the sprite's height (i.e. the height of the rectangle) per tile of height.

I have yet to implement terrain height into my game, but I think there are a couple ways to accomplish this.

1.) I can store the part of the asset touching the ground for all assets stacking upwards (like a multistory building). Thus I can keep the depth sorting algorithm I have.

2.) Or I can add the asset's world height multiplied by asset's (rectangle) height to the screen.y position (again, just for the depth sorting part)

For both cases, I may need to add micro adjustments if I need a specific order within the tile stack itself (seems unlikely). edit: this wont be needed unless I have overlap in the stacking, and I wanted to e.g. have something lower down on the stack be drawn over something above the stack, like an antenna or w/e.

Lastly, this only works if all assets are the same size (thus larger ones are a combination of smaller sprites).

Hope I explained this clearly.


> so we may not be speaking the same dialect.

To be fair, I was pilfering loanwords like "screen-space"(adj) from the 3D dialect.

> In order to simulate a camera looking into a 3D world, I need to draw everything from the top of the screen to the bottom

Right, the point I was trying to make was that, technically, you need to draw things from the north edge of the world to the south. If you have a asset with height, you need to draw it at a higher screen position, but also a later time, than a low/short asset that's at norther world position but lower screen position. (Presumably you know that already; I was mostly asking/objecting about confusing the screen position versus the world position.)

> I can add the asset's world height multiplied by asset's (rectangle) height to the screen.y position (again, just for the depth sorting part)

My point was that you'd add[0] the world height plus the world.y position, in order to get the screen.y, but depth sort based only on world.y, independently of height or screen position. That way things that are vertically on top of each other have the same world x and y coordinates (differing only in z), even though they're draw at different screen.y coordinates to provide isometric simulation of height.

0: give or take factors of -1 depending on which way the various coordinate axes go


Ah yeah, SFML removed access to the depth buffer/z height. Should have mentioned that sooner!


May be you should try attaching depth/normal maps to tile. Let shader use zbuffer to sort for you. Similar to https://assetstore.unity.com/packages/templates/systems/2-5d...

Most 2d engines use shader system underneath, it easier to write a shader to solved all the z-sorting problems. Only minimal 3d maths and billboarding(tile) are all you need.


Unfortunately SFML removed that option from their frame work. Otherwise I would!


I enjoyed your latest video update, thanks for posting it.


Hexels (https://marmoset.co/hexels/) is a good piece of software for making isometric pixel art (animated, too!).


Here's what AI can produce these days: https://twitter.com/emmanuel_2m/status/1598042945906581504


This reminded me, I used to have a portfolio site that was built around isometric pixel art.

I thought it was pretty exciting at the time, but it was actually amazing how few people really got it.

Celebrating pixels and pixel art only seemed to make sense to a small group within the overall population, even of portfolio-reviewing folks.

This came as a minor shock to me, as someone who was surfing Pouet and various pixel art sites all the time. :-)


I'd love to check out your portfolio, if it is still online or you have it archived somewhere?

I'm also recently starting to get into pixel art. Maybe you have some cool pixel art galleries or even tutorials you could share with me?

What's your favorite pixel art?


I'll have to look around and see if I can find that old site.

I do remember DA had some really great tutorials, and Pixeljoint was full of neat stuff to look at. Twitter was also a good place to check sometimes.

In a bit less mature vein, here's a 2D pixel sketch I made a while back that came to mind. I was trying to recreate the enthusiasm I had when drawing combat pictures as a kid.

https://www.reddit.com/r/PixelArt/comments/rq1z8d/now_green_...

When I taught art at the local college, I would sometimes give extra credit to students who tried pixel art, and I usually spent some time demonstrating how photoshopping could be done effectively and even quickly at the pixel level.

If you can work effectively with pixels (and maybe beziers in the vector world, not just the manipulation technique but the minimal-node style), you can pick up just about any graphics tool faster. I would even include 3D design tools in that.


EBOY

https://www.eboy.com/pool/everything/1

They are the isotitan. No discussion of isometric pixel art would be complete without it.

Behold their PIXORAMAS!

https://www.eboy.com/pool/~Pixorama/1?q=project


Eboy were the definite leader of the early-oughties isometric pixel art fashion. At first I liked it a lot, but after a while, it went everywhere and became a bit tiresome.

I found it interesting around that time that user interfaces finally got to have less visible pixels due to higher resolutions and full color antialiasing, as well as proper 3D graphics, and yet the retro pixelated pseudo-3D style was trending so much.


You mean like here? Areva 'funkytown' commercial from about 2000:

https://www.youtube.com/watch?v=MNWVmMQKJ1s


I hadn't seen this, thanks! It's quite polished and not very pixelly, but still a great example! Somehow reminds me of the classic "Itsu" video by Plaid (Caution: NSFW!)

https://youtu.be/VDDnuZAL9ps


Early at my last job (~10 employees) they got eboy to do a pixel art portrait of the early crew. I'm pretty sure they paid with shares and that company is doing fairly well these days, I wonder how much they ended up being worth


A few of my own, using ProcessingJS/vectors instead of pixels. The first one randomizes every time you Restart.

https://www.khanacademy.org/computer-programming/iso-buildin...

https://www.khanacademy.org/computer-programming/bricks/4672...


Not criticizing. This is what Ultimate did in Knight Lore https://en.wikipedia.org/wiki/Knight_Lore, and it blew everyone’s minds at the time.


Being Spanish this bring me, of course, to La Abadía del crimen:

https://en.wikipedia.org/wiki/La_Abad%C3%ADa_del_Crimen


Wow, that looks so cool! 1987 game version of The Name of the Rose. Never released outside Spain, how unfortunate.


Wow, did not know that. Also Spanish, myself, btw.


Marble Madness (Mark Cerny and Bob Flanagan) predates that a few months.

With scrolling (different format from the Ant Attack to Head over Heels one).

Edit: and Crystal Castles a few years.

Graphics will be what medium and artist allow; in that phase the implementation of depth management in projection was especially impactful.


Thanks, did not know Marble Madness.


If you're into retro gaming at all, it's a very fun game on 16bit platforms.


Except for the aerial maze. That one's just a pain in the rear.


See also Spindizzy for a similar game, which came two years later and some opine is better than Marble Madness.


I remember Zaxxon, which was one of the first isometric games (1981/1982).

Wikipedia article: https://en.wikipedia.org/wiki/Isometric_video_game_graphics


I can remember playing this in the 80s as well. They had some classic names back then, all Zs and Xs. Got on a freighter ship in China as a teenager in 1991, and the lone arcade machine was Xevious.


I was Googling around to find more examples and found this blog post [1] which gives a nice list.

[1] https://www.eurogamer.net/the-classic-8-bit-isometric-games-...




Good memories. Head Over Heels (C64 here) was one I used to just stare at, waiting for the next animation, musical cue, or room reveal...it was very well put together.

(Oh, and the title always made me wonder if it was a Tears for Fears collab, which seemed like such a rad idea at the time)


Last Ninja on the C64 and (to a certain extent) Spindizzy come to mind as well...


Yes! Ant attack came with the Spectrum if I remember correctly!! I did not recall it. Thanks. It was an incredible game.


It's worth looking into the Filmation engine they invented, which went through 2 iterations before the company was acquired: https://en.wikipedia.org/wiki/Filmation_(game_engine)

As others pointed out Zaxxon and Marble Madness came first, but neither allowed the same sort of interaction with the environment (changing depth and moving other blocks around).


I found this indie game that I LOVED the artwork of a while ago: https://adamstrange.itch.io/viva-mortis

Seeing Knight Lore, it very clearly must have been the inspiration for Viva Mortis. How cool. Thanks for sharing.


If you’re on mastodon, Stefanie Grunwald has been a delight to follow for pixel art. For instance “Autumn Sun, 2019”: https://mastodon.art/@moertel/109427027594690593


Nice guide, but one thing that seems slightly off: All the cubes don't look exactly cube shaped, they need to be slightly taller to look perfectly cube. If for instance a cube is 2x16 px wide, then the height at the side should be approximately 18 px.


I'd say >19px.

19.5959179423 to be precise

16*cos(30)/(sin(30)*sqrt(2)) to be exact.


They're not using 30⁰ though, but rather 1:2 (approx 26.5⁰)

So this is 16 × √2 ≈ 22.6 or 23px, which seems over tall to me


30 deg is not angle of the lines on the projection. It's the angle at which camera must be oriented in 3d space to achieve ratio of 1:2 on projection.


Aah, that makes more sense


https://i.imgur.com/YnHiRTG.png

20px looks good to me, but maybe it's subjective.


Why is that?


One reason is, at least, that because pixel art "isometric" is actually 2:1 dimetric, the vertical axis is slightly less foreshortened than the two horizontal axes.


And why can't it be "true" isometric? Would it look bad?


Yeah it's what you get with 2:1 lines. Actual isometry would require some 1:1 "stairs" on these lines, making them look less nice.


Let's look at top surface. To have it 2 times wider horizontally than vertically in projection camera angle must be 30 deg down from horizon.

Ratio between the foreshortened diagonal of top surface and foreshortened height of the cube would be sin(30)/cos(30) if they were same length in 3d.

Since they don't have the same length in 3d (diagonal is sqrt(2) times longer than cube height) the final ratio in projection between cube height and diagonal comes out to be cos(30)/(sin(30)*sqrt(2)) so more than 19px and less than 20px (a little bit closer to 20px) for the foreshortened diagonal of 16px.


Blender3d>Modifier>Remesh has a "blocks" modifier, it looks pretty nice, and you can set the camera to "isometric-ish"[1] . However. I hope your model topology is straightened out.

I've stumbled across so many SketchUp imported meshes that are just . . hmm . . I don't know the scientific word for it. "Unconventional" is a nice one. Remesh is going to do some weird stuff there.

[1] Camera>Orthographic Camera Rotation> X:54.7, Y:0.000004, Z:45


Somewhat related, there is a Twitter thread about (not quite isometric) hex-grid pixel-art [1].

In a previous thread [2], Oskar Stålberg, creator of the games Bad North, Townscaper, is talking about his use of grids and their dual for procedural tile placement.

Franekk, an amazing pixel artist, is reacting to this that hex-grids are difficult for pixel-art, and later figures out that Oskars trick does indeed work for pixel-art too [3].

[1]: https://twitter.com/Franrekk/status/1485669221711425544 [2]: https://twitter.com/OskSta/status/1448248658865049605 [3]: https://twitter.com/Franrekk/status/1486045914930233351


Conjures happy memories of Populous (1989) and Cadaver (1990) on the Commodore Amiga.


“A Day in the Park” is beautiful


I'm a sucker for pixel art, specially isometric ones. Thanks for the tutorial.

By the way, I have a title editor that supports isometric tiles. Here it is if anyone wants to play with it:

https://victorribeiro.com/tileEditor/?example=01


Does anybody reading this thread have suggestions for open source engines/environments to interact/display isometric pixel art? I've looked at a few game engines and haven't found anything well suited for my purpose.

I'd like to be able to generate 3d diagrams of infrastructure maps using the python based mingrammar "Diagrams as Code" approach: https://diagrams.mingrammer.com/docs/guides/diagram presently this can only do 2d SVG.


I'm trying out midjourney for making game assets for my first game. It gets you 90% of the way there. Cut out, adjust colors in photoshop, scale and animate in Aspite. I don't have art experience, but this gets you good enough results for a hobby project, and better what I could draw.


Reminds of the work that is https://www.youtube.com/c/t3ssel8r/videos is doing. I'm not in any way related, just interested in their work.


I adore t3ssel8r's work, it looks so good


I was reading this old thread on factorio about the projection that is used there oblique/axonometric. Isometric art and equivalents can speed things up, but I wonder how often you run into walls eventually, like factorios trains?


Happy to see slynyrd featured here. Not only is his art great, but he is a nice person and gives quality personal critiques of your pixel art via his patreon on request, of which I'm a member.


Wonderfully written, always lovely to hear someone generously share their craft.

Loads of good iso resources mentioned here in the thread, too. Does anyone know of anything similar but for voxel art/artists?


Shout out to Magicavoxel!


Enjoyed this post.

I've dabbled with regular pixel art, but never quite figured it out and haven't found much in the way of good tutorials.


I wrote a short guide for how I did some of the pixel art in Smol Dungeon. Hopefully I kept it approachable.

https://smoldungeon.com/pixel-art


Love it. I do wish more western RPGs kept with pixel art, especially of the isometric kind.


This article made me bail out of Hacker News and go play Tactics Ogre Reborn.


Love this style. Can anyone recommend some modern games done this way?


Into the Breach immediately comes to mind.


Shouldn't those cubes be a bit higher? They look squashed to me.


That's as tall as it can be in a 44x44 tile. I think you'd need non-square tiles to properly render actual cubes.


Yeah, that's probably it. Although since we are overlapping them vertically there's really no point in keeping them square.


Anyone tried tilting pixels at same angle isometric view is ?


Am I the only one who finds isometric projections uncanny?




Consider applying for YC's W25 batch! Applications are open till Nov 12.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: