Thursday, December 12, 2019

Free UE4 Material Editor Tutorial Videos

I have started a new series of videos on my YouTube channel aimed at helping artists learn to create shaders in Unreal Engine 4’s Material Editor. The videos start with the basics and will build up to more complex techniques as we go along. There are 4 videos available so far, but I’ll be releasing a new one every Thursday.

Check it out!

Wednesday, September 18, 2019

Free HLSL Shader Tutorial Videos

Several years ago I made a series of training videos to teach artists how to write real-time shaders in HLSL.  The series starts out with very simple concepts so that someone with no programming experience at all can start right from the beginning and learn to write shaders.  Further into the series, I cover more advanced topics such as parallax mapping, global illumination, reflection and refraction, and vertex animation. Everything is explained step by step so it's easy to follow.

Originally, the videos shipped on 3 DVDs that sold for $60 each.  Sales were pretty successful, but the company that sold them went out of business just a short time after the 3rd DVD was released.  So I've decided to upload them to YouTube so that everyone can watch them for free!  My hope is that they'll help aspiring artists and programmers learn the art of shader creation.  Although some of the material is out of date, almost all of the principles taught are still valuable to learn and understand as a foundation to learning to write shaders.

Here's my channel:

The series consists of 40 videos.  I'll be releasing a new video each weekday starting this week - so if you're interested, be sure to subscribe to the channel and check back often.  If I get enough interest, my plan is to start creating new videos that demonstrate more recent shader techniques.

Let me know what you think.  I'd love to hear your feedback!


Saturday, March 05, 2011

GDC 2011 - Friday

Friday was the last day of the show. I started out the day by attending a session about the LOD generation system in Halo: Reach. For characters that are very far away from the camera, they automatically generate a mesh that's only about 12% of the poly count of the original. The generation process involves creating a voxel version of the model to ensure uniform tessellation, and then simplifying that. They bake material properties such as diffuse color and specular brightness into the vertices. This means that the low res version doesn't use any textures and doesn't need a pixel shader. Next, Chris Tchou spoke about some of the effects tech that he created for Halo: Reach. First he showed the light-weight particle system that he wrote that allows for a high number of small particles. It's all done on the GPU so it's really fast, and they're even able to calculate particle collision using the depth buffer. Next, he talked about the energy shield effects and showed several different variations that could be created with it. The effect is created using hull meshes extruded out from the base mesh. Then they use the depth buffer to make the parts of the hull that cover the character more transparent and the parts around the silhouette more opaque. Finally, Chris showed how they were able to create atmospheric effects by sorting the smoke and other large particles into buckets. Particles closer to the camera (that filled a large part of the screen) were rendered to a lower resolution buffer to save on fill-rate, and then composited back into the scene. The take-away that I got from this talk is that the depth buffer is really useful for all kinds of effects.

Next I went to a talk by the team at Nexan in Korea. They create a system the controls the behavior of helper bones in real-time in the game engine instead of baking the behavior of these bones to keyframes. These bones are used to help with deformation problems - wrists, shoulders, pelvis, etc. They wrote code in the engine to mimic the effects of all of the different types of constraints that could be used inside 3ds Max. Then they exported an XML file from Max for each character that described which bones were controlled by constraints instead of with keyframes. Finally, the game engine would read the XML file and apply real-time constraints to these bones. Using this technique, they were able to reduce the size of their animation data a lot. It also made it easy to adjust the behavior of these bones since they could just do it once instead of having to re-export all of their animation data after an adjustment.

After lunch, I attended a talk by Andrew Gordon from Pixar. Andrew talked about traits that make a good animator and the process of creating successful animation. The talk felt a bit rushed since he was working from notes that he usually used for an all-day presentation. However, his material was fantastic. He talked about having a good attitude, taking critiques, doing lots of preparation, having a good knowledge of design, weight, and physicality. He talked about noticing all of the little things that people do - subtle gestures and weight shifts - and incorporating those things into your work.

I ended the conference by attending the tech artist round table run by Jeff Hanna. I really love attending the round table since it's a room full of people who think like I do and face similar challenges every day. They're a great group to talk to and it's fun to discuss all of the issues we're dealing with.

This year's GDC was amazing. I can't wait to get home and start experimenting with some of the ideas I picked up during various talks.

Friday, March 04, 2011

GDC 2011 - Thursday

I started out the day by attending a session about creating great characters. It was presented by Matthew Lund from Pixar. The first part of the talk was about how to "find" the character. Matthew suggested that in order to create a good story, you first have to develop the character and define who he is. Once this is done, you can create a story around things that happen as a result of his personality traits. In the story, the character's fears and passions should be what drive his decisions, and supporting characters should be designed so that they help bring out the character traits in the main character. Over the course of the story, there should be an inner conflict in the character and an outer conflict which is the main plot. Matthew stressed that the crux of the story should be on the inner conflict rather than what's happening around the character. In the end. the way that the character is changed as a result of the inner and outer conflict is what illustrates the theme of the story. This was an amazing session and I was impressed by how well Matthew was able to boil down and define exactly what it is that creates a meaningful character and a strong story.

Next, I attended a talk by Jeremy Ernst on the facial rigs he developed for Gears of War 3. The facial rigs have several layers. The first is a low resolution cage mesh that roughly fits the shape of the character's face. Morph targets are created for this cage for each of the major muscle groups in the face. The next rig layer consists of helper points that are pinned to key locations on the cage mesh and move with it and it is deformed with the morphs. The next layer is called the offset rig. It's a set of control shapes that go along for the ride as the helps move with the morphs. This layer exists so that the animators can go in and fine-tune things after they've created the general pose with the morphs. Finally, the actual face bones that are used in the game are driven by the offset shapes. The powerful thing about this rig setup is that the whole system can be shared to any character by simply creating a new morph for each character that fits the face of this character. When that morph is dialed in, the rest of the rig goes right along with it and fits itself to the new character. Since the animation data is stored as curves on the morph targets, it can be easily transfered from one character to another.

After lunch, I attended a talk by Mike Flaven - a graphics/engine programmer at Volition. Mike talked about a new rendering technique they used for Red Faction: Armageddon called Infered Lighting. This technique is similar to deferred lighting. In the first pass, several textures are written to g-buffers including z-depth, normal, and specular power. In the second pass the lighting is created based on the light sources in the scene and the g-buffer data. Finally, in the third pass, non-light information is rendered, such as diffuse color, reflections, emissive, etc. The advantage of this technique is that lighting complexity is decoupled from scene complexity - so the system is able to handle over 100 light sources without issues. Mike also discussed some clever techniques they developed to render the lighting pass at a lower resolution to gain performance and also correctly handle several layers of transparent objects.

Next I attended a talk by John Bellomy from Naughty Dog about the structure and format of their animation blend trees and state graphs. The main interesting point that I gained from this talk is that they define a main motion graph for an NPC, but then on top of that, they're able to define a smaller set of override animations so that they can make an individual character look unique without having to create a whole new graph. Each character can have multiple override sets.

The last talk I attended was given by Donald and Geremy Mustard about the art that they created at Chair for Infinity Blade. It was pretty cool to see all of the little tricks they used to squeeze as much graphical polish as possible out of the iPhone and still maintain the frame rate. I was surprised to hear that the iPhone has a ton of graphics memory but is weak on draw calls and fill rate. This meant that the team had to be very careful about the number of objects on screen and particle counts had to be kept low, but they were free to make high res. textures and light maps.

I finished up the day by attending the speakers reception. It was create to meet several of the people who's talks I have really enjoyed or who's talks I'll be attending on Friday.