Archive for September, 2019

Surface Grids & Lasers | DevLog #10

Video: a Surface Grids data map of elevation displacement as fragments from a massive collision carve and crater Earth’s surface.

Surface Grids & Lasers are not yet available in Universe Sandbox! This post is a behind-the-scenes look at our work on these features. We don’t have a release date yet, but we’re getting closer every week.

If you haven’t seen them yet, check out the previous Surface Grids DevLogs  #1, #2, #3, #4, #5, #6, #7, #8, and #9. Keep in mind these are documenting a work-in-progress feature. Anything discussed or shown may not be representative of the final release state of Surface Grids.

A primer on Surface Grids for anyone not familiar:
It’s a feature we’re developing for Universe Sandbox that makes it possible to simulate values locally across the surface of an object. In effect, it allows for more detailed and accurate surface simulation and more dynamic and interactive surface visuals. It also makes it possible to add tools like the laser, which is essentially just a fun way of heating up localized areas of a surface.

How to Build a Planet

In our last DevLog we welcomed Brendan, our new graphics developer. Brendan is jumping right into helping Georg, our senior graphics developer, with work on visuals for Surface Grids. His first project is building new tools for generating heightmaps.

Our goals for this project: create a random heightmap generator capable of building known geological features in randomized configurations for planets, moons, and other objects. For example, it should be able to generate a heightmap for a planet that has features like large mountains and rifts, echoing what we’ve observed on surfaces in our Solar System, but ultimately unique in its configuration.

Additionally, it should be able to work with a combination of randomized and known data. For example, it should be able to sensibly fill in the missing gaps when we have limited data from real-life observations.

The trick with all of this is to find the balance between messy, randomized heightmaps that don’t result in any recognizable shapes or features, and clean-cut heightmaps that look overly designed and artificial.

So with these goals in mind, Brendan has come up with a recipe:

  1. Generate plates
  2. Generate large-scale features based on plate tectonics
  3. Add details
  4. Add impact craters
  5. That’s a planet

Plate tectonics: Please note that this does NOT mean that we are creating a simulation of plate tectonics within Universe Sandbox. We know this is a common feature request — and we agree it would be awesome to have — but simulating and showing the actual movement of plates over time is much more complex and is something for further into the future.

Instead, our plan is to use the concepts of plates and tectonics to generate sensible starting points for large-scale features in the heightmap. Then from there, we add smaller details like lakes or hills, pepper in impact craters for older surfaces, and voila, there is the surface of a planet. (Of course, this results in just the heightmap, which informs rather than is the surface visualization.)

Keeping Tabs on Your System

In DevLog #4, we shared some mockups for some of the new user interface (UI) that’s part of Surface Grids. The most important part is the new data map, which shows the Grids data in a nice and colorful 2D map of the surface.

The map is a gateway to understanding the benefits that come with the Surface Grids feature: instead of seeing a single value in a textbox for a property like Temperature, there are now thousands of color-coded points all changing and moving across the surface as heat diffuses and the temperature adjusts to the factors of the simulation.

But beyond helping with understanding what Surface Grids is doing, the map is also a powerful tool for monitoring the data. And sometimes, you want to view data for multiple objects at the same time, so you can keep tabs on how the planets and moons in your system are changing in the simulation.

With the new map UI, you can “pop out” a map from an object’s Properties panel and dock it to the left side. Then you can set it to view different Surface Grids data or the standard surface or composition view, and you can stack them for different objects. Chris has been working on implementing the mockups for the map and its docking functionality, which can be seen on the left:

Unrelated to Surface Grids, one of our other developers, Jonathan, has been working on some styling changes to the user interface, adjusting things like font size, colors, and margins. They’re smaller changes on paper, but we think the improvements really make the whole interface look and feel better. Just part of our constant quest to make Universe Sandbox better and easier to use.

What’s Next

This has probably been said in a previous DevLog, but it’s worth repeating: Surface Grids is a big and complex feature. We know we’ve been working on it for a while, and it may seem like progress is slow-moving, but we really are moving along at a good pace — there’s just a lot to do. Since the last DevLog, Universe Sandbox astrophysicist and developer Jenn has fixed a handful of temperature issues, so now planets are created at, and settle into, more accurate temperatures. There are lots of little issues like this that come up when building a complex simulation of something we know so well, like Earth.

So now we’ll continue with more fixes to the simulation and the visuals, more work on the UI, more improvements to the heightmap generation, and more of everything else that helps make Grids fully functional. Hopefully we’ll have an opt-in experimental build soon. We thank all of you for your patience!


Advice for Aspiring Game Developers

Whenever we put up a job posting, we get a handful of applications from younger fans who are aspiring game developers. They usually admit they’re not qualified, but they nonetheless write in because working on Universe Sandbox is their dream job.

