January 14th, 2017

Authoring grass using normal mapping tools2

I’ve been working more or less consistently on the project our main page so sparingly alludes to.
The main bits of the game come from one of Tony’s wildly elaborate and fascinating dreams mixed with Willow (the movie), Zelda64 and a mis-communication of one my brainstorm ideas at our initial design meeting.
Environments have been my focus lately. The persisting lack of an animation system makes character design feel kind of cramped and lackluster.
I once read an article about the creature fur in Black and White 2. I remember thinking it would be a nice technique for things like plants and grass and I’ve since noticed it used in games like Shadow of the Colossus in those very situations. I’m not sure what kind of workflow those guys used to create their fur and grass, but I’ve wondered about using normal mapping tools and some by-hand work to acheive the same results. Recently I went ahead and tried it out, and I think the results are pretty good for a first attempt.
The technique is plotting dots of color on many layers of transparent polygon planes. When you get enough layers and view it from a proper radius, it looks like strands of whatever. The pictures will better describe what I mean:
124763421_0001_Layer 10.jpg124763421_0002_Layer 9.jpg124763421_0003_Layer 8.jpg124763421_0005_Layer 6.jpg124763421_0006_Layer 5.jpg124763421_0007_Layer 4.jpg124763421_0009_Layer 2.jpg
To create this, I started by using Maya’s PaintFX tools to quickly generate some polygonal blades of grass. I converted these to geometry shapes, and then created 18 rectangular faces of equal size stacked upon one another and evenly spaced out. The planes created a box that encapsulated the blades of grass. After laying out the UVs of the planes, I merged them into a single shape and calculated a normal map with the grass as the source mesh and the planes as the target mesh. Because I kept the search radius very very low for each face, the normal map came up empty besides where the blades of grass had intersected the faces. I then colored the UVs for each face in photoshop by had to get a gradient of dark green to white as the planes go from bottom to top. Anywhere the normal mapping tool wasn’t able to get a result I made transparent. I hope this makes sense, I kind of feel like it won’t as I compose this. Usually in the game, you’ll only see this grass from the top, so the side angles that get all split apart will be avoided.
chrisTonyAtBoard.JPG
We’ve become very elaborate and official with our project management. We use a system called “SCRUM”, perhaps you’ll be able to read up about it in Gavin or some one’s blog… I don’t understand it all too well, really. I’m just there because I have good (maybe I should just say “better”) handwriting for the index cards. I think its meant for much bigger groups working on much bigger projects, but it helps us communicate and stay disciplined about exactly what we are doing so we don’t work on all kinds of randomness forever.
scrumBoard.jpgrockinOutMan.jpg

RockinOutMan has been Rockin the drift trank on the PS3 demo of GranTurismo using a Logitec MOMO via USB the entire time our current project has been in development. There was a breif period where I could bank scores higher than his, but lately he has been getting REALLY good, and has hopes for the top spot on the online rankings. Currently a man named SlighteyCyrus dominates the drift boards. We hate this man, but are quite sure he lives in the apartment down the hall from us. Note the spare MOMO in the lower right.

Musculature and FF120

Chris is changing things around with how stuff gets from my screen to the game.  Its all very wonderful.  We have a meeting today where I get to hear it described in detail.
I’ve stopped working on Lithium stuff for the time being, and have started up a new character model.  I can feel elements I’ve been learning from my drawing classes seeping into the work.
Also, I’ve found that working out at the gym has really helped my understanding of musculature, which is kind of odd to me – but I suppose it shouldn’t be.  They have big mirrors on the walls and I pretty much stare at my arms contracting and expanding several hours a week.  I was looking through some old torso/shoulder/arm models and found myself solving many of the reoccurring problems within minutes.

The rest of this post is about me playing FF12 and you can probably skip it.

I got Final Fantasy 12 the day it came out, but haven’t had time to play it too much yet.  The characters and the look of the world arn’t really to my taste.  I much prefer Tetsuya Nomura’s FF7 or FFX style.  Last night I put in some solid time, and I’m warming up to it.  The battle system is exactly that of an MMO, and I hate MMOs.  The persistant world navigation/combat system setup is already something FFX should have done (imho), but I wish they could have wandered even a bit further from classic FF combat.  Grandia III’s battle system was really cool, I wish they had taken some ideas from there.

