Skip to main content


fuck it

making a block game

#GameDev

reshared this

in reply to Eniko Fox

making sure all my coordinate systems and shit are lined up properly
in reply to Eniko Fox

I dont know why but I couldn't stop having -Z be forward so in the end I had to flip the Z axis for any translation and I probably fucked something up somewhere but I couldn't figure it out and i ran out of patience 🙃
in reply to Eniko Fox

Ok I guess I was assuming XNA and DirectX used the same handedness but apparently XNA is right handed even though DirectX is left handed and I'd like to take this opportunity to ask *what the fuck*
in reply to Eniko Fox

So if I want +Z to be forward I have to flip the axis in the renderer? That's obnoxious. But better than -Z being forward in world space since that would confuse the shit out of players
in reply to Eniko Fox

ok one more before i head to bed just to show that it can do more interesting things than just large rectangles made up of smaller cubes

#GameDev #IndieDev #IndieGame

in reply to Eniko Fox

so @Farbs said something about beveling the edges in my block game and that got me thinking and looking at some old 2D terrain art i did

i'm thinking i may stray from minecraft's aesthetics a bit and use this as a sort of style guide

#GameDev #IndieDev #PixelArt

Christine Lemmer-Webber reshared this.

in reply to Eniko Fox

okay so this may seem a little unorthodox but bear with me here

what if

shell texturing in block game

in reply to Eniko Fox

Can't decide if using shell texturing is a great idea or a stupid idea
in reply to Eniko Fox

i feel like i could soften the terrain significantly through no more than normals along the edges of blocks so i made this mockup in photoshop and i think this could actually work?
in reply to Eniko Fox

if i kind of artfully place the camera to cut out the cornflower blue void surrounding this tiny chunk of terrain on all sides its almost starting to look like a real game 😁
in reply to Eniko Fox

trying to add a faux edge bevel through normals and actual lighting equations is proving extremely challenging and i'm starting to give serious thought to manually baking the lighting into the textures
in reply to Eniko Fox

after endless futzing about and tweaking i think i have something that may just be workable for this faux bevel effect i want

