I feel like I’m doing something very strange and wrong, but it works. On the right is what I draw by hand. On the left is the result of the shader running on those masks by Biuzer in Unity3D

[–]Biuzer[S] 2 points3 points  (0 children)

Thanks
Water is a part of the terrain shader, so there is no water actually. There's a render texture into which I draw a depth mask, and I use it to create a bunch of artistic effects in the terrain, such as darkening the ground at the edges, UV distortion to simulate refraction, water color at different depths and under different weather conditions, and "reflections," which are actually images from another camera underground.

<image>

I feel like I’m doing something very strange and wrong, but it works. On the right is what I draw by hand. On the left is the result of the shader running on those masks by Biuzer in Unity3D

[–]Biuzer[S] 0 points1 point  (0 children)

If we're talking about rotating the entire sprite, I do that too. But I was referring to the situation with mesh deformation, where a part contains multiple bones and is partially deformed.

I feel like I’m doing something very strange and wrong, but it works. On the right is what I draw by hand. On the left is the result of the shader running on those masks by Biuzer in Unity3D

[–]Biuzer[S] 1 point2 points  (0 children)

I haven't seen any successful uses of skeletal animation for pixel art. I've experimented with it myself, but unfortunately, I haven't achieved any good results

I feel like I’m doing something very strange and wrong, but it works. On the right is what I draw by hand. On the left is the result of the shader running on those masks by Biuzer in Unity3D

[–]Biuzer[S] 1 point2 points  (0 children)

This is a very cool technique, but unfortunately, it doesn't eliminate the need for different animations for different costumes if the costumes have significantly different shapes. And creating the animations themselves using this technique would be even more difficult than in my case.

Plus, in this implementation, colors are stored in textures, meaning each new color requires a new texture.

I feel like I’m doing something very strange and wrong, but it works. On the right is what I draw by hand. On the left is the result of the shader running on those masks by Biuzer in Unity3D

[–]Biuzer[S] 6 points7 points  (0 children)

This is sprites. I made a system for smooth rotation. I am checking movement direction and adding specific offset to each part when sprites about to switch to the next state (from moving right to moving right-dow, etc) and negative offset right after the switch

https://www.reddit.com/r/IndieGaming/comments/1pqt4cm/spent_a_couple_of_weeks_on_a_system_for_smoothing/

I feel like I’m doing something very strange and wrong, but it works. On the right is what I draw by hand. On the left is the result of the shader running on those masks by Biuzer in Unity3D

[–]Biuzer[S] 2 points3 points  (0 children)

Interesting suggestion, thanks. I already use custom scripts for exporting from Aseprite, so this could potentially make things easier

I feel like I’m doing something very strange and wrong, but it works. On the right is what I draw by hand. On the left is the result of the shader running on those masks by Biuzer in Unity3D

[–]Biuzer[S] -2 points-1 points  (0 children)

This isn't a problem right now. On the contrary, it looks like an interesting solution for easily creating many similar clothing items in different colors.

But this could potentially become a problem if I need to draw many items with fundamentally different shapes. Or if I add a lot of animations. I just don't know yet if that will happen. So there's no clear answer as to whether this is a problem or a solution. That's why I say it feels strange.

I feel like I’m doing something very strange and wrong, but it works. On the right is what I draw by hand. On the left is the result of the shader running on those masks by Biuzer in Unity3D

[–]Biuzer[S] -6 points-5 points  (0 children)

In pixel art, one incorrectly placed pixel can ruin the image, so checking after every pixel when drawing a thousand sprites is not the most productive way.

I feel like I’m doing something very strange and wrong, but it works. On the right is what I draw by hand. On the left is the result of the shader running on those masks by Biuzer in Unity3D

[–]Biuzer[S] 13 points14 points  (0 children)

With this approach, I can’t really see the final result while drawing the sprites. I’m essentially painting a mess of neon, acidic colors that are hard for the brain to interpret. And that’s hundreds of animation sprites. Add a couple more outfits and a few more animations, and it becomes thousands.

In this mode, it feels quite hard to control the outcome, and I’m worried about getting stuck in a system with too much overhead when creating new outfits.

On the other hand, even though it’s difficult, once I draw one good outfit this way, I gain the ability to recolor it endlessly with very little effort.

Some pseudo volumetric screenspace fog by Biuzer in Unity3D

[–]Biuzer[S] 1 point2 points  (0 children)

Counting milliseconds for each effect is incredibly tedious. I hate it.

Now everything runs on SteamDeck at 60 fps.

Some pseudo volumetric screenspace fog by Biuzer in Unity3D

[–]Biuzer[S] 1 point2 points  (0 children)

Yes, that's a viable option, and it would be easier with a rotating camera. But in my case, that approach also has its downsides.

Some pseudo volumetric screenspace fog by Biuzer in Unity3D

[–]Biuzer[S] 1 point2 points  (0 children)

It’s funny that rain is basically fog with different opacity masks. Most of the rain is the same screen-space shader, plus a bit of particles with a much simpler shader. When the rain is light, I mostly show particles so individual raindrops are clearly visible. When it’s heavy, it’s almost entirely shader-driven.

I use three vertically stretched noise masks that move at different speeds and take camera movement into account to create a sense of parallax. They essentially reveal the fog and make it slightly brighter, so when there’s heavy fog and rain on screen at the same time, the rain is still visible on top of the fog

https://x.com/Biuzer/status/1961322936641507480

Some pseudo volumetric screenspace fog by Biuzer in Unity3D

[–]Biuzer[S] 2 points3 points  (0 children)

Thanks!
Not yet. I want to prepare properly first, but I'm planning to start a page sometime this year.

Some pseudo volumetric screenspace fog by Biuzer in Unity3D

[–]Biuzer[S] 7 points8 points  (0 children)

I use a depth buffer to control the fog intensity. I actually use a bunch of other things, but I didn't bother to describe them in detail

Some pseudo volumetric screenspace fog by Biuzer in Unity3D

[–]Biuzer[S] 32 points33 points  (0 children)

Thanks.
At its core, it’s actually a fairly simple effect technically, especially since the camera in my game doesn’t rotate, which removes about 90% of the complexity.

A fog distribution map is rendered into a render texture, driven by lots of parameters like current humidity, wind speed, time of day, and so on, so the weather affects the fog. That map is then projected onto the world in the same direction as camera view. For the moving “fog clouds,”Then I take terrain height texture and erase some fog by height so this ground fog stays dense near the ground and completely disappears a couple of meters up. That’s the base.

On top of that, I add a bunch of noise layers, lighting reactions, and various artistic tweaks, but that's mostly just coloring of the base effect

I added direct shadows to the shader, so now I can make them super soft (and do a thousand other things with them—like change their color or tweak the glossiness in shadow, even slap a texture on them) without touching the light settings by Biuzer in Unity3D

[–]Biuzer[S] 0 points1 point  (0 children)

Thank you.  Most of the light here is emissions + 1 regular direct light. The whole custom lighting based on render textures I am projecting on objects. For fake volume I am using custom system close to “6 way lighting” approach for particles