Acknowledgments |
|
xvii | |
Author |
|
xix | |
Prerequisites |
|
xxi | |
Introduction |
|
xxiii | |
|
Chapter 1 A Brief Introduction to the Virtual World |
|
|
1 | (24) |
|
How Long Have We Been Virtual? |
|
|
1 | (1) |
|
|
2 | (1) |
|
The Birth of the Head-Mounted Display |
|
|
2 | (2) |
|
|
4 | (1) |
|
|
5 | (1) |
|
|
6 | (2) |
|
Complications and Challenges of VR |
|
|
8 | (6) |
|
|
8 | (1) |
|
|
9 | (1) |
|
|
9 | (1) |
|
|
10 | (1) |
|
|
10 | (1) |
|
|
10 | (1) |
|
Location-Based Entertainment |
|
|
11 | (1) |
|
|
11 | (1) |
|
|
11 | (1) |
|
|
12 | (1) |
|
|
12 | (1) |
|
|
12 | (1) |
|
|
13 | (1) |
|
|
13 | (1) |
|
|
13 | (1) |
|
|
14 | (1) |
|
Designing and Developing for VR |
|
|
14 | (8) |
|
Plan: Any Sort of Plan Is Better than No Plan! |
|
|
15 | (4) |
|
Get Your Main Interactions in Place Early |
|
|
19 | (1) |
|
|
20 | (1) |
|
Look for Combination and Flow |
|
|
20 | (1) |
|
Realism Is Not Always the Most Realistic |
|
|
21 | (1) |
|
|
22 | (3) |
|
Chapter 2 Healthy VR Experience |
|
|
25 | (8) |
|
What is Interpupillary Distance and Why Should I Care? |
|
|
25 | (1) |
|
|
25 | (2) |
|
|
26 | (1) |
|
|
27 | (1) |
|
Knowing When to Stop (the Telltale Signs of Oncoming VR Sickness) |
|
|
28 | (5) |
|
|
28 | (1) |
|
|
28 | (1) |
|
|
29 | (1) |
|
|
29 | (1) |
|
|
29 | (1) |
|
|
29 | (1) |
|
Eat, Drink, and Be Virtually Merry! |
|
|
30 | (1) |
|
Do Not Break Your Back Making VR Things! Test Carefully |
|
|
30 | (1) |
|
|
31 | (2) |
|
Chapter 3 Getting Set Up for Unity SteamVR Development |
|
|
33 | (22) |
|
|
33 | (1) |
|
|
33 | (1) |
|
|
34 | (1) |
|
|
34 | (1) |
|
|
34 | (1) |
|
Setting Up a Unity Project for Steamvr |
|
|
35 | (1) |
|
Downloading Unity to Make a New Project |
|
|
36 | (1) |
|
Unity Editor Crash Course |
|
|
36 | (6) |
|
|
36 | (2) |
|
Terminology and Common Use Things |
|
|
38 | (2) |
|
|
40 | (2) |
|
Creating a New Unity Project |
|
|
42 | (7) |
|
Downloading the SteamVR SDK for Unity |
|
|
42 | (2) |
|
Setting up SteamVR in Unity |
|
|
44 | (2) |
|
|
46 | (3) |
|
|
49 | (3) |
|
Download and Extract Example Project Source Files |
|
|
49 | (1) |
|
Adding SteamVR to an Existing Scene |
|
|
49 | (1) |
|
|
50 | (1) |
|
|
51 | (1) |
|
SteamVR Camera Positioning and Repositioning |
|
|
51 | (1) |
|
Save the Project and Keep Backups! |
|
|
52 | (1) |
|
|
53 | (1) |
|
|
53 | (2) |
|
Chapter 4 The SteamVR Interaction System |
|
|
55 | (14) |
|
Download and Extract Example Project Source Files |
|
|
55 | (1) |
|
|
56 | (1) |
|
Making the Door Interactive |
|
|
56 | (5) |
|
|
61 | (3) |
|
Picking up and Throwing Objects |
|
|
64 | (3) |
|
|
67 | (2) |
|
Chapter 5 Building a Main Menu |
|
|
69 | (52) |
|
|
70 | (1) |
|
Building the Main Menu ui With Unity Gui |
|
|
71 | (1) |
|
|
71 | (1) |
|
|
71 | (1) |
|
Getting Steamvr to Work With Your UI |
|
|
71 | (3) |
|
|
74 | (1) |
|
|
74 | (3) |
|
|
75 | (1) |
|
Attach Buttons to the Script |
|
|
75 | (2) |
|
Loading Scenes Correctly with Steamvr |
|
|
77 | (7) |
|
Adding Scene Loading to Your Menu |
|
|
78 | (1) |
|
Create a LevelLoader GameObject |
|
|
78 | (3) |
|
Add Level Loading to the MenuController Script Component |
|
|
81 | (2) |
|
Set Up the Level Loader Reference |
|
|
83 | (1) |
|
Add Scenes to Build Settings |
|
|
83 | (1) |
|
|
84 | (1) |
|
Using a Laser Pointer for Ul Interactions (And an Introduction to Scripting with the Steamvr Input System) |
|
|
84 | (10) |
|
Add Components to the Hands GameObjects |
|
|
84 | (1) |
|
Add Controller Input to the Laser Pointer |
|
|
85 | (2) |
|
|
87 | (7) |
|
Building the Main Menu Ul with Steamvr Physical Buttons |
|
|
94 | (3) |
|
|
95 | (1) |
|
Build a Physics-Based Button |
|
|
95 | (1) |
|
Add SteamVR Button Components |
|
|
95 | (1) |
|
Hook Up the Button to Scripting |
|
|
96 | (1) |
|
|
96 | (1) |
|
|
97 | (1) |
|
Add a Fade Out to the Main Menu |
|
|
97 | (1) |
|
Making Your own Skybox Inside Unity |
|
|
98 | (4) |
|
Create a SteamVR Skybox for the Compositor |
|
|
99 | (2) |
|
Using a Custom Skybox for Loading |
|
|
101 | (1) |
|
Interaction Using Only Your Head |
|
|
102 | (17) |
|
|
102 | (6) |
|
|
108 | (11) |
|
|
119 | (2) |
|
Chapter 6 Advanced Interactions |
|
|
121 | (20) |
|
|
121 | (9) |
|
Adding Spray Functionality to the Spray Bottle |
|
|
121 | (3) |
|
|
124 | (6) |
|
Using Vibration/Haptic Feedback |
|
|
130 | (1) |
|
Setting up the Skeleton Poser to Use a Hand Pose |
|
|
131 | (9) |
|
The Skeleton Poser Component |
|
|
131 | (1) |
|
|
131 | (4) |
|
|
135 | (1) |
|
|
135 | (4) |
|
|
139 | (1) |
|
|
140 | (1) |
|
|
140 | (1) |
|
Chapter 7 Making the Most of Virtual Reality with Audio |
|
|
141 | (34) |
|
The Virtual Reality Audio Space and Beyond |
|
|
141 | (3) |
|
|
142 | (1) |
|
|
142 | (1) |
|
|
142 | (1) |
|
|
142 | (1) |
|
|
143 | (1) |
|
|
143 | (1) |
|
|
143 | (1) |
|
|
143 | (1) |
|
|
144 | (1) |
|
|
144 | (1) |
|
|
144 | (1) |
|
|
144 | (1) |
|
|
144 | (16) |
|
|
144 | (1) |
|
|
144 | (1) |
|
Setting a Scene with Ambient Sound |
|
|
145 | (1) |
|
The AudioSource Component |
|
|
146 | (3) |
|
Adding Audio to the Bug Game |
|
|
149 | (1) |
|
|
149 | (2) |
|
|
151 | (1) |
|
Bringing Life to the World |
|
|
152 | (8) |
|
|
160 | (8) |
|
|
160 | (1) |
|
|
161 | (1) |
|
|
161 | (1) |
|
Setting Up Mixers in the Audio Mixer Window |
|
|
161 | (1) |
|
|
162 | (1) |
|
Setting Audio Sources to Use the Audio Mixer Groups |
|
|
163 | (1) |
|
|
164 | (1) |
|
|
165 | (2) |
|
|
167 | (1) |
|
|
168 | (5) |
|
Adding the Steam Audio API to Unity |
|
|
168 | (1) |
|
|
169 | (1) |
|
Set Up the Level for Steam Audio |
|
|
170 | (1) |
|
|
170 | (1) |
|
Choose Metal from the Dropdown |
|
|
171 | (1) |
|
Setting Up an Audio Source for Steam Audio |
|
|
171 | (1) |
|
|
172 | (1) |
|
Precalculating the Steam Audio Scene |
|
|
172 | (1) |
|
|
172 | (1) |
|
Quick VR Audio Design Tips |
|
|
173 | (1) |
|
|
174 | (1) |
|
Chapter 8 Building Seated or Static VR Experiences |
|
|
175 | (10) |
|
|
175 | (1) |
|
|
175 | (1) |
|
Setting Sitting or Standing Calibration in Code |
|
|
176 | (6) |
|
|
178 | (4) |
|
Moving Around Inside a Vehicle |
|
|
182 | (1) |
|
|
182 | (1) |
|
|
183 | (1) |
|
|
183 | (2) |
|
Chapter 9 Virtual Reality Sickness |
|
|
185 | (8) |
|
|
186 | (1) |
|
|
186 | (1) |
|
VR Sickness Symptoms and Cues |
|
|
187 | (4) |
|
|
187 | (1) |
|
|
188 | (1) |
|
|
188 | (1) |
|
|
189 | (1) |
|
|
189 | (1) |
|
|
189 | (1) |
|
|
189 | (1) |
|
|
190 | (1) |
|
Rate of Linear or Rotational Acceleration |
|
|
190 | (1) |
|
Positional Tracking Errors |
|
|
190 | (1) |
|
|
191 | (1) |
|
|
191 | (1) |
|
|
192 | (1) |
|
Chapter 10 Hands-On, Practical Techniques for Reducing VR Sickness in Unity |
|
|
193 | (20) |
|
Using Unity's UI Canvas for Field of View (FOV) Reduction |
|
|
193 | (10) |
|
|
194 | (1) |
|
|
194 | (2) |
|
Programming the Dynamic Scaling Script |
|
|
196 | (2) |
|
|
198 | (3) |
|
|
201 | (1) |
|
|
202 | (1) |
|
A Third-Person Camera Suitable For VR |
|
|
203 | (7) |
|
Open and Try Out the Example File |
|
|
203 | (1) |
|
|
204 | (1) |
|
|
205 | (3) |
|
The Third-Person VR Camera Rig |
|
|
208 | (2) |
|
A Fake Nose? How Does it Smell? |
|
|
210 | (2) |
|
|
211 | (1) |
|
|
212 | (1) |
|
Chapter 11 Unity Engine Polish and Optimization |
|
|
213 | (28) |
|
|
213 | (1) |
|
The Rendering Statistics Windows (STATS) |
|
|
213 | (25) |
|
|
215 | (1) |
|
|
215 | (1) |
|
|
215 | (3) |
|
Finding Out If Your Project Is GPU-Bound or CPU-Bound |
|
|
218 | (2) |
|
What Do the Squiggles Tell You? |
|
|
220 | (3) |
|
|
223 | (1) |
|
|
223 | (1) |
|
|
224 | (1) |
|
Try Occlusion Out with the Example Unity Project |
|
|
224 | (2) |
|
|
226 | (1) |
|
|
227 | (1) |
|
|
227 | (1) |
|
|
228 | (1) |
|
|
228 | (2) |
|
Prioritize Where in the Update Cycles Your Code Runs |
|
|
230 | (1) |
|
Only Run Scripts When You Need To |
|
|
231 | (1) |
|
|
232 | (1) |
|
|
232 | (1) |
|
|
233 | (2) |
|
|
235 | (1) |
|
|
235 | (1) |
|
Per-Pixel vs. Vertex Lighting |
|
|
236 | (1) |
|
|
236 | (1) |
|
Collisions, Mesh Colliders, and the Layer Collision Matrix |
|
|
237 | (1) |
|
|
238 | (1) |
|
|
239 | (2) |
References |
|
241 | (2) |
Index |
|
243 | |