Game
Battery Golem
9 years ago

Fun with shaders


At some point of a game programmers lifetime, they will eventually bump into shaders. This post is made to try inspire other by viewing that shaders don’t really have a super steep learning curve.

For this project I had virtually zero experience with shaders so I had to keep it very simple. But it didn’t stop me from trying. Like look at this silhouette, I coded it with no experience with shaders in less than 1 hour.

5d0b0779f1291.gif

Hey, that’s pretty good!

The algorithm behind it is pretty simple. It uses stencils and post-processing scripts to first check, one pixel at a time, if it’s obstructed by anything (also referred to as depth-testing) and if so, store a value 1 in the stencil for that pixel, and if not store the value 0 for that pixel in the stencil. Then after that, we go through the screen (again, 1 pixel at a time) and check where the stencil is 1 and where it’s 0, and then tint the 1-pixels brighter.

Boom and bap, and we have a silhouette shader.


Another fun shader is the wavy grass. For this we can use a vertex shader. In the vertex shader we want to move the vertices around, based on some wind.

My approach was to simulate wind via the sinus math function. The calculation was something similar to this:

		
			vertex.x = sin(worldPos.x + time * speed) * normY;
		
	

Where worldPos.x is the global world position, so not all grass straws wave at the same time. And the multiplier normY is a normalized local y position for this vertex, where the bottom is normY = 0 and the top of the mesh is norm = 1. This way, it waves more at the top than at the bottom.

With just some playing around with the numbers, starting with this:

5d0b077be82ea.gif

And eventually ending up with something like this:

5d0b077d98b16.gif

Moral of the post

Shaders may seem complicated, but what they really is is just some code that you write, that instead of running on the CPU, it runs on the GPU. Just another language to learn.

Never stop trying new things. Experimenting with shaders is one of the best things you can do, because you can find such awesome results. Examples:

5d0b0781a721c.gif
5d0b07825cabc.gif
5d0b078417859.gif

Now for the lolz, here’s the battery golem with the wavey grass shader (inside spoiler):

5d0b078580826.gif

Thanks for reading. And don’t be afraid to try scripting shaders, just give it a shot!



0 comments

Loading...

Next up

"Thanks guys for endless hours of fun." 👍

(My first fan art. Read the article, please.)

#sonic #mario #photoshop

Quantum precognition is one of the most powerful cards. End game cards & equipment. Demo/alpha build boss is no match for this deck.

So here's the first of the zodiac signs i will make for the next weeks.

Horror WIP A track that will be featured in a future horror game soundtrack! Stay tuned!

Likes appreciated ✌️

#gamedev #composer #horrorgame #indiegame #IndieGameDev #soundtrack

A house I've built a while ago. :)

It nicely separates the snowy biome from the grassy one.

It's built with painted Ebonstone.

Spaaaace~

These are background sprites I've created for a game I'm working on at school ^w^ Click on the post to see how the sprites connect. You won't regret it! (personally, I think it's pretty heheh)

Drawn in Piskel using my mouse. Whaddya think?

not the greatest house, but it's a house! :D

It's old and it glows. Experience the nostalgic tile-matching puzzle game in it's new glory!

Game : https://gamejolt.com/games/colortris/499578

ColorTris gameplay - Peach squares

______________________

Music : https://soundcloud.com/the-musical-ghost/ghost-kozmos-tetris-the…

Distrust - HUMERUS (with dirty shade) Papyrus isn`t small. It's possible that I didn't draw him well, but he crouched down and bent towards us. I'm still bad at moments like this