Jump to content

24-3002 Procedural Poetry Funhouse

From UBC Wiki
Emerging Media Lab
About EML
A collaborative space for UBC faculty, students and staff for exploration of emerging technologies and development of innovative tools and solutions. This wiki is for public-facing documentation for our projects and procedures.
Subpages


Introduction

Background

In the 1960s and 70s, Vancouver neighborhoods such as Kitsilano and Strathcona were home to many forward-thinking poets who challenged the fundamentals of what defined poetry. Judith Copithorne was one such figure. She was most well-known for her contributions in concrete poetry, where the visual form of the poem dictates the purpose of the poem itself.

Emerging technologies, such as Virtual Reality (VR) and Large Language Models (LLMs), present new opportunities to experiment with the visual representation of poetry in a three-dimensional modality. Inspired by the roots of concrete and procedural poetry, this project uses emerging technology to recontextualize poetry as an art form that can exist in a tangible space. The Emerging Media Lab aims to create an immersive VR experience for Creative Writing students that pays homage to the experimental work of Judith Copithorne and allows users to engage with procedural poetry in fun, unique ways.  

Objective

The primary objectives of this project are to provide an educational and immersive experience for Creative Writing students to interact with concrete poetry and AI through experiential learning.

In past terms, the project's developmental framework, design direction, and core mechanics were successfully established. In the most recent term, the team's main challenge was to address the UX issues that were identified through various playtest sessions, as well as clean up the existing flow for a more holistic and polished end-to-end user experience.

The EML project team has addressed these issues through the current rendition of Another Order: A Procedural Poetry Funhouse (otherwise known as Another Order). Listed below are the tasks the EML team has accomplished to address discovered UX issues:

  • Tutorial Re-design: To better inform the user about foundational mechanics, the tutorial was re-designed to be more intuitive. The tutorial currently guides users through movement, camera rotation, word grabbing, and word collection.
  • Word Interaction Polish: Playtest feedback revealed that word movement was too sensitive. The word movement has since been adjusted to feel more intuitive.
  • Audio Design: To enhance user immersion, sound ambience was integrated for the Arbutus Outdoors and the Blackout Room. Sound effects with distance attenuation were added to the cat companion. See C7 for more details.
  • UI Updates: The cat companion dialogue interface as well as the common word shelf interface were updated for enhanced readability and usability.
  • Cat Companion Re-design: Play testers reacted positively to the cat companion. To improve the cat’s amicability and overall polish, the cat was completely re-modelled and re-textured. In particular, the cat was re-designed to be reminiscent of Judith’s pet cat Jasmine. Sound effects were additionally added to the cat to improve immersion.
  • Asset Design: Play testers reacted positively to the hand-drawn assets created for the previous iteration of the project. This term, the team further leaned into that visual style and incorporated more hand-drawn assets for the Arbutus Outdoors, Attic, and cat companion.

Format and Versioning

This project uses Unreal Engine 5.5.4, Meta Quest Virtual Reality Headsets, and integration with LLMs (OpenAI).  

Primary Features

Here is a table of the proposed features for this term and their level of completion:

No. Task Priority Status
F1 Design direction and concept Must have Complete
F2 VR framework for implementation Must have Complete
F3 Immersive external VR environment   Nice to have Complete
F4 Activity rooms Nice to have Partially Complete
F5 Ability for users to collect word magnets Nice to have   Complete
F6 Ability for users to compose poems   Nice to have Complete
F7 Audio layer Nice to have   Partially Complete
F8 Tutorial Must have Complete
F9 User Interface Nice to have   Partially Complete
F10 AI Sentiment Analysis Nice to have Complete
F11 AI Cat Companion Nice to have Partially Complete

Feature Descriptions

F1. Design Concept and Direction

Another Order: A Procedural Poetry Funhouse is a virtual environment based on Kitsilano’s Arbutus Grocery building that takes inspiration from Judith Copithorne’s art style. The project name derives from Judith Copithorne’s Another Order poem, which challenges the static perspective.

