| Acknowledgments |
|
xix | |
| Author |
|
xxi | |
| Introduction |
|
xxiii | |
| Prerequisites |
|
xxv | |
| Chapter 1 A Brief Introduction to the Virtual World |
|
1 | (22) |
|
How Long Have We Been Virtual? |
|
|
1 | (1) |
|
|
|
2 | (1) |
|
The Birth Of The Head-Mounted Display |
|
|
3 | (2) |
|
The Road To Consumer Virtual Reality |
|
|
5 | (1) |
|
|
|
6 | (1) |
|
|
|
6 | (2) |
|
What Does Not Work About VR? |
|
|
8 | (5) |
|
|
|
8 | (1) |
|
|
|
8 | (1) |
|
|
|
9 | (1) |
|
|
|
10 | (1) |
|
What Sorts of Experiences Can We Expect? |
|
|
10 | (3) |
|
|
|
10 | (2) |
|
|
|
12 | (1) |
|
Consumer VR: Rift CV1 and the HTC Vive |
|
|
13 | (1) |
|
Can I Go Inside The Computer, Like Tron? The Complications And Challenges VR Is Facing |
|
|
13 | (5) |
|
Motion Tracking and Motion Capture for Input |
|
|
14 | (1) |
|
|
|
15 | (1) |
|
|
|
16 | (1) |
|
|
|
16 | (1) |
|
|
|
17 | (1) |
|
Designing And Developing For Virtual Reality |
|
|
18 | (2) |
|
Plan: Any Sort of Plan Will Do |
|
|
18 | (1) |
|
Get Your Main Interactions in Place Early |
|
|
19 | (1) |
|
|
|
19 | (1) |
|
Look for Combination and Flow |
|
|
20 | (1) |
|
Realism Is Not Always the Most Realistic |
|
|
20 | (1) |
|
|
|
20 | (3) |
| Chapter 2 Setting Up Your Hardware for the First Time |
|
23 | (30) |
|
What Hardware And Software Are You Going To Need? |
|
|
23 | (6) |
|
HTC VIVE Recommended Specifications |
|
|
24 | (1) |
|
OSVR HDK Recommended Specifications |
|
|
25 | (1) |
|
Rift Recommended Specifications |
|
|
25 | (1) |
|
|
|
26 | (2) |
|
The SteamVR Performance Test Tool |
|
|
27 | (1) |
|
The Rift Compatibility Tool |
|
|
27 | (1) |
|
|
|
28 | (1) |
|
Dealing with Compatibility Tool Results |
|
|
28 | (1) |
|
|
|
29 | (1) |
|
|
|
29 | (1) |
|
|
|
29 | (2) |
|
|
|
30 | (1) |
|
|
|
30 | (1) |
|
|
|
30 | (1) |
|
General Installation Hints And Tips (For All Devices) |
|
|
31 | (3) |
|
Make Room for Your Motion Tracker(s) |
|
|
31 | (1) |
|
Non Room-Scale VR with a Single Station/Motion Tracking Camera |
|
|
31 | (1) |
|
Room-Scale VR/Multiple Positional Tracking Cameras |
|
|
31 | (1) |
|
Organize Your Environment to Clear Some Space! |
|
|
31 | (1) |
|
|
|
32 | (1) |
|
What Is Interpupillary Distance and Why Should I Care? |
|
|
32 | (2) |
|
|
|
33 | (1) |
|
|
|
33 | (1) |
|
Installing Your VR Hardware |
|
|
34 | (9) |
|
HTC Vive Installation Instructions |
|
|
34 | (4) |
|
|
|
37 | (1) |
|
OSVR HDK Installation Instructions |
|
|
38 | (4) |
|
|
|
41 | (1) |
|
|
|
42 | (1) |
|
|
|
43 | (1) |
|
Party! SteamVR Is Set Up! |
|
|
44 | (1) |
|
|
|
44 | (1) |
|
Some Comfortable VR Experience Recommendations |
|
|
45 | (2) |
|
|
|
45 | (1) |
|
|
|
46 | (1) |
|
|
|
46 | (1) |
|
Staying Aware For A Healthy VR Experience |
|
|
47 | (4) |
|
Knowing When to Stop (the Telltale Signs of Oncoming VR Sickness) |
|
|
47 | (2) |
|
|
|
48 | (1) |
|
|
|
48 | (1) |
|
|
|
48 | (1) |
|
|
|
49 | (1) |
|
|
|
49 | (1) |
|
|
|
49 | (1) |
|
Eat, Drink, and Be Virtually Merry! |
|
|
49 | (1) |
|
Do Not Break Your Back Making VR Things! Test Carefully |
|
|
50 | (1) |
|
|
|
51 | (2) |
| Chapter 3 Setting Up a Unity Project for SteamVR |
|
53 | (26) |
|
Download Unity And Make A New Project |
|
|
53 | (1) |
|
Unity Editor Crash Course |
|
|
54 | (6) |
|
|
|
54 | (12) |
|
Terminology and Common Use Things |
|
|
57 | (3) |
|
Creating A New Unity Project |
|
|
60 | (1) |
|
Downloading SteamVR Libraries For Unity |
|
|
60 | (6) |
|
|
|
66 | (9) |
|
Make a New Scene in Unity |
|
|
66 | (1) |
|
Copy in the Models from the Example Files |
|
|
66 | (1) |
|
|
|
66 | (1) |
|
Add the Garden Model to the Scene |
|
|
67 | (2) |
|
|
|
69 | (1) |
|
Setting Up the VR Camera Rig |
|
|
70 | (3) |
|
Digging into the SteamVR Camera Rig |
|
|
71 | (2) |
|
|
|
73 | (1) |
|
|
|
73 | (1) |
|
|
|
74 | (1) |
|
SteamVR Camera Positioning And Repositioning |
|
|
75 | (2) |
|
Save The Project And Keep Backups! |
|
|
77 | (1) |
|
|
|
77 | (2) |
| Chapter 4 Adding Interaction |
|
79 | (22) |
|
Add The Interaction Framework To Your Project |
|
|
80 | (1) |
|
Adding A Reticle For Aiming |
|
|
80 | (5) |
|
|
|
80 | (1) |
|
Making a Canvas Suitable for VR |
|
|
81 | (4) |
|
Add VREyeRayCaster And Reticle Components To The Camera |
|
|
85 | (3) |
|
Setting Up Inspector References |
|
|
86 | (1) |
|
Stop the Reticle from Clipping |
|
|
87 | (1) |
|
|
|
88 | (1) |
|
Make The Door Interactive |
|
|
89 | (8) |
|
Create a Door Controller Script |
|
|
90 | (2) |
|
|
|
92 | (5) |
|
Add A Box Collider For The Door Handle |
|
|
97 | (2) |
|
Set Up References On The Doorcontroller Component |
|
|
99 | (1) |
|
|
|
100 | (1) |
|
|
|
100 | (1) |
| Chapter 5 Building User Interface for Headset and Game Controller |
|
101 | (28) |
|
|
|
101 | (10) |
|
|
|
102 | (1) |
|
Create a Canvas for the User Interface to Be Drawn On |
|
|
102 | (3) |
|
Add a UI Movement Component to the Canvas |
|
|
103 | (2) |
|
|
|
105 | (1) |
|
Add a UI Slider to Show Button Progress |
|
|
106 | (5) |
|
Change Slider Background Color |
|
|
108 | (1) |
|
|
|
108 | (1) |
|
|
|
108 | (1) |
|
Resize the Background Image |
|
|
109 | (2) |
|
Programming A C# Button Script |
|
|
111 | (6) |
|
|
|
112 | (5) |
|
Add A Reference For The VR_button Component To Use |
|
|
117 | (1) |
|
Add A Text Label To The Button To Show What It Does |
|
|
118 | (3) |
|
|
|
121 | (1) |
|
Add A Second Button To The Menu Scene |
|
|
121 | (1) |
|
|
|
121 | (1) |
|
|
|
121 | (1) |
|
Add Behaviors To The Buttons |
|
|
121 | (3) |
|
Add a Main Menu Controller GameObject to the Scene |
|
|
121 | (1) |
|
Making a Main Menu Script |
|
|
122 | (1) |
|
|
|
122 | (1) |
|
Add Event Functions to the Menu Buttons |
|
|
123 | (1) |
|
Add Scenes To Build Settings |
|
|
124 | (1) |
|
|
|
125 | (2) |
|
|
|
127 | (1) |
|
VR User Interface Design Tips |
|
|
127 | (1) |
|
|
|
128 | (1) |
| Chapter 6 Moving around the Virtual World with the SteamVR Teleportation System |
|
129 | (20) |
|
Setting Up The Scene For Teleportation |
|
|
130 | (7) |
|
Create Colliders for Teleport Ground Position Detection |
|
|
130 | (5) |
|
|
|
135 | (1) |
|
Set Up the Camera Rig and Add Components |
|
|
135 | (2) |
|
Writing A C# Script To Provide Input To The Teleporter |
|
|
137 | (7) |
|
|
|
139 | (5) |
|
Modify The SteamVR Teleporter Code |
|
|
144 | (3) |
|
Change DoClick() into a Public Function |
|
|
144 | (1) |
|
Modify SteamVR Teleporter to Use a LayerMask |
|
|
144 | (3) |
|
Set Up The Components On The Camera Gameobject |
|
|
147 | (1) |
|
Set Up ControllerTeleportInputProvider |
|
|
147 | (1) |
|
|
|
147 | (1) |
|
|
|
148 | (1) |
| Chapter 7 Using the Headset for Aiming in a Game |
|
149 | (10) |
|
Attaching A Projectile Firing System To The Camera |
|
|
149 | (2) |
|
Add A Script To The Camera To Grab Player Input |
|
|
151 | (2) |
|
Programming a SpraylnputProvider.cs script |
|
|
152 | (1) |
|
|
|
152 | (1) |
|
Add A Script To The Spray Can To Make It Fire |
|
|
153 | (3) |
|
Programming the SprayShooter.cs Script |
|
|
154 | (1) |
|
|
|
155 | (1) |
|
Set Up Components In The Inspector |
|
|
156 | (1) |
|
|
|
157 | (1) |
|
|
|
157 | (2) |
| Chapter 8 Making the Most of Virtual Reality with Audio |
|
159 | (22) |
|
The Virtual Reality Space And Beyond |
|
|
159 | (1) |
|
|
|
160 | (2) |
|
|
|
160 | (1) |
|
|
|
160 | (1) |
|
|
|
160 | (1) |
|
|
|
161 | (1) |
|
|
|
161 | (1) |
|
|
|
161 | (3) |
|
Set the Scene with Ambient Sound |
|
|
161 | (1) |
|
The Audio Source Component |
|
|
162 | (2) |
|
Add Ambient Audio To The Scene |
|
|
164 | (4) |
|
Bringing Life to the World with Audio |
|
|
168 | (1) |
|
|
|
168 | (2) |
|
Add the Audio Source Component to the Insect |
|
|
169 | (1) |
|
|
|
170 | (1) |
|
|
|
170 | (1) |
|
Add An Audio Source To The Camera |
|
|
170 | (2) |
|
|
|
171 | (1) |
|
|
|
171 | (1) |
|
Unity Audio Mixers and Effects |
|
|
171 | (1) |
|
|
|
172 | (2) |
|
|
|
172 | (1) |
|
|
|
172 | (1) |
|
|
|
172 | (1) |
|
|
|
173 | (1) |
|
|
|
173 | (1) |
|
Setting Up Mixers in the Audio Mixer Window |
|
|
173 | (1) |
|
|
|
174 | (1) |
|
Setting Audio Sources To Use The Audio Mixer Groups |
|
|
175 | (1) |
|
|
|
176 | (4) |
|
|
|
177 | (2) |
|
|
|
178 | (1) |
|
|
|
178 | (1) |
|
|
|
179 | (1) |
|
|
|
180 | (1) |
|
|
|
180 | (1) |
| Chapter 9 HTC Vive Motion Controllers |
|
181 | (34) |
|
How We Interact With The Virtual World |
|
|
181 | (1) |
|
|
|
181 | (3) |
|
Try Out the SteamVR Interaction System Example Scene |
|
|
182 | (1) |
|
Tips for Designing Room-Scale VR Controls |
|
|
182 | (2) |
|
Picking Up And Dropping In VR With The Vive Controllers |
|
|
184 | (24) |
|
Adding Vive Controllers to a Unity Scene |
|
|
185 | (1) |
|
|
|
186 | (4) |
|
|
|
190 | (12) |
|
|
|
202 | (6) |
|
Modifying the PickUp Class to Include Feedback |
|
|
206 | (2) |
|
Using The SteamVR Interaction System For User Interface |
|
|
208 | (4) |
|
Create a New Project and Import SteamVR |
|
|
209 | (1) |
|
Create a New Scene and Add a Player Prefab |
|
|
209 | (1) |
|
Make a Simple UI Canvas and Button to Try Out |
|
|
209 | (3) |
|
|
|
212 | (1) |
|
Using Vive Controllers For Teleporting Around The Virtual World |
|
|
212 | (2) |
|
Create a New Project and Import SteamVR |
|
|
212 | (1) |
|
Create a New Scene and Add a Player Prefab |
|
|
212 | (2) |
|
|
|
214 | (1) |
|
|
|
214 | (1) |
| Chapter 10 Using Hands for Input Systems |
|
215 | (24) |
|
|
|
215 | (12) |
|
The Leap Motion VR Mount Kit |
|
|
216 | (1) |
|
Downloading Leap Motion Orion Drivers and Software |
|
|
217 | (1) |
|
Connect the Headset and Try Out the Visualizer |
|
|
217 | (1) |
|
Download Leap Motion Unity Packages |
|
|
218 | (1) |
|
Setting Up the Unity Project for Interaction Engine and Leap Motion |
|
|
218 | (1) |
|
Hands-On in the Virtual World |
|
|
219 | (2) |
|
Programming to React to Piano Key Presses |
|
|
221 | (5) |
|
|
|
222 | (4) |
|
|
|
226 | (1) |
|
NOITOM Perception Neuron Mocap |
|
|
227 | (11) |
|
Installation and Downloads |
|
|
227 | (4) |
|
|
|
227 | (1) |
|
Set Up the Motion Capture Suit |
|
|
228 | (3) |
|
Play with the Example Project |
|
|
231 | (1) |
|
|
|
231 | (4) |
|
Using a Full Body Perception Neuron Motion Capture Suit |
|
|
235 | (1) |
|
|
|
236 | (4) |
|
|
|
236 | (1) |
|
View Obscured by Robot Head |
|
|
237 | (1) |
|
|
|
238 | (1) |
| Chapter 11 Handling the Camera Rig for Seated or Static VR Experiences |
|
239 | (14) |
|
Driving A Simple Vehicle In VR |
|
|
240 | (7) |
|
|
|
240 | (1) |
|
Setting Sitting or Standing Calibration in Code |
|
|
241 | (2) |
|
|
|
243 | (4) |
|
Parenting the Camera to the Vehicle |
|
|
247 | (1) |
|
What Is Third Person And Is Virtual Reality Really The Right Place For Third-Person Views? |
|
|
247 | (1) |
|
External Camera For Following The Vehicle |
|
|
247 | (3) |
|
|
|
248 | (1) |
|
|
|
248 | (1) |
|
|
|
248 | (2) |
|
|
|
250 | (1) |
|
|
|
250 | (1) |
|
|
|
250 | (3) |
| Chapter 12 Virtual Reality Sickness |
|
253 | (8) |
|
What Is Virtual Reality Sickness? |
|
|
254 | (5) |
|
|
|
254 | (1) |
|
VR Sickness Symptoms and Cues |
|
|
255 | (6) |
|
|
|
255 | (1) |
|
|
|
256 | (1) |
|
|
|
256 | (1) |
|
|
|
257 | (1) |
|
|
|
257 | (1) |
|
|
|
257 | (1) |
|
|
|
257 | (1) |
|
|
|
258 | (1) |
|
Rate of Linear or Rotational Acceleration |
|
|
258 | (1) |
|
Positional Tracking Errors |
|
|
258 | (1) |
|
|
|
258 | (1) |
|
|
|
259 | (1) |
|
|
|
259 | (2) |
| Chapter 13 Hands-on, Practical Techniques for Reducing VR Sickness in Unity |
|
261 | (20) |
|
USing a UI Overlay For Field Of View Reduction |
|
|
261 | (8) |
|
|
|
262 | (1) |
|
|
|
262 | (1) |
|
Programming the Dynamic Scaling Script |
|
|
263 | (5) |
|
|
|
265 | (3) |
|
|
|
268 | (1) |
|
A Third-Person Camera Suitable For VR |
|
|
269 | (8) |
|
Open and Try Out the Example File |
|
|
270 | (1) |
|
|
|
271 | (4) |
|
|
|
272 | (3) |
|
The Third-Person VR Camera Rig |
|
|
275 | (2) |
|
A Fake Nose? How Does It Smell?! |
|
|
277 | (2) |
|
|
|
279 | (2) |
| Chapter 14 Polish and Optimization |
|
281 | (26) |
|
Customizing The SteamVR Compositor |
|
|
281 | (4) |
|
Create a SteamVR Skybox for the Compositor |
|
|
281 | (4) |
|
|
|
285 | (19) |
|
The Rendering Statistics Windows (Stats) |
|
|
286 | (1) |
|
|
|
287 | (5) |
|
|
|
287 | (2) |
|
What Do the Squiggles Tell You? |
|
|
289 | (1) |
|
|
|
289 | (1) |
|
|
|
290 | (2) |
|
|
|
292 | (2) |
|
|
|
294 | (4) |
|
Try Occlusion Out with the Example Unity Project |
|
|
294 | (1) |
|
|
|
295 | (1) |
|
|
|
296 | (1) |
|
|
|
296 | (2) |
|
|
|
298 | (2) |
|
Prioritize Where in the Update Cycles Your Code Runs |
|
|
299 | (1) |
|
|
|
300 | (7) |
|
|
|
301 | (1) |
|
|
|
302 | (2) |
|
|
|
304 | (3) |
| Chapter 15 Further Possibilities and a Final Word |
|
307 | (6) |
|
|
|
307 | (3) |
|
|
|
307 | (1) |
|
|
|
308 | (1) |
|
Warehouse-Scale Experiences |
|
|
308 | (1) |
|
|
|
308 | (1) |
|
|
|
309 | (1) |
|
|
|
309 | (1) |
|
|
|
310 | (1) |
|
|
|
310 | (3) |
| References |
|
313 | (2) |
| Index |
|
315 | |