Week 10

Wrapping up development

What We've Accomplished

During the last full development week of the quarter, we focused on finalizing and redecorating each grocery store in the Global Grocery app. We first finalized the layout, contents, and components of the contents in the American store. Then, we started decorating and customizing the Chinese and Mexican stores by adding newly bought assets, adding posters, changing the architecture colors in the stores, and shuffling the aisles and freezers in the stores. We also fixed a lot of miscellaneous pricing bugs, like adding prices to items that were previously null, making the produce priced by item instead of by pound, and making the pricing display panel follow the user’s head rotation instead of showing statically on the screen corner. We also applied the same rotation changes to the pause menu.

Download our Week 10 demo apk: Link

Watch our app promo video here: Link

Individual Contributions

Annalice: decorated Chinese store, restructured Chinese store layout, created new shaders and changed floor, wall, ceiling colors for all stores, fixed pause menu and price panel to move with player head rotation, added purchasing power info screen to loading page for after user has finished shopping at all stores.

Donna: finalized American store contents and layout, ironed out some pricing bugs, bought new assets for the Chinese and Mexican stores, cleaned up item display names, added more item prices to spreadsheet.

Khushi: decorated Mexican store, restructured Mexican store layout, continued implementation of onGrab sounds for items.

Code Updates

Finalized American store scene assets and shaders Customized Chinese and Mexican store scene layout and shaders  Bought new assets like lanterns and wall decor to put in stores  Created canvas posters in Chinese store to display advertisements Fixed pricing manager prices and pricing display Changed price panel and pause menu transformations to follow user head movement Added purchasing power info Canvas to loading screen

Plans for Next Week

While our app is almost ready for demo day submission, there are some visual details we want to add before then such as decorating the American store a bit more, adding localized language to the signs in the Chinese / Mexican stores, and other minor decorating details. We will be working on finalizing the application build and also creating the application promo video.

Files to review

Nothing at the moment.

Blockers

None.

Week 9

More Bug Bashing!

What We've Accomplished

This week was pretty busy for all 3 of us, so we had less time to dedicate to the project. When we did work on our VR project, we focused mainly on bug fixing and modifying our groceries store to look more unique. We purchased more assets for each store, including fish and lanterns for the Chinese store as well as chili strings and more vegetables for Mexico. We also worked on adding in transitions between scenes and modifying the audio of the store. We did more research on item costs between different countries and updated the spreadsheet of prices. We also compiled a master to-do list for the upcoming week with tasks we want to complete by the final demo day. This list combines feedback from the instructors, other teams, and our own observations.

Download our Week 9 demo apk: Link

Individual Contributions

Annalice: Started adding fade to black transitions between scenes, general bug fixing.

Donna: Researched Mexican grocery store traits and asset packs, general bug fixing.

Khushi: Modified and added more audio, general bug fixing.

Code Updates

Added code for facilitating transitioning camera to black between scenes Added invert-rendered black sphere to XROrigin to cover the camera while transitioning between scenes

Plans for Next Week

Next week we plan on doing a final push to get our application ready for Demo day. This will consist of polishing up the base version of the grocery store, adding decorations to each store, fixing cart interactions and more general bug fixing.

Files to review

Nothing at the moment.

Blockers

None.

Week 8

Price Panel, Grocery Store Pop Music, and Team Feedback Round 2

What We've Accomplished

This week, we focused on getting our Global Grocery build to an improved state that could be tested by other teams. We decided to prioritize relatively essential application tasks like toggling a price display, displaying item prices on grab, and continuing to decrease the lag in the application by changing the item shaders over cosmetic differences in the store. We were able to fix the item lag to the point where it wasn’t super noticeable to teams who demoed our app, which was really helpful for developing more features on the app. Since we already completed some tasks in our PRD ahead of schedule (adding an interactable scene with items the user bought from each grocery store, adding background audio), we switched the order of some target product tasks for the last few weeks before the final product demo. Some of the main feedback we got after user testing included fixing the cart to be more user friendly and adding more grabbable items into the store since we made many items static for fixing lag. We made a list of feedback that we’ll be addressing and fixing in the application in the coming weeks, in addition to making the different country stores more unique.

Download our Week 8 demo apk: Link

Individual Contributions

Annalice: Created panel for displaying item prices, debugged price manager linking with canvas text display, connected new scenes together for final demo

Donna: Created panel for displaying item prices, edited price manager to link with the canvas that displays the text

Khushi: Added background audio to store scenes

Code Updates

Added background music object in all store scenes Added toggle options in store pause menu to allow user to change whether price is visible and which currency to use  Connected toggle fruits to script actions using the XRGrabInteractable component  Added public methods to GrabToSelect script to control toggling Added price display panel for when price toggle is on  The panel only displays in front of the user when a store item is grabbed and shows the item name and price Enabled changing currency and making currency change synced in price display panel

