This journal documents my journey in choosing and exploring a project idea for my 2025 Master's project in head media design.
- 2024-12-10 First-day ideas
- 2024-12-16 Sport design/sketches
- 2024-12-17 Preparations for test day
- 2024-12-18 Test day
- 2025-01-08 Poster / concept art
- 2025-01-09 Workplace set up
- 2025-01-13 VRChat for testing
- 2025-01-15 First VRChat test
- 2025-02-01 VRchat volleyball inspiration
- 2025-02-04 //Alternative idea//
- 2025-02-13 VRChat Water study
- 2025-02-20 Underwater filming in the lake
- 2025-02-25 Mid-Crit presentation
- 2025-02-26 VR physical rigs and other physical devices
- 2025-02-27 Links for future references
- 2025-02-28 More refs from tutor
- 2025-03-03 VRC player rotation
- 2025-03-22 VRC Finball - playtest 0.1
- 2025-03-25 On Echo Arena
- 2025-04-03 Technical difficulties
- 2025-04-04 How to Log
- 2025-04-09 Planning / Making lists
- 2025-04-15 Cave Environement
- 2025-04-16 Mid-crit feedback
- 2025-04-17 Environment moodboard
- 2025-04-18 New list of priorities
- 2025-04-19 Environmental modeling workflow
- 2025-04-21 On optimisation
- 2025-04-22 Opt-in and team making mechanic
- Link Title
- Link Title
- Link Title
- Link Title
- Link Title
- Link Title
- Link Title
I'd like to create an innovative sports game for VR.
-
On VRChat?
High latency but very social and accessible. -
With FBT?
Good for innovation, but not many people have FBT. -
New locomotion system?
With insights from the locomotion vault. -
Physical installation (harness tied to the roof)
FUN! Not release-ready but good for the exhibition context.
For the exhibition, I'd like to have an FBT physical installation, but I could also develop a version for standalone VR users on VRChat. It depends on how the game will be designed.
Test Day Ideas: - Try having people play the sport IRL with a paper ball/paper props. - Prototype barebone mechanics in Unity to test with VR. - Get others to try the harness (if it's safe enough). - Do field research by asking people about what sports they like and why.
To Do:
- Publish and host the exergame vault to reference existing VR sports games.
- Add a VRChat tag and gather examples of VRChat worlds for exercising.
- Sketch initial sport mechanics ideas (as many as possible).
- Analyze why I like football so much.
- Because in solo sports, I have no motivation to win. I need to play with a team in games that require teamwork, like football and volleyball.
- Test the harness setup in class (get climbing ropes)!
I like the fish-people idea.

In a fairly large area, about 5x4m, there will be goals on each side, a ball, and color-coded players. Hopefully, there will be three players on each team.
We tested playing a physical version of FinBall with paper props.
3 versus 3, area of 6x3m approximately.
It worked well and was fun; the pace had to be slowed because of the small space (small steps).
The teams wanted to take a team picture before the game = team pic feature! (It reminds me of VRChat Volley, which gives you pictures of you playing at the end of the game, and they are local, so each player gets pictures of themselves playing.)
Because it worked so well and people enjoyed the physicality, making an AR game has been suggested. I like the idea, but we would lose the 3D space and such. It would be a very different sport but still enjoyable. Eventually, I would like to make a team AR game meant to be played in a large space.
I tried to emulate the "currents" element that randomly pushes people, and it was well received; it seems to make for a fun, unpredictable element.
The teams naturally and quickly started quick-passing to teammates and making strategies while trying to position themselves better, assigning defense and attack, etc.
The slow pace and Freeze Tag element worked in encouraging team play.
I had to test quickly, but it was a lot of fun for the players again. They liked being restricted in speed, which they thought was fun. They liked the idea of the fish being alive and moving independently when it's not held or thrown.
Someone asked if, in the ocean setting, the frozen people would "drown" or, more like, drop to the bottom slowly because they're not swimming anymore. I thought it was interesting. That idea made me think about how being frozen is a bit like being electrified/stunned. So, the characters could look like eels. A few ocean creatures have interesting defense mechanisms: eels, jellyfish, the inflated fish guy, etc. I want to look into that for the design.
They also wondered how you hold the ball if you're swimming and how the physics will differ in VR because it's underwater physics.
I tested being frozen for 5 seconds vs. 10 seconds, and it seemed too boring to be stuck for 10 seconds. In that setting, the timer worked better than being touched by a teammate because it was hard to know if we were being touched.
But everyone enjoyed the game, and some other students wanted to try it too, so it seemed to have sparked interest.
I thought the poster would be a good occasion to visualize what I imagine the "fish-people avatars" to look like while they play underwater.
For working and prototyping in VR, I will need:
- Strong Windows PC (brought my own to class).
- Router (borrowed from Media Design).
- 4G SIM card (because the school internet is too restrictive, brought my own).
- Quest 3 (borrowed from Media Design).
- Quest 3 accessories for comfort (brought my own Quest strap).
I've been looking into the UdonSharp documentation to see if I could make a swimming system for moving in VR, and it seems possible, so I decided to prototype it in VRChat.
The point of VRChat is that I can get my online friends to test it directly in-game, with their VR, from wherever they live, and I can record their feedback or reactions in the game.
I've uploaded a test world into VRChat with the swimming code I had been working on. I then invited my friends to test it with their VR on the VRChat platform. It worked quite well.
Here it is; anyone can enter it in VRChat, but it doesn't work without VR. LINK
- To swim, you had to "push water" with your palms.
- I added a ball to test throwing it to friends.
- There were some gray spheres that turn yellow if you activate them. The idea is that you can swim to each sphere to activate it, to test/practice swimming.
- Four people were able to join and test. They are all used to VR and play VRChat regularly.
Feedback:
- It works to swim with the traditional swimming movement, but people were quickly drawn to a simpler move of waving their hands in the direction they want to swim.
- One issue I'll have to fix is that when people lose tracking, they get "ejected" far away since the code calculates the difference in hand position frame to frame. If the hand gets teleported, it means that distance was big, and it will apply a big movement force.
- The same applies to the "respawn" action.
Overall, the swimming was very fun to use, and it didn't cause too much sickness because of how the players stay upright and don't rotate upside down.
Some additional observations:
- We could not throw the ball very far. I will need to reduce the drag or increase the force applied.
- The networking was laggy for the ball because I was not updating the position each frame.
- When we reach to grab the ball, the palm faces the ball, and so it makes us swim away from the ball.
To Do for the Next Test:
- Fix the yeeting when teleporting/losing tracking.
- Make it so we can activate/deactivate a swimming mechanic, so that I could have several versions of the swimming in the test world and we can compare them.
- Code some other versions of swimming, like one with rotation.
- Fix the ball: network, reaching, speed/drag.
- Create a "game area."
- Build and publish a "fish-person" avatar and make it available in the world.
- Prototype a "goal" that shows points when the ball goes through.
I've played this volleyball game in vrchat with my friends and it was super fun !
-> usually games in vrchat have a latency issue but the creator found solutions that worked really well. I will need to find similar tricks for my game to work on VRchat.
That's what the creator said when I asked her on twitter.
After the discussion with Douglas an other project idea came up and I'm just putting it here for reference.
The idea would be to start from specific muscle training movements, and make VR mini-games around those moves, 1 game per 1 training exercise. also would be cool to do that with rehabilitation. An other way to gamify exercising...
Anyway moving on !
I looked around in VRChat worlds at how people have made swimming more immersive.
Video link:
Click the image to view the video
Notes:
- blur at distence
- atmospheric color (whiter/bluer at distence) / blue tint
- CAUSTICS ! (light textures)
- light beams
- water noises
- muted/ echoey voices
- whale noises and such in the background
- lots of small fish swimming randlomly
- tall weed
- corail and sea plants
- Jellyfish !
- big rays
- splach noises, when swiming or jumping in water
- tiny bubbles when moving
- bubbles coming up from the sand
- slow movements, in the plants and particules
Click the image to view the video
I threw my phone in the lake while filming, here are my observations:
Underwater, sound is muted but not weak: strong in the low end but lacking sharpness. It feels engulfing, with no clear direction, as if the sound wraps around you. There’s a thickness to it, like it’s being pushed through a dense medium.
Attenuation - High frequencies fade as sound travels.
Refraction - Sound bends due to water temperature and pressure changes.
Absorption - High frequencies disappear faster than low ones.
Impedance mismatch - Water transmits sound differently than air, altering perception.
Non-directionality - Sound seems to come from everywhere.
Low-pass filtering - High frequencies are reduced, leaving deep, muffled tones.
Reverberation - Continuous, diffused echoes rather than distinct reflections.
it was really cool to see how the caustics look in the real world. you can see how the shape of the water surface bends the light into moving patterns, and the color spectrum.
I was able to study how the particles move and show the movement of the water. We can't really see the water movement but i was suprised to see that there are always particles making the flow visible.

the surface had a reflection of the bottom like a mirror.
The side of the sun had those light beams, subtle but mery much there. it looks beautiful.
in all the scenes without exeptions you can only see what's relatively close, as things ger further they fade into the color of the water.
Wednesday 26.02 - 15h20
"Finball VR" is a project focused on developing a new VR swimming locomotion system for a team-based underwater sport.
The goal is to create an immersive and enjoyable experience where players can engage in social, competitive gameplay within a virtual aquatic environment.
By exploring innovative locomotion techniques and experimenting with DIY physical devices, the project aims to improve the immersion and movement of players.
Additionally, it will explore the potential of VRChat as a platform for social sports, despite its limitations, allowing for interactions and community.
The project addresses the challenge of creating a fluid, natural movement system for VR, particularly in team sports settings, as well as designing a new sport specifically with VR’s advantages and limitations in mind.
I've had a lot of interest in VR rigs for a long time but none of them seemed that good. I don't pretend I could find a solution, but in my case, which is specific to swimming, It would be interesting to design some kind of physical instalation to make the swimming more immersive.
This guy's "weightless machine" would be my dream:

Here are images of physical devices that are used in medical applications such as rehabilitation.
However, i felt uneasy Researching those because some of these people cannot walk or move in real life and im out here trying to move in VR with devices when I could simply do all those movements in real life without aid? Feels a little disrespectful.
And a rig would not be compatible with mass adobtion/accesibility of my game, however it's still interesting to look into. The game should be designer to play without it but should be compatible with it if I get interesting results.
With a rig I would want to add feet trackers but that would be a bother to gear up someone for an exhibition setting. Peharps some other tracking solution could work for this like AI body traking via video, if filming from underneath. it could be part of the device and seamless for users.
A physical device however is also a lot of work and I doubt I could do both the device and the game....
I should focus on the game first.
If I manage to make the game fast and simple I could do the physical stuff :-)
Fading at distance effect: I found this shader for a vrchat compatible performent fog https://github.com/frostbone25/Unity-Baked-Volumetrics
Collection of all the useful links for VRChat dev: https://github.com/madjin/awesome-vrchat
Caustics: https://booth.pm/en/items/3666514 (1,200 JPY so about 7.21 Swiss Franc)
fins: https://booth.pm/en/items/5429910
VRC swimming:
https://hirabiki.booth.pm/items/2127684