The Procedural Poetry Funhouse is composed of various rooms the user will complete to explore and create concrete poetry. In each room, users will be faced with choices that affect the poem they write. The user will encounter these environments in the following sequence:

  1. Landing Page: The landing page serves as an initial space for users to ground themselves before beginning the full experience. Users are enclosed in a gate decorated with Judith Copithorne's poems which they can then open by pushing a button. Opening the gate transitions from the landing page to the Arbutus Outdoors.
  2. Arbutus Outdoors: Inspired by the existing neighborhood surrounding the Arbutus Grocery, the user is introduced to the core mechanics of the experience here. Users are guided along a path that leads to the Arbutus Grocery building.
  3. Lobby: The Lobby is an environment symbolizing Arbutus Grocery’s change from a grocery store into a coffee shop. To encompass the concept of Another Order, the words from the Another Order poem are generated as word magnets when the user enters. On subsequent re-entries into the Lobby, the order of the poem’s words is randomly scrambled.  
  4. Activity Rooms: These rooms use different parameters to shape the output of the user’s poem. It either places constraints on the user’s poem creation process or provides output based on the rules of each room. The rooms can be accessed in any sequence. For the details of each room, see F4.
F2. VR Framework for Implementation

The framework utilizes Unreal Engine 5.5.4 as the rendering engine and Meta Quest SDK for input handling. Features such as player controls, level generation, and game mechanics are developed in Unreal Engine Blueprints and C++. Data handling is accomplished through importing .csv files and functions as data tables within the engine.

For Large Language Model (LLM) integrations, Another Order uses Unreal Engine's WebSocket Client in C++ to establish a communication protocol for built AI assistants using OpenAI's Assistants API connected through a DxL server.

F3. Immersive VR Environments

Environments are modeled in Unreal Engine and made from a combination of free models and custom assets.

Immersion was enhanced through the integration of various motion controls such as pushing and pulling.

Various audio tracks were additionally created for this project. See F7 for details.

F4. Activity Rooms

This project focuses on experiential learning by encouraging users to learn through creation via activity rooms. These rooms contain exercises that experiment with randomness, where following the same procedure often produces varying results.

The design concepts for four activity rooms are listed below:

  1. Word Hunt Maze: In the word hunt maze, users will navigate a randomly generated maze while collecting word blocks. This dynamic maze visually replicates the chaos of ideas scattered throughout a labyrinthian mind. The maze’s size is set to 12x12, meaning there are over 221different possibilities for the generated maze.
  2. Blackout Room: In the Blackout room, users will enter a dark room with a microphone. The user will be further instructed to speak about a topic they dislike. They will then receive the flashlight and highlighter tools to select/highlight words from an AI-generated text that responds to their dislikes. This process combines the concepts of pushing against AI technology while also extracting a poem out of a disagreeable notion.
  3. Arcade: Inspired by the n+7 poem activity, users should be able to gamble away their collected words in slot or gacha machines. In turn, they will receive new, random words that might change the meaning of their poem.
  4. Attic: To encourage users to play with the words they have collected, the Attic is an activity room dedicated specifically to poem creation. Users can place their word magnets in any order and orientation to create a poem. The Studio contains the AI Sentiment Analysis (see C10 for more details), Audio Selection, and Common Word Shelf features. The design concept of the Studio is meant to be reminiscent of an attic, as many Vancouver poets used to live in the upper floors of buildings such as the Arbutus Grocery.

At the time of handoff from the EML, the Blackout Room is fully implemented. The Attic is technically implemented but requires additional visual assets. The Arcade is conceptualized but not implemented. The Word Hunt Maze was implemented in a previous iteration of the project but requires re-design for re-integration.

F5. Ability to Collect Word Magnets

Words are represented as 3D objects called Word Magnets in the Poetry Funhouse. These words can be found in various locations throughout the experience. Users can collect these words and store them in their ‘inventory’, or Word Bank. The Word Bank is a widget that is accessed via the left controller, allowing users to access collected words.

If the user has a word magnet in their hands, they can either place it in 3D space or collect it into their inventory.

An example of the word magnets present in Another Order
F6. Ability to Compose Poems

At any point throughout the experience, the user can select words from their word bank and orient them in any direction, location, and angle, allowing them to compose a poem in a three-dimensional space.

Notably, the user’s poems will only have an observable environmental effect in the Attic, as that is the only location with AI Sentiment Analysis.

F7. Audio Layer