Plans for Next Week

The next few weeks before the final demo deadline will consist of decorating each country’s grocery store to be more unique, fixing the cart interaction more, and addressing as many bugs / features as possible from our compiled list. These items include: changing some item prices to be more accurate, adding more grabbable items to the grocery store, adding audio for grabbing / dropping items, etc.

Files to review

Nothing at the moment.

Blockers

None for this week as we're just continuing to work through our list of desired features.

Week 7

Bug Bashing

What We've Accomplished

This week, we reviewed the peer and instructor feedback we received last week during the application testing session. Most of the feedback discussed the lag in our grocery store app and the issues with the cart, which wasn’t too surprising since we already knew the issues exist and we need to fix them by the target application as best we can. We focused on bug bashing this week more so than new additions to the store since most of our other tasks for the target product is just making the stores more cosmetically different and aesthetically pleasing. We thought that fixing the issues that make the app difficult to use was more important since cosmetics are a relatively easier addition. We received advice from the instructors on how to reduce lag by editing the custom item shaders for glass items, and this fix actually worked pretty well! We will continue to try modifying the items as needed to make the store lag less noticeable.

Individual Contributions

Annalice: Started working on a new UI element that shows item names and prices, created a toggle in the app pause menu where user can select whether to turn prices on / off and which currency to use.

Donna: Replaced shaders to reduce lag, experimented with adding more grabable items.

Khushi: Started adding background audio into store and looking into how to add audio to certain player movements.

Code Updates

Following advice from TAs and John, we were able to reduce lag greatly by replacing the glass and liquid shaders with standard shaders. This results in an application where the lag is not very noticeable, and we are able to add in more grabable items.
GrabToSelect script - a toggle function for turning on and off display prices as well as a toggle function for changing the display currency

Plans for Next Week

We will continue to find ways to mitigate lag in our application and iron out the cart physics. We will also finish up the pricing and item name display and continue experimenting with adding audio to the stores. Depending on how far we get with bug fixes, we will also start decorating our stores differently and adding new assets to them depending on the country the store is set in.

Files to review

Nothing at the moment.

Blockers

None so far as we got some effective advice on how to reduce lag last Thursday by changing liquid item shaders.

Week 6

MVP Demo and Team App Swap!

What We've Accomplished

In the past week, we focused on getting the Global Grocery app to where we wanted for our minimum viable product since the MVP demo was on Tuesday. We completed a lot of remaining tasks on our MVP plan including creating a start / pause menu for the game, gathering all grocery item prices, developing a pricing and checkout system, displaying the items bought from every different store, placing items in the grocery store and making some of the items XR Grab Interactable. A lot of this work was brand new, and other parts were just piecing together components of the app that we had developed in different scenes together in our final app. We were able to finish a large majority of the features listed in our MVP goals, which was really exciting!

Our major issue so far has been lag in the app because of all of our assets and grabbable items, and this will be something we continue to debug moving forward. We ran into this issue when switching from testing with Oculus Link on a computer with a really strong graphics card to testing the app’s apk on only the Oculus Quest, because our MVP demo app was basically unplayable on only the Oculus. We had to downscale the grocery store and make only a few items grabbable to combat the lag, and still haven’t solved it completely.

