Software for Gamedev, Management, Writing, and Life
I pretty frequently am on a never-ending hunt for software that is the absolute best solution to my brain’s, uh, “unique” way of working on the pretty ridiculous number of things I do on a daily basis. And I am told people in the internet love a good listicle.
So here we go. Most of the software listed is Windows-based, as that’s where I do all of my primary work, but there are a few exceptions for some web apps and OS X apps.
General
- Google — Okay, I know, this sounds dumb. But, in all seriousness, you can jump to google and figure out your query keywords (and “syntax” to filter out a word our specifically require a word) to efficiently find answers to a question or examples or research or whatever. This is, in my opinion, the single most useful thing/skill in the world. In the past, I’ve hired people almost entirely by gauging how they tackle concepts/ideas/algorithms that they don’t know, and if the answer isn’t “google it”, they had to have a real good follow-up.
- ConEmu (using PowerShell) — ConEmu is basically just a wrapper around a bunch of different command lines, but it offers a host of usability/customization/theming improvements beyond what the individual command lines typically do. I personally use PowerShell for everything, but given its… “Unique” command (cmdlet) naming convention, it does take a whole lot of getting used to. UPDATE: I was pointed to Cmder after publishing this by Stephen Whittle — it’s generally just a layer of improvements over ConEmu. It’s neat.
- Process Monitor — Process Monitor has a lot of great use cases but, quite frankly, its most useful one is identifying when something you’re working on or a software you’re working with is experiencing frequent, repeatable slowdown/freezing. My most frequent use case is trying to figure out, in the Unreal Engine 4 Editor, what the editor is trying to access so frequently that is causing slowdown. Which, with Process Monitor, is easy: add a
Process
filter forUE4Editor.exe
, and that will show every single operation that the process executes along with what is being accessed and, if you have debug symbols, the callstack that led to that. - Display Driver Uninstaller (DDU) — Because I like to make sure I eliminate any possibility for error, DDU is a wonderful way to fully clean and do a fresh install of a graphics card driver. First, it boots into Safe Mode for the initial uninstall (as well as wiping registry entries and temp files). Then it boots back into Windows normally so you can install the driver fresh — and if the driver is an NVIDIA one, you can also specifically request a clean install — and then you restart once more (which isn’t required in this case, but why not?) and there you have it: happiness.
- Twitter — Yes, I know. This sounds dumb. But I’ve met so many amazing people in my industry (and others!) solely through Twitter — especially early in my career — that it is just an absolutely lovely service.
- Dropbox — DropBox is kind of a resource hog at times, but it’s also a generally great tool for teams to share files among each other or have a library of things to draw upon when necessary (images, branding, documents, installers, content, etc.). Beyond that, and I forget what price tier this is gated behind now, it has some degree of file revision history. And, recently, they added a feature to enumerate your entire DropBox file structure even if you don’t have everything locally synced. It still shows up as a “cloud” item, and you can just download it as-needed.
- ShareX — While my most frequently used screen shot utility is the Windows “Snipping Tool” (as I have an AutoHotKey script to bring it up and give it focus), ShareX is still great for grabbing quick videos to export as GIFs or MP4s or what have you. And it’s nicely customizable as well.
- Setapp — If you’re a mac user, Setapp seems like kind of a no-brainer to me. It’s basically a low subscription cost ($9.99/month) for full access to a library of well-curated OS X apps. One of those apps is Ulysses (which is $44.99 USD on its own), which is the best. But, I’ve also found a bunch of other great software through that as well such as: iStat Menus, TaskPaper, Polarr, Hype, Capto, Sip, and Expressions.
Game Development
Development
- Visual Studio — I mean. Yeah. And the Community editions of every major release are free (with some strings attached). So, yeah, use it.
- VSCode — I use Visual Studio exclusively for C/C++ projects and C# projects. Beyond that, I use VSCode for absolutely everything text-related on Windows. I have extensions for Node.js, Markdown Preview, shader languages, project managers, Docker, Chrome Debugger, various linters, Python, and others. It was rough when it was first released, but it’s a really solid solution now (and it’s multiplatform).
- Beyond Compare — Up until about an hour ago, I’d have said
p4merge
but then my lead developer told me "just use Beyond Compare" and now I have instantly forgotten aboutp4merge
other than some vague notion thatp4merge
was a thing something called. It's a wonderfully flexible comparison tool that also, unlike that other program, has a simple folder-to-folder diff feature. A+. - GPU Shark — A detailed, simple, light-weight analysis of the current state of your GPU. I primarily use it to see how screwed I am for VRAM in our game.
- RenderDoc — My favorite debugger in the world for rendering issues. I have a plugin for Unreal Engine that will grab a frame, open it in RenderDoc, and from there I can see every single API call made over the course of the frame as well as the data sent along to the API, what various render targets/framebuffers look like at that point in time, and so on. Just lovely.
Content
- Photoshop — I mean, yeah.
- Houdini — Houdini. Where do you even start? Originally, Houdini wasn’t even a consideration for games outside of (to my knowledge) rendering out vfx sheets. It was primarily a tool used for movies and such. But, it eventually started becoming more and more useful for games. And they was really formalized with the Houdini Engine. And the latest release, Houdini 16, took its game-relevant feature set even further. Basically, now, you can create parameterized model “packages”, import them through an integration of the Houdini Engine, and get incredibly powerful content and features out of it. Do note though: it has no learning curve, it has a learning space elevator and the elevator is broken.
- Maya (or Maya LT) — A far more traditional modeling package than Houdini, and also a wonderful one. Maya LT is the FAR more affordable option, but it does lack the higher-end features of Maya proper, as well as a lack of scripting support and a limited poly count.
- Knald — Knald is primarily known for baking textures from high-poly meshes (and doing the calculations on the GPU for speediness mode). It can generate, basically, any texture map you could ever need for a standard PBR pipeline. It (through the GUI anyway) doesn’t support exporting these maps into individual color channels of a given file, but that’s not a deal breaker. For my uses, since I don’t do sculpts or very detailed modeling, I use Knald exclusively for its ability to generate the highest-quality PBR textures based on a given normal map. This doesn’t yield perfect results by any means, but it’s better than nothing by far. It also is useless for metallic maps, since meshes don’t inherently have physical properties named in.
- Marmoset Toolbag — I’m told that Toolbag’s mesh baker is even better than Knald’s but, again, I wouldn’t know. I adore Toolbag for quick model composition and high quality renders of a given set of meshes. It’s a real-time renderer, meaning it doesn’t have a lengthy render time which is great because I am not super patient sometimes. It’s also a very easy-to-use tool and can be great for quickly visualizing materials for a given mesh set.
- PopcornFX — PopcornFX is, basically, Houdini for real-time particle effects. It supports scripting on a per-particle level, noise data generation, particle emission distribution across meshes, spatial queries, and, most importantly, intensely customizable parameterization of every effect. This can mean that creating a new effect can be a lengthy process, but it also means that once you do so, you have an incredibly flexible effect package for your project that can be configured at runtime as-needed. They also do occasional VFX artist spotlights on the best people in the industry. I may or may not have been their first spotlighted user.
- World Machine (with GeoGlyph) — Terrain dataset generation (which is done primarily through height maps for most games) is an incredibly non-trivial process to accomplish. Sure, you could rely on a simple noise generator to create a greyscale map, but that’s at best going to yield some nice hills. World Machine has long been the go-to solution for creating physically plausible datasets for use in a variety of scenarios through its powerful generation and erosion simulation functions. But then it stopped being updated. And that’s where the wonderful GeoGlyph stepped in. It basically hooked into World Machine to expand its feature set with functionality of equal (if not superior at times) quality. And GeoGlyph 2 took it a step further with more features as well as a UI overhaul of World Machine itself.
- SageThumbs — This is an incredibly simple utility for Windows that adds explorer functionality to generate thumbnails for image extensions that Windows natively ignores for thumbnails. It’s a handy thing.
Version Control
First: there is no silver bullet for version control. Every solution has its fair share of issues (and then some). It’s largely based on: team size, project type, file types being worked with, level of outside involvement, and so on. Over the course of my career, I’ve used CVS, Subversion, Git, Mercurial, and Perforce.
- Git — Generally, git is best for text-heavy source repositories. It just so happens that GitHub is one of the best sites to ever exist on the internet for managing git repositories, which is a huge plus. And git allows for easy public access/involvement to a ludicrous degree. It also simplifies the branching and merging process better than any other version control I’ve ever used. It also had the benefit of a wide variety of outside dedicated hosting services for a fairly low cost (unless you have to work with numerous, large binary files). And in that last note: git has a few huge drawbacks — some of which have been greatly improved over the last few years, but are far from perfect. For games, git can be a total pain, largely due to the volume of binary files involved. git, natively, does not handle large binaries well from a server-side or even local perspective. I’ve had git repos with a
.git
folder (where git stores its internal data) that use up as much hard drive storage as the rest of the project combined. git-lfs (Large File Storage) has helped to alleviate some of these issues, but it's still far from feature parity with Perforce. As a final note, though: git-lfs recently introduced "file locking", which allows users to lock binary files while they are modifying them so that, upon repo submission, you don't end up with an unsolvable merge. That addition is very recent, however. Oh, and as a final, final note: the GUI-based software for git is a barren junkyard. GitKraken is quickly becoming solid, but it still can't compare to the git command line. - Perforce — Perforce had long been the game industry standard for version control. And, at times, it shows that age as I used Perforce for the first time in 2009 and when I started using it again in 2015, it looked as if nothing had changed whatsoever. But: it is wonderful for dealing with large repositories, has great built-in functionality for file locking, and it doesn’t create a local cache that mirrors your project in storage size. One of the main issues with Perforce is that there is not an excess of dedicated hosting options, which often means you have to host and manage it yourself on a server. I tried using an EC2 server instance on AWS, but never got it functioning particularly great. Assembla exists and it’s “okay”. There is also another fundamental issue: Perforce is not cheap. Unless you have a very small team (five people or under), it becomes real pricy real quick.
For Joy Machine we went back and forth between git and Perforce, including attempting a hybrid solution. But we ended up just using git with git-lfs hosted on Visual Studio Team Services (which a support rep assured me had no repo size limitations, but we will see about that). And it’s free. Which is weird.
Business and Team Management
- Slack — Private, invite-only servers with a whole host of app/bot/service integrations. It’s almost absurd how much memory it uses, but it’s the best team chat solution available. There’s also Discord, but I generally find that better for more public groups.
- Todoist — I think I’ve tried just about every task management tool that I could find, but Todoist seems to just get so many basic things right. It’s stable, frequently-updated, has platform-native applications for just about every platform, a solid web app, and as of the last week or two, two-way google calendar integration. Which is neat. I’ve also written a thing or two about using Todoist for project management.
- Gotomeeting — So, I had never heard of this until I worked at planet3 and, at first, incredibly dubious of the whole thing. But Gotomeeting is actually a really solid, reliable, affordable group meeting software package. It has all the things you’d expect: screen sharing, join via computer or phone call, text chat, record meetings, etc. etc. etc. But, in general, I’ve just found it incredibly easy to setup meetings with both my team as well as meetings with outside attendees from varying places. Which, I mean, is a feat.
- Notion — Various prior companies have used Confluence for, basically, being able to create structured documentation however they need for their company. Confluence, however, is garbage. Notion is, essentially, Confluence with a design more akin to SquareSpace. The Joy Machine setup looks a bit like this (we haven’t fully migrated all documentation over yet):
- HelloSign — Printing, signing, scanning/faxing (haha faxing) documents is awful. Plus, who has a scanner or a printer anymore (I work remotely, I don’t have an office printer okay)? HelloSign is simple, easy to add fields to PDFs to, and has (disturbingly comprehensive) tracking on outbound documents. Also DocuSign exists, but I was too dumb to figure out how to use it.
- Gmail — I mean. Yeah. It’s great.
Writing
- Ulysses (Mac/iOS) — A lot of the software listed here are just necessities for doing my job, managing the company, and so on, but Ulysses is a special case. There are an abundance of text editors — even good ones! — but Ulysses is my absolute favorite of forever hands down without a doubt. It’s a pleasure to use, it’s fully-featured, has a variety of export options, can publish directly to some sites (even custom-hosted wordpress), and it’s even easy to write entire articles on your phone. Like this one (except the eventual linking to software sites; I’m not a total masochist).
- Google Docs (Web) — Just kidding. I hate Google Docs.
- Dropbox Paper — Surprisingly, Dropbox Paper is a well-done, multi-purpose editor. I tend to use it for more complex formatted/laid out documents which require a variety of different information types. It’s vaguely Medium-esque in its approach to editing, and it’s built for real-time collaboration.
Automation
- Febooti Workshop (Windows) — A well-done, fairly easy to use automation setup and execution program. You can string together a variety of system (and other) tasks which can run as-needed, at designated times/intervals, or if you’re relying on a directory, it can run whenever a directory is updated. It has a low-footprint service that runs in the background to run the various tasks you setup. The primary downside is that its scripting support is limited to VB and JScript (which is believe is Microsoft’s version of JavaScript that they named as such to avoid potential legal issues with Sun’s Java). But, that ends up being avoidable by just executing batch or executable files instead.
- AutoHotKey — I haven’t done a lot of work with AutoHotkey, but what simple scripts I’ve written have been quick, simple, and easy to generate an executable file from. My basic scripts are for managing NVIDIA’s ShadowPlay and Windows’ Snipping Tool (which I have set in the script to force to the foreground with focus), all of which are bound to one of the five customizable macro keys on my keyboard.
And that’s a bunch of software for y’all!