It was the best of plans, it was the worst of plans. It used the latest tech, it used the old reliable tech. Yet such can be said of pretty much any plan.
The grant project was to make an AR Map of my school’s main campus. I had never worked with AR, so I didn't have much insight as to what I was getting into.
The capstone is a VR music-making program (DAW). I’ve worked with VR and dabbled in tone-generation before, but never gone this deep into either.
Unreal Engine was the obvious choice. It’s great for VR, I have plenty of experience, and it supports ARCore, which was the target platform for the AR project. Within the first month of the semester, I could ‘Blueprint’ as quickly and efficiently as I could code in any language.
Unreal’s Blueprint Visual Scripting
I fully expected this AR project to be a royal pain. In reality, it was difficult and glitch-ridden from the first day. Google recommended downloading their fork of UE (Unreal Engine) in order to develop for the latest version of ARCore. It took a while to download, then it had to be built in Visual Studio. It began to build, it kept building all night, and it kept building, never fully making it to completion. After 2-3 more tries, I gave up and used the main fork of UE, even though it supposedly did not feature the absolute latest version of ARCore.
The sample project from Google had to be imported to work in this different version of Unreal, but it appeared to work like a charm and I was spawning Androids within a day of switching to the main fork. It was a simple matter to replace the Android model with something a bit more relevant, and voila! Despite disobeying the documentation, it worked flawlessly.
Marshall University’s Engineering Building sits in my dorm
The VR Music project hinged very heavily on being able to generate tones in real-time. Some web surfing revealed that Unreal actually has a built-in audio synthesis plugin, and it did exactly what I needed! I expected programming a capable audio synthesizer to take most of the semester, so this put me ahead of schedule.
With that breakthrough, the project could have gone far ahead of schedule. However, other events took priority, including running my VR booth at conventions. The conventions want me back next year, even though I’m graduating soon and going who-knows-where. 😥
After the initial success, progress on the AR project slowed. In Unreal, there is a huge library of functions available to call. However, there are only a handful of ARCore functions, and most of them are used to provide the most basic functionality to the ARCore Example project.
The next step was studying. I traced each function and added comments to explain how they worked. Then came modding, to re-work these functions to give me the functionality I wanted. No need to waste time re-inventing the wheel. Several hacks later, I could spawn a campus. And that’s all!
Fortunately, I planned with the expectation that AR would be hard to work with-- the project called for spawning several relatively static objects. Basic functionality and minimal interactivity meant that the project was in scope, even for a n00b like me.
The VR project is something that I had been planning for over a year. I wasn’t going to let it become duct-tape and spaghetti code.
After the initial experiments, I did two things. First, took out some paper, and sketched the objects that would be involved in the final product, their relationships, and their basic functions. The process was undertaken with maximum care, and the basic layout hasn’t changed since the initial planning.
With a plan in place, I set out to work, and progress went well. I coded carefully rather than rapidly, fixing bugs as soon as I found them and optimizing things as soon as I found a means to do so. Fixing bugs ASAP meant that I did get stuck on one, but a great friend of mine took the time to help me debug one that had me stuck for almost a week.
Never turn down the opportunity for a great aerial shot!
Winter was coming! It got really cold, and I was freezing my fingers off while flying the University’s drone around campus. The imagery of buildings and landmarks was destined for the AR app, but I’d never turn down a beautiful aerial shot, even if my fingers were numb.
As I reviewed the project, I realized how disappointingly far from finishing I was, and that there simply wasn’t time to put many of those images into the app. I started making the crude app more presentable by adding a menu, and then proceeded to battle the errors and UX problems that ensued.
Yes, time was limited indeed, but the VR project didn’t need to be done, just good enough for a presentation. A Capstone presentation. The question wasn't how to finish, the question was: What were the features that I absolutely needed before the most important presentation of my college career?
Part 2 Coming Soon!
Plan your large projects very carefully, it will pay off in the long run.
- Else you’ll spend more time fixing old features than adding new ones
Don’t spend time stressing about details that nobody cares about.
- Unknown technologies will bring unknown issues into the mix
- Plan more time than you think you’ll need to learn new things
Prioritize and re-prioritize
- One core feature is worth a thousand minor sub-features
Agile is awesome
- Seriously, fixing issues immediately and improving code as soon as you find a more efficient method results in more efficient code and more efficient coding
Don’t neglect documentation!
- Even if it’s not proper UML, a diagram is worth a hundred code comments.
- Comment your code as if you’re going to have amnesia tomorrow
Keep a development log for your personal use
- After not touching a project for weeks or months, a log allows you to jump in as if you did it yesterday
- Drones are cool