Anyway, this is the first Final Fantasy game that I’ve actually bought even reasonably close to it’s release date, and its the first FF that I haven’t had all the plot points spoiled by friends before even touching the controller.  I’m taking this very seriously.  I went to my friend’s place to hang out Saturday afternoon.  Knowing he had bought the game recently and had probably put in more time than I, I waited outside his door while I called him and demanded he save and turned off the machine so as not to spoil anything for me.  The only sure way to do this is to just play the hell out of it as fast as I can.  Which is what I suspect I’ll do.

Also, most of the music isn’t done by Nobuo Uematsu, and I feel very aware of this.  Once I’ve completed the game and my self-enforced ban on consuming FF12 info outside of actually playing the game is lifted, I want to verify which songs he actually did and see if my suspicions are correct.

And I really wish I could play the game in Japanese.  The trailer I saw at E3 had japanese voice actors, and they were splendid.  While the english one’s arn’t BAD, every cutscene I end up thinking to myself “that probably worked better in the original”.

Lithium0

Allow me to give you a short tour of Lithium’s current capabilities.  The tool operates out of a main window, which can be embedded in the interface, or free floating.  There are 3 sections, one for each node type (SceneNode, BoundingVolumeNode, ScriptNode).  A row of buttons at the top of the window is used to create these nodes.  Their initial parent, names, positions and attribute values are based on your current selection and the values you have set in the options window.  For example, if nothing is selected, the BV button will create a BV at the origin using the sizes and offsets you provided in the window.  If one or more SceneNodes are selected, each SceneNode will get a BV as a child, which is positioned relative to the SceneNode.  If the SceneNode has geometry under it, the BV will try to adjust it’s size to this geometry.  I hope to infer as much information as possible from the user, so that using the tool can be very powerful and flexible without needing tons of random buttons and options to explicitly specify.

Here we see BV nodes created on 2 SceneNodes.

bvShow_0002_Layer 8.jpg

bvShow_0004_Layer 6.jpg

Most of my work has gone into creating a system which can reference objects from other maya files.  It should be tailored to level creation type work, so these imported objects need to be instanced and copied all over the place.  Again, I want the user to do very little explicit specification.  The interface remains somewhat primitive, but the system works just how I want it to.  Rather than typing in a string for the object you want to reference, there will be a browse menu available, a “already imported” drop down thing and the like.  Adding these things is relatively simple, the hardest part is deciding how to organize the information in the window set up.  I think I’d like to start working hard on a game project again, and get a bearing for how I’ll end up using Lithium.  Then just add things as I want them.
This is a saved maya file called “player1.mb”.

refShow_0000_Layer 6 copy 4.jpg

I’m going to reference things from it into a new file.

refShow_0002_Layer 3.jpg

When you import an object through Lithium, it creates a reference to the requested file (should it not already exist), and hides it away.  Then, it creates an instance of the elements within the file you’ve asked for, and parent constrains them to the SceneNode that requested the import.  The actual instanced geometry remains hidden away from the current scene’s hierarchy, and does nothing but display itself.  The idea is that when this file gets exported to the game engine, these nodes with references on them will grab objects that have been exported from other files.  So if I have a city with many buildings, and each building has a ceiling fan, I can simply create a single fan and have that fan show up in all the buildings.  This saves me time, and improves game performance.

refShow_0003_Layer 2.jpg

Lithium makes it very fast and easy to create stuff.

refShow_0004_Layer 1.jpg

Lithium makes it very flexible and easy to change stuff.

refShow_0005_Background.jpg

Game worlds will be built with maya files that contain basically no geometry information.  There will be small files which define a specific thing, and many of those things get referenced by the level file.

ScriptNodes aren’t concerned with their world position or visual display, so this is hidden from the user.  I imagine ScriptNodes will be manipulated entirely within the Lithium window.  These are very game specific, so I don’t have anything besides their interface behavior defined yet.

Madison IGDA Chapter0

Stolennotebook recently attended the brand new Madison chapter of the IGDA. (btw the “I” stands for International, not Independent). It felt kind of similar to our E3 visit, we gained insight into the industry and met the real flesh and blood folks behind the scenes – which ended up kind of depressing.

In some ways, it was really exciting to be able to just mill around and talk with people who do this stuff for real. At the same time, it was very apparent that many of them lacked the same… energy about making games we have here at stolennotebook. In an episode of Creating Kaos, Damon Grow has a similar meeting with other local game developers where several of the interviewed professionals refer to themselves as “paycheck programmers”. This strikes me as really lame, and completely contrary to everything I’m about with regard to game making. Paycheck programmers belong at Intel and Sun, not game studios. The crew we met with had much of this same lameness about them.

