How to build a holodeck, week 22
This week I’ve spent a tiny amount of time looking at blending between panoramas, and a big chunk of time trying to get toolchains working.
Blending 360 panoramas
I have a data set of 27 roughly-aligned photo spheres taking with my Ricoh Theta S. these constitute a cube, 3 x 3 x 3, with the origin about 1m above my garage origin and the distance between points being 100mm.
Here’s a short video what that grid would look like if each photo was taken at the correct position - each sphere represents the position of the camera for each photosphere image.
You can see I’ve managed to fix the portal render textures in Vive too - a bit more of that in a second.
So, I’ve got a load of images - the next step is to blend between them based on the position of the eye in space. I’ve got a very early first pass of this working, with a single eye, and eight of the images (rather than fully blending between all 27). Here’s another quick vid.
The intended result here is that I blend from each of the corners of a cube to the “correct” position for the eye, and then show that view.
There’s loads of issues with this, mostly due to the setup I’m using to generate the images. 10cm between images is FAR too far apart - this is good to know! I’ll need to generate sets of images that are much closer together (probably 10mm or closer).
The rotational misalignment between images is also slightly evident, but it’s not as bad as I had feared.
To generate images that are actually going to work with this method, I’m going to need a LOT more of them, and they will need to be properly aligned or auto-aligned, as it took me quite a while to do it manually with 27, and I’ll likely need hundreds or even thousands for this to work well.
Of course, that brings along with it the need to compress the data set I’m using (the 27 panos alone are tens of megs). That’s going to require some more research.
I also need to get this working in stereo - figuring out the two eye positions (instead of using the centre of the head) and drawing different spheres to each eye in the Vive headset.
To fix some rendering issues I was having in Unity 5.3, I decided to jump onto the Unity 5.4 beta.
Chasing SDKs and toolchain updates is one of the more annoying factors when making digital content. When we were working on CSR Racing, we started on Unity version 3.3. This was quite substantially different to the latest versions (5.3.5 at time of writing). During development, Unity released fairly regular updates (and we were pretty lucky at Boss Alien to have a great relationship with the Unity folks). This brought improvements and bug fixes, but often these changes introduced bugs, knock-on effects from the fixes, and other unforseen problems.
This lead us to the (mostly rational) approach of explicitly scheduling updates and upgrades. This is great when you’ve got a live product that you can’t really afford to break. The flip side is that you can creep a long way from the latest version, and doing the upgrade then becomes a costly and painful process. Moving from Unity 3 to Unity 4 took a good few months of effort. Moving from Unity 4 to Unity 5 was much less painful, but still a month or two.
Here at home, I’ve mostly been keeping up to date with the latest Unity 5.3 releases via the patch updates. This means I’m never too far behind the latest build, and can normally switch back to a previous version pretty easily. This amortises the upgrade cost, at the expense of spending time and effort chasing bleeding-edge bugs and problems.
The latest Tango SDK release (Qianru) doesn’t, as far as I can tell, actually work with Unity 5.4. Getting any details / info out of people on this is the usual blood and stone routine. On the one hand, it’s totally understandable (as 5.4 is still in Beta). On the other hand, once it’s out of Beta - likely this month - then everyone is going to want to switch over to it pretty darned fast, especially if they’re working on other VR platforms, because 5.4 brings a whole host of stability and performance improvements for VR.
So, after burning a good couple of days trying to resolve getting them working together, I’ve decided to just stop trying to get Tango stuff working until it’s fixed by someone else (or they provide the necessary information to help me fix it).
And that’s mostly been my week! On a personal note, this week was the anniversary of our son Eli’s birth and death, and that’s always a hard time for myself and my wife. It was great to be around for both days, and I was able to take the boys along to support Nic on an 8K run she did for charity, supporting the Trevor Mann baby unit who cared for Eli. She raised over 1000 pounds, and I think being able to achieve something so positive made this year a much better time.
Next week …
Summer holiday are upon us, so I’ll be doing something I’ve not had the chance to do for a good 20 years - sit around, in the sun, playing with my children and potentially drinking the occasional beer.
I’ll be continuing to do updates, but progress will be a tad slower.