//Matt Schoen

//Software Engineer

//Co-Founder, Defective Studios

import Home; import Resume; import Photos; import Talks;
class ContactInfo {
final string facebook_id = "mtschoen"
final string twitter_id = "mtschoen"
final string github_id = "mtschoen"
final string quora_id = "Matt-Schoen"
final string email = "matt@mtschoen.com"
}

class Unity {
public Unity() {
I've worked at Unity since I joined the VR Labs team in San Francisco on May 2, 2016. Most of my previous work in Unity was under the Defective Studios umbrella, alongside Jono Forbes. I'm calling out specifics here which were projects that I took the lead on, but please also visit DefectiveStudios.com and read our blog to see what we've been up to.
}
public void Unity PolySpatial() {
I currently work on the PolySpatial team. PolySpatial enables Unity content to work on Apple's upcoming Vision Pro device. You can lean more at unity.com/spatial.
}
public void Unity AR Companion() {
During the development of Unity Mars, we realized that a significant part of the content creation workflow would need to happen on an AR device. Not only does it help to capture real environments for simulation purposes, but sometimes you want to make small tweaks or even create entire scenes from scratch in the real world, with the real device in your hand. Shortly after the release of Unity Mars, we announced the Mars Companion Apps, and released a private beta version. In 2021, we collaborated with Apple to add support for their Object Capture photogrammetry workflow, and rebranded the app as the Unity AR Companion. Finally, in February 2022, we shipped the app to Google Play and Apple App Store where it is still available today.
}
public void Unity Mars() {
Unity Mars grew out of a Labs hack week project in 2018. We were exploring ideas for content creation enabled by early versions of Google's ARCore and Apple's ARKit technologies. It quickly became clear that creators would need a new class of tools for simulating their content in real-world scenarios alongside Unity components and systems to express designer intent and expose AR data in a useful way. We created Unity Mars to solve these problems, and shipped the product in June 2020.
}
public void EditorXR() {
EditorXR was the first project I worked on after joining Unity. After the project was announced at Vision Summit 2016, Jono and I joined the Labs team to contribute engineering work. EditorXR originally launched later that year at Unite 2016 under the name EditorVR. We were accepted to Siggraph 2017 to give a talk and show EditorVR at Real Time Live. In the following years, we continued to make improvements and ship code via GitHub. I took over as technical lead in 2018 after the product was renamed to EditorXR, before eventually moving on to work on Unity Mars.
}
public void CosmoKnots() {
CK CosmoKnots was our flagship game. It never made it out of alpha, but we're still proud of it. You can read more about our development journey over on the blog. CosmoKnots was given Trailblazer Recognition in the Intel Realsense App Challenge.
}
public void Dragons Adventure() {
CW HitPoint Studios posted to the BUG mailing list looking for a "Unity performance surgeon." I figured that such a job was right up my alley and eventually signed on to the team for a few months as an independent contractor. My responsibilities included overhauling the world builder system and squashing general performance bugs like out of memory errors and frame rate drops on mobile devices.
}
public void UniMerge() {
UM UniMerge fills a crucial hole in the process of doing version control in a Unity project. It allows users to compare otherwise-unreadable scene files within Unity itself in order to merge them after branch merging or conflicted merges. Check out the promo video to see the tool in action.
UPDATE: I gave a talk at Unite about Unimerge!
}
public void GameFace HomeScreen() {
Not many people have seen this project in action since it was made for hardware that is currently only a prototype. GameFace is one of the players in the emerging VR market, and they engaged us at Defective to create an interactive home-screen app switcher for the system. Look forward to more news about this in time.
}
public void JSONObject() {
JO The JSONObject module was a class that I made early on in my use of Unity. I wasn't happy with existing C# libraries and how they integrated with a Unity project, so I set out to make the simplest JSON parser I could have. It's become a very popular free tool on the Asset Store and is used by many different projects at many different studios.
}
public void Defective Splines() {
The spline system that drove character locomotion in Platformer, Defective's first project, is also a module that we released for free on the Unity Asset Store. It's been a while since I updated it, but it still works well as a character controller or simple pathing system for moving objects around in Unity games.
}
public void DX11 Tesselation experiment() {
As a brief hiatus from CosmoKnots, shortly after Unity released their DirectX 11 API, I decided to try some DX11 hacks. Along with the tessellation shader in the link above, I played with compute shaders in an attempt to create GPU-driven smoke particles. That one didn't get far enough to show. To my knowledge, this was the first ever post about quad patch tessellation in Unity.
}
public void Garbage-free String Hack() {
A hack that I arrived at after many months of attempts to optimize in-game data serialization. It fixes performance problems that arise in Unity games that make too many calls to string manipulation functions that create garbage.
}
}

