RyanB - VFX Sketchbook

A bunch of random stuff

This is a shader I made for UE4 to create Apollonian circles. Not sure what I will use this for, maybe a magic blast or something like that. No textures used, just math nodes. Built with nodes for portability, no custom node used.

4 Likes

Bunch more UE4 mathy shaders. Inspired by stuff on shadertoy generally. Building a library of these sort of things.

2 Likes

A water effect made for Quest VR. I tend to do a lot of mesh based vfx on the Quest to avoid overdraw.

3 Likes

Started doing a lot more stuff in shaders with grids. Needed a solution to create a lot of detail with a single draw call. I can convert these dots into stars or textured things, whatever. Lots of uses.

A bigger example with connecting lines

2 Likes

Some procedural shapes made in UE4. There’s an issue with the polar coords I haven’t fixed yet. I’ll probably use it to warp from one shape to another in a spell or magic something or other. We’ll see.

3 Likes

I dabble in other engines in my spare time. For Pico-8, I make particles using an entitiy component system with pooling. The lead particle drops a single pixel trail behind it with a semi-random lifetime. I can assign a gradient to change the colour over lifetime. Everything written in Lua.

2 Likes

Some more examples of mesh-based vfx for mobile VR. Need to keep the overdraw low so can’t use a lot of overlapping particles. I make a lot of shaders to exploit packed channels, different blends, etc.

Explosions are mostly meshes with a few particles mixed in.

Purple laser thing I made for a VR project. I had to make the beam a flat quad for some reason, would have preferred to use a cylinder.

1 Like

Some vfx made for mobile VR, mostly using animated UVs with packed textures. A few particles mixed in.

1 Like

Made a material where I can spherify the UVs and add fake lighting. All of this can be mapped on a quad or plane. This cuts down on the poly count and lets me add more stuff. I can mix other mapping with the sphere UVs. Also added warping parameters. I plan to use this as a center element for magic and sci fi projectile vfx among other things.

5 Likes

Made some weird procedural polyp material. No idea what I would use this for but it can be adjusted into lots of dynamic cellular patterns.

2 Likes

Made a streak material, will use it as a mask or for little bits shooting out, probably on radial UVs. Added warping so it can look like rain streaks.

5 Likes

Decided to learn how to use p5js for some personal projects that may need some web stuff. I prefer using entity component systems so I decided to see if I could make it work with p5js. Seems to work. I also use an object pool instead of creating/destroying entities.

2 Likes

This material is made with a packed texture. The R and G channels of the texture are the stone texture. Colour is gradient mapped to the grayscale in each channel using a three colour lerp. The B and A channels are used for detail and are also gradient mapped.

Using colour lerps lets me do things like palette swaps across entire levels or even the entire game.

The material is not PBR, it is unlit. It uses a vector for lighting instead of baked lighting or a realtime lighting system. This is separate from the colour lerps and I could reuse the colour lerps in a PBR material if a project required it.

The glowing section of the material gets a position and intensity from the game and can be used for things like hit impacts, spells, gameplay hints, etc. It uses a sphere mask to mask off the glowing area. It is done in world space so if multiple wall sections, floors, ceilings, etc. are using a material with the same variables, then it will look like it seamlessly happens across multiple sections. It also avoids the cost of transparency and artifacts since it all happens within a single material.

I could also stack these masked fx in the material so there could be multiple fx. For example, one for impacts, one for reaction to player touch and one for environment fx.

Animated UVs use a counter to drive the animation instead of time. This prevents errors on hardware that uses low precision time functions. Generally, we shouldn’t use time anyway but usually we don’t see the errors in high precision because nobody leaves their game running for days.

Creating materials like this allows me to make the entire world interactive and reactive so if the player touches something the material can instantly react. I can use it to react to weapons, player position, hand position, NPCs and anything else just by giving the materials an intensity and position. This makes the world dynamic instead of static. Some materials I set up have world position offset affected so the surface ripples or wobbles instantly on impact or touch.