End of semester recap

Accomplishments

This semester, I’ve explored issues relevant to stereoscopic rendering in general, and the Oculus Rift in particular.  I’ve also explored the current state of software packages that offer rendering to the Rift.  We’re on the cusp of having a viable test platform for our calibration experiments, and I have a better understanding of the problem we’re trying to solve.

There was also some investigation into what the Oculus SDK does with its calibrated values, and if we can leverage them for our investigations.  The answer is mostly no, though we may need to force their FOV to some fixed value before we manipulate ours.

Challenges

There are a lot of options for rendering to the Rift, and a they bore exploring.

A fair chunk of time was spent repurposing code inherited from other lab projects — becoming familiar with their structure, and paring them down to be a bit more nimble and debuggable.  Most of “nimble” here is file size; some of our projects have huge data sets or library collections that weren’t immediately relevant to the current effort (and didn’t fit in the storage I had available); part is restructuring them to not use the same files as other actively developed projects, so my changes don’t compete with other lab members’.  This is a normal part of code reuse, and there’s nothing about this code that made it especially difficult — it just took time to decide what everything did, and what parts I needed.

Engines like Unity and Unreal seemed promising, but weren’t quite ready.

The Oculus SDK is in a phase of rapid development.  New versions usually provide enough improvement that we want to use them, and enough changes that reintegration takes some effort.  The major shift was DK1 to DK2, but the minor shifts still cause problems (the newest version may be the source of some current code woes, but may solve issues with OpenGL direct rendering, as well as jitter in Unity; both of these could make development much faster).

Also, we’d like to use as much of the Oculus-supplied rendering pipeline as possible (for easier reproducability, and thereby greater validity), but it’s been a pain to wedge more of our changes into it, or more of it into our in-lab engine — particularly as it keeps changing.  We’re currently at a relatively happy medium.

There were also some problems finding someplace for my code to live; the code bases I’m working from are big, even after paring them down, and have moderate hardware demands; they proved too much for my poor laptop or the initial spare lab workstation.  However, my the new computer in my office has more than enough hard drive space and GPU muscle for my current needs.

There’s also a shift from “I read a bunch of interesting papers” posts as the semester goes on.  This is because much of my reading time was taken by other classes, in spaces not immediately relevant to this work. I expect that next semester, a lighter class load will leave more time for reading in this space.

Next Steps

There’s some polish to be done on the code — adding experimenter controls and cleaning up participant stimulus.  Then we can pilot with different pointcloud environments, and investigate different calibration procedures.  Then, proper experiments.

 

Ski Simulator Final Post Questions

-What are your overall feelings on your project? Are you pleased, disappointed, etc.?
Overall I was pleased with the outcome of the project. After working on the two ski simulator demos this semester, I feel more comfortable with developing programs on Unity, creating models with 3ds Max, and designing textures with Paint.NET and the UV editor in 3ds Max. And I got a little taste of what it’s like to develop video games, which was my main goal for the semester.

-How well did your project meet your original project description and goals?
I feel that my project definitely met all my original descriptions and goals. When I first started the project, my goal was to get something similar to the original ski simulator working in Unity. After working with Unity for a little while, development became (surprisingly) very easy and quick. With how fast development was in Unity, it was easy to go beyond my initial goals for the project and exceed my initial expectations.

-What were the largest hurdles you encountered?  How did you overcome these challenges?
I would say the largest hurdle I encountered was simply getting started with Unity. When I started the project, I had no experience with Unity whatsoever. However, after sitting down and watching some tutorials on the Unity website, I was able to figure out how to make a simple program. Beyond that, I found Unity to be very intuitive and easy to learn for all the other features of the program. Any other issues were usually solved with a little bit of thinking and possibly a few google searches.

-If you had more time, what would you do next?
If I had more time, I would look at designing and implementing animated models with moving limbs in the program as that sounds challenging, but useful. Also, I would attempt to make the project more suited for the web-based and android environments. I might look into these things on my own as I think they might be nice to know and good things to add on to the program for fun.

Also, here is a screenshot from the editor of the entire hill (minus some trees due to the rendering distance of the impostors):