Each level or room has a different corresponding sound design to evoke different types of emotions. For example, the Arbutus Outdoors now has soft nature ambience with wind and bird sounds, combined with soft electronic music to reflect anticipation and calm, while the Blackout Room now has low, bass-heavy ambience to reflect intimidation and loneliness. There is also an Audio Selection interface in the Attic where users can choose a public domain BGM to play as they create poems.

More sound effects have been added for immersion, such as:

  • Gentle ripple sounds when you approach the water in the Arbutus Outdoors.
  • The cat companion now has various meow sounds that are randomized every time she speaks.
  • The cat companion has floor material-dependent (i.e., dirt, concrete, grass, or wood) footsteps.
  • A soft whoosh sound was added to the user's teleportation for better movement feedback.

Enhanced sound design in the Attic and Lobby would still be beneficial at this stage.

F8. Tutorial

Upon entering the Arbutus Outdoors, users are guided by the cat companion to understand movement, camera rotation, word grabbing, and word collection mechanics. Note that this is not a comprehensive list of mechanics present in the project; for example, moving a word from inventory to space and placing words are not taught.

These tutorials take place in the Arbutus Outdoors. Upon tutorial completion, users are prompted to enter the Lobby to begin the main gameplay loop.

F9. User Interface

The team has designed User Interface widgets to assist the user through the experience. Such widgets include the word inventory menu and the cat companion dialogue interface.

To help inexperienced users, the team has also included phantom VR controllers at select points in the experience to show the user necessary inputs.

F10. AI Sentiment Analysis

The AI sentiment analysis is used to evaluate user poems. It is currently being used in the Attic to evaluate the user's poems and produce an output that changes the color tint of the environment.  

The words and their orientations (e.g., location, rotation, etc.) are sent to an LLM, which has been prompted to return a colour. The Attic lights are then tinted to reflect the result of the analysis.  

F11. Cat Companion

To enhance the user’s experience, the team has added a companion modelled in the likeness of Judith Copithorne’s cat Jasmine. The cat is meant to act as a guide, instructing the user where to go next.

The cat was modelled, textured, rigged, and animated in Blender and Maya. Animations were then imported into Unreal Engine. At the time of handoff from EML, the cat has 2 idle animations, 1 running animation, 1 walking animation, and 1 trotting animation.

Additional animations for talking/meowing and coy cat behaviours would be beneficial.

Design Methods

The team used personas and user flows to guide the design of the application in Figma. With the given design inspirations provided, the team created room concepts, style guides, and high-fidelity prototypes of the experience in Figma. Blender and Unreal Engine were used to create custom assets and design the in-game environments.

To collect user feedback, the team conducted one major playtest session in September of 2025. This playtest session consisted of an observation session and a follow-up questionnaire.

Experiment Protocol

Participants were instructed to complete the VR experience from start-to-finish (at the time, this consisted of the Arbutus Outdoors, the Lobby, and the Blackout Room). Observers were able to provide clarifications on controls and next steps as needed. Participants were allowed to pre-emptively stop the experience, whether due to crashes, nausea, or reluctance to engage with AI. Data such as completion time and notable struggles were recorded during observation.

After completing the experience, participants were then given a questionnaire to fill out. The questionnaire collected data regarding participants' perspectives on the various successes and failures of the experience.

Development

Technical Components

The following table describes the software used for design and development:

Tool Description
Unreal Engine Game engine, version 5.5.4
Blender 3D modelling software to design custom assets
Maya 3D modelling software to design custom assets
Meta Quest 3 Virtual Reality headset used during development
Figma Design and prototyping software used to design wireframes and UI components
Audacity Audio software to edit tracks
ChatGPT GPT4 and GPT4o were used for development, https://chatgpt.com/g/g-f52QYAJK1-unreal-engine-5-expert Unreal Engine specific GPT.  

Issues/Bugs

Blackout Room Poem Pushing

When prompted to push the VR controllers forward at the end of the blackout room, the 'push' movement is unreliably detected. We have seen instances of the words disappearing when users failed to push their controllers; we have seen instances of the words staying when users did push their controllers.

First Time Setup + General Usage

Running the Project (from Unreal Engine)

Setting up Unreal Engine

