Michael Kato

Blog

Blog Feed

Unity 2D Game

February 11, 2026

This project started as a way to refresh my Unity knowledge, especially 2D, which I hadn’t worked in before. I tried to make as much as possible dynamic and interactive. The main focus was adding visual flair and polish to the interactions, otherwise known as “juice”.

Highlights

  • Dynamic tentacles play procedural idle animations, then seek out and eat loot drops.
  • Custom shaders including dissolve, fog swirl, and god rays.
  • Custom particle systems using Shuriken for impact, pickup, and ambient FX.
  • Everything is animated

Technical Approach

The tentacle system uses a chain of IK targets that smoothly interpolate toward loot drop positions. The fog swirl shader combines scrolling noise textures with a radial distortion pass. The card flips used to operate on a state machine, but that turned out to have a surprising amount of overhead and wasn’t worth it for just a couple of states, so I moved it to C# only.

Tools

Unity 2D, C#, Shader Graph, Shuriken for VFX, Inverse Kinematics, State Machine

Procedural Mesh Effects with Blender Geometry Nodes

June 10, 2025

I wanted to create an effect that could take any arbitrary mesh and convert it into something that looked like an art installation or sci-fi hologram.

The entire effect is non-destructive and works on any mesh.

How It Works

The pipeline is built with Blender’s Geometry Nodes and a little shader magic. It works like so:

  1. The input mesh is converted to a point cloud.
  2. Each point connects to its closest neighbors via splines.
  3. The splines are subdivided and random noise is applied to create an electric feel.
  4. A cylinder is extruded along each spline path.
  5. A color gradient is applied along the Z axis.
  6. The stored color attribute is piped into the emissive channel via shader nodes.

The Node Graph

The geometry node setup.

Geometry Nodes setup in Blender

The slowest part is the inner loop (in blue) where each point finds its nearest neighbors, which is currently an O(n^2) distance check operation. I might optimize it using the new raycast node, but it still ran real-time-enough for me.

Tools

Blender 4.5, Geometry Nodes, Shader Editor