My name is Stevie Vu and I'm focused on Virtual Reality. Follow this blog if you want updates on how my projects are going as well as what I'm learning.
I did some animation rigging during my last project with the Dune worm and I decided that I wanted to do a really deep dive into it. So far I've been having a lot of fun and feel like the animation rigging package could really help me create some great boss battles and more easily creating cinematic/scripted events. Here are some clips from what I've been experimenting with.
Walker-Bot
My first mini project was to try and create a walking 2-legged robot where the legs automatically move themselves after they exceed a set distance from the main body. It was amazing when I got it work and I could see the legs automatically animating themselves while manually moving the Walker-Bot around. Here is a GIF where you can see me manually moving the body with the legs procedurally animating themselves.
During the PXR2021 Conference there was a goal of creating some sort of collaborative virtual reality project throughout the week. I wanted to participate because I thought this could be a fun short-term creative VR project opportunity.
My team had students across multiple disciplines and background. Not everyone could meet at the same day/time and as a result it was only towards the last 2-3 days of the conference that we really got going with sort of VR project.
For my team we had a few students who really wanted us to help them create a Mario inspired VR experience. Using that as our creative theme and direction we made a Nintendo Mario themed Altspace world.
I got an opportunity to attend the Performance and XR 2021 Virtual Reality Conference through a director at the Centre for Entertainment and Arts. The whole conference was centered around using Altspace as the VR venue.
When I first tried VR Chat I remember getting motion sickness after a while of using it. Similarly I'm finding a bit of motion sickness in Altspace when using continuous loco-motion but I think I'm starting to build more resistance to it now. Either way, I do prefer using the teleport locomotion since I get far less motion sickness with it. At the moment I find both VR chat and Altspace to be pretty similar to one another.
I also built my first Altspace world as well.
Experiencing and Building worlds in Altspace
For my first Altspace world I decided to try and create a scene inspired from the big sci-fi movie Dune with a world that has a giant Desert Worm hopping around.
This is footage from the Unity Editor where I first created the VR experience. However, I found that you can't just directly import the Unity scene into Altspace. There is a huge limitation where you can't use be uploading a scene that utilizes any custom C# monobehavior scripts.
After experimenting for an afternoon, I decided to use Unity's Timeline sequencing to create this scene and trigger the sound and particle effects at the right time. Kinda sucks that you can't use scripting at all. Especially since I had spent the time rigging the worm using Unity's Animation Rigging which allowed for real-time animation. Regardless I was still able to pretty much deliver the full VR experience I intended for VR.
For the modeling I used Probuilder to create the Dune Worm.
If you want to check out this Altspace world you can using the world code : PKI578.
Here is a quick example of a basic flocking system I created. The flock of circles is simulated to follow after where the mouse is positioned in the game screen. The position of the mouse is tracked through a screen raycast that hits the background plane. The flock is set up with a behavior to also avoid colliding with each other which gives it some more realistic movement.
One of the key takeaways from this little programming project was the system design aspect. The flock system manager contains a list of all the flock agents and provides the agents with system context. The individual behaviors are managed at the flock agent level.
As an added benefit I feel like I've gotten a lot better at moving objects with forces in 3D space and how to use simple Vector Math.
The most difficult vector math concept was dot product. It wasn't that the math was difficult but the fact that I had misinterpreted the supporting image diagram which led me to repeatedly incorrectly using the formula and wondering why it wasn't working. The goal of the dot product I had for my project was to find the Vector3 location for where the red dot should be along the bottom horizontal line based on the box above.
I used the dot product to make the yellow arrows follow a predetermined path. If the predicted position of the yellow arrow is too far from the target red dot it would trigger a steering correction for it to move again back towards the path.
The final recent project was a tutorial on how to create a editor script that can read a CSV file and convert it into a scriptable object. Pretty handy in the future in the scenario that I have a lot of data that needs to be managed or changed.
This was my first game jam and it was an intense 3 days of programming. It was announced by two prominent VR YouTube channels, VR with Andrew and Valem, so I scheduled time specifically to be able to participate. I joined their discord channels to see if there were any people open to collaborating as a part of a team but ultimately ended up doing this jam solo.
This blog post is going to be about my strategy for the game jam, the challenges I faced and what I learned from the experience.
My Strategy - Scope Restriction and MVG
My strategy for tackling this game jam was that I would keep the scope restricted by trying to utilize what I've done in the past and interactive elements I'm familiar with. Basically, it was to make sure that my project scope didn't include too many new things I would have to learn for the first time.
I didn't jump into coding right away and spent a good half to full hour just brainstorming and trying to get a project concept before starting.
My final idea was a VR game where you created small worlds like a cook in a kitchen. You sprinkle the right elements in a specific order to create the completed worlds.
Here's some pics from the brainstorming. I never really meant for others to see it so its a bit of a mess.
This is an overview of the VR Food Truck Prototype game which was built for Oculus Quest using Unity 2021. Recently we had to deal with a killer heat wave in Vancouver. During that time it was so hot I couldn't stand cooking in the kitchen and dealing with more heat so food was all about take-out and delivery. Thus the concept of VR food delivery game using a cannon to send you the food.
VR Food Truck Gameplay Trailer
Game Overview
This is a time based game so you are simply trying to get as high a score as you can before it runs out. You gain points by sending a sandwich with the ingredients the customer wants inside.
I like to think of this as a VR version of Overcooked which was a cooking game that I really liked.
Loading Scenes Asynchronously and Object Pooling
One of my learning goals for this project was to better manage loading within the game. To create a more seamless experience for the player I have a screen fade that occurs during game transitions. The screen fades to black and then levels are loaded asynchronously. During the period where the screen is black I have all the needed object pools and other game objects loaded. The goal is to make it so that any screen tearing/skipping or loading goes unnoticed by the player as a result.
Unity XR Toolkit and Action-based Input
This is my first time implementing Unity's XR Interaction Toolkit with the new action-based input system. I found that its pretty intuitive and not too difficult to use. I added additional functionality to the scripts to make this VR game work.
Sandwich and Topping System
The Sandwich system relies on a gameobject with a sandwich handler and gameobject with a topping handler. The topping gameobjects are created in an object pool at the start of the scene and retrieved from the pool when the player goes to grab a topping. How the topping interacts with the sandwich is simply through checking for the sandwich handler when the topping collides with other objects. If the topping collides against a object with a sandwich handler, the topping is set to inactive and calls the add topping method in the sandwich and passes on a string for what topping needs to be added.
The sandwich keeps track of what toppings have been added to it in a list<string> . A customer can then check this list in the sandwich handler to see if the toppings it currently has matches the customers own personal list for sandwich toppings.
Customer System
Customers are initialized upon loading the game level and sent in a Queue<customer> and set to inactive. Current customer is set to active and then they send their list of topping requests to the player topping request UI canvas. One unique challenge here was that I didn't want the customers to overlap with their spawn positions so when they are assigned a spawn location they check it against a list of used spawn locations. If the random spawn location they were assigned is used, the script generates a new spawn location number until it gets one that is unused.
VR Canon
The VR canon is controlled with a simple lever that uses Unity's configurable joint and locks its position and rotation to mimic a lever. The cannon aim is adjusted based on how you move the lever and it is is calculated by transforming the current position of the lever against its maximum and minimum range.
Conclusion
Overall I feel that this project went very smoothly with good separation between systems and that the scripts and classes are well organized. I was able to apply a lot of the lessons I learned from previous VR projects and I can see myself using the asynchronous scene loading with screen fading for future projects as well.
This is a collection of take-aways, thoughts, and notes from attending the 2021 VR/AR Global Summit panel on fundraising for your VR/AR initiative.
XR Job Series - Raising money for your project or company tips
Don't forget to look into government and corporate financing programs. This isn't a comprehensive list but I did some research and here are programs that I think local VR/AR businesses might be interested in.
Research and Development Tax credits. For example SR&ED.
Innovate has programs that can be beneficial
For this fall you might want to pay attention to The Canada Foundation for Innovation. They will be hosting a competition in fall 2021 for the 2023 Innovation Fund .
If your AR/VR project has a community focus or social benefit you should also consider corporate grants
For example Rogers Wireless provides grants to organizations who have a focus on helping youth.
Reach out to organizations who are aligned with your vision and could be strategic partners.
They might not have funding they can provide at the moment but there may be other benefits that you could leverage. Establishing these relationships before going to angel investors or VC would also be advantageous.
Have a 6-12 month plan for what you would do with funding. A panelist mentioned that he expects the businesses that he invest in to have a commercially viable product within 9 months. It's important to get gauge and get an initial reaction to the VR/AR product or service.
What makes your VR/AR initiative unique?
Your chances of receiving funding will be low if a quick google search of your idea brings up competitors who are similar and you don't have a differentiation factor.
Founder Dynamics. If you are not a solo-founder, you should be aware that they will try to evaluate your relationship and dynamics with your co-founders. This was stressed as an important aspect for several panelist.
A "No" might not always be a "No". One of the panelist who has raised a lot of money mentioned that for a lot of their deals the reason why they got it was because they didn't give up. Situations change and new developments for your VR/AR initiative may change investors mind and convince them to invest with you.
How COVID has impacted the way they look at investing in VR/AR
There is now a lot less resistance to investing in teams who are distributed.
If you were operating prior to COVID they will be expecting to hear how you utilize the increased interest in VR/AR.