Below are instructions on how to install Unreal Engine 5.

  1. Visit Download Unreal Engine - Unreal Engine and install the Epic Games Launcher
  2. After following the steps to install the launcher, select Unreal Engine.
  3. Go to the Library Tab and press the “+” Icon. Choose Unreal Engine 5.3.2
  4. In Folder, choose where to install unreal engine. It is recommended not to change this if you have the space on your primary drive.  
  5. In path, click on options, and unselect the Android, IOS, and Linux platforms. This will save you about 22 GB in installation.  
  6. Let the install happen and then run. It will take a while the first time you run Unreal Engine, so be patient!

Plugin Installation

Please install the 3D Text plugin to be able to work on 3D words. Ensure it is installed as this first as this is the main mechanic used on two of the three main levels.   To install:  

  1. Navigate to Edit>Plugins  
  2. Search Text 3D and install it.
Setting up Oculus
  1. Visit the Meta Quest website and scroll down to Quest 3 and click on download software.  
  2. After pressing download software, follow through with the instructions to install it.  
  3. On your mobile phone as well, install the Oculus App.
  4. Turn on the Quest 3 and login to your account both on the headset and the Oculus pc app
  5. Connect the headset over AirLink (same network) or via Cable to the computer Note : make sure the USB-C to USB-C cable is 2 way data capable
  6. Open the Oculus Rift app through the quick setting menu on the headset
  7. When game is deployed, the headset should automatically open up the VR game
Project Launch in VR
  1. Copy the entire Poetry project from an SSD/Perforce onto a local machine
  2. Connect a quest 2 or quest 3 to desktop and launch the meta quest link on the headset and the desktop.
  3. Find the Poetry.uproject file inside the Poetry directory copied in step 1. Right click and go to: More Options->Launch Game
  4. After ensuring the headset is properly connected, Click on the button “Launch in VR”
  5. To exit the program, click "Esc" on the keyboard.

Running the Project (Packaged Build)

Setting up Oculus
  1. Visit the Meta Quest website and scroll down to Quest 3 and click on download software.  
  2. After pressing download software, follow through with the instructions to install it.  
  3. On your mobile phone as well, install the Oculus App.
  4. Turn on the Quest 3 and login to your account both on the headset and the Oculus pc app
  5. Connect the headset over AirLink (same network) or via Cable to the computer Note : make sure the USB-C to USB-C cable is 2 way data capable
  6. Open the oculus Rift app through the quick setting menu on the headset
  7. When game is deployed, the headset should automatically open up the VR game
Project Launch in VR

Run Poetry.exe

Future Plans

Recommendations for future development of this project:

Additional Interactive Components

Many users have expressed preference to the physical interactions of the project, such as the Blackout Room pushing sequence, button pushing, and word manipulation. Future mechanics and/or current mechanics should be designed with physicality in mind.

Functional Audio Integrations

Sound ambience has not yet been integrated for the Attic and Lobby areas. Additional SFX integrations would also assist the user experience, particularly as functional feedback for user actions (for example, error SFX when the user falsely presses a button).

Judith Copithorne Poem Integration

To take advantage of VR space and better integrate the content to the visual style, it is recommended that more of Judith Copithorne’s poems appear throughout the experience. A good example of this is the incorporation of Judith's poems as the gate lattice in the Landing Page.

Exporting Poems

To let users take their created poems with them, various methods of poem export were proposed but not implemented. Common ideas include: a camera tool that allows the user to capture an image of their poem, or some export that deciphers the structure of poems in space using an LLM.

Usability Playtests

As many issues found through playtesting have been addressed this term, it is recommended that usability tests are conducted soon to evaluate the effectiveness of the current changes.

Re-Design and Integration of Maze Activity Room

The Word Hunt Maze was implemented and integrated in the first iteration of the project. However, it has since been removed as it was too computationally expensive for a headset build. The team has ideated some potential re-designs:

  • An outdoor market, where users stop by various stalls to "shop" for new word magnets.
  • A hedge maze, where random words are generated in random locations throughout the maze.

Since many playtesters expressed that they enjoyed the open space of the Arbutus Outdoors and wished they had the opportunity to return to that area, we recommend that the design of the Maze also takes place in an outdoor area.

The team has additionally considered methods to make the Maze computationally cheaper:

  • Have a few fixed layouts of the maze and randomize which one is used for a pseudo-random effect. This reduces the computational load of procedural generation.
  • Treat the room as less of a maze and more so a space for users to collect words (see: outdoor market idea). This mitigates the need to create a randomized maze layout for users to navigate.

As one last consideration, keep in mind that getting lost in mazes likely leads to increased nausea. We recommend conducting playtests to ensure that users are not getting sick in the headset.

Rendering Changes

Switching back to a Lit shading model may make the project look better.  Other options can be done:

  • Shadowing of the unlit levels: If levels may stay unlit, using even a lambertian diffuse for the materials can add depth to the meshes.
  • Having actual point lights in the Attic by switching to Lit may be feasible in terms of performance.
  • Use a better water shader for the pond in Arbutus Outdoor. Currently it uses a panning texture only. Considering using a normal map and noise map for distortion.
  • Grass rendering.

Desktop Build

To harden and broaden access, the project should have a desktop version with full keyboard and mouse controls for core interactions.

Poster

A poster summarizing the main features, components, and accomplishments of the Another Order: A Procedural Poetry Funhouse project.
Another Order: A Procedural Poetry Funhouse Poster

Team Members

Principal Investigators

Dr. Bronwen Tate

Associate Professor of Teaching

School of Creative Writing

University of British Columbia

Jen Moss

Lecturer

School of Creative Writing

University of British Columbia

A.E. Osworth

Lecturer

School of Creative Writing

University of British Columbia

Ray Clark

Subject Matter Expert

Team

Dana Angela Neria, Developer (February 2026 – August 2026)

Work Learn at the Emerging Media Lab at UBC

Undergraduate in Bachelor of Arts in Cognitive Systems, Minor in Applied Music Technology

University of British Columbia

Daniel-Hyun Yoo, Developer (September 2025 – December 2025)

Work Learn at the Emerging Media Lab at UBC

Undergraduate in Bachelor of Science in Computer Science

University of British Columbia

Toby Song, UI/UX Designer (September 2025 – April 2026)

Work Learn at the Emerging Media Lab at UBC

Undergraduate in Bachelor of Arts, Combined Major in Psychology and Visual Art

University of British Columbia

Shivangi Singh, UI/UX Designer (September 2025 – April 2026)

Work Learn at the Emerging Media Lab at UBC

Master in Fine Arts, Design & Production

University of British Columbia

Jaq Ai, Project Lead, UI/UX Designer (May 2025-April 2026)

Work Learn at the Emerging Media Lab at UBC

Undergraduate in Bachelor of Science in Computer Science, Minor in Arts

University of British Columbia

Amy Yiqin Li, UI/UX Designer (May 2025-April 2026)

Work Learn at the Emerging Media Lab at UBC

Undergraduate in Bachelor of Arts in Visual Art

University of British Columbia

Daniel Lima, Developer (May 2025-August 2025)

Work Learn at the Emerging Media Lab at UBC

Undergraduate in Bachelor of Commerce, Combined Major in Computer Science and Business

University of British Columbia

Mariane Olivan, Project Lead, UI/UX Designer (May 2024- August 2024)

Work Learn at the Emerging Media Lab at UBC

Undergraduate in Bachelor of Science in Cognitive Systems

University of British Columbia

Walker Rout, Developer (May 2024- August 2024)

Work Learn at the Emerging Media Lab at UBC

Undergraduate in Bachelor of Science in Cognitive Systems

University of British Columbia

Jiho Kim, UI/UX Designer (May 2024- August 2024)

Work Learn at the Emerging Media Lab at UBC

Undergraduate in Bachelor of Science in Cognitive Systems

University of British Columbia

Samia Sajid, UI/UX Designer (May 2024- June 2024)

Work Learn at the Emerging Media Lab at UBC

University of British Columbia

James Edralin, Developer (May 2024- August 2024, September 2025-April 2026)

Work Learn at the Emerging Media Lab at UBC

Undergraduate in Bachelor of Science in Computer Science

University of British Columbia

Julien Roy, Developer (May 2024- August 2024)

Work Learn at the Emerging Media Lab at UBC

Undergraduate in Bachelor of Science in Computer Science

University of British Columbia

Ameya Goel, UI/UX Designer (May 2024- August 2024)

Work Learn at the Emerging Media Lab at UBC

Undergraduate in Bachelor of Science in Computer Science

University of British Columbia

Staff

Phoebe Titus, 3D Generalist (July 2025-May 2026)

Dante Cerron, Staff Developer (September 2025-May 2026)

Julien Roy, Project Lead, Co-op Developer (May 2025-August 2025)

Frederik Svendsen, Staff Developer (May 2024-August 2024)

Asset Credits

“Ancient Bird Carpet” (Ancient Bird Carpet | Fab) by Get Dead Entertainment is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).

"Antique Desk" (https://skfb.ly/o8Ptu) by Matthew Collings is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).

“Assetsville Town” (https://www.unrealengine.com/marketplace/en-US/product/assetsville-town) by Assetville is licensed under Epic Content License Agreement (https://www.unrealengine.com/en-US/eula/content).  

"Bed low poly" (https://skfb.ly/oJnsY) by santifaster12 is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).

“Big Crate” (https://www.fab.com/listings/6403b02c-8a96-44c9-bf9b-f80cd0cf958c) by Polytricity is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).

“Cash Register” (https://sketchfab.com/3d-models/cash-register-f2bda073f6604ebeb22ee110f3be929a) by Andrianna is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).

“Coffee Menu” (https://skfb.ly/oyGxA) by Zende is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).

“Flashlight free icon” (Flashlight Icons & Symbols) by Aranagraphics is licensed under Flaticon License.

“Floor Lamp” (https://skfb.ly/otBoo) by Agha.Najam is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).

“Gun free icon” (Search results for Gun - Flaticon) by Freepik is licensed under Flaticon License.

“House Plants: (https://sketchfab.com/3d-models/house-plants-1347ac536bea469281cc07d68e076654) by Nicolai Kilstrup is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).  

“Lantern 01 4k” (Lantern 01 4k | Fab) by Mo Hussien is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).

“light switch and Bulb” (light switch and Bulb | Fab) by Roy Sousa is licensed under Fab Standard License (Fab).

“Marker free icon” (Search results for Highlighter - Flaticon) by Freepik is licensed under Flaticon License.

"Messy Tack Board" (https://skfb.ly/6TLMA) by M.Reslan is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).

“Modular Building 1st Floor Kit” (Modular Building 1st Floor Kit | Fab) by Quixel is licensed under Fab Standard License (Fab).

“Modular Stair and Handrail Kit” (Modular Stairs and Handrail Kit | Fab) by Quixel is licensed under Fab Standard License (Fab).

“Paintbrush free icon” (Search results for Paintbrush - Flaticon) by Us and Up is licensed under Flaticon License.

“Palm free icon” (Search results for Hand - Flaticon) by Icon Mart is licensed under Flaticon License.

“Paw free icon” (Search results for Paw - Flaticon) by Mihimihi is licensed under Flaticon License.

"Rendered Coffee Cup" (https://skfb.ly/o7DMZ) by cosmic.arin is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).

“Rustic black table” (https://sketchfab.com/3d-models/rustic-black-table-662be11a0fa14fa9875c8fa7c072fe07) by Axonite is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).  

"Scattered Papers" (https://skfb.ly/opFKv) by aysenaz is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).

“Simple Wood Planks” (Simple Wood Planks | Fab) by SachinGames is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).

“Stained Wooden Ceiling” (Stained Wooden Ceiling | Fab) by Quixel is licensed under Fab Standard License (Fab).

“Wooden Spiral Staircase” (https://sketchfab.com/3d-models/wood-spiral-square-staircase-b534dd7d38b74874a6549bf32c08be49) by Sereib is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).

“Beautiful Ambient Melody” (https://freesound.org/people/PatrickLieberkind/sounds/341541/) by Patrick Lieberkind is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).

License

MIT License

Copyright (c) 2026 University of British Columbia

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


Some rights reserved
Permission is granted to copy, distribute and/or modify this document according to the terms in Creative Commons License, Attribution-ShareAlike 4.0. The full text of this license may be found here: CC by-sa 4.0
Attribution-Share-a-like