Zen and the Art of Learning

Zen and the Art of Learning

Posted by on Mar 21, 2016 in Game Development

Here’s a study in “what you don’t know and how it feels to learn it”.

I was looking at my brownstone model and thinking about how I was going to texture it. It’s not the most detailed model out there: it’s got some windows, with window frames and panes and such, and that’s about it. But unwrapping this would be a real PITA because of the natural crenelations involved in recessed building techniques.

I was looking at Substance Painter and Quixel Suite 2 because both of those supposedly allow you to just paint right on the model, or define material placeholders on your model in Blender, which you can then just “auto-replace” with proper textures (oversimplification, but I don’t really understand “PBR” enough to provide a better explanation). I thought “Wow! That’s really cool!”, but after watching a tutorial on Quixel, it looked really complex. Substance Painter seems better explained (their tutorial videos are very easy to understand, so thank you, Allegorithmic!), although more expensive.

In the course of watching Substance Painter videos, I learned a key fact about 3D modeling, and why you would want to make a high-poly and low-poly version of the same model. I had heard of this dichotomy before, but thought of it as designing for different needs. A high-poly model would be useful for stand-alone rendering like ads or showcases of a product. Using a high-poly model in a game is dangerous, as the more complex the model the more horsepower the engine has to devote to draw it. Multiply that by however many models you need to render and update in real time, and it becomes clear that high-poly models are going to have a significant cost. So designers need to make a low-poly version for real-time use in the actual game. What I never understood was that there was a connection between high and low versions until I watched the Substance Painter videos: the high-poly model — the one with all the intricate detail — serves as the template from which you generate your mapping, such as a normal map and occlusion map. You then take those maps and apply it to the low-poly model, and suddenly the low-poly model looks like the high-poly model, but with less geometry. It’s all a trick of the virtual light that makes your generic, less detailed model look like a more intricate, highly-detailed model. Mind = blown.

This was the point where I went looking for information on generating maps for my brownstone. I’d generate the maps on the detailed model so those windows on the less detailed version would be simplified, and I’d let the normal and occlusion map take over the illusion of depth. But in order to get those maps, I’d still need to unwrap the UV, which is the absolute bane of my existence. Even Blender’s “Smart UV Unwrap” method didn’t provide me with a “good” implementation that I could understand. I needed more information on how to handle this specific aspect of modeling, but a lot of the documentation on Blender is either really outdated, or not informative enough in terms of technique.

So I went back to my uber-Udemy Blender course. I’d left off at a place where they were talking about the absolute basics of using Blender, so “watching” those videos meant spending the time playing Black Desert Online on the other monitor while the instructors went over loop cuts and things like that (i.e. all the things I end up forgetting exactly at the point where I need them). The next chapter, however, was a little more in-depth. We were working on creating a bowling pin and ball. Not the most exciting models, of course, but a lot was learned: using materials, bezier curves, how to turn most anything into a sphere, and some of the more “esoteric to new modelers” concepts. The course also touched briefly on getting the models into Unity, along with creating a collider “shell” for your object so physics works correctly in the game engine. In short, good, usable techniques with examples, explained well.

This course is long, but informative and easy to follow, and that’s the bottom line here: tech teaching usually sucks real hard. When I finished up the video instruction for the day, I had a really sweet looking bowling pin and ball! I credit the instructors for knowing how to talk to an audience that knows nothing about the upcoming task without talking down to the audience that knows nothing about the upcoming task. Tech people are the worst at this kind of thing, by and large, because they know what needs to be done, but don’t always think about what needs to be done. Tech people like to always move forward, and don’t always consider the steps they need to take to do the things that are now second nature to them. When tasked with instructing someone else in how to perform as task, at least one of two things happen:

  1. They get all eye-rolly and condescending
  2. They skip a crap-load of constituent information

Everyone knows — or has been at the center of — stories of tech folks talking about how non-tech people are “stupid”. That’s a load of bullshit. No one is born with knowledge they enjoy holding over people, there’s plenty of knowledge that even the smartest people have trouble grasping, and “stupid” calls to mind people who can’t do anything. I can build a PC from parts, but I can barely do more on my car then start it and change the wiper blades. To an auto-mechanic, I might look “stupid”. To me, a mechanic who can’t figure out what an error message on his computer screen means might look “stupid”. Different strokes, people. We all have potential, if someone else can muster the patience.

But having patience is no good if we can’t articulate. Tech people are funny in that they’re always thinking current or abstract. Here’s the desired outcome, and here’s what you need to do to get it done. A lot of the Blender tutorial info I was finding took that approach. It told me what I needed to click and what it did, but never really explained why I would want to do that. “To get the desired results,” is certainly the sarcastic answer, but it’s not the answer that helps me help myself in the long run. Because tech people rarely look back to evaluate what they’ve already learned, they usually can’t give out decent advice on how to get up to speed. This has been the core issue for me in game development. I can repeat steps someone tells me I should take, but I don’t understand why I need to do it. How do the parts relate? How can I recover something if it goes south? Are there any best practices involved, and what are they? And if I run into a similar but also different situation in the future, will this technique still be applicable? I’m being given a fish, not taught how to use the fishing rod.

I enjoyed my video tutorials so much that I didn’t want to stop last night, but I had to, you know…get up and move around to avoid an embolism or something. I felt that I was really getting somewhere and learning something. I had started out wanting to accomplish “a thing”, found that I couldn’t because I didn’t have adequate training on how to accomplish “a thing”, and then found that one of the resources I had at my disposal was actually helping me learn. Not specifically about the “a thing” I wanted to accomplish at that moment, but I feel that I’m making progress, and will eventually learn enough to be able to do that “a thing” that I need to do.