Thursday, March 29, 2007

HLSL Training DVD

I've been telling game artists for a long time that they need to learn to write shaders in HLSL. Putting in the time to learn a little programming is a very small thing compared to the total control and power you get over the appearance of your art when you can write your own shaders.

Now instead of just telling people to learn, I'm working to help people learn. Chris Thomas from Cg Academy has invited me to create a series of training DVDs for the purpose of teaching artists HLSL. I've already created the first DVD, "HLSL Fundamentals" and it's now available from Cg Academy.

This first DVD focuses on the basics of shader writting, breaking things down so that you don't have to have any programming experience to start learning to write shaders. You can read all about the content of the first DVD on the Cg Academy site.

I'm currently working on the second DVD in the series which focuses on lighting in shaders. I'm going to talk about how to add omni lights, directional lights, and spot lights to your shaders, discuss the various elements of surface lighting and shading, and also present some advanced lighting topics.

This is a really fun project to work on, and I hope that the DVDs are helpful to artists who are interested in learning to write shaders in HLSL. If you've seen the first DVD, feel free to leave me some feedback. I'd love to hear from you. I'm also open to suggestions for what to put on future DVDs.

Thursday, March 15, 2007

GDC07 Friday

After breakfast at Denny's (again) I went to my first session of the morning. It was given by Mark Teare from Factor 5 and he talked about how he used lots of different art programs to create several different assets for LAIR. Basically he wanted everyone to use the strengths of lots of different programs to achieve the results they're looking for. For example, he created a base model of a helmet in Max, subdivided it, then brought it into Zbrush for detailing and normal map creation. Then took it back into Max for final tweeking and used Photoshop for normal map combining and diffuse texture painting. He also showed some really nice topology tools in the Max plugin, Polyboost, which are really nice for drawing clean edge loops on existing blocked-out shapes. For creating foliage he showed off his technique of creating a high poly model of the leaves and branches - then rendering a normal, diffuse, and opacity map from that to be applied to a billboard. That's the way the Crytek guys were doing it too, so it seems to be the way to go.

Next, I attended a Neil Hazzard's presentation on new features to support real-time shaders in 3ds Max. (Neil works for Autodesk and is responsible for real-time viewport display in Max.) Neil talked about a bunch of new features that I need to look into - MaxScripted Materials, additional light parameters available to the shader, support for Cg shaders in addition to HLSL, multi-pass scene effects like glow and bloom, etc. Probably the most valuable thing I learned from his presentation is the you can use parameter wiring to bring values from Max into your shader without needing any "under the hood" programming. This was demoed with the global environment ambient color wired to the ambient color of the shader - which allowed control over the shader's ambient color with the standard Max ambient color picker. This is a really cool idea that will make it much easier to get all kinds of data from the Max UI into the shaders to be used in real-time. Neil also showed off the addition of DirectX 10 to the viewports and some of the exciting things that it will make possible in terms of better performance and new ways to view the model.

For my last session of the day, I attended Jeff Hanna's "Tech Artist Roundtable." Jeff is the lead tech artist at Volition and it was really cool to meet him. At the beginning of the session, Jeff pointed me out to everyone and said they should check out ShaderFX, the node-based shader editor plugin that I had helped to write. He said it was really cool. That was nice to hear. Thanks again, Jeff! I got a lot of neat ideas from the round table. We talked about what the roll of tech artist requires. There are lots of definitions, but we mostly came to the consensus that tech artists write tools to make the jobs of the other artists easier. Tech artists look for problems and hitches in the art pipeline, develop tools to help fix the problems, watch the artists use their tools, and then add polish to them based on artist feedback. Once the artists see what you can do to help ease their work load and you build a good relationship with them, they start seeing the value of what you do as a tech artist and start looking for tool idea suggestions to pass along to you. I was surprised to hear the the ratio of tech artists to regular artists at Volition is 1 to 5 or 1 to 6. They have a lot of tech artists!

For the rest of the day, I talked with people at the company booth about the Vicious Engine. Once again, that was pretty fun and it was nice to be able to tell people how powerful our engine is. People seemed pretty surprised that the engine works on all of the consolses and that it's a complete tool - everything you need to make a game.

On Friday evening, I went with a bunch of the guys from Vicious Cycle down to Fisherman's Wharf. We rode the cable car to get there. That was great fun - the true San Francisco experience. We had dinner at a really nice restaurant that had a large window overlooking the wharf and a nice view of the Golden Gate bridge off in the distance. After dinner we went to a couple of shops and I found some fun gifts to bring home for the family.

GDC this year was really great. I've got my head so full of ideas it's going to take a couple of weeks to digest them all. Feel free to send me email or post a comment if you'd like more details on any of the sessions I mentioned in my GDC posts. I've also noticed that they've started posting the PDF files for a lot of the presentations over at the GDC Website. Just do a search on that page for "Download Presentation" to jump to the ones that are available.

Friday, March 09, 2007

GDC07 - Thursday

After breakfast at Denny's, I headed to my first presentation this morning. It was by some guys at Nvidia and they talked about the new features in FX Composer 2. It's really amazing that their tool hasn't been released yet considering they were showing FX Composer 2 at last year's GDC. It's going to be a really nice tool, though, and they claim that they'll be releasing the beta within 30 days. I'm looking forward to giving it a try.