world to visit: https://vrchat.com/home/world/wrld_c87d9e7a-d46a-4ca4-9077-a6322ac0f7e7/info (smash contest, a smashing game)
underwater effects: https://booth.pm/en/items/3263895
I was struggling to make a swimming mechanism in which you can rotate upside down, but then I found out that you simply canot rotate the player in VRC. however, there are ways as usual and what people seem to be doing is making the player "sit" on a rigidbody. and that rigidbody can rotate.
I found that out on this guy's page about a 0 gravity system.
https://tokiwa-carlo.booth.pm/items/5596315
Translation:
■ Mechanism: Essentially, it’s just allowing you to sit on a Rigidbody that doesn’t experience gravity or air resistance. In addition, it follows the colliders of your hands and feet so you can interact with walls and other objects.
His way of interacting with wall is interesting too. when swimming you should be able to push yourself on objects too
First reactions to swimming:
"wooow"
"I hate that"
"weeeeee"
After a bit:
"ooOOoooh I get it now"
"I smashed my microphone again"
"I'll need to stand up for this"
- Since I deactivated swimming for the limb near the ball, you can only use one hand for swimming when holding the ball. I don't mind it, however, because the player should pass.
- It is indeed very difficult to aim, so I should add some kind of aim assist.
- Someone said it's awkward when they want to move their arms but don’t want to move. Then someone else said there could be a toggle, but it would kind of ruin it.
- I quickly forgot which goal was mine and which one I needed to aim for.
- The player with a bigger avatar was swimming much faster because of arm length.
- Players were quickly exhausted. I need to better encourage passing or make the arena smaller. Aim assist should make passing easier.
- If I teleport players to a position, they will start the game well-placed, and it might encourage positioning (otherwise, all players go to the ball in a cluster).
- A friend mentioned "Echo VR" when I explained the game, then he mentioned "Quidditch" because of the "ball moving on its own" idea.
- Create an opt-in system to make the teams.
- Non-VR version of swimming.
- Players need a visual cue to differentiate the teams.
- Visual cue of which goal belongs to which team.
- Ensure that all players can reach the same speed with effort, regardless of avatar size.
- Teleport players to start positions.
- Start countdown or visual cue.
- Fix the issue where holding the ball lets you score continually without the ball respawning.
- Make the goal's visual cue global.
- Add aim assist.
- Start adding sound! Provide a way for players to add music while waiting for the soundscape because having no sound feels weird.
- Add sound cues for goals and countdowns.
- Add obstacles and basic external forces for testing, such as currents and algae.
- Implement "freeze tag," perhaps with different versions.
There's a community reviving the game, and through TikTok videos, they ended up getting more users in the Discord community than the original Discord had.
This VR sport is special, and it continues to grow in popularity even post-shutdown.
Right now, they have 38,988 members, and it's growing every day.
I did manage to join an Echo game through their system, and I tried to talk to people in the Echo Discord and in-game, but it was not successful. No one was in a talking mood. I might try again another time.
I looked for new games and found a few VR sports that I haven't tried yet:
- Home Sports (AR sport games)
- Yeeps: Hide and Seek (looks to have a horrible community of kids bullying others)
- CleanSheet Football (goalkeeper)
- Spinball: 360 Tennis (AR game)
- STARWAVE
- Clawball (quite close to my project...)
These games look great and really fun to play with friends. But most of them cost money, and for me to play with my friends, I would need:
- For my friends to be interested in the same game.
- For them to have a Meta headset (most games are not cross-platform).
- For everyone to have the budget to buy the game.
- For them to be willing to buy it.
- For us to play at the same time.
- Limited space on the device for all the games.
While VRChat:
- Free.
- Easy cross-platform.
- Even has a non-VR version, which will be mobile-compatible soon.
- Multiplayer by default.
- Everyone's already on the platform, and we can invite friends in-game.
- No need to buy or download 300 games.
Since the launch of the Meta Quest 2, which was affordable and got gifted to a lot of kids for Christmas, a lot of communities got ruined because many kids play and throw insults everywhere (which is also very dangerous for people this age who should not talk to adults online). One way to solve this is to have an option for 18+ instances, as well as an option for private instances where you invite your friends. VRChat has those options built-in, thankfully. You can also publish worlds without Quest (Android) support, which already filters out a lot of children, but it also means that only people who have a gaming PC can play.
Spent a while trying to rotate that VRC station component, but eventually, I got it. It felt like a waste of time, but actually, it was necessary to go through this to better understand the VRChat API and specifically the VRC station. I knew I would have to get involved with the technical part, math, and general logic at some point, but I enjoy it, so it's been rather fun.
One thing that was slowing me down was that I could not see any console or log when testing in VR because it opens VRChat and doesn’t log in the Unity console.
There are ways to display logs in VRChat, but they look weird and didn’t provide the information I needed.
I ended up displaying custom log messages on a log board display that I placed in the scene, so I can read all my troubleshooting messages directly within VR while testing.
I need a list of all the things I want to do.
Game Setup
- Mechanic for opting in (to play).
- Mechanic for team creation.
- Color coding teams, visual clue of which team the player is on.
Gameplay
- Aiming aid (target clue, player target selection, "concentration" effect, aim line?).
- Freeze tag player effects on players.
- Unfreeze mechanic or timer.
- Ball autonomous movements (fish ball).
Feedback
- Sound feedback when swimming for better movement understanding.
- Particle effects as movement clues.
- Visual/sound feedback on buttons.
- Visual/sound feedback when scoring (environmental change?).
General Audio
- Spatial sound effects on voices.
- General soundscape.
Environment
- Cave/rocks as area limitation/game field.
- Immersion-scape: particles, colors, and distance fade.
- Environmental effects on players (currents).
- Static environmental obstacles (algae, rocks).
- Moving environmental obstacles (big fish/ray/turtle).
I think I should complete all this in about one month, leaving only fine-tuning and presentation prep.
Without counting holidays, that makes it mid-May, around the 16th–19th of May.
This list shows a good order of importance: game setup and gameplay are indispensable, feedback and audio are very important, and the environment must be wrapped up at the end.
During production, regular and thorough testing is required. Testing will happen alongside production with documentation.
I need to somehow limit the game area, and I need the environment to fit the underwater aesthetic while also being a game element influencing where the ball bounces.
I’ve decided to make an underwater cave, round for gameplay and with uneven surfaces for when the ball bounces on it.
It needs some light, so there’s an opening at the top with the sun shining through (underwater). That way, I can add light rays later.
I was able to make a shape I’m satisfied with, but it’s not textured properly yet.
(This is the avatar I use in VRChat while testing, just because it’s cute.)
There’s a starter area on the side with access to the game area—it’s that rectangle in the wall.
I’ve adjusted the colors and other elements to start making the environment match my research findings.
Alexia: no caves
She pointed out that she wanted the feeling of being in the ocean, and the rocky cave felt very restrictive and isolating, like being stuck in a room. It made her sad.
I agreed when she said it, and then I realized that the cave would also make it impossible for big fish or turtles to swim by as obstacles.
So I was thinking, how can I limit the game area then? To keep the ball from going too far.
During the discussion at mid-crit, it was pointed out that it doesn’t have to be part of the natural environment. It could be lines or cartoony UI, partly transparent at least, or a net. Maybe it only appears when things get close.
It should be very subtle so that it doesn't impact the feel of the open sea.
- DO NOT LOSE THE QUIRKINESS
- Don’t get caught up in the stress of production, sacrificing the unique style and properties of this project.
- Be careful not to get lost in technical details.
This discussion was very useful, and I realized that I need to focus quickly on the visuals and immersive environment, as Douglas had pointed out as well.
I want to create assets (algae vines, rocks, corals, crabs, aquatic plants) by modeling them by hand in VR with Adobe Modeler so that they'll have my unique style --> hand-made. (It’s also easier for me to model in VR.)
Lakes
Sea/Ocean
Frames from my video of lake:
For the sake of having my own aesthetic and uniqueness I thought It's better to draw from my own findings in the lake... however, the lake doesnt have turtles or whales which i might want to include so would it really make sense?
But the plants dont need to be realistic, and in fact I can take inspiration from all water biome to create my own fictional biome.
Especially because my hand-made assets will look weird and will not match reality. the sport itself is fictional.
It needs to specifically not look like an existing biome
MS = motion sickness
- Base environment and static obstacles.
- Team opt-in mechanic.
- Design visual cues for teams and area limitation (lines? glow? bubbles? outline?).
- Movement feedback (particles, water noises).
- Feedback on game elements (sound, visual, haptic):
- Goals/scoring (global visual cue).
- Game start (also global).
- Caught ball (local, haptic vibration).
- Activated swimming 0/I (local).
- Aiming aid.
- Ensure big and small avatars have the same speed.
- Soundscape.
- Fog and lighting.
- Moving obstacles (giant turtle or ray, fish, whale).
"Would be nice but might be too much."
- Spatial sound effects on voices.
- Random water currents moving players (MS?) or the ball.
- Ball autonomous movements (living fish).
- Freeze tag, player effects on player, and unfreeze or timer.
- Rotation swimming (MS?).
- Character design: avatars with the fish-people design that players can use (but it shouldn't be compulsory because people want to keep their unique identities).
I think I need a few reference images, specifically some screenshots from the lake video I took.
I want my assets to be unique and performant, so I plan to create hand-made organic sculpts (using VR sculpting) that will then be made low poly and optimized.
Alternatively, I might use some tricks to make complex models lighter, such as using intertwined 2D planes. I'm considering this approach for long kelp, similar to what is seen in Minecraft.
I researched retopology solutions and plan to try 3D Coat software for auto-retopology.
Auto-LOD video:
https://www.youtube.com/watch?v=EqVig88ZC_M
I discovered a VRChat world that is both detailed and Quest-compatible. The grass and flowers use PNGs that always face the player, which works very well.
In 2024-12-17 (Preparations for Test Day), I wrote:
"That idea made me think about how being frozen is a bit like being electrified or stunned, so the characters could resemble eels. Some ocean creatures, like eels, jellyfish, and the inflated fish, have interesting defense mechanisms. I want to explore that for the design."
If I end up designing characters, I will remember this and draw inspiration accordingly.
We could designate two square areas where players stand.
Unlike most games where players join a waiting line until they are added, I prefer a different approach—similar to VRChat Volleyball, where players click a position and are assigned to it. Players can even choose team sizes (e.g., 2v2, 5v5).
Alternative examples include "Murder 3" (players stand in designated circles) or pool (the first two players to click join).
If mid-game joining is not allowed, then rounds should be kept short.
It turns out I need to use both Quill VR and Adobe Substance Modeler because they serve different purposes.
Quill VR is great for creating flat strokes (as demonstrated in my test) where the strokes are 2D and lack depth. I will need a shader that renders both sides. Currently, I used vertex painting in Quill; I must decide whether to recolor or use a vertex shader.
Substance Modeler is better for clay-like 3D shapes, which I will then recolor in Substance Painter.
Although Quill has not been updated since 2021 and lacks alternatives, it has proven to be very stable—much more stable than Adobe Substance Modeler.
Substance modeler:
(after retopo)

Description as of today:
FinBall VR is a team-based underwater sports game for Virtual Reality devices. Players swim using hand gestures, interact with a dynamic ball, and play in a custom-designed and interactive aquatic environment. The game focuses on unique mechanics and an immersive underwater setting.
I've scattered my assets around trying to make it look natural. The real test now will be mesuring performance...
The background is empty but there will be distence fading or "fog" so it won't be visible
At first it was a math equation generating them but it didnt look that good and it was tanking performence so i ended up analysing someone els's method and i did it her way which looks better.
Inspiration: https://vrmodels.store/other/shaders/20535-caustics-projector-shader.html
To texture the fish and goals i had desided to add emissives to make them visible through the fog... i had to fid a way to kind of fake a bloom effect because bloom costs too much performance.
They liked the environnment and told me to focus on the gameplay now which i planned on doing. They insisted again on not compromising on the "fun" elements which are what would make my game special.
- big whale or turtles as obstacles
- moving ball- fish
- currents
- pehaps extra team-play mechanics
We also discussed the scenography for the expo and since a tape square would be too boring i need to find a cool design to put on the floor as "vr area" delimitations.
Douglas talked about how the anvironment still feels a bit "dead", i agreed and I need to animate the goals and the ball, we also thought about where to display the score. perhaps some other things should be animated like fish benches. and plants.
I've been scripting a bit, so here's an overview of what i've been doing:
Team Management: Handles player assignments to two teams (Blue and Purple), ensuring balanced teams and enforcing a maximum number of players per team.
Game Flow Control: Manages the game's lifecycle, including starting, stopping, and resetting rounds, as well as handling scoring and determining winners.
Player Teleportation: Teleports players to designated spawn points at game start, after goals, and at game end, ensuring spectators remain unaffected.
UI Updates: Updates on-screen elements such as team scores, player counts, game timer, and winner announcements in real-time.
Networking and Synchronization: Utilizes Udon's synchronization features to keep game state consistent across all players, including late joiners.
Ownership Handling: Manages ownership transfers of the game object to ensure proper authority over game state changes.
Team Arrays: Maintains arrays for each team to track player assignments and counts.
Synced Variables: Uses [UdonSynced] attributes to synchronize critical game variables like scores and player counts across the network.
Event Handling: Overrides Udon events such as OnPlayerJoined and OnPlayerLeft to manage player state and handle game abort conditions when necessary.
UI Elements: Interacts with various UI components (e.g., TextMeshProUGUI) to reflect the current game state to players.
Prefab Instantiation: Instantiates visual indicators (e.g., player circles) to represent team members during the game.
Networking is a bit of a mess right now and it's not working so im trying to visualise stuff to see what needs to change in the current system...









































































































