Jamie Fristrom--one of the creators of Spider-Man 2, Schizoid and Die By The Sword, currently senior engineer working on Minecraft for Mojang|Microsoft--on game development.
There were a couple pieces of very different art that inspired New Atlantis. This one by Michael Corriero:
I looked at the detail of that water, the waves, the foam, the reflections of the buildings, the way the foam interacts with the buildings, and thought, "We won't be able to come anywhere near that with our resources." But I loved it.
And then there was this one:
Love the colors and shapes there.
I was thinking the water would end up much closer to the latter, but just discovered Unity 4's new Water 4, and after messing around with it a bit, realized I could get in the ballpark of the look I was going for. It looked very bumpy-shiny-mirrory-CG at first, but I killed the specular highlights, lowered the reflections, and-most importantly-replaced their foam with the cartoon foam I was using. (Paid $10 for that foam! That's a material percentage of the project's budget so far! Since I haven't actually had to pay for Unity Pro yet...) Now that's in the ballpark of what I'm looking for - some of the colors and cartoonyness of the Futurama scene merged with the paintedness of Corriero's piece:
Thank you Unity!
And for more of Michael Corriero's work, check out:
We're still casting about for a consistent look for Energy Hook - one that's inexpensive but cool. I've been leaning towards fairly flat-shaded on most things because flat-shaded has a "I meant to do that" sort of look to it - where if you texture then you can easily have inconsistent or insufficient texel density or inconsistent art styles on the different textures - but it's probably too abstract. More surface detail looks like we're giving it more care and helps with the sensation of motion - when you're running along a flat-shaded floor it's kind of hard to tell how fast you're moving.
So here's some before and after from what I've done this weekend. These beige tiled buildings will probably go away soon anyway, but in the meantime...
Before.
After.
Which one do you like better?
Playing around with the look has meant changing shaders on a bunch of materials at the same time, and I made life easier on myself with this editor script, which takes all the shaders of a given name in the scene and changes them to another.
/*
This file is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to
*/
using UnityEngine;
using UnityEditor;
using System.Collections;
// ReplaceShader
public class ReplaceShader : ScriptableWizard
{
public Shader oldShader;
public Shader newShader;
[MenuItem("Custom/Replace Shader")]
static void CreateWizard ()
{
ScriptableWizard .DisplayWizard ("Replace Shader", "ReplaceShader");
}
void OnWizardCreate ()
{
//Transform[] Replaces;
//Replaces = Replace.GetComponentsInChildren();
Renderer[] renderers = GameObject.FindSceneObjectsOfType (typeof(Renderer)) as Renderer[];
foreach (var renderer in renderers) {
foreach (Material m in renderer.sharedMaterials) {
if (m.shader == oldShader) {
m.shader = newShader;
Debug.Log (m.name);
}
}
}
}
}
Call it "ReplaceShader.cs", put it in your \Assets\Editor folder, and use at your own risk - back up your stuff first. It'll mess up all your materials just like magic.
I'm doing something these days that a younger me would have been horrified of. Trailer Driven Development: the feature isn't done until I've made a trailer of it.
I'm doing this for a couple of reasons. One, because I'm working alone most of the time and I can't just call across the office, "Hey, check out the cool thing I just did!" and have my co-workers ooh and ah. (I can have my kids ooh and ah but it's not the same.) So making trailers and e-mailing them to Paul (and often, the world) fills that need. But also because the important thing right now is to sell the vision of the game, and what better way to do that than with trailers? In fact, if I'm coding something that isn't going to make good trailer and help the kickstarter, I'm kind of wasting my time, because the kickstarter might not even succeed.
This isn't so different from what any studio needs to do when they're in the early stages of making a game. Those early stages are often not about selling the game to the end player (who couldn't care less about our trailers, they want the game itself to be delivering the awesome, of course) but selling the game to publishers, biz dev people, bosses, journalists, and others who probably don't have the time or inclination to actually play your game (and put up with some gameplay that might not-be-so-awesome as they get over a learning curve...) and what better way to do that than trailers.
The younger me would have freaked out. He would have said, "Dude, you're a game maker, not a film maker." The younger me (and the older me, for that matter) has seen so many games make teaser trailers - sometimes just for in-house purposes, sometimes not - that are often prerendered in Max or Maya! - that create unreasonable expectations in people only to dash their hopes. (Medal of Honor: Airborne was one of the most egregious.) And it really chafed the younger me's hide when people got all excited over those games. "Doesn't anyone see!? Can't they tell these games are making promises they can't keep!?"
So that's where I'm drawing a line: I'm not making prerendered footage. (I don't actually have the resources to do that, anyway...) It's all in-game footage. And while I may be putting the camera in a place it would not actually be in game, and while there may be bugs and sketchy bits that I'm not revealing - which would be a sin to not take care of in full production - I'm okay with that level of sketchiness right now.
So have a 9-second trailer: this is addressing two pieces of feedback from the weekend. One, from @MaxSzlagor, that I need more landmarks. This is a pretty serious landmark. And another, from @RossCowman, that I need to let people know what the story is. The story is it's the future, and we have gravitic technology, and this is a massive example of that.
What do you think? (You see, if you give feedback, you can get credit! Being good gets you stuff!)
@MaxSzlagor thought we needed an actual character, not just a stick figure. So now we have a character, the sporty lady you see here! We also have some breaking glass, courtesy of one @JohnAegard.
I'm looking for feedback, positive or negative, but mostly negative: why wouldn't you help fund this?
It's easy to keep coming up with excuses for putting off the Kickstarter. My latest excuse is that if we wait to launch it in December (and we make it) the money will come in the next tax year...
I heard over a million people use Unity? That's ... crazy. There's a million game developers in the world? 1 out of 5000 people is a game developer? I wonder how many people who play my games are also game developers. Maybe writing articles on game development is fairly user-facing after all. So here we go.
I taught a class at DigiPen earlier this year where I made the students use Unity to illustrate various game-tech concepts like shaders, physics, lighting, audio, etc. So I've now got a list of a few things they typically didn't do that you really should if you want to be productive / effective / cool with Unity. I'm still a Unity rookie (been using it for less than a year) but here's stuff I wish someone had told me (or my students) when we were starting out.
Prefabs, prefabs, prefabs. It's very tempting to put some GameObjects in your scene, and then start duplicating them, and then you realize, "Hey, I want to make some changes to all of these." And if you had used prefabs, you'd be able to. So always use prefabs. It doesn't hurt to get into the habit of using prefabs even with one-offs. Hey, you might duplicate them, or use them in another scene, or what-have-you. For prefabbing a mesh, I've found it's good to parent the mesh to an empty GameObject and prefab that. You can't nest prefabs; you can't have prefabs within prefabs. It's not a super-huge deal, but if you expect a nested prefab to work you'll probably be confused. Something I learned the hard way. If you've already duplicated a bunch of non prefabbed GameObjects in your scene, it's not too late. There's a useful script here that lets you select a bunch of objects and replace them. Replace all those duplicate GameObjects with a nice prefab. (The L-shaped buildings are instances of prefabs. I've got a thing going on in the code that randomly shows and hides their roof decorations, that's why they don't look identical.)
Debug. In my programming career, the habit that took me from being a not-so-effective to a very effective programmer was learning to step through code in the debugger as I wrote it. Don't wait for your code to clearly not work; make sure it's doing what you think it does as you write it. I do this less now, because C# is so much more reliable than C++, but I still do it about half the time. An in depth look at Unity debugging is here.
Figure out and use the light mapping. The difference in quality between a light mapped scene and a not-light-mapped scene is huge. I'd rather have lightmaps than textures. (Okay, a lightmap is a texture, but you know what I mean.) The settings I've been using for Energy Hook include Shadow Samples: 1000, ambient occlusion 1, but only 5 texels per world unit. Takes hours to bake the city scene, but you can selectively bake if you want to see how the bits you just worked on look.
You don't need Pro to use the light mapping.
Editor scripts are cool! There's something in me that makes me reluctant to write an editor script - it doesn't feel like real work somehow - but it can be a great time saver, as with any batch file or python script or what-have-you. I have scripts that randomly recolor entities and scripts that randomly adjust the heights of buildings, and I feel like I'm just getting started ... a random city generator wouldn't be out of the question.
Paul recently modeled some untextured buildings, trains, water tanks, billboards. I've thrown them in the city and am checking them out. Please excuse the stock Unity character model and the low texel density on some of the buildings, that will change.
It was also an opportunity to put iMovie and the new Mac through its trailer-making paces. So much more intuitive than Vegas...and faster, though that's probably just because my windows machine was so old.
Okay, caveats galore: this is almost all me, not Paul, so anything you don't like, well, it's because Paul hasn't gotten his hands on it yet. I wouldn't even have shown anything to y'all, but it's Monday and I can't think of a single darn thing to blog about. So, for my Monday post, have some screenshots.
I am having all kinds of fun stepping outside of my comfort zone and actually trying to make game art. Almost all of this is taking the toon-shaded kit-bashing idea made popular by Borderlands, mostly using assets from SketchUp, and seeing what I can do.
But one thing I wasn't crazy about was modeling streets and populating them with cars and whatnot, and then I got the idea that the whole city is flooded. (Great, now I have to populate it with boats.)
Maybe it's a coastal city after serious global warming; maybe it's some kind of man-made artificial-island city. Or both.
Maybe the building on the left predated the flood and the building on the right was erected later:
Some buildings have weird Geometry of the Future:
So, well, there you go.
Although Paul hasn't exactly given his blessing on this stuff yet, Energy Hook might actually end up looking something like this.
After making Numbergun! with Sofia I realized that most people wouldn't want to play it but I bet there are a lot of parents out there who have kids in the under-ten range, too young to sit down and make a videogame by themselves, who might think it's a fun project to make a game with their kid. I'm thinking most kids, like Sofia, would be so excited to have their art in a game they won't mind that it doesn't look quite like Call of Duty or Halo when it's done.
So I decided to try my hand at making a video tutorial.
What a big pain that turned out to be. I knew it wouldn't be easy but it was an even bigger task than I imagined. Anyhow, after spending a day on it I decided I really should focus on actually making games, but I did manage to finish ... something. So here it is, warts and all. Really bummed about the recording levels, you'll probably have to turn your computer's speakers all the way up just to hear what I'm saying. And I just realized the mouse cursor is invisible! :( Oh, and now I've noticed that the YouTube video quality is terrible! (Any advice on how to fix that?)
Anyhow, if you can stand watching the video, to do the project, you will need a couple of free programs: Unity and Gimp. And if it turns out I'm going to fast in the tutorial, you may want to use some of their tutorials to familiarize yourself with those programs before diving in here. (And if you're already a Photoshop person, you may prefer to use Photoshop to Gimp.)Also - you'll need images of your kid's art. I simply took Sofia's drawings out into the sunlight, snapped photos of them with my phone, and e-mailed the photos to myself.
And, finally, you'll need these scripts I wrote that I've graciously put in the public domain: kidfpsscripts.
What's I'm covering here includes how to get a FPS up-and-running in Unity with some rudimentary AI using UnitySteer and a diorama-style (kinda-Wolfenstein3D-like) flatcard enemy.
I did record more footage, of putting more than one monster in the level and adding some front-end graphics and text, but editing is enough of a pain that I'm not going to make Part 2 unless someone requests it. So, if you liked this, and want more, let me know and I'll make it so.
Okay, "finished" - Because I'm out of time. Managed to get a better tutorial, scoring system, particles, and harder levels in there in the last few hours.
We here at Happion Labs believe in family, particularly when they can provide us free labor. Presenting Numbergun with art by Sofia Fristrom, 7 years old. And programming by Jamie Fristrom, 42 years old.
SO - this is our Seven Day First Person Shooter, or #7dfps as the kids say - and if it wasn't for the thing ending tomorrow I would say it's way too early to ask for feedback, BUT. SO. If you had just a couple more hours to work on this, what would you do?
Not only is it cute - there's the beginnings of a novel game mechanic in there.
The best superhero games of all time Game Informer Top five games of all time Yahtzee Croshaw Top five superhero games of all time MSNBC Top 100 PS2 games of all time Official Playstation 2 Magazine 1001 Games You Must Play Before You DieNomination for Excellence in Gameplay Engineering Academy of Interactive Arts & Sciences
Penny Arcade PAX 10 Award Nominated for XBLA Best Original Game Nominated for XBLA Best Co-Op Game
Recent Comments