`

Download our MVP apk: Link

Individual Contributions

Annalice: Created start menu and pause menu, scene that user starts in with menu, scene switching script between the store and the start scene, compiled item prices, added some store item components.

Donna: Item placement in a few sections of the store, store size reduction. Pricing system and scripts, checkout system and scripts, receipt display and final receipt aggregate display.

Khushi: Put final store scene together, placed most static and grabbable items in store, compiled item prices.

Code Updates

Created a start menu interaction using the UI canvas, grabbable fruits, and scene switching
Created a pause menu interaction using a UI canvas
 Wrote a script for the left hand controller that detects when the menu button is pressed and pops the menu up in front of the user position
Created a new branch for implementation of item pricing and checkout
 Scripts that parse CSV files for item prices and then assign to objects
 Custom XR Grab Interactable scripts on items for better interaction
 Scripts for processing item checkout, generating receipts and storing receipts between scenes
 Scripts for spawning objects into the main menu screen
Placed all desired items into a final grocery store scene and added custom XR Grab Interactable and price scripts to each that we wanted to be interactable
 Copied the scene twice to create the scene for all countries

Plans for Next Week

In the next week, we plan to do a lot of bug fixing. In particular, fixing user interactions with the cart as well as using baked in lighting to try and reduce lag. We will also be changing the structure / decorations of the Chinese store to make it look more unique and authentic. We were originally planning on also adding hands for the user, but we completed that already!

Files to review

Nothing at the moment.

Blockers

Our main blocker right now is the lag when trying to run our application on the Oculus without streaming through Oculus link. After talking to other teams we plan on trying baked in lighting, but if that doesn’t work, we will definitely need help from staff resolving the issue. We are also still having some bugs with our cart physics and will continue hammering that out.

Week 5

USA Store and More Shopping Cart Physics

What We've Accomplished

This week, we focused on debugging some issues with the grocery cart by modifying the default XRGrabInteractable script on the cart to create a custom grab script for it. The shopping cart rotation is improved now as it can’t be turned in the x or z rotational axis, and stays upright even when grabbed from an angle. We will continue working on the cart in following weeks to iron out some bugs with the grabbing physics.

We also built out the structure of the grocery store scene that will be used as the base setting for all 3 of our grocery stores. We are also starting to put products in their specific places in the store, which will be an ongoing process. Doing research on average grocery prices in the USA, Mexico, and China we had to consider what kind of sources we got the price data from. We wrote about some considerations at the end of the snippet.

Link to cart demo:

As you can see, there’s clearly some bugs that we need to fix. When the cart moves, items in the cart have a tendency to bounce around. We plan on fixing this sometime next week.

Individual Contributions

Annalice: modified XRGrabInteractable script on cart to lock the x and z rotation on the cart and only track the y rotation of the controller when moving the cart, compiled grocery price information
Donna: made objects in shopping cart not fly out when pushing cart with things in it by adding custom script that changes kinematic state, compiled grocery price information
Khushi: built the grocery store structure scene with all building structures, shelves, and signs

Code Updates

Created new branch for creating grocery store scene
 Put up walls and floors of store with realistic pillars and other building assets
 Put in grocery shelves, freezers, produce aisles, etc into store
Created a new script based off of XRGrabInteractable to place on the cart to control how grabbing the cart works
 Makes the cart only track the controller’s y rotation when grabbed so that user cannot turn cart on its sides
Created a new collider on the cart that turns off the kinematic setting on objects that go into the cart so that they don’t fly around when the cart is pushed

Plans for Next Week

Since the MVP presentation is coming up next Tuesday and we’re a little behind schedule, we plan on trying to crunch out the content needed for the MVP so that we can be on schedule again. This work includes creating a opening menu for the VR app, creating an object price script that attaches a price attribute to each item based on the price database that we’ve compiled, putting items on their shelves, cloning the base grocery store to create the Mexican and Chinese stores, and creating a basic checkout system.

Files to review

master/GlobalGrocery/Assets/Custom/EnterCartBehavior.cs OnTriggerExit

master/GlobalGrocery/Assets/Custom/XRObjectGrabInteractable.cs SetupRigidbodyDrop line 828

In particular, we are having issues with de-parenting objects and setting the isKinematic to false in EnterCartBehavior. The commented out portion of SetupRigidbodyDrop should do the same thing as the else clause in OnTriggerExit. However, the else clause fails to move the object outside of the parent. Using the else clause, the object freezes in the air even though we can see in the inspector that isKinematic is set to true. (Using SetupRigidbody achieves the desired behavior, however OnTriggerExit does not).

Blockers

We’re currently having issues with getting the shopping cart to behave the way we want it to in terms of grabbing and having items stored in it. We’ll continue to debug the shopping cart issues as we work on other parts of the project, but we would like tips on how to make custom grab physics work. Specifically, how should we make the cart lock x and z rotation completely when being grabbed or when items are thrown into / at it. Also, what are potential solutions for putting objects in the cart without having the objects fly around when we push the cart?

Grocery Pricing Considerations

When we were doing research on the average prices of groceries in the USA, Mexico, and China this week, we started thinking about the rationale for using one type of cost aggregation versus another. We initially considered using a crowdsourced cost-of-living site that calculated the mean costs of common grocery items like bananas or a pound of chicken in a certain country. We also looked into the official US Bureau of Labor Statistics webpage that aggregated US grocery prices across the countries. We ran into the dilemma of what matters most in calculating the mean costs for a county: the mean, median, or another calculation for grocery costs? We weren’t sure if the crowdsourced site was the most accurate representation of prices we could get, especially for the Mexico and China prices. The US Labor Statistics page’s numbers were calculated using city costs, which may contain an urban bias. An idea we had was to use grocery prices from the largest grocery chain in each country to use for items since that would give us a relatively “average” price experience from each country and would help us price each item, even obscure ones. However, the question still stands of what kind or pricing aggregate is considered the most representative of a country’s grocery prices, especially when there is such a large gap between the cost of living in urban versus rural areas in each country. For now, we decided to go with Walmart's grocery pickup prices for median cost cities in each country so that we can find prices on very specific grocery items while maintaining an average cost per country.

Week 4

Research and Shopping Cart Physics

What We've Accomplished

This week we focused on researching different grocery store interior designs for American, Chinese, and Mexican grocery stores, purchasing basic grocery store assets (we bought one asset pack along with a separate shopping cart), and implementing a basic shopping cart with the physics associated with grabbing items and pushing the cart.

Here’s a quick demo of our current cart:

As you can see, there’s clearly some bugs that we need to fix. When the cart moves, items in the cart have a tendency to bounce around. We plan on fixing this sometime next week.

Individual Contributions

Annalice: Worked on building a basic demo scene and implementing expected shopping cart movement and behavior.
Donna: Worked on building a basic demo scene and implementing expected shopping cart movement and behavior, changed the VR controllers to use hands instead of rays.
Khushi: Worked on creating the new version of the website with multiple pages and researching different grocery store designs for the three grocery stores.

Code Updates

Created new Unity project
Set up XR library required for player movement and grabbing objects
Imported grocery supermarket assets into new Unity project
 Tested supermarket demo scene that came with the assets, found that it was too laggy in VR
Created new demo scene to test out assets
 Added a few shelves, walls, flooring, grabbable store items, and a shopping cart
Customized the shopping cart asset to have colliders that allow for putting objects in the cart naturally
Implemented shopping cart physics (still need to be refined more)
 Shopping cart stays on the ground
 Shopping cart doesn’t jitter when items are placed into it
 Shopping cart is only grabbable from the handlebar area and stays in front of the player
Made all grocery store items grabbable
Changed VR controllers to use hands instead of default rays so that player can only pick up and move objects that they can grab

Plans for Next Week

By the end of next week, we plan to both finalize the layout of our American grocery store and build it out. The grocery store will be completely populated with items that are grabbable and will have associated prices. We also plan on smoothing out the cart’s motion, and turning. We will also be finalizing what the Mexican and Chinese grocery stores will look like.

Blockers

We are currently uncertain about how to code certain behaviors into the cart. For example, we are having trouble with turning the cart and were thinking about adding some acceleration/deceleration to the cart on push. Our current plan is to extend/copy paste the XRGrabInteractable script and modify the ‘PerformKinematicUpdate’.

Question: What else would the staff recommend that we look at to smooth out the cart movement?

Week 3

Project Pitch & PRD

What We've Accomplished

This week we focused on finalizing our project idea, developing the pitch and the PRD. We found some assets that we think will be perfect for our grocery stores and can be reused for the different markets. We’ve developed a plan for how and when we want to complete the different milestones of our project implementation. We met with course staff to discuss our idea and incorporated that feedback into our PRD.

All members: Project pitch slide deck, PRD writing, writing the Week 3 snippet, searching for viable 3d models on the Unity Asset store

Code Update

No development has begun yet, but we found a lot of great assets on the Unity Asset store that we’ll likely use for development.

Blockers

We currently don’t have any blocking issues, although I’m sure that’s going to change next week. We really appreciate everyone’s advice on our PRD and target product!

Weeks 1 + 2

Getting situated (in VR), a range of ideas, and a whole lot of Beatsaber...

What We've Accomplished

The first couple weeks of the quarter and the VR capstone class involved a lot of settling into the class and getting ramped up on how to use the VR headsets. We obtained the Oculus Quest 2 devices from the course staff, set them up, and immediately started playing Beatsaber to get familiarized with the VR environment. As for more productive tasks, we also completed the Intro to Unity tutorials and the VR demo project assigned in class.

Deciding on a project idea was the most difficult part of the class so far, since we had ideas ranging from a Pacman-x-Ghostbusters-inspired maze game, to a cat simulator (as in, you’re the cat in VR), to an education / awareness school shooting simulation. We were pretty passionate about the school shooting app since we thought it served an important purpose for raising awareness and could be very impactful. However, given the time constraints we face in this capstone (about 7-8 weeks of actual development time), we thought we wouldn’t have time to do justice to this idea and may end up with an extremely underwhelming product. We were also interested in the Pacman-inspired game since we thought the idea of racing through a maze in VR while ghosts chased you could be an interesting experience.

After workshopping the idea with the course staff however, we realized that we didn’t have a coherent core game mechanic for the game, so it would be difficult to make meaningful stretch goals for it.

We finally decided on a global grocery experience after going through our brainstormed ideas list with the course staff. As a group, we were interested in the idea of exploring the purchasing power of $50 USD in different grocery markets around the world. In particular, we thought it would be interesting to do a blind grocery run, where you could try and spend as close to $50 as possible. Not only would it be cool to explore how markets look around the world, but you would be able to see how the prices of everyday items change by location.

Code Update

We haven’t started actual development of the global grocery project yet, but anticipate that we will next week after finalizing our idea more!

Blockers

We don’t have any major blocking issues development-wise, but we want to get our Global Grocery app idea reviewed by the course staff before starting to code since we decided on this idea a bit late in Week 2.