class WebWork {
public WebWork() {
I've done a variety of small web jobs over the years. My most comfortable stack is the admittedly out-dated LAMP (PHP/MySQL) setup, but I've also worked with C# in an ASP.NET application, I've deployed and interfaced with ElasticSearch (which is quite cool), and I've even dabbled with Ruby On Rails, though I'm not fond of it.
}
public void SkeedyID() {
SkeedyID SkeedyID was a web service for ski shops and customers to manage service orders and rentals online. Skeedy helped shops and resorts keep track of equipment waiting for services, e-mail customers when it's ready for pick-up and reach new customers who have already signed up through the service. Customers could search for shops in their area and request and pay for services online.
}
public void CountyChair() {
An old family friend had a party rental business that needed a website update. Enlisting the help of Jon Elliott, I came up with a nice, simple redesign for him. Simple, elegant, and functional, the site provided a full inventory list, contact information, an interactive map with driving directions, and a funny story about Paul Newman!
}
public void AssetCloud() {
AC AssetCloud was an attempt at managing the content of a Unity project online. The project has since become essentially defunct now that Unity supports version control packages and text-based serialization of its own data. It was the basis for the user-generated content hosting for Platformer.
}
public void Defective Suite() {
The Defective Suite is basically just a way to wrap up a lot of individual needs into a single web backend for our main project, CosmoKnots. Over the course of development, there were some experiments that we were doing that involved saving data to a backend, and eventually we wanted a way to view that information. Additionally, it serves as a way of managing current builds of the game so they're always available. This project has stagnated a bit along with CosmoKnots (it was never officially a feature), but rest assured, it will be back!
}
}

class Contract {
public void Track My Maccas() {
TMM Track My Maccas was a promotional app for McDonald's (in Australia it's called Maccas) to educate consumers about food sourcing in their local area. The app used a user's location to give them information about where various products (beef, fish, lettuce, etc.) in their food came from. The app also used Augmented Reality technology to display an animated diorama around the customer's product box to illustrate the information on screen.
}
public void UUA Illuminations() {
UUA We were approached by the Unitarian Universalist Association to create a devotional app for Unitarian churches. Users of the app could view inspirational words and quotations as well as a virtual animated chalice which can be lit or unlit. Unfortunately, the app is now discontinued.
}
}

class Other {
public Other() {
I also just like to do things which are worth sharing. Some of them aren't even code!
}
public void AboutMe() {
If I'm nothing else I am curious. I've taken to computers (and by extension videogames) because they are, in my opinion, simply the most fascinating thing on Earth. I also enjoy listening to and playing music, as well as watching and making movies. Once upon a time I did technical theater and even played lead in a show! Put a problem in front of me and I'll try and solve it.
}
public void Guides() {
Guides For a long while, as I've worked on visual tasks with computers, I've wanted the program I'm using to provide horizontal or vertical guides for lining things up. I finally decided to make a global Windows application to do the same thing no matter what program I'm using. It's available on github and sourceforge.
}
public void NightNDay() {
ND I thought it would be cool to use a tilt-look script to drive a live wallpaper for android phones, so I whipped one up in my spare time. All the art was created by me in Vue. I hope to update this soon to allow users to load in their own photospheres.
}
}

Design and code © Matt Schoen 2024