GRASS-BASED STEALTHING. SWORD-BASED FIGHTING.

The original game-jam spec for BOG was pretty straight-forward:

  • You can cut the grass with your blade.

  • Hide in uncut grass by ducking.

  • Wiggle uncut grass to track your position while hidden and moving.

  • Look out for the wiggles of your opponent.

  • The wind also wiggles the grass; it can serve to disguise your wiggles, and those of your opponent.

  • Dash to move quickly; avoid harm, surprise your opponent, or knock them off the edge if they've crept too close to it.

  • Kill your opponent before they kill you.

GROWING BOG’S GRASS

Originally the grass in BOG was prototyped using a procedural mesh (above), built from an array of data points that responded to events in the game. This worked well enough as a prototype, but I’d always wanted to try more of the workload over to the GPU.

I eventually converted that mesh over to a geometry shader that could expand all of the grass's aesthetic behaviour (bend direction & amount, length, rotation, colour, etc.), and rebuilt the system that had handled the grass to instead be driven by texture data (first visual test below).

With Unity’s compute shaders I could compare frames of texture data and output changes between them as a buffer, which could then be used to generate new visuals (grass being cut, or disturbed, or bent past a certain threshold, etc).

This allowed me to recreate those original states & state changes, but with a huge performance gain, while also making iterating on those effects faster and more visually intuitive.