001

And if you want to download the executables, here are the links:

Windows: https://blogs.discovery.wisc.edu/public/apps/SkiSimulator/SkiSimulatorWindows.zip

Mac: https://blogs.discovery.wisc.edu/public/apps/SkiSimulator/SkiSimulatorMac.zip

Linux: https://blogs.discovery.wisc.edu/public/apps/SkiSimulator/SkiSimulatorLinux.zip

 

Finished Holiday Demo

This week I finished up the holiday demo. I finished making and placing obstacles, put coins throughout the mountain, and made the trees look slightly more consistent after playing around with the shaders. Some things I added were houses and a giant christmas tree at the end of the hill, jumps and moving obstacles in the candy cane tunnels, a waterfall in the tunnel with the penguins, a castle gate towards the end of the hill, and wooden archways to help guide the user through the mountain. I also populated the rest of the hill with some previously made obstacles to make it more interesting. And I made a simple script to spin a given object, which I used on some hoops in one of the tunnels and the star on the christmas tree at the bottom of the hill.

Here are a few screenshots of the mountain:

001002  003

After finishing the project, I feel like I’ve learned quite a bit from the experience. I walked in knowing nothing about Unity and now I find it to be a very comfortable environment for developing programs. I also got to learn C# and explore how to utilize scripting in video games. And with Unity taking care of a lot of the tedious components of the program, I was able to gain more experience with modeling things in 3ds Max. Overall, I would say I had fun working the project, learned a lot, and have no complaints with the final product.

New computer setup

New machine is much faster, and has plenty of space.  It seems pretty great, all around.

It took a bit to get admin access to get things installed, but that’s sorted now.

Next week I’ll be fixing the code to work from local, and then fixing code to work in general.

Working on Holiday Demo – Global Snow, Medal System, and Moving Penguins

This week I added moving penguins to the hill that walk around and collide with the user and a medal system for when the user collects coins. I also made a light post model, made some christmas lights for the tunnels, and added gumdrops to the candy cane forest. I added some fog to the demo to make the trees rendering in the distance less noticable. After the first jump on the hill, I added another jump with more hoops to jump through. I also got the snow to appear globally now. I just made 3 different particle systems at different vertical coordinates with respect to the user, that way the user cannot ski out of the snow (as easily) when going downhill.

Here are some screenshots:

002 003 001

For next week, I will look at trying to wrap up the project. I will finish adding coins and obstacles throughout the hill and make boundaries to the hill to prevent the user or penguins from wandering off. I might also look into making better house models for the bottom of the hill if I have time.

Code Progress

Fixed it.  I think.  Half fixed it?

It rendered.  Several times.  Buttons do what they’re supposed to.

It still crashes; seemingly always when using a dummy Rift, sometimes when using a real one.  Seems random.  Goes in streaks.  Will look into disabling timewarp — that seems to be what it’s doing when it breaks.

Motion looks strange; I don’t think the distortion-correction shaders are working correctly, chromatic and spherical distortions are very much present.

Otherwise needs some polish.  For instance, after seeing the throwing target in the Rift, I realize I’ll need to work in world instead of view coords.  This means passing in a few more uniforms, or adjusting the origin of the pointcloud scene.

I should probably look into modifying pointcloud scenes, anyway.

 

Code Progress

Updated to the latest Fiona version to fix one bug, maybe caused more.

Pointing the individual projects at the same libraries is getting a bit hackish; this is partly an artifact of compiling across network and local drives. It may be easier to move everything to the network; I haven’t space to keep it all local.

Everything compiles, but now requires a Rift to actually run; I suspect I’ll have a Rift to test on tomorrow.

Also, I’m assuming a square FOV for now.  The Rift’s default is pretty close, but I suspect I’ll need to find a way to force a symmetric viewport (or at least statically sized viewport). That happens somewhere in the code of the 0.4.3 tuscany demo.

Ideally the FOV would be based on the real-world physical size the viewport occupies on the screen.  This is complicated by the Rift choosing a viewport size based on calibration. I’ll test using Oculus SDK defaults until I track down the real numbers.