While they may not have the experience we’re looking for (and some aren’t even old enough to meet the minimum employment age in the United States!), we definitely appreciate the enthusiasm. And for many of us on the team, we relate on a very personal level: we also dreamt of being video game developers when we were growing up. And it was only through some form and combination of self-teaching, mentorship, and lots of experimentation that we ended up as professional game developers working on a very cool project.

Recently, our graphics developer, Georg, put together some advice and suggestions in response to a younger applicant. But we realized there may be some nuggets of wisdom in here that others would like to see, too. So why not share it with everyone? So here they are, slightly modified to be relevant for any kind of video game programming role. If you’re more interested in game design, animation, music, production, quality assurance (QA), or any other aspect of game development, check out these suggestions anyway. The ideas can be applied to most things in life!


1. Download Unity and start working through programming tutorials. Don’t worry if you don’t understand it yet, you’ll get there.

Or choose any other game engine out there. We like Unity because it’s free for casual users but it’s still very powerful — it’s what we use for Universe Sandbox! Unity also has a bunch of really great, free tutorials on their site and elsewhere across the web, plus a big and helpful community at all skill levels.

If you’re feeling overwhelmed when you first start programming, don’t worry, that’s normal. You’re learning a whole new language!


2. Don’t give up if your code doesn’t want to cooperate all the time – nothing does, that’s part of the fun.

You’ll run into bugs, your game won’t start, you’ll bang your head on your desk, and you’ll begin explaining things to rubber ducks. Sometimes you’ll need to shave a yak. Don’t worry, all of this is also normal (…relatively). One of the best ways to learn how something works is to dive in, break it, then figure out how to fix it. And maybe go a little off the rails in the process.


3. Get inspired by your favorite games and apps. See something in a game you like? Find out if someone has written about how to develop it and see if you can recreate it.

Inspiration is a tremendously powerful motivator and driving force, and copying and recreating something is another great way to learn how something works. The best part? A lot of game developers (especially indie developers) love to share their knowledge in detailed blog posts and video devlogs. These devlogs dive into the technical weeds of projects the developers are working on, and they’re a great way to get inspired by developers you admire.

Just remember: when you’re first starting off, keep your aim narrow. Don’t set your sights on recreating a massive, AAA-style game. Instead, find one particular aspect you think is done very well or seems unique or interesting and begin researching it. Or see if your favorite indie developer or studio keeps a devlog of the projects they’ve worked on (we’ve got our own devlogs which lately have been talking about our work on the next big Universe Sandbox feature, Surface Grids, though they’re not quite as technical as others out there).


4. The community is helpful. There are no bad questions. Be kind and share your results with other students and teachers.

There are lots of people out there learning how to program and become video game developers, and everyone was once a beginner just like you. Don’t be afraid to ask for help or ask a question about how something works, even if it seems like something simple. Sometimes you’ll get an answer that explains a lot more about what’s going on than you’d realize if you had just brushed past it and continued on. As with all internet interactions, things will go more smoothly if you’re kind, you’re patient, you attempt to write clearly, and you provide context and details.

And while those who have been programming for a long time are definitely more qualified to give solid advice than someone who just wrote their first “Hello, World!” program, there doesn’t have to be a huge divide between the roles of teacher and student. Once you get your footing, it’s likely you’ll be able to help out the beginners with the very basics, even if it’s just pointing them to the resources you found helpful.


5. At some point, someone will call you a programmer. Much later, someone will pay you for that. And much later still, you’ll be working on something you love. Be patient, you’ll get there.

Hold on tight, it’s a long rollercoaster. With a little bit of patience, the excitement of seeing your skills grow and grow and using them in more and more projects will be plenty to keep you going.


6. Find others like you and do things together. Everything is better with someone to relate to. You’ll get further, faster.

Take a class, start a club, join a Discord server (and join ours while you’re at it), recruit your friends to your brand new indie game studio — do whatever it takes to find a community of people who are on the same path as you. The support and help of others who are interested in your wellbeing and success may be the exact thing you need at some point along the way to avoid giving up. Make sure to return the favor!


7. Never give up!

It’ll seem impossible at first, and then it’ll be hard later on, and then just when you think you’re progressing smoothly, you’ll run into another frustrating obstacle that makes you want to bang your head on the desk and start talking to the rubber duck again. Refer back to #5: Be patient, you’ll get there. If you’re stuck, take a break. Clear your head by doing something that’s not staring at your screen. Whether you step away from programming for an hour or a few days, it’ll help immensely.

Of course, it’s not all misery — far from it. We wouldn’t be doing it if that was the case. There are huge rewards in learning to program, like the joys of finally cracking a complex problem or creating a game with your name on it and seeing others love it as much as you do.

And if you want to take a more career-oriented stance, you can rest easy. Demand for software developers is already high and is expected to grow 21% from 2018 to 2028 in the United States, a rate much higher than in other fields. Learning to program is a safe bet on a path toward a stable, well-paying career.


We hope this helps! And maybe one day you’ll see one of our job listings and say, “I’m a perfect fit for that position.”