Vimukthi Weerabahu
2025 March

Skyward

Through experimentation I contributed to bringing many ideas to life that were not widely considered possible in Minecraft 1.21.3.

I was brought on to this project to make the experience more polished and visually interesting. To accomplish this I worked on features that heavily depend on GLSL shaders added to the resource pack (which gets loaded by the Minecraft client) and a server-side Paper plugin written in Java.

This event needed to be readily accessible therefore client-side requirements needed to be minimized and various popular client configurations needed to be considered such as Lunar Client, Sodium and Apple silicon to name a few.

A playthrough of Chapter 1 and 2.

Cutscenes

0:00

Clips from Sparkour.

We developed a system which is able to play arbitrary videos smoothly. The system was utilized by interleaving the gameplay with cutscenes to enhance the story telling.

Execution

0:00

Does not stretch the video when aspect ratios don't match.

We were provided with rendered videos which we ran through a script we wrote to encode the video data in to a format the shader would be able to easily decode and play.

The first approach we took for playback required a high bandwidth internet connection. Through some experimentation we found a much better approach which not only does not rely on the network but is also not performance intensive for the client or server.

To further minimize network requirements we came up with a simple lossy compression scheme for the video data. Whilst it is theoretically possible to compress the data even further we chose not to because we had to ensure the decoding remained as fast as possible to keep the playback smooth.

Party HUD

0:00

Clips from Chuck Nasty.

Implemented a HUD to show the players in your party. Avatars of the players along with their names and tags are rendered. When F is pressed the HUD becomes interactive, allowing the party leader to kick members from their party or the allowing party members to leave their party.

Execution

0:00

Buttons have hover and click animations.

Players are able to view the HUD while moving around. Players are also able to view their surroundings while interacting with the HUD. These features ensured the seamless integration of the party HUD in to the rest of the experience.

0:00

The HUD was built to be fully resizable to be able to fit individual player preferences.

The HUD can theoretically display all sorts of content, and it is not limited to static content either. For example the party HUD renders formatted text, player avatars, icons, buttons, solid color backgrounds etc.

0:00

The HUD always positions itself correctly for all resolutions.

To keep things optimized we built a fully custom system that only sends the minimum amount of packets possible to keep the HUD updated. The system is inspired by React; not only by their approach to synchronizing the virtual DOM with the real DOM, but also by their approach to UI components and their state management.

Objectives HUD

0:00

Clips from Chiefy.

Objectives players need to complete to progress are shown in this sleek, smoothly animated HUD. When playing the HUD gets updated live to reflect the current objective progress.

0:00

A closer look at the HUD animations.

First person animations

0:00

Clips from Bufo and Block Rat.

Players have the ability to scan items they come across and we decided to create a first person scanning animation to accompany this. The same system was also used for the menu opening and closing animations in the lobby.

Execution

0:00

Players are able to move freely while the animations play.

The animations are capable of involving both of the player's hands. For example this can be utilized to create a reload animation for a weapon.

0:00

Animations do not get clipped by the environment.

The animations respect the vanilla view bobbing preference players have configured. It is also capable of respecting their main hand preference.

0:00

Animations are FOV independent.

Skies

0:00

Clips from Bufo and Block Rat.

Throughout the experience the player travels to various places around the universe. For each place we rendered a unique sky. The skies are made up of layers, which all move at varying speeds.

Escape screen animation

0:00

This is not a feat that is possible to achieve with Minecraft resource packs natively, therefore a shader was utilized. The shader was provided access to all the frame data which it then goes through at a fixed speed to bring the animation to life.

Website

0:00
The home page.

A small website was made to provide instructions on how to play the experience.

0:00
The "How to play" page.

Related

All work

Contact

Emailme@vimhax.com

GitHubVimHax

LinkedInVimukthi Weerabahu

X / Twitter@VimHax