After that session I worked at our engine booth for several hours. It was fun talking to people, and I actually met several old friends while there. It was cool to talk to Tim Sweeney from Epic for a bit. He stopped by the booth to take a look. I also talked to Steve Theodore for a few minutes and was sad to hear that his new company, Giant Byte didn't make it the way he had wanted. However, he's not hurting much since he now has a job at Bungie as the Technical Art Director. Way to go, Steve! I also got a few minutes to talk with Kevin Bjorke of Nvidia. He's such a friendly and encouraging guy. Thanks for your inspiration and encouragement Kevin!

The next class I attended was also by some guys at Nvidia. They were telling about how they made their Cascade Falls demo using the new features of DirectX 10. I was pretty impressed by their procedural rock formation creation. Basically they create the rock formations using a helix pattern and several octaves of procedural noise. They also talked about all of the other elements of the demo - the waterfall particle effects, the wetness shader as the water hits the rocks, the dragonflies buzzing around, etc. It was a very impressive demo.

My final session of the day was by Christopher Evans from Crytek and another character artist at Crytek who's name I forget. They spoke about the character pipeline at Crytek and showed off some of their amazing character work. It was a real jaw-dropping experience to see their work. They're using morph targets that are driven by joint rotations to fix up problems caused by point weight deformation. That's something that I'd really like to try but I've never felt like I could afford the blend shapes for it. Now that we've got our next-gen engine up and going, I'm going to give it a shot.

They also talked a bit about spherical skinning, saying that it was more accurate than the linear skin weighting that all of the major 3d packages use and that it's also less expensive. That's something that I'll need to look into more.

I enjoyed seeing the shaders that they're using on character's faces as well as getting a look at their facial animation system - which is similar to the method I've been using - only lots more involved. Basically they create a morph target for all of the facial muscles and then drive them using joystick manipulators. They also came up with a method for facial motion capture that they're able to do in their own studio with a simple web cam. They can track the markers that they draw on the face and then use that motion to drive their joystick controls. Pretty fancy.

I ended up the day by going to the Nokia party which was at a club that was down the street from our hotel. They had lots of loud music. It was fun for awhile, but not very conducive to talking with my coworkers about what we learned today so we left after about 90 minutes of trying to shout at each other over the music.

GDC is great. I'm learning a lot. I'm looking forward to some good sessions tomorrow, and then especially to going home the next day and being with my family again. :0)

Wednesday, March 07, 2007

GDC07 - Wednesday

In keeping with last year's tradition, I decided to go ahead and make a blog entry for each day of GDC this year. Today was my first full day of the show and I saw some pretty neat things. Maybe some of this will be interesting or helpful.

I started out the day with breakfast at Mel's Diner. It had a really great 60's atmosphere and good breakfast too. I'm planning to go there tomorrow as well.

My first actual conference event was a talk by Mattias Worch of Factor 5. He spoke on the process of creating normal maps for Lair. One idea that I really like from his talk was the fact that he uses a hand-held scanner to capture height map data. Then he processes that data into brick textures in Photoshop and takes the final refined height map into Zbrush to create a normal map from it. To more closely tie this normal map to the color map that he creates seperately, he takes the blue channel of the normal map and multiplies it in with the color map - and it turns out being kinda like adding ambient occlusion. Neat idea. I wish I had a hand-held scanner. :O)

After that I worked at the Vicious Engine booth for a couple of hours, helping to tell people about my company's game engine. That was fun. I got to talk to all kinds of people about our tools. They're pretty easy to talk about since they're so powerful and since I've been using the engine for the last five years it's not very hard to just start telling people about it. I even got interviewed on camera for a new broadcast. Kinda fun!

Next I attended a talk by Raymond Stewart at Volition about the artist-driven shader tool that he's developing. It was a very technical talk focused mainly on Ray's method for building a single Maxscripted material that handles all of the parameters for all possible shaders, and remembers the parameter settings even if the particular shader no longer calls for that parameter. Pretty fancy. The tool is able to very easily pass on its artist-tuned parameter set to the game engine. Some of the talk was over my head since I haven't created any Maxscripted materials yet, but I was able to see the value of having a tool like that that really manages the shader settings well.

When the talk was over, I went to lunch with Ray and another tech artist at Volition. They talked quite a bit at lunch about the tools that they were developing to ease the process of game creation. I wish that my company had a real tech artist position and that I could spend all of my time developing tools instead of being responsible for generating art assets. I feel like I could make some real contributions to helping smooth out the pipeline hiccups if I could focus on it.

Next I attended a talk on Facial Rigging by Judd Simantov from Naughty Dog. Just like last year, Judd totally blew me away with his ability to create powerful tools. His facial rigging system is based on using a set of bones to drive the face with an occasional morph target thrown in to help achieve difficult shapes. His system allows you to store sets of bone positions so you build up a library of facial poses and then you're able to blend between them to get the animation you're looking for. It's a really powerful system that even has a bit of muscle simulation and procedurally generated jiggle thrown in on top.

My last session of the day was about the environments created for Crytek's Crysis game. Their art is really amazing and the guy presenting the talk did a really nice job of presenting it in an interesting way. It talked a lot about how when you're making a realistic environment, you have to follow real world rules about spacing things out, putting buffer space around buildings and roads, and making things feel lived-in. He also talked a bit about lighting, their breakable object system, and creating terrain. Overall and really interesting presentation.

I ended the day back at the company booth for a final hour of talking about our game engine. Then I got together with several others from Vicious Cycle to go out for Chinese. We went to an excellent restaurant in Chinatown called "The Empress of China." It was a really nice evening.