One element I had correctly predicted was the sheepish attitude of the artists. They seem to have tasks thrown at them by people who are technically proficient, and just kind of do as they are told. I was asking all kinds of questions about the creative process in their studios, and I was mostly met with confusion. “They tell me to make a box, so I make a box.” type thing. There is not much that is artistic about the artist’s job, it seems. I’ve known for a long time this is the kind of environment game makers work in (American game makers, at least) but its still kind of alarming to see someone who’s aesthetic sensibility has been consumed so completely by it.

And so my vigor as an independent game maker is renewed.

Cookin with Lithium0

I’ve been making progress on my MEL level editor system. Things have been slow going for many reasons: I’m back in school now, many of my friends have returned to Madison… but more than this I’m a stinky coder. One of my strengths as a member of this team is an ability to get really consumed by a project, putting in every spare moment just because I really love what I’m doing. This current stuff is definitely interesting, edifying and worth while, but I can’t seem to get the kind of momentum which I usually depend on to allow me to work quickly. Never the less, my progress has been consistent. I’ve got a simple GUI with little icons and such to execute what I’ve written so far. The automated process of importing and cataloging external files is complete, with a small particular problem I have yet to resolve.

Most of my time is spent exploring and testing many different ways of approaching the same task, to find the one which is most suitable. Maya is extremely open ended and forgiving in terms of allowing you to tackle a problem however you are most comfortable. This is excellent when you just want to automate a single task (which is how I’m used to using MEL). However, when your system gets deeper, it becomes imperative to do things in ways which are more or less harmonious with Maya’s core design philosophies. By this I mean storing particular types of information in the ways Maya likes it to be stored, organizing things how Maya likes things to be organized. MEL has tons of tools and functionality available, and its important to keep your work compatible with what already exists. I have a pretty solid idea of what I want to end up with, which has been very helpful for planning how things should work now.
As I mentioned, this work is edifying and an important step, but I am already very much itching to get back to just modeling and making stuff.

Oh, I named the system “Lithium”. I hope nothing similar is already named that. A few quick google searches suggest not. Wikipedia explains that lithium can be used to fight mania, depression and bipolar disorder (I’ll mention here that I personally have strong problems with any kind of mind/mood altering supplement such as anti-psychotics in all but the most extreme cases). It can be a component in channeling/harnessing large amounts of power, as in lithium batteries or thermonuclear weaponry. It is also a catalyst for chemical reactions.

Lithium does not create simplicity out of complexity, but offers a different way of experiencing complexity which is easier for a mind to deal with. When given the proper situation it can take silent, dorment forces and empower them to many times their original potential. This is all rather dramatic for a couple of amature MEL scripts, but with Maya as my katamari, I intend to keep it rolling and growing as my tools change, and will eventually collect all the elements of my workflow.

SN Reorganized0

With everyone in such close proximity now, I had thought that things like meetings wouldn’t have to be scheduled and things would more or less organize themselves when they needed to happen.  But this doesn’t seem to be how things will work.  The “problem” is that we operate as a group of friends first, and an elite team of independent game makers  second.  I tend to be overly pushy in terms of my expectations of others at times, and I’m trying to be very aware of this – but at the same time it will take some discipline to get anything done.
Chris is fortunate to have an interesting and stimulating full time day job.  Unfortunately for the team, this is eating up the bulk of his coding energies.  This last week or so, the team is been feeling out adjustments to the working style that our new living arrangements demand.
Maybe this makes it sound like there are all kinds of problems, but in the big picture things are definitely cool.

Part of the plan is that Tony will be taking over the bulk of the actual code generation “monkey work”, and Chris’ time will be more focused on design decisions.  This solves the problem of Chris being over worked as well as making Tony more involved and capable with the game engine we are developing (which Chris authored).  Additionally, I’ve started looking deeper into MEL (Maya’s scripting language) so that I can take the load of tool creation.  This too is a good arrangement for multiple reasons.  I have the best understanding of what Maya is already capable of, and how it can be practiced most effectively.  While writing MEL is a “coding” task – it really belongs in the realm of asset creation.  We’ve got Gavin running through the tutorials Maya provides, so that he can help out in the near future with simpler asset related tasks.  I’d be interested to see a blog post of his thoughts as he learns the system.