(note that there's a "bevel" between adjacent blocks cause i haven't made the effect dependent on the block's neighbors yet)

in reply to Eniko Fox

I dunno I'm just not feeling the actual lighting model. Its not like minecraft exactly has realistic lighting anyway: blocks are lit from two opposite sides!

But the problem with baked lighting is if you have non symmetrical blocks you have to make 4 versions of each face to get all the lighting. Not that that's super onerous

Also if I made something like a lectern that would be a lot of work to do manually for each orientation

in reply to Eniko Fox

On the other hand when I made isometric games I'd have to make two of everything to get the lighting right and I didn't mind that so much so maybe I'm overthinking it
in reply to Eniko Fox

ok i figured out a reasonable way to fudge the normals so i won't have to manually bake lighting. basically what i do is set the normals of the edges so that they point towards where the adjacent faces are pointing (90 degree bend) and then i lerp from the face's lighting factor to the neighbor's lighting factor

that gives me the result on the left. i tried just having regular, actual normals, but it creates artifacts like on the right (its accurate that it shades it like that but it looks bad)

This entry was edited (2 months ago)
in reply to Eniko Fox

i was worried the corners would look too sharp without modification but honestly the smooth gradient does a great job without blunting the corners
in reply to Eniko Fox

took all day but i've optimized the vertex format for blocks *and* implemented auto-bevelled terrain. shown without textures to make the bevelling clearer
in reply to Eniko Fox

doing a side by side with my style guide i think i'm getting there. i'll probably wanna do some fancier color grading on the lighting though, and i want outlines, but the soft rounded feel of the terrain is definitely there now even though its still all cubes
in reply to Eniko Fox

i've brought back the grass, which is actually an obj model

see i made an engine before and appropriated it for this project. it could load obj models (with normal maps) so at first the blocks in my world were actually loaded from obj models

that's why i had to redo a buncha stuff to add the bevelling, since i had to generate the faces myself

in reply to Eniko Fox

I should probably start linking up chunks before I do much else so I don't wind up having to deal with a ton of "this block's neighbor is in another chunk" situations later
in reply to Eniko Fox

had a silly idea for block outlines using the bevel system. i take the dot product of the vector from the camera to the world position with the normal to determine if the bevel normal is pointing away from the camera, then add an outline based on that. there's some outlines where they don't belong but i can get easily rid of those

... i don't hate it? 🤔

in reply to Eniko Fox

lol the outlining has more than doubled the code in my fragment shader

texturing, lighting, and bevelling: 12 lines of code

just doing outlines: 19 lines of code

in reply to Eniko Fox

Not to pat myself on the back too hard but it's really nice how good this is turning out, like, aesthetically. It's not exactly trivial to make graphics look good when you only have a single 16x16 texture >_>
in reply to Eniko Fox

On the other hand I guess it would be fair to say these graphics are looking a little...... muddy

Eh? Eh? Eh? 😁

in reply to Eniko Fox

i'm commander shepherd and this is my favorite spot on the citadel

(seriously i cannot get enough of looking at this particular subsection of a screenshot i took of the outlines in my voxel engine)

in reply to Eniko Fox

debating what i wanna do with grass in my engine. atm i have a block shader, and a model shader. i feel like i could efficiently implement shell textured grass by making a shell texturing shader, but i also don't want to balloon the number of different shaders i need to render all my terrain 🤔

i could just use the model shader, but it becomes a pain in the ass to implement shell textured terrain then

i could try and combine it with the block shader but they both do really different things

in reply to Eniko Fox

hmm if i want to add bits to the shell texturing so it doesn't look bad viewed side-on i kinda have to go the model route

though i figured out i can get away with only 6 variations to get all the edge transitions 🤔 that could be doable if a bit annoying

in reply to Eniko Fox

i'm overthinking the grass thing so i've made the textures required to make the shells for a 16-tile transition and i'll just generate the model for each of those 16 and implement them in the engine and move on so i don't wind up blocked by choice paralysis

if i want i can always just change it later

This entry was edited (2 months ago)
in reply to Eniko Fox

here it is compared to my style guide image. how did i do, chat?

i probably wanna pull the grass away from the edge a bit more because it obscures the outlines, but i'm pretty happy with this overall

in reply to Eniko Fox

At the moment the wild grass is actually a block on top of the dirt (like carpets in minecraft) but I'm thinking maybe I should change it so that the grass is part of the dirt block that sticks out above it as it were. That way things can occupy the same block as the grass without deleting it, like shrubs, flowers, or other non-opaque blocks
in reply to Eniko Fox

i've got columns of chunks working, but they're not really connected at the moment so i gotta fix that next

#GameDev #IndieDev #ProcGen

in reply to Eniko Fox

chunks connect properly now! with bonus shot of the sprawling cave systems beneath the surface

i made a staged chunk generation system where chunks can request their neighbors be generated but only up to a certain stage, which keeps the generation from going infinitely in all directions, because the requested stage must always be lower than the chunk's current stage of generation

#GameDev #IndieDev #ProcGen

in reply to Eniko Fox

you can see through the sides of chunks now because the chunks (correctly!) note that their underground sides faces are obscured. it's just that they're obscured by chunks you can't see because they haven't fully been generated yet
in reply to Eniko Fox

decided to add some simple caverns so it's not noodle caves all the way down
in reply to Eniko Fox

can i just say its interesting what happens to a block game aesthetic when you're not afraid of following oldschool pixel art techniques like minecraft seems to be
in reply to Eniko Fox

it's such a massive difference to jump around the world and bump into walls now compared to being a disembodied camera clipping through the terrain
in reply to Eniko Fox

i uh, may or may not have spent several hours today just exploring and jumping around caves in my block game

anyway look at this cool cave i found!

#EniBlockGame #GameDev #IndieDev #ProcGen

in reply to Eniko Fox

i added placing and removing blocks, so i did what one does in such a situation and built a stone starter house

#EniBlockGame #GameDev #IndieDev #ProcGen #PixelArt

in reply to Eniko Fox

immediately stuck on implementing lighting because i can't decide whether to store lighting values per block, per face, or per vertex per face
in reply to Eniko Fox

It is pitch black. You are likely to be eaten by a grue

(grass temporarily removed for convenience while working on lighting)

#EniBlockGame #GameDev #IndieDev #ProcGen

in reply to Eniko Fox

ok, got some basic lighting going on, now to refine it

(surface flattened temporarily for convenience)

#EniBlockGame #GameDev #IndieDev #ProcGen

in reply to Eniko Fox

i mean, this *is* a bit better than standard minecraft, but... idk. i don't think it's enough better?

may have to try an entirely different approach and fall back to this if i can't work anything out

bonus cave shot with lighting

#EniBlockGame #GameDev #IndieDev #ProcGen

in reply to Eniko Fox

me: grass is back

my followers: what?

me: *loading a pistol and jumping back into block game* grass is back

#EniBlockGame #GameDev #IndieDev #ProcGen #PixelArt

in reply to Eniko Fox

Hey now if anyone tells you go touch grass you can tell them to kindly 🖕 off. 😁
in reply to Eniko Fox

i still have to separate the sunlight and regular light into two separate layers but once i do that i can add stuff like a day night cycle

tbh kind of extremely done with working on the lighting system at this point :'D

#EniBlockGame

in reply to Eniko Fox

decided to compare the effects of block game's 3x3 neighbor lighting, where direct neighbors get a -1 lighting, diagonals get -sqrt(2), and corners get -2, with minecrafts simpler -1 for direct neighbors lighting

in minecraft's you can see banding whereas there's not much in block game's model. but also block game's propagates further in caves despite having the same radius, because in mc's model most of the brightest light along cardinals is lost

#EniBlockGame #GameDev #IndieDev #ProcGen

in reply to Eniko Fox

i was curious why i didn't feel like i needed to add smooth lighting to block game and it turns out doing the diagonals smooths it out enough it's not really noticeable (i may still add it later down the road)

#EniBlockGame

in reply to Eniko Fox

if i set the layers to exclusion you can see the difference. darker is more equal and brighter is less equal. there's dark parts along the cardinals from the light source, and near the player at the edge of the light radius, but in between (along the diagonals) they differ greatly

#EniBlockGame #GameDev #IndieDev #ProcGen

in reply to Eniko Fox

People keep asking me where I intend to take block game, gameplay wise, and the very short answer is: minecrafty (highly item centric) sandbox rpg with a living world, like ultima or elder scrolls meets minecraft

#EniBlockGame

in reply to Eniko Fox

You may say "Eniko this sounds like a tall order" and you'd be right but on the other hand I've been training for this for literally 30 years

I'm ready

#EniBlockGame

in reply to Eniko Fox

omg i'm an idiot. i had a separate list of sky colors and sun strength scalars for the terrain to do the day night cycle

then i realized i could just convert the colors to HSL, and set the sun strength scalar based on the min, current, and max brightness of the sky colors

so `sun = (cur - min) / (max - min);`

did that and it works great :|

#EniBlockGame #GameDev #IndieDev

in reply to Eniko Fox

okay that's much better 😊 there's some light bleed that i need to fix but i think i might know what's causing that

either way this is a good stopping point for the day

#EniBlockGame #GameDev #IndieDev

in reply to Eniko Fox

fixed the light bleed issue

so basically block game has faux global illumination now. i realized minecraft style lighting is kinda like bounce lighting, so i figured if i added shadow mapped direct lighting it'd look sorta like GI and i think it turned out real good!

you can see that both methods separately lack something, but when combined the scene feels pretty grounded 😁

#EniBlockGame #GameDev #IndieDev #ProcGen #PixelArt

in reply to Eniko Fox

i probably won't add a similar system for sunlight because what i'll probably do is just add shadow mapping for the sun at some point. that way sun shadows can move throughout the day

then i'll have a full direct lighting + shadows + bounce light solution for block game :3

#EniBlockGame

in reply to Cassandrich

And I don't even mean to imply this imposes a modern technical requirement. Amazing things can be done with lighting that's designed-in or painted-on by whoever (or whatever process) builds the world. However it's done, it makes such a difference to the feel.
in reply to Eniko Fox

just to be clear: this lighting doesn't use any realtime raytracing technology or gpu compute buffers or anything like that. in fact it doesn't use the gpu *at all*

you could have this lighting while running the game on a literal potato. i could run this on my 2012 laptop (that's my acceptable performance target)

#EniBlockGame

in reply to Eniko Fox

changed direct lighting in block game so it can be progressively performed over multiple frames, which means i can allot a fixed time budget per frame for it

shown here artificially slowed down and with indirect light hidden to show the process more clearly

#EniBlockGame #GameDev #IndieDev

in reply to Eniko Fox

i still have some small optimizations to do to direct lighting and small bugs to fix (literal corner cases agghhh!! 😫) and i'll probably tweak the lighting colors and skybox a bit here and there but i'm considering the lighting system done now and i'm excited to move on to adding more *stuff* to the game

#EniBlockGame

in reply to Eniko Fox

someone asked what the caves look like with the different light layers so in this post and a couple replies imma post screenshots from the same cave earlier with direct + indirect, direct only, and indirect only light

#EniBlockGame #GameDev #IndieDev #ProcGen #PixelArt

in reply to Eniko Fox

grass and surface height are back and, oh yea, i'm really liking this lighting model with the shadows cast on the grass and everything 😙👌

#EniBlockGame #GameDev #IndieDev #ProcGen #PixelArt

in reply to Eniko Fox

adding leaf blocks, but my engine may need some new code for blocks with transparent textures :'D

#EniBlockGame #GameDev #IndieDev #ProcGen #PixelArt

in reply to Eniko Fox

I've got some shell texturing ideas for leaf blocks. will have to see if/how they work out in practice

#EniBlockGame

This entry was edited (1 month ago)
in reply to Eniko Fox

had a rough time with partially transparent blocks (leaves) in block game but i got there in the end. while i was dealing with the lighting system (again 😩) i also optimized the direct lighting setup from like 20ms to 2ms so that's nice

really hope to god im properly done with the lighting system this time, so i can move on to making trees

#EniBlockGame

in reply to Eniko Fox

hmm the side shells are fine when they visually detach from the blocks but the top/bottom ones aren't. bringing them closer in would help but make the leaves less fluffy (doubling the distance from the block of the outer shells is what really helped the fluff)

and i don't really wanna add another in-between shell. maybe i can make the top/bottom shell pointy like a pyramid? should be able to do that with 4 triangles, right? 🤔

edit: ok yeah the pyramid thing works

#EniBlockGame

This entry was edited (1 month ago)
in reply to Eniko Fox

oops i forgot to update the initial sunlight pass to take into account semi-opaque blocks so the trees didn't have proper lighting

that's ok though that means i get to post more trees 😁

#EniBlockGame #GameDev #IndieDev #ProcGen #PixelArt

in reply to Eniko Fox

took some advice from @runevision and modulated my blue noise threshold with simplex noise and now trees are pleasingly clumpy

#EniBlockGame #GameDev #IndieDev #ProcGen

in reply to Eniko Fox

so the leaves don't look as good far away as they do from up close. trying something new and could use some feedback

#EniBlockGame

in reply to Eniko Fox

did something very lazy as a last ditch effort and actually.... i kinda like this one

#EniBlockGame

in reply to Eniko Fox

a quick polish up of the textures (i made the shell geometry 1.5x as large without increasing the texture size, but i have now) i think this is definitively the winner

it's fluffy up close and actually much fluffier from far away, and the outline is still there but not overbearing

#EniBlockGame #GameDev #IndieDev #ProcGen #PixelArt

in reply to Eniko Fox

still works fine with 3 top/bottom fronds instead of 5 so i'll go with that
in reply to Eniko Fox

ok well. that's a good enough pause point for the day. this is looking quite lovely if i do say so myself :3

#EniBlockGame #GameDev #IndieDev #ProcGen

in reply to Eniko Fox

oh hey all the surface enhancements really help the view when you come out of caves 😁

#EniBlockGame

in reply to Eniko Fox

couple days late but, happy 1 month birthday block game! what a difference a month of development makes

#EniBlockGame #GameDev #IndieDev #ProcGen #PixelArt

in reply to Eniko Fox

still taking it easy since i'm recovering from a week of huge migraines. i've come up with one design pillar for block game: all structures generated must tell a story. since there's no plot or dialogue, this will have to be done through environmental storytelling

why yes, i have been watching a certain majuular video recently, why do you ask?

#EniBlockGame

in reply to Eniko Fox

optimized chunk generation and graphics rebuilding, and added basic visibility culling to skip drawing chunks behind the camera

even though all the code is still synchronous the terrain generation now keeps up with the camera even at a visible chunk radius of 16, and i get 60-90 fps with a radius of 12 even on my weak pc when not generating chunks (30-40 otherwise)

and this is what a visible chunk radius of 12 looks like:

#EniBlockGame #GameDev #IndieDev #ProcGen

in reply to Eniko Fox

did the important work of switching index buffers over from 16 bit indices to 32 bit indices in the unlikely but potentially possible case of a vertex buffer having more than 65k vertices in it

this change is invisible so have a screenshot of a cool hole

#EniBlockGame #GameDev #IndieDev

in reply to Eniko Fox

I'm gonna come up with a nickname for this style I keep seeing you posting here: Lushcraft
in reply to Eniko Fox

I never really liked the Minecraft aesthetic much, but I like this a lot. It's very compelling.
in reply to Christine Lemmer-Webber

@cwebber i think minecraft always had a very sharp edges programmer art aesthetic that was functional but not like, amazing

i'm trying to much more evoke the feeling of being dropped into a 3d version of a 16-bit era rpg

Christine Lemmer-Webber reshared this.

in reply to Christine Lemmer-Webber

@cwebber throwing my pretty-unqualified opinion in here: voxelush is my fav because it kinda sounds like voxel-ish and (looking at the plant) it's not purely voxel-based so it's voxel-ish but also lush and... meow

Christine Lemmer-Webber reshared this.

Unknown parent

mastodon - Link to source
Eniko Fox
@deshipu yes cause they're floating above it