Motivation:
- To go through the process of creating a virtual environment, so that the methods can be explained to educators interested in developing something similar
- Using the finished product to illustrate possible uses for the virtual environment, and what type of interactions you can add
- Creating a novel way to educate our user base about library resources
Everything Used to Make This Project:
- Blender – a free 3D modeling program with comparable functionality to professional software
- Unity3D – a game development engine, free for personal and educational use, with some limitations
- SteamVR plugin for Unity – a tool to integrate VR functionality into the Unity game system
- Adobe Photoshop – I used this to create my repeating textures, but you can use any photo editing program, such as Inkscape or Gimp
- My phone camera – I used this to take reference photos and texture images
- Look for or draw your own floorplan/blueprint
- If you have a real-world blueprint, use it to keep everything to scale
- Bring it into Blender as a texture on a plane at the center of your grid (0,0), and build on top of it
- Start with only the structural elements, mainly walls
Learning Blender:
- There are many great Blender tutorials on YouTube and elsewhere.
- Search the keywords “Blender 3D modeling basics”
Workflow tips:
- Name everything as you go! (Or sort through 50 thing named “cube” later)
- Only make one of each type of item you will need, then duplicate, duplicate, duplicate!
- But BEFORE you start duplicating and staging your objects, make sure your UVs are done properly, ready for texturing, and that every item is exactly how you will want it
Creating Custom Textures in Photoshop
- Use Filter > Other > Offset
- Then use the clone stamp and/or healing tool to hide the seams
- For more detail, search “How to make a seamless pattern in Photoshop”
- Other keywords to try: tileable texture, repeating pattern, seamless texture, etc.
Unity setup:
- Export your models from Blender in .fbx format to retain materials
- You will need to add any textures back into the materials in Unity
- Set up lighting for your model: Two directional lights will usually do the trick
Adding Interaction:
- In Unity, interaction can be added by attaching scripts written in C# or JavaScript to game objects.
- (C# is the standard language for Unity)
- The object the script is attached to must have a physics collider to be interactive (box colliders are usually best for consistent performance)
- To work with the SteamVR elements, the object must also have a UI button attached with “interactable” checked
Learning Unity:
- The Unity documentation
- Unity Tutorials
- Ray Wenderlich tutorials on getting started with Unity
- StackOverflow – Great for troubleshooting and finding snippets of code to help you get started with more complex interactions
- YouTube
- LinkedIn Learning
- Googling – Tip: Try different phrasing and combinations of words if you don’t first find what you’re looking for
SteamVR: Install the plugin, use the prefabs!
For a detailed explanation of SteamVR set up in Unity, see “HTC Vive Tutorial for Unity” from Ray Wenderlich.
Applications:
- Integrate the experience into onboarding activities and student orientations
- Raises awareness of both library resources and technology
- Use it as a demo of VR in the library’s makerspace
- Will also provide the opportunity to discuss how it was created & the tools involved
Potential Future Additions:
Multi-player interaction:
- Use the virtual space for multi-campus community events and remote instructions combined with learner interaction
- Learner interaction could involve real-time quizzing, a chat/commenting component, and 3D object manipulation
Publishing Adaptations with Unity:
Possible adaptations could include:
- WebGL version for browsers
- iOS app version published with Xcode
- Android version published with Android Studio
- PC and Mac versions
My process for this project involved first creating the iOS version and testing it on an iPad. Next I made a WebGL version, and last tackled the VR version.
Each version requires its own adaptations for different types of inputs and controls: i.e. iPad uses touch and can’t use hover states, web uses mouse clicks, and VR uses the controllers. All of these types require their own UI/UX design and custom interaction scripts.