My first MEL task will be to create a referencing system, so that I can build a level in which I can place objects made elsewhere.  I’ve got a few ideas I’m excited about, but I’ll save that for another post once things get more cleanly laid out.
Ordered 2 books from amazon,

  • 1 of: Complete Maya Programming: An Extensive Guide to MEL and C++ API (The Morgan Kaufmann Series in Computer Graphics)
  • 1 of: Complete Maya Programming, Vol. II: An In-Depth Guide to 3D Fundamentals, Geometry, and Modeling (Morgan Kaufmann Series in Computer Graphics and Geom

I’ve been able to finish the section on MEL in the first book, and it’s pretty thorough.  Might have liked more examples.  The API stuff is a bit over my head, I haven’t touched C++ for something like 2 years now, but I’m definitely interested to explore that sometime if it looks like it could be useful.

PubCrawl has been sitting around waiting for Internet.  Should be able to post that tonight or something.  I had a pretty clear idea of the type of game I wanted to represent in the milestone, and I think it comes through in the game play to some degree.  I hope you have some fun with it.

Lemon -> Lemonade is how denrei rolls0

Its an unforgiving life for a refugee here in Madison WI. Its been over a week since flooding forced my entire apartment complex to relocate, and it looks like move out day will over take being allowed back in. It seems that our underground basement/garage became completely filled with water to chest/neck level, floating the cars it housed. The result was in the form of a damaged, hazardous transformer and a pool of filth and gasoline. My roommate: “Fun half day of helping cute girls in sports bras push their cars out of the garage turned into shitty half month of homelessness”. My beloved roommates, bless their little hearts, didn’t clean out their fridge when the power initially went out, opting to save that task for about 5 days later, after spending the weekend away. (I have my own mini-fridge where I keep my stuff ((I love you Mom, Dad)) which was cleaned out in a responsible and timely manner.)

But, as I’ve been instant messaging to concerned onlookers, lemon -> lemonade is how denrei rolls.

I’ve been taking daily showers in the University Gyms available to students here, and used this opportunity to start working out. This means I’ve had to up my diet from a single chipotle burrito every day to a burrito and a large tuna sandwich. Also, I drink far more milk than I’m comfortable with, which is bought from a nearby convenience store at a price much higher than I’m comfortable with, at a time much closer to the expiration date than I’m comfortable with.

All of this means that I’ve spent a huge amount of time in the UPL and PubCrawl has been coming together brilliantly. Tony and I have been working most our waking hours on it. Our time is split between describing to one another of how great the systems/we are, and making an interesting/productive test. Its a little heart breaking to have these models that I’ve invested so much effort into to make normal mapped shlopped in here with bland maps, but its also great to see them in the engine in any form.

Please keep in mind as you play these milestone tests (crossblast, pubcrawl, whatever we do next) we definitely do NOT consider these complete upon release and hardly “games” at all – they are short term tools meant to hone our skills and technology for games to come, and we’re excited to share what we’ve done with people who happen to be interested.

P.S. for those of you who tried crossblast and it didn’t run – please do give this one a try. If it doesn’t work, it would be very helpful to us to get a comment letting us know. Part of the purpose of distributing these is to reveal various machine-specific problems. Our QA department consists of my roommate’s dell laptop and Tony’s girlfriend’s desktop.

Building the Pub0

Working on this milestone has been a real 180 from CrossBlast. My main task is to get a tavern level as complete and interesting as possible using the current technology (geometry and color maps only, no animation system). The goal is to test our new system for creating scripts within maya. For example, I will place the definition for a fan’s rotation speed on the node in maya, rather that telling Tony what I want it to be, and have him implement it in the code. It should be in Outland’s visual style (that means not ridiculous). I definitely wanted to include some of the character models I have been working on, but without an animation system things are going to be a little muppet like.
Because there will be no normal maps in this version of the pub, I’ve gone through the textures I want to use and pulled extra detail from the normal map. Usually this meant copying the R and G channels of the normal map and blending them in to the color map in various ways. Because these textures will be thrown away when we get normal maps working, I wasn’t concerned about spending too much time here. In order to get things together quickly, I used maya’s “convert to file texture” thing. It bakes lighting in the scene and shader information into the UV space of an object. Here is Phara with her quick new color maps.
PharaPub.JPG
Its not my best work, but I’m keeping in mind all this texturing will have to be redone soon. Hopefully Tony will reappear soon so we can get moving on making things use the scripting system… I’ve got a few “game design” ideas I’d like to see implemented unless they take too long to do. I spent Sunday night in the library messing with Garage Band to see if I could get some quick ambient music which would be appropriate for the setting.
Also, I’ve been a refugee for the past few days. There was a really heavy rain storm here before the weekend, and my apartment was damaged to the point that the City of Madison demanded we vacate. The red cross gave us rooms in one of the dormitories around here, and I’ve been spending as much time as I can in the UPL grinding on the pub and listening to Dave Matthew’s Band while I wait for them to allow me back into my apartment. Hopefully tomorrow.
EDIT:
Not tomorrow, but 10 DAYS from now. I guess they have to ship a new transformer from overseas…? This means I’ll have moved in to my new apartment before they allow me into my current one.

Secret Games are best made using TextureMaker0

I’ve been doing a lot of texture work lately, using exclusively photoshop and my digital camera. Its a little frustrating to use photoshop for these tileable textures… you really have to go out of your way to make the layer styles (I so recently came to love) tile.

In a moment of weakness, I googled for a low cost tileable texture maker and found TextureMaker. I downloaded the demo and was presented with an unfamiliar and off putting set of icons. I mashed a bunch of them, and something cool came out. It was like, worn shingles. And it was perfectly tiled! It saves me the “putsing to get it perfectly tiled” phase, and cost no more than a trip to your local game store. Still, you can’t get polished results using TextureMaker alone, so I doubt that I’ll ever make a texture which doesn’t pass through photoshop at some stage.

The original idea for the current milestone was to distribute the current version of Outland. It doesn’t seem like such a good idea now, because what we have is very infrastructural. So we decided to put togeather a small, alternative environment to test what we’ve got now. In order to not get sidetracked and waste time, we put a 24 hour cap on the project. So we’ve got until midnight on the 19th to create everything and polish it, then another 24 hours to make it avalible for you to download and enjoy.

Art School0

I finished my summer sculpture class today. This second project went very well (I’ve mentioned before that the first one stunk). While it might have been frustrating at the time, I do feel like I’ve learned quite a bit from this class and the other fine art classes I’ve taken so far. “Digital artists” like myself often think of fine art as a waste of time, that we are above or at least aside from it. And I still think this. But in being forced to buckle down and work in common artist terms, and be critiqued by their standards – I’ve sort of expanded my appreciation for what they are trying to do – and where they might have strengths I lack.

Everything I work with digitally is very complex. Not referencing the technology of it, or the math or huge learning curve of the tools. The nature of the art I am creating has many limitations and requirements. My job is to make pieces which are, if not “realistic”, certainly convincing, representational presentations. I cannot really call them “compositions” because I really have little guarantee on the details of how the audience member will experience them (its built as a dynamic, interactive experience). So I’m always working within the “stylistically realistic representational” realm, within an unpredictable environment. This unpredictability exists everywhere – how the character will be rendered, what graphical settings is the player set on, what level is he in, which frame of which animation, has the player seen them before… Also, there is a story which needs to remain coherant to the visuals. The model has to actually represent a character in the progression of the game (go figure). So this is what I mean when I say game art is “complex”.

In this art class I was specifically told not to make my work iconic or representational. It had to operate completely on abstract form. Again, my personal feeling is that no hunk of nonsensical plaster can be as cool as a convincing character. But in having to narrow my tool set down to the most basic visual elements, (and introduce the awkward limitations of actual physical objects) I was forced to really come up with a brand new way of thinking creatively which I had never thoroughly tapped into before.
A concrete example of what I mean. If the character I’m working on looks odd to me for some reason, my natural progression would be along the lines of “What cloths is he wearing? Should they be more futuristic? Is his body defined properly? Do his gloves make him look more like a ninja or a pilot?” when perhaps I should be simply asking things like “Is this balanced? How do the forms here and there relate? Which elements here are dominant?”. I mean, I’ll never explicitly think those things. But I think my eye will be keen to it.

To mention the game, my work has remained in the world scene. Its definately improving, but I’d really like to see it in game soon, with in game lighting and such. That would help… 0_o



Copyright (c) Stolen Notebook, LLC
Imhotep theme designed by Chris Lin. Proudly powered by Wordpress.
XHTML | CSS | RSS | Comments RSS
| Post