<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-10427262</id><updated>2011-12-12T15:15:09.628-06:00</updated><title type='text'>Ben's Learning Log</title><subtitle type='html'>This blog contains the things that I've learned about programming real-time shaders in DirectX HLSL and Nvidia's Cg.  It also contains other information related to real-time graphics and character animation.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>58</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10427262.post-3843454226075189848</id><published>2011-03-05T11:06:00.002-06:00</published><updated>2011-03-05T11:35:43.055-06:00</updated><title type='text'>GDC 2011 - Friday</title><content type='html'>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.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-3843454226075189848?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/3843454226075189848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=3843454226075189848' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/3843454226075189848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/3843454226075189848'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2011/03/gdc-2011-friday.html' title='GDC 2011 - Friday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-2064096298075912274</id><published>2011-03-04T09:52:00.002-06:00</published><updated>2011-03-04T10:26:25.834-06:00</updated><title type='text'>GDC 2011 - Thursday</title><content type='html'>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.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-2064096298075912274?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/2064096298075912274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=2064096298075912274' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/2064096298075912274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/2064096298075912274'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2011/03/gdc-2011-thursday.html' title='GDC 2011 - Thursday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-1745698703582508135</id><published>2011-03-03T10:04:00.002-06:00</published><updated>2011-03-03T10:23:08.164-06:00</updated><title type='text'>GDC 2011 - Wednesday</title><content type='html'>I started out on Wednesday by attending the keynote by Iwata-san from Nintendo.  The main take-away that I got from this talk is that successful games are creative and unique, not necessarily technically superior.  Also, Iwata gave a pretty powerful warning about the number of games being created for mobile devices and how many developers are stressing quantity over quality - a problem that he considers to be dangerous for the industry.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next I attended a session about some of the animation techniques used in Halo: Reach.  I was really impressed with the system they developed for blending between walk and run and turning in place.  Their foot fitting system was fantastic for making sure that the feet where always planted nicely on the ground - even when walking on various slopes.  And their system for blending between jump animations of various heights and distances to best fit the current jump distance was beautiful.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After attending these two talks, I had lunched and hooked up with Aaron Otstott to prepare for our talk.  We went through our notes one last time and put in a few last minute comments - and we were ready.  I felt like our talk went really well.  We were able to confidently deliver the material that we had prepared.  Aaron and I presented 5 elements from our lighting system that we have added in order to achieve our goals of achieving the artistic vision, seperating the characters from the background, and automating the process of quality lighting.  We presented in a very large room that was more than 75% full and when the talk was over, we received lots of insightful questions.  Overall I was happy with the experience.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next, I attended a talk by Dan Baker from Firaxis on a method he helped to develop for creating better specular highlights.  It's called LEAN mapping.  It's something that I'd really like to investigate further for reducing specular sparkles.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My final talk of the day was given by the art director at Cryptic Studios on the systems they developed for character customization in Champions Online and the Star Trek MMO.  This was pretty impressive stuff, and I was blown away by the vast array of options that the provide to users for customizing their characters.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To finish off the day, I hooked up with the other guys from BioWare and we all went out to eat at The Empress of China.  This has become a bit of a tradition for me at GDC, and since my old friends from Vicious Cycle weren't here to share it with me, it was fun to take a new group out for the experience.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-1745698703582508135?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/1745698703582508135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=1745698703582508135' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/1745698703582508135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/1745698703582508135'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2011/03/gdc-2011-wednesday.html' title='GDC 2011 - Wednesday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-8888258548061386735</id><published>2011-03-01T23:30:00.002-06:00</published><updated>2011-03-02T00:06:32.527-06:00</updated><title type='text'>GDC 2011 - Tuesday</title><content type='html'>The tech artist all-day session today was amazing.  I've got my head all full of ideas I want to try and things I want to learn.  This is what I love about GDC - it's a major recharge for my creative batteries.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Keith Self-Ballard from Volition started off the day with a talk about why the industry needs tech artists.  This was great information to hear - especially since Keith is an art director, not a tech artist himself.  Next, Scott Goffman from Blizzard spoke about what tech artists should do to make sure that the tools that we write get used by the artists.  He talked about getting the word out that there is a new tool, simplifying the UI so it doesn't look too intimidating, providing documentation, deploying the tool in stages so you can make sure that it's working as intended before expanding the functionality, creating the tool with a clearly defined goal in mind, and knowing and understanding the needs and aptitudes for the tool's target audience.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At that point, I took a detour from tech art and headed over to the mobile games summit to listen to my friend, Donald Mustard, talk about his work on the iPhone game - Infinity Blade.  Donald does a great job of presenting his topic and he was really fun to listen to.  The guidelines that he created when making the game were - 1. You have to be able to play the whole game with just one finger.  2. It has to be designed for super short play sessions but still feel fun and meaningful.  3. Have an original and unique device-specific design.  4. Be easy to learn but hard to master - truly skill based.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After lunch I was back with the tech artists.  Seth Gibson gave his talk on personality profiles.  He had the audience take a short profile test and then talked to us about the strengths and weaknesses of each personality - what type of work they might enjoy, and what may feel like drudgery to them.  This was a pretty insightful topic and got me thinking about the kinds of work I enjoy and what makes me feel successful at work.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next, Steve Theodore gave his talk about what happens when tools fail.  He talked about designing tools compartmentally so that things are broken into small, manageable functions instead of long, mega-scripts.  He stressed the importance of documenting your code, and went over various methods for debugging problems.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Adam Pletcher gave a talk about using databases to store and retrieve information.  He showed some sample python scripts for writing some information to a database, and gave some examples of uses for the stored information - such as graphing how long it takes to open 3ds Max for the artists over several weeks and months, and keeping track of which artists are using what tools, and which artists are having the most problems with tools.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bryan Moss talked about using video footage as a texture map.  For his motorcycle game, he set up a high resolution cloth simulation inside Max, and then used that to render out a series of normal maps.  Then he used After Effects to combine these normal maps into a video and apply some post-process touch-ups.  Then he applied this "animated normal map" to his character models in the game to make them look like their clothing was getting blown by the wind.  This is a really clever technique that could be used for all sorts of things.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Finally, Bronwen Grimes gave her talk on a couple of techniques that she developed for Portal 2 at Valve.  First, she talked about how they used Houdini to create flow direction maps that defined the direction that the water would flow in each map.  These directional map are pretty much impossible to create by hand, but Houdini seems to have made it pretty easy.  I'd really like to learn how to use this software.  It seems like it could open up a whole new world of possibilities for me.  Then Bronwen talked about the shader that she wrote that defines the appearance of the gel material that the player can paint on the levels.  She came up with a clever method of making the material appear to have bubbles suspended in it - so it looks like real gel with volume and thickness - even though it's really just flat.  Brilliant.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I ended the day at the technical artist get-together.  It was great to get a chance to talk to several tech artist friends and catch up on what people are working on.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-8888258548061386735?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/8888258548061386735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=8888258548061386735' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/8888258548061386735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/8888258548061386735'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2011/03/gdc-2011-tuesday.html' title='GDC 2011 - Tuesday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-752079939196934399</id><published>2011-03-01T09:51:00.003-06:00</published><updated>2011-03-01T10:12:08.409-06:00</updated><title type='text'>GDC 2011 - Monday</title><content type='html'>I'm at GDC again this year.  On Wednesday I'll be giving a talk about the character lighting in our game.  If you're attending GDC, I'd love to have you come.  Here's a summary of the talk from the GDC web site:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://schedule.gdconf.com/session/12133"&gt;http://schedule.gdconf.com/session/12133&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Monday was the first day of the conference for me.  After getting up way too early for a flight to San Francisco, I attended an all-day session on DirectX 11.  Speakers were from AMD, Nvidia, Firaxis, BioWare, and Dice.  It's exciting to see how much more flexibility the new DirectX offers.  There's room to move operation around to the different shaders (geometry shader, hull shader, etc) to fit the needs of the specific application instead of always having to do everything in the vertex shader or the pixel shader.  I saw several examples of how moving things out of the pixel shader to earlier in the pipeline can yield pretty significant performance gains.  DirectCompute was also a hot topic.  It's a way to use the graphics hardware as a more general purpose, multi-threaded compute engine as opposed to just something to put pixels on the screen.  A couple of the talks covered ways to optimize techniques like filtering and summed area tables using the compute shader instead of shoe-horning them into the pixel shader as has been done with DirectX 9.  Several talks focused on using tessellation - a topic that I'd like to become more familiar with.  And the guys from Dice, BioWare, and Firaxis talked about how they're using DirectX 11 in Battlefield 3, Dragon Age 2, and Civ 5 respectively.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is going to be a great week.  I'm looking forward to Tuesday when a group of tech artists is putting on an all day training session on being a technical artist.  Should be great!  I'll type up my impressions tomorrow.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-752079939196934399?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/752079939196934399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=752079939196934399' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/752079939196934399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/752079939196934399'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2011/03/gdc-2011-monday.html' title='GDC 2011 - Monday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-6561237405105122711</id><published>2010-01-23T14:45:00.002-06:00</published><updated>2010-01-23T14:49:47.414-06:00</updated><title type='text'>Speaking at GDC 2010</title><content type='html'>I'm excited to let everyone know that I'll be speaking at GDC this year.  You can take a look at the subject of my talk &lt;a href="https://www.cmpevents.com/GD10/a.asp?option=G&amp;amp;V=3&amp;amp;id=561205"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-6561237405105122711?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/6561237405105122711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=6561237405105122711' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/6561237405105122711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/6561237405105122711'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2010/01/speaking-at-gdc-2010.html' title='Speaking at GDC 2010'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-232416083426064852</id><published>2009-03-28T13:42:00.003-05:00</published><updated>2009-03-28T21:04:53.480-05:00</updated><title type='text'>GDC 2009 Friday</title><content type='html'>I had a great Friday at GDC, even though I had to duck out of my last session a little early to catch a flight home.  My first session was called "Authoring for Real-Time Tesselation and Displacement Mapping."  It was hosted by AMD/ATi and showed off a new tool they've developed called &lt;a href="http://developer.amd.com/gpu/MeshMapper/Pages/default.aspx"&gt;GPU MeshMapper&lt;/a&gt;.  The tools allows artists to author a 16 bit displacement map, normal map, and ambient occlusion map from a high res mesh for use on a low res mesh.  Using this tool, ATi created &lt;a href="http://developer.amd.com/documentation/videos/pages/froblins.aspx"&gt;a nice demo&lt;/a&gt; for the release of their Radeon HD4870 graphics card.  The demo contains about 3000 frog-like characters that use the tessellation/displacement technique when they're close to the camera.  The technique allows the characters to appear perfectly smooth with no visible polygon edges.  It's also relatively cheap since it's handled on the GPU - but currently their method of GPU tessellation only works on ATi graphics cards.  This technique is definitely something I'm going to keep my eye on.&lt;br /&gt;&lt;br /&gt;Next I attended the tech artists round table again.  What I really love about these round table discussions and the tech-artists.org web site is that it feels like we're really pulling together as a tech artist community and forming a guild.  It's great because I'm getting to know so many others that share my same interests and challenges!  Topics covered at Friday's round table session included artist/programmer shader authoring, programmers training tech artists and tech artists training artists, a debate about whether or not intermediate file formats are helpful, several funny stories about horrible tools, and whether or not good tools actually make a difference to the quality of the final game.  We ended the session by talking about the concept of "spear fishing" or "shoulder surfing" where the tech artists watch the artists at work and get ideas for ways to improve the pipeline based on observing the artist's work flow.  Overall, we had a great time discussing the things we do every day.&lt;br /&gt;&lt;br /&gt;My next session was entitled "Platform-Independent Shader Development with mental mill: the Making of DEAD RISING 2."  It was basically a sales pitch by Mental Images for their Mental Mill software.  Laura Scholl from Mental Images went over the basics of the work flow using Mental Mill in game production and did her best to make Mental Mill sound really useful.  Then Izmeth Siddeek from Blue Castle Games talked about how they used Mental Mill to prototype the shaders in Dead Rising 2.  While his work was pretty neat and they had developed some nice shaders, the whole thing was overshadowed by the fact that the session was paid for by Mental Images.  I attended it mainly to see what other people thought of the session, and based on the questions asked at the end and on comments I overheard on the way out, it sounds like people weren't that impressed.&lt;br /&gt;&lt;br /&gt;My final session of the show was "Technical Art Techniques Panel:  Tools and Pipeline."  The panel consisted of Ross Patel from Microsoft, Seth Gibson from Bungie, Jeff Hanna from Volition, Rob Galinakis from Bioware, and was moderated by Chris Evans from ILM (formerly of Crytek).  The guys covered all kinds of technical artist related topics including ideas for building art pipelines, how to handled artists' wants vs needs, how tools testing is handled, what you use for the level editor, and how tech artists should handle creating frameworks and libraries of commonly used code.  Unfortunately I had to leave this session early to catch my flight home, but it was really cool to hear from these guys about challenges they had tackled, and their ideas and opinions on many different tech art related topics.&lt;br /&gt;&lt;br /&gt;Well - my head is all full of ideas for how to improve my own skills and things we can do to improve our current project.  My creative batteries are all recharged and I'm ready to head back in and make great stuff for another year!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-232416083426064852?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/232416083426064852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=232416083426064852' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/232416083426064852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/232416083426064852'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2009/03/gdc-20909-firday.html' title='GDC 2009 Friday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-2144539746970076596</id><published>2009-03-27T00:17:00.002-05:00</published><updated>2009-03-27T00:59:12.478-05:00</updated><title type='text'>GDC 2009 Thursday</title><content type='html'>My first session today was on the artistic style of the most recent Prince of Persia game.  The dev team chose a stylized direction for the visuals of the game.  I really like the look they came up with.  I was a little disappointed by the session though since they focused mainly on the progression of the visuals and talked a lot about what inspired them instead of focusing on technical details.  I was hoping that they would give more details about how their shader system worked or discuss the collaboration between their tech artists and engine programmers to develop the look.  They did show some really beautiful proof-of-concept footage though.&lt;br /&gt;&lt;br /&gt;Next I attended Hideo Kojima's keynote address where he detailed his process for creating a game design and went over the whole history of developing the Metal Gear series of games.  It was a very inspiring session - and the main take away point was that things are only impossible because we think they are.  We can make the impossible possible by reframing the problem.  A really interesting fact that Kojima San revealed is that the whole idea of hiding from enemies instead of shooting at them came about because the original hardware he designed his first game for didn't support enough sprites on screen at once to have a player, enemies, and bullets on screen all at the same time.  Thus the stealth action game was born!&lt;br /&gt;&lt;br /&gt;At lunch time I stopped by the Vicious Engine booth (I used to work there) and my good friend Luke showed me their latest engine demo.  They're doing some pretty amazing things with their engine and I was impressed.  Kudos to Doug, Luke, Amilcar and the other programmers and artists at Vicious Cycle for building a great engine and making a cool demo!&lt;br /&gt;&lt;br /&gt;After enjoying lunch with my good friend Jesse Rapczak, I attended a session on the open level design of Far Cry 2.  The speaker said that they designed the game as one giant 50 km square open level.  It basically allows you to go anywhere without load times and shifts from day to night and from sunny to stormy.  Pretty impressive.  They accomplished the level building by dividing the world up into 1x1 km chunks and assigning each chunk to a team of one level designer and one level artist.  This team sat together and worked very closely to create and detail their 1x1 km chunk.  The speaker talked about their use of Google Earth images of African villages as references and several principles that guided their design and layout.&lt;br /&gt;&lt;br /&gt;Next I attended a session my Neil Hazzard from Autodesk on the MetaSL shading language.  Neil talked about how he has been working to integrate support for MetaSL into 3ds Max.  He demonstrated the work-flow of creating a shader in Mental Mill, saving it, and then bringing it into 3ds Max for use as both a real-time viewport shader and a software shader for use with Mental Ray.  Using the shader for software rendering required some special handling in Mental Mill and there seemed to be several gotchas is you wanted to use a shader for both real-time and software rendering.  The idea of using one shader for both hardware and software rendering is a good one, and it gave a couple of interesting ideas for how Kees and I can improve ShaderFX.&lt;br /&gt;&lt;br /&gt;I ended the day by attending the Polycount get-together.  I had a great time getting to know many of the great guys from the Polycount community.  Now I'm looking forward to tomorrow - the final day at GDC.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-2144539746970076596?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/2144539746970076596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=2144539746970076596' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/2144539746970076596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/2144539746970076596'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2009/03/gdc-2009-thursday.html' title='GDC 2009 Thursday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-5899606616698619360</id><published>2009-03-25T20:16:00.003-05:00</published><updated>2009-03-25T21:05:45.161-05:00</updated><title type='text'>GDC 2009 Wednesday</title><content type='html'>Today was my first full day at GDC, and it was great!&lt;br /&gt;&lt;br /&gt;I started off the morning at the keynote given by Satoru Iwata from Nintendo.  After annoucing the obligatory numbers - DS has sold over 100 million units and Wii has sold 50 million units, and all market growth in the last 2 years has been driven by Nintendo - Iwata San moved on to discuss the idea of the Death Spiral vs. the Upward Spiral.  The Death Spiral is a pattern that many developers get trapped in over the long run.  Finacial pressures lead devs to put less time into developing their games.  This causes the quality of there project to go down because they were more interested in shipping on a certain date than making a good game.  Once the game is shipped, it sells poorly and so they start all over again with financial pressure.  This cycle continues until the dev goes under.  Instead of following this cycle, Iwata San says that Nintendo follows an upward spiral under the direction of Shigeru Miyamoto.  This upward spiral begins with Miyamoto being on the constant look-out for fresh ideas, which often come from the hobbies he enjoys - gardening, spending time with the new puppy, etc.  Miyamoto looks for experiences that make people happy and tries to figure out what it is about the experience that produces the enjoyment so that it can be reproduced in a game.  When developing games, Miyamoto does a lot of very small prototypes that have nothing extra at all - just the core concept.  The teams that create these prototypes consist of two or three memebers.  They often work on these small prototypes for up to a year, searching for that small bit of fun.  Once they've got something that's fun to play, the main production phase begins.  It generally goes pretty smooth since the core mechanics have already been worked out and the game is already fun.&lt;br /&gt;&lt;br /&gt;Iwata also showed off several new games that are being developed for Nintendo platforms including Rock and Roll Climber - a game that uses the Wii Fit balace board to control a rock climbing character, several Final Fantasy games, Moving Memo - a game that lets the player create an animation using flip-book style tools, and a couple of others.  The keynote ended with a trailer for a new Zelda game for the DS that will be called "Zelda - Spirit Tracks."&lt;br /&gt;&lt;br /&gt;My next session was on Morpheme - the node-based animation blend tree and state machine system.  This session was great for me since I use Morpheme every day.  Simon Mack, the CTO of NaturalMotion showed off the physics capabilities of the new version of Morpheme.  I was especially impressed by the node that allows the tree to pick the animation that is closest to the characters current position and play that.  This allows a rag doll character to get up from a random pose.  Very cool idea!  I also enjoyed the blending of hard and soft response to a character's collision with the environment.&lt;br /&gt;&lt;br /&gt;My next session covered some really good methods for improving the overall look of next-gen games.  The speaker covered three main points - lighting and ambient occlusion, surface detail, and graphics production tools.  A lot of the talk was devoted to ambient occlusion.  The speaker discussed baking the AO into the textures, generating it in the object shaders, and adding it to the scene as a post process effect.  He showed that it can make a significant impact on the realism of the game.  On the topic of surfaces, he talked about using detail textures or detail normal maps, and also using large scale textures.  His main point here was that surfaces should look interesting when seen at all distances and all angles.  For his final point, he discussed tools for generating graphics.  To his credit, he said that technology has brought us to the point where the quality of the game art is now mainly determined by the talent of the artists - not the engine programmers.  He said that programmers should always use their own tools to make sure that they're useful, and allow artists to do interation as fast as possible.&lt;br /&gt;&lt;br /&gt;After a tasty lunch, I attended the Tech Artists Round Table hosted by Jeff Hanna from Volition.  The tech artists discussed lots of topics ranging from what the role of the tech artist is, to what to teach students that want to become tech artists.  We talked about when a tool should be scripted vs coded in C++.  It was great to attend this session and meet up with several friends and make a few new ones.&lt;br /&gt;&lt;br /&gt;My final session for the day was on AI pathfinding and the animation system.  The goal was to get the two systems working together well so that the AI could make effective use of both the animation system and the path finding system to create great movement.  The speakers first showed off a simple animation system that blends between walking, running, and turning.  Then they discussed the process that they used to generate paths that the AI could use.  When creating the paths, the system took into account the limitations of the animation system - so it was away of movement speeds, turn radius, etc.  Knowing this information allowed the system to generate paths that worked well with the animation - producing quality arcs in the paths, etc.&lt;br /&gt;&lt;br /&gt;Today has been great!  I'm looking forward to dinner tonight was some old friends from Vicious Cycle and then another great day tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-5899606616698619360?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/5899606616698619360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=5899606616698619360' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/5899606616698619360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/5899606616698619360'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2009/03/gdc-2009-wednesday.html' title='GDC 2009 Wednesday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-7753885132088968720</id><published>2009-01-21T07:59:00.003-06:00</published><updated>2009-01-21T08:08:38.987-06:00</updated><title type='text'>ShaderFX 3.0 Released!</title><content type='html'>Kees and I have finally released ShaderFX 3.0!  We're pretty excited about this release because it adds many new features that really expand what ShaderFX is capable of.&lt;br /&gt;&lt;br /&gt;First of all, we've added full support for creating vertex shaders.  This means that you can achieve effects such as vertex animation, skinning, normal warping, etc.  It also means you can make shaders that are more efficient since you can do some of the calculations per-vertex instead of per-pixel.&lt;br /&gt;&lt;br /&gt;Second, we've added support for the CgFX shader language in addition to HLSL - so you can now preview and export shaders from ShaderFX in both CgFX and in HLSL.  CgFX is a useful shader language that's used in Maya, Motion Builder, and several other 3d authoring tools - as well as in games created for the PlayStation 3.&lt;br /&gt;&lt;br /&gt;We've also improved our support for lights - adding directional lights and spot lights in addition to omni lights.  We've also added an interface for customizing light settings like attenuation, falloff, etc.&lt;br /&gt;&lt;br /&gt;There are also lots of additional features.  Go take a look at the demo videos!&lt;br /&gt;&lt;br /&gt;http://www.lumonix.net/shaderfx.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-7753885132088968720?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/7753885132088968720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=7753885132088968720' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/7753885132088968720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/7753885132088968720'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2009/01/shaderfx-30-released.html' title='ShaderFX 3.0 Released!'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-4946776607495119631</id><published>2008-10-23T19:53:00.003-05:00</published><updated>2008-10-23T20:04:34.409-05:00</updated><title type='text'>Star Wars: The Old Republic</title><content type='html'>Bioware announced our game yesterday.  We're working on Star Wars: The Old Republic - an MMO based in the Star Wars universe - but 3000 years before Darth Vadar.  It's very exciting to be working on such a high profile project!  There has been a lot of coverage in the media about the game in the last day or so.  Here are some links:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.gamespot.com/news/6199726.html?tag=topslot;thumb;3"&gt;http://www.gamespot.com/news/6199726.html?tag=topslot;thumb;3&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.shacknews.com/featuredarticle.x?id=1032"&gt;http://www.shacknews.com/featuredarticle.x?id=1032&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.1up.com/do/newsStory?cId=3170812"&gt;http://www.1up.com/do/newsStory?cId=3170812&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.gamasutra.com/php-bin/news_index.php?story=20757"&gt;http://www.gamasutra.com/php-bin/news_index.php?story=20757&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Most importantly, our own web site is now live:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.swtor.com/"&gt;http://www.swtor.com/&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Head over and join the community!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-4946776607495119631?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/4946776607495119631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=4946776607495119631' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/4946776607495119631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/4946776607495119631'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2008/10/star-wars-old-republic.html' title='Star Wars: The Old Republic'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-1164149694999577956</id><published>2008-08-24T20:30:00.002-05:00</published><updated>2008-08-24T20:55:33.608-05:00</updated><title type='text'>Siggraph 08 Thursday</title><content type='html'>My last day at Siggraph was interesting.  The first session I attended was a panel discussion entitled "Games: Evolving on An Order of Magnitude."  Several prominent people from various game companies discussed how the advances in video game hardware are driving major changes within the industry.  Since games are so much more complex to create, larger teams are required, more complex management structures are needed, etc.  The problem is that budgets are not increasing proportionally to the demand for content.  This means that teams have to find ways to work more efficiently - writing tools to automate tasks, etc.  I took lots of notes on this discussion.  Let me know if you're interested in reading more.&lt;br /&gt;&lt;br /&gt;Next I attended a session on hair and cloth.  I thought that I'd be able to learn some things that would help with the projects I'm working on now, but all of the papers presented were on very expensive techniques - like simulating every single strand of hair, or simulating cloth by mimicing the behaviour of the yarn.  Results were super cool, but compute times were very high - nothing near real-time which is what we need.&lt;br /&gt;&lt;br /&gt;Next I attended a session on physics.  There was a paper on doing hair in the real-time on the GPU, but I missed it because I got there late.  I'm hoping that Nvidia will post it on their developer web site.  It's pretty close to what I'm going to need to work on soon.  The second paper was on using lots of GPUs in parallel to run particle systems with very high particle counts.  By using 6 or 7 GPUs together, the guy was able to do simulations with a million particles in real-time.  Very impressive.  Now if we could just get game comsoles to ship with 7 GPUs we'd be all set!  :P  The final paper in the session was on the bent and broken metal effects in the Hulk movie.  They used an interesting technique for allowing the Hulk to destroy metal objects.  They basically turned on cloth simulation with the cloth stiffness set very high - but only at the moment of impact.  This allowed the surfaces to deform, but then they'd turn the sim off when the impact was done so the surfaces would keep their deformed shape.&lt;br /&gt;&lt;br /&gt;Finally, a session that I didn't get to attend (because I had to catch my flight back home) but that looks very interesting was presented by Jon Olick from id&lt;br /&gt;Software.  You can grab the paper here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://s08.idav.ucdavis.edu/olick-current-and-next-generation-parallelism-in-games.pdf" target="_blank"&gt;http://s08.idav.ucdavis.edu/&lt;wbr&gt;olick-current-and-next-&lt;wbr&gt;generation-parallelism-in-&lt;wbr&gt;games.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The first half of the paper talks about their usage of the PS3 hardware - which is nice in itself, but the second half is the really interesting part.  He talks about a new way of rendering meshes that's kinda like what  they're doing with mega texture - only it's for geometry instead of&lt;br /&gt;texture data.  Basically you'd be able to create environments with an interface similar to Zbrush - where you could just create as much detail as you wanted with no concern for polygon counts.  Then at run time, the software would do all of the LODing automatically - so you'd get an environment that looked super high detailed - but the detail would only be exactly were it was needed.  It's very much like the way mega texture works - but this is really taking it to the next level.  Exciting stuff!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-1164149694999577956?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/1164149694999577956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=1164149694999577956' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/1164149694999577956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/1164149694999577956'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2008/08/siggraph-08-thursday.html' title='Siggraph 08 Thursday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-4659284310838225619</id><published>2008-08-14T00:17:00.002-05:00</published><updated>2008-08-14T01:21:18.026-05:00</updated><title type='text'>Siggraph 08 Wednesday</title><content type='html'>I attended lots of paper sessions today.  The first session I attended was on real-time techniques.  There were papers presented on shadow mapping techniques, real-time refraction with caustics, real-time smoke rendering, and meshless hierarchical light transport.  The refraction paper created beautiful results but was quite limiting since it used a voxel grid of only 128x128x128 and only had a frame rate between 2 and 7 fps.  The smoke paper also had beautiful results for lighting smoke with diffusely convolved cube map.  Its limitation was that it required that the smoke be pre-processed so you couldn't dynamically change the smoke.  I did find the shadow mapping paper and the light transport paper.  I'll probably look into them some more.&lt;br /&gt;&lt;br /&gt;Next I attended several sessions hosted by Nvidia.  They presented a paper on hair rendering, a paper on terrain rendering and LODing on the GPU, and a discussion of their PhysX system.  The hair paper was pretty amazing.  The do a real-time simulation on around 160 guide hairs and then instance those to make it appear that there are many 10s of thousands of hairs.  Once the verts have been simulated, they're conected with B splines, converted to camera facing triangle strips and rendered using the Kajiya Kay lighting model.  The results are really beautiful, but I wonder if the performance requirements are just a but too high for current hardware.  The terrain paper was pretty straight forward.  Their LOD system basically just reduced the tesselation of the quads based on distance from the camera.  They also biased the distance based on the topology of each quad - so if the quad had higher height changes it would be LODed less.  They did the same thing for quads that contained a silhouette edge.  Pretty good ideas!  The PhysX paper was mainly about things to think about when adding physics sims you your projects.  I was pretty disappointed that the presentation was so short on actual implementation details.&lt;br /&gt;&lt;br /&gt;After the paper session and some lunch, I attended a session on the special effects on Cloverfield and Iron Man.  It's always very interesting to see these talks where the special effects artists break down their work on films and talk about how they achieved their results.  While it's not directly applicable to my own work, it is very inspiring.&lt;br /&gt;&lt;br /&gt;I left the session a little early so that I could attend an appointment with the guys at Image Metrics.  They're a company dedicated to facial animation and they do really great work.  It was fun to talk with them about their work.&lt;br /&gt;&lt;br /&gt;My last paper session of the day was entitled "Many Things."  Some guys from Pixar talked about how they created the shaders and textures for all of the robots in Wall-E.  They used some really cool material layering techniques blended with geometry specific maps including ambient occlusion, blurred edge maps, up facing maps, and fractal noise patterns.  Their material system also allowed them to add specific details like decals.  The results were impressive and they were able to create the surfaces for all of the robots in under three months.  The second paper in the session was on the foliage system used in Madagascar 2.  They did a good job of giving the artist control as well as automating the repetative tasks.  The enabled the artists to create a branch and then mark growth source points.  Then the user could click on a growth point and the branch would be cloned to that location.  Doing this over and over would create the full set of branches for the tree.  If I were going to write some software to do trees, I'd probably do it this way.  The next paper was on AI driven cars for Speed Racer.  The author did lots of work using Massive to create an AI system to drive the cars at over 300 miles an hour around the crazy Speed Racer tracks.  The funny thing about this presentation is that the presenter told us that none of his work was actually used in the final movie.  Oh well!  :)  It was pretty cool driving AI anyway.  The final presentation was also from Pixar.  The presenter explained a method called Brain Springs that allowed them to automate the motion of the robots and imitate physics simulations without actually running any sim at all.  This was a very interesting idea to me - translating a character's changed in velocity into automatic secondary movement.&lt;br /&gt;&lt;br /&gt;I finished out the day by attending the Computer Animation Festival screenings as well as attending a tribute to Stan Winston.  Today was really full!  Tomorrow should be great too.  I'm looking forward to it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-4659284310838225619?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/4659284310838225619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=4659284310838225619' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/4659284310838225619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/4659284310838225619'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2008/08/siggraph-08-wednesday.html' title='Siggraph 08 Wednesday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-8643596179219081753</id><published>2008-08-13T02:10:00.002-05:00</published><updated>2008-08-13T02:52:36.891-05:00</updated><title type='text'>Siggraph 08 Tuesday</title><content type='html'>Today was interesting.  The first thing I attended was a papers session on animation.  The first paper was on Motion Graphs.  The idea behind motions graphs is that you give a character a set of animations and then give him a goal to achieve (ie - reach a specific location).  Then the character figures out how to reach that goal with the animation set that he has.  This paper presented a way to figure out how likely it would be that the character would be able to achieve that goal based on the characteristics of the environment.  The second paper was on transitions between motions.  The presenter made it clear that the length of a blend from one motion to the next was very important and showed several case studies that proved that better results could be achieved in motion blending if you figure out the best blend length for each transition instead of using a fixed blend length for everything.  The next paper presented methods for processing free form motion - that is, motion on an object or character that's done without a skeleton.  The author developed a method that would allow him to manipulate and blend free form animation while preserving volume.  The most useful case study that he showed was that a cloth simulation could be adjusted and corrected easily after running the simulation and without needing to re-run the simulation.  The last paper in this set was on dual quaternion skinning.  It's a better method for moving verts around with bones than standard skinning or spherical skinning.  The results were good and so was the performance.  I'd like to look into this idea some more.  Lots of information is available here:&lt;br /&gt;&lt;br /&gt;http://isg.cs.tcd.ie/projects/DualQuaternions/&lt;br /&gt;&lt;br /&gt;Next I hit the show floor.  It was fun to run into some people that I know - Chris Evans from Crytek, Kevin Bjorke from Nvidia, and Bobo from Frantic Films - all great guys and fun to talk with.  I was disappointed to find that Natural Motion didn't have a booth as I was hoping to get some more information on their upcoming version of Morpheme.&lt;br /&gt;&lt;br /&gt;In the afternoon I attended another papers session on Characters.  The first paper presented was on creating crowds.  The goal was to see how many character clones you could get away with and not have the viewer notice that two characters were identical.  They changed things like clothing color, and animation to see what the most important factors were in hiding the fact that you have a limited set of characters.  Next, Chris Hecker from Maxis presented his work on the character animation system of Spore.  The presentation was short on details, but Chris had a fun time showing off a lot of the creatures that have been generated by the community.  The third paper was by Michael Kass from Pixar.  His talk was on Wiggly Splines.  He presented a method for quantizing soft body dynamics in characters and giving artists control over the amount of secondary motion that a character has.  The final paper also showed a method for soft body simulation - but it was focused on real-time performance.  The results were very nice.  This is also something I'd like to look into more.&lt;br /&gt;&lt;br /&gt;I finished up the day by heading over to the Nokia Theater for the Computer Animation Festival.  I also stayed for Studio Night.  John Lasseter from Pixar showed "The Man Who Planted Trees" and invited the animator - Frederic Back - who is now 84 years old - to come and talk about his film.  It was very touching to hear him talk about how important the earth is and that we should take care of it.  John Lasseter said that there were lots of elements in Pixar's films that were inspired by Back's work.  After this brief interview, Lasseter screen a documentary on Pixar animation studios.  It started way back when John went to school at CalArts and covered the history of the developement of the studio all the way up through the Disney purchase.  It was very cool to see and really inspired me to want to do my very best work in the projects I'm involved in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-8643596179219081753?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/8643596179219081753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=8643596179219081753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/8643596179219081753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/8643596179219081753'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2008/08/siggraph-08-tuesday.html' title='Siggraph 08 Tuesday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-3768339139362268109</id><published>2008-08-12T01:50:00.001-05:00</published><updated>2008-08-12T01:50:39.495-05:00</updated><title type='text'>Siggraph 08 Monday</title><content type='html'>I'm in Los Angeles this week attending Siggraph so I decided to post my comments on the show each day here on my blog.  I arrived in LA around noon after an uneventful flight (the best kind).  I was hoping to get over to the show in time to catch Ed Catmul's talk, but travel time, hotel check-in, etc, prevented that so I missed the first talk I was planning to attend.  Once I got my credentials, I met up with a friend, Josh Stratton, and we talked about the week and the sessions we were each planning to attend.&lt;br /&gt;&lt;br /&gt;Next I headed to a session on real-time rendering hosted by ATi/AMD.  I won't go into too much detail, since you can download the talks online, but I will say that I was pretty impressed with the effects that the guys at Blizzard talked about.  You can grab all the talk notes here:&lt;br /&gt;&lt;br /&gt;http://ati.amd.com/developer/techreports.html&lt;br /&gt;&lt;br /&gt;After the session was over, I headed down to the Shrine Theater to attend the Autodesk User Group meeting.  It was a good show with Autodesk showing off some of the new features that they're adding to the latest versions of their various software packages.  I was especially impressed by the additions that they showed off in the new Mudbox software, and I also enjoyed see all of the stereoscopic footage that they showed - clips from lots of recent movies in 3D.  They also showed a bunch of new tools that they're adding to Maya and Toxic to make it easier to work with and tune stereo movie footage.  Neat stuff!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-3768339139362268109?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/3768339139362268109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=3768339139362268109' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/3768339139362268109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/3768339139362268109'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2008/08/siggraph-08-monday.html' title='Siggraph 08 Monday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-4145000473134065132</id><published>2008-07-15T20:11:00.002-05:00</published><updated>2008-07-15T20:22:38.134-05:00</updated><title type='text'>Tech-Artists.org</title><content type='html'>I found my new favorite web site!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.tech-artists.org"&gt;http://www.tech-artists.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's a site dedicated for Tech Artists in the video game and movie industry to share information.  Many of the technical artists that I really admire are already signed up and talking about all sorts of tech artist topics.  It's really cool to have so many people who think like I do all together in one place.  If you're a tech artist, head over and sign up!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-4145000473134065132?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/4145000473134065132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=4145000473134065132' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/4145000473134065132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/4145000473134065132'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2008/07/tech-artistsorg.html' title='Tech-Artists.org'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-3426726624233113616</id><published>2008-02-27T22:41:00.002-06:00</published><updated>2008-02-27T23:21:26.093-06:00</updated><title type='text'>GDC08 Friday</title><content type='html'>My first session on Friday was another one on the characters in Drake's Fortune.  This one was presented by Christian Gyrling.  He was in charge of implementing the enemy characters in the game.  Christian talked about how they seperated the low level mechanics of which animations to play from the high level AI functions.  That way their AI could issue simple commands like "find cover" and the lower level system would make the character face the closest cover point, run to get there, play a transition animation once it reached a certain distance from the point, and then play the in-cover animation.  Christian also talked a bit about their additive animation system.  I'm excited to implement some of these layered animations in our game.&lt;br /&gt;&lt;br /&gt;My next session was by Tiago Sousa from Crytek.  He talked about the effects in Crysis.  I was really impressed that the Crysis guys had implemented so many effects like depth of field, motion blur, HDR tone mapping, and volumetrics, and that all of them work together so well.  They really didn't cut any corners on Crysis.  Visually I think it's about the most impressive game out there right now.  Tiago talked about their system for water, including dynamic waves, reflection and refraction, chromatic dispersion, caustics, god rays, and that cool effect that happens on the screen when you leave the water.  Next he talked about the shaders that they wrote to achieve the frozen look on objects.  He said that effect was a real pain and required 4 separate iterations before they finally found a version of the effect that they were happy with.  In the middle of the talk, Tiago gave a couple of guidelines for creating effects in games that I wish all programmers would follow.  First he said "Never sacrifice quality for speed."  I could hardly believe I was hearing that from a programmer.  Most graphics programmers I know say exactly the opposite.  He also said "Make the effects as subtle as possible."  Usually when programmers put a new effect into a game, they really make it stand out and it ends up looking silly.  Following the "subtle" advice is a good idea.&lt;br /&gt;&lt;br /&gt;After that, I went to a session by Jeremy Vickery on Practical Light and Color.  Jeremy is a lighting artist at Pixar and also a very good teacher.  I loved the style of his presentation.  He talked about the properties of light - diffuse, specular, reflection, refraction, subsurface scattering, etc.  I loved his description of how light shifts in saturation as well as value when it gets darker.  I learned a lot from him and I even ordered his DVD from Gnomon workshop so that I can really study the principles he was presenting.&lt;br /&gt;&lt;br /&gt;Finally, I attended Adam Pletcher's session on Python for Artists.  Adam really opened my eyes to a whole new world of posibilities with python.  I already know MaxScript and I use it a lot to create tools to speed things up in 3ds Max.  Python is a lot like MaxScript - but it's outside Max so it can do all kinds of things.  Adam showed lots of demos of what it can do.  He wrote several scripts that grab things from the web.  One script grabbed the current number of people playing Halo 3 online.  Another grabbed the current temperature for a given zip code and added to an auto-generated excel spread sheet.  Another set of demos dealt with textures.  The first demo scanned all of the textures in a directory and reported if any of them were not power of two or if they were saved at the wrong bit depth.  For his final demo, Adam showed a script that he wrote that allowed you to fly around a 3ds Max scene using an Xbox 360 controller!  Even better than that, he had assigned level decoration assets to the buttons on the controller, so you could use one button to switch between the set of available assets, and another button to place the assets in the level.  It was controller-based interactive level creation inside Max.  I was totally blown away.  Needless to say, I am now learning python.  I'm pretty excited about what I'll be able to do with it to speed up our art pipeline once I start learning.&lt;br /&gt;&lt;br /&gt;Thanks for reading my GDC blog posts.  If you'd like more information on any of the sessions I added, please let me know.  I took at lot of notes and I'd be happy to share additional details if anyone is interested.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-3426726624233113616?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/3426726624233113616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=3426726624233113616' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/3426726624233113616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/3426726624233113616'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2008/02/gdc08-friday.html' title='GDC08 Friday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-1888536815725152508</id><published>2008-02-22T08:58:00.002-06:00</published><updated>2008-02-22T09:27:51.899-06:00</updated><title type='text'>GDC08 Thursday</title><content type='html'>The first session I attended today was on environment design in Halo 3.  The speaker presented the idea of having two artists work on each environment.  The first artist is called the architect.  He is in charge of the layout and flow of the level - ensuring that level traversal works correctly for both the player and the AI.  The architect block's out the level and tests the block-out to assure that it can achieve the design goals and that it's fun.  The second artist assigned to the level is called a finishing artist.  This guy is in charge of creating concept art at the beginning stage of the process.  This art is mostly focused on layout at first.  Once the architect starts getting the layout completed, the concepts move more toward color and detail pieces.  Finally, the finishing artist is in charge of creating final textures for the level and adding all of the finishing details that really make the level shine.  This way of working sounded really good to me, since some artists are better at one or the other of the two focused areas.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After my first session, I went down to the expo floor for a bit.  I met with a couple of companies about extending ShaderFX to support their game engines. Everyone seemed to be excited about the idea, so I think this is something we will pursue - adding support for specific game engine export formats.  I also spoke with some guys at Natural Motion about Morpheme - a program we use at Bioware to set up our animation blend trees.  It sounds like they have a really good solution to a problem that we've been running into.  I'm excited to work with them on it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next I attended a session that discussed the new features in FX Composer 2.5.  The thing I'm most looking forward to is the new visual debugger that will be included.  They showed how you can highlight any pixel on your object to get information about what's happening at that specific spot, or you can select any variable and see the output assigned to that variable as the end result of the shader instead of the actual value retured by the entire function.  It was great to see that this more robust debugging is finally going to be available to shader authors.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After lunch I attended a session by an effects artist and a programer that worked on Bioshock.  They discussed how they achieved a lot of the special effects in the game, including lit particles for smoke, etc, specularity and per-pixel lighting on particles for water and blood, waterfalls, water caustics, and interactive ripple effects.  There were several ideas that I liked in this session.  The first is that the artist and programmer working on effects sat right next to each other for the entire project - so collaboration was natural and easy.  I also liked the idea that they shared about using a scrolling normal map to distored the UVs  before sampling.  They used this technique on both the projected caustic effect as well as the dynamic rippled.  It served to break up clean patterns and help these effects feel more random and natural.  Very cool.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Finally I attended a session hosted by Natural Motion on Morpheme, their animation state machine and blending software.  They showed the basic process of setting up a blend tree, and also some of the new features that they're going to add to version 1.3 of the software.  I was most interested to see that you can reference a set of nodes in another file in your tree.  This is something we need to add to our blend trees because it will enable more than one person to work on them at a time and also allow us to repeat functionality in different parts of the tree and keep things consistent.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm looking forward to tomorrow.  It looks like I've got some more great sessions lined up.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-1888536815725152508?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/1888536815725152508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=1888536815725152508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/1888536815725152508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/1888536815725152508'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2008/02/gdc08-thursday.html' title='GDC08 Thursday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-5628827720643254190</id><published>2008-02-21T01:16:00.002-06:00</published><updated>2008-02-21T01:55:34.883-06:00</updated><title type='text'>GDC08 Wednesday</title><content type='html'>Wow, it was an exciting day at GDC!  I started off the day going to the Technical Artist round table hosted by Jeff Hanna of Volition.  Jeff is a great guy.  I met him in the hall before the session and he and I had a fun chat about tech art stuff.  During the session, Jeff defined a tech artist as a roady - or a stage hand - the guys working behind the scenes to make sure that everything runs smoothly.  We discussed the difference between a tech artists and a tools programmer.  We also came up with a bit of a list of good things that tech artists should do - Use your own tools so that you're forced to see the problems with them, write complete step by step docs for all of your tools, sit with the artists as they use the tools you've created so that you get a good idea of how your tools are working in production.  Artists are our customers and we should be working together with them - instead of somewhere else in the studio.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next I attended the Microsoft keynote.  They took advantage of the keynote to really push their platform.  The Xbox 360 is great, but I wish they hadn't turned the keynote into a "shove it down your throat" advertising pitch.  I did enjoy Peter Molyneux's demo of Fable 2 (featuring co-op play), and Tim Sweeney's demo of the latest features in the Unreal Engine (dynamic ambient occlusion, large crowds of characters, Ageia soft body physics, and realistic destructability).  Cliffy B also made a "look how cool I am" appearance to announce that Gears of War 2 will be available this November.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After the keynote, I went to a session on the animation in Drake's Fortune given by Judd Simantov and Jeremy Yates from Naughty Dog.  It was cool to hear about all of the tools that Judd created to make it possible for the animators at Naughty dog to mix motion capture and keyframe animation seamlessly.  At Bioware, we're using Puppetshop for animation, and I was happy to see that a lot of the tools that Judd wrote for Drake's Fortune do the same types of things that Puppetshop already handles.  I also got a few ideas for additional Puppetshop extensions to make animating characters much easier for our animators.  This is why I love GDC - I get all kinds of great ideas to use in my projects.  Jeremy talked about how they went about pushing their motion capture to look more like keyframe animation and how they pushed their keyframe animation to look more like motion capture.  In the end they were able to make both animation types fit together very well so they all of the motion feels like it's part of the same style.  After playing Drake's Fortune myself for about 8 hours last weekend, I think it's probably the best console game out right now.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I had lunch with Bruce Straley and a couple of other guys from Naughty Dog and then headed off to my next session - Neil Hazzard's annual review of using real-time shaders in Max.  There wasn't a lot that was new in Neil's talk this year other than the details of how to implement real-time shadows in your shaders.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Finally I attended a session hosted by Nvidia on realistic skin rendering.  The demo they were showing off uses 17 passes and 750 megs of texture memory.  I was pretty floored to hear those figures.  They say that the core concept is very scalable though.  The main idea with the skin rendering is the subsurface scattering technique of image space blurring - the same technique used in the ShaderFX node that I wrote.  The new element in this demo was that they created something like seven different versions of the blurred texture and took different weighted samples from each for the R, G, and B channels to achieve the final result.  Combine that with a physically based specular term and some nice fresnel fall-off and you've got some very expensive but very realistic skin.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next I went to the show floor and went straight to the Vicious Engine booth.  I've been really excited to see what the guys at VCS have been cooking up since I left.  What I saw didn't disappoint at all!  They've added a bunch of new features to the engine to support the new consoles including rag doll physics, a node-based material editor, and a very nice animation blending system.  I would recommend the Vicious Engine to anyone.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To finish up the night, I got together with a group of old friends and headed off to China Town to go to dinner at the Empress of China.  It was super tasty, and I especially enjoyed catching up and remembering all kinds of craziness from past game projects.  Good times!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-5628827720643254190?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/5628827720643254190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=5628827720643254190' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/5628827720643254190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/5628827720643254190'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2008/02/gdc08-wednesday.html' title='GDC08 Wednesday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-8301993256445379452</id><published>2008-02-20T08:48:00.002-06:00</published><updated>2008-02-20T09:24:39.538-06:00</updated><title type='text'>GDC08 Tuesday</title><content type='html'>I arrived in San Francisco today after a couple of hours of delays at the airport.  The weather here is rainy - and I guess that was causing the airport to get behind schedule.  We ended up waiting about two extra hours in the airport to board our flight and then another hour or so on the plane before we could take off.  Oh well - nothing that a laptop with DVD's can't fix!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once I arrived, I spent the day getting to know the area a bit.  I walked around the down town between the hotel and the convention center.  I also walked around the convention center and found where my classes are going to be tomorrow.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It was fun to bump into some old acquaintances from previous jobs while wondering around.  That's one of the things I really enjoy about the conference - catching up with people I haven't seen in several years and finding out how life is treating them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the evening I went to the IGDA party.  I usually don't enjoy conference parties much, but I thought I'd go anyway.  I ran into Spencer Trent, the effects artist from Vicious Cycle software.  That was pretty amazing since I've never met him - just chatted via instant messenger.  I guess he recognized me somehow (I wasn't wearing my conference badge with my name on it at the time.)  We had a great chat about creating particle effects, etc.  I also visited the Autodesk party for awhile, but didn't stay long since I'm not much of a party type guy.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Looking forward to tomorrow!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-8301993256445379452?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/8301993256445379452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=8301993256445379452' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/8301993256445379452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/8301993256445379452'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2008/02/gdc08-tuesday.html' title='GDC08 Tuesday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-8713248370593598003</id><published>2008-02-17T10:29:00.002-06:00</published><updated>2008-02-17T10:36:42.229-06:00</updated><title type='text'>GDC 2008</title><content type='html'>Just like the last two years, I'm attending GDC this year and really looking forward to it.  Once again I'll be creating blog posts here for each day I'm at the show.  I'll be summarizing each of the classes and presentations that I attend and commenting on what I learn.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you'd like to take a look at the sessions I'll be attending, my schedule is available online toward the bottom of this page:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://mygdc.gdconf.com/c459491"&gt;http://mygdc.gdconf.com/c459491&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You might notice that I've got lots of time slots with  multiple sessions scheduled.  There's just too much to see and learn!  I wish that they'd add an extra day and spread things out a bit more.  It's hard when two classes you really want to attend are scheduled at the same time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-8713248370593598003?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/8713248370593598003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=8713248370593598003' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/8713248370593598003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/8713248370593598003'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2008/02/gdc-2008.html' title='GDC 2008'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-1720346362701068138</id><published>2007-09-02T21:58:00.000-05:00</published><updated>2007-09-02T23:10:01.065-05:00</updated><title type='text'>Bioware!</title><content type='html'>In June I had an interview with the talented people at the Austin studio of Bioware.  It was a great visit and I was excited to finally get to meet some of the people in person there that I'd only spoken with on the phone or chatted with on the web.  The job opportunity looked great and my wife and I really enjoyed the area.  We decided to accept the position and move the family to Texas.  My start date was August 20th.&lt;br /&gt;&lt;br /&gt;We stayed in a hotel for the first 10 days or so while we waited to close on our house.  Five kids and 2 parents couped up in a hotel room for 10 days made for an interesting experience!  We went swimming a lot and looked for other ways to get out of our room as much as we could.  Of course there were lots of things to take care of related to moving that kept us busy.  Now we're moved into our new house (mostly) and enjoying the final hot and humid days of the Austin summer.&lt;br /&gt;&lt;br /&gt;I'm really enjoying my new job.  Bioware is a great company and my coworkers are all really cool.  I've already started scripting tools - which is something that I really love to do - so I'm quite happy.&lt;br /&gt;&lt;br /&gt;While I was taking care of job hunting, interviews, finding a house, and moving, Kees managed to finish up a new point release of ShaderFX - version 1.8!  In this new version, we added the ability for ShaderFX to export different flavors of the FX shader format.  For now we can export to FX  Composer, XNA, and Quest3D - all which require slightly different syntax.  In order to get this to work, we've redone things under the hood quite a bit so it's now much easier to add support for additional formats.  There are several others that we're working on that will be released soon.  These exporters will allow artists to export their ShaderFX shaders directly into their game engines - whereas before the shaders needed a bit of hand-tweeking before they would work in external engines.  In addition to the new exporter, Kees also added several other features - the ability to preview the alpha channel of a texture, and the ability to build shaders with multiple techniques - just to name a few.&lt;br /&gt;&lt;br /&gt;Take a look at the cool demo videos that Kees made to show off the new features here:&lt;br /&gt;&lt;a href="http://www.lumonix.net/shaderfx.html"&gt;&lt;br /&gt;http://www.lumonix.net/shaderfx.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-1720346362701068138?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/1720346362701068138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=1720346362701068138' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/1720346362701068138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/1720346362701068138'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2007/09/bioware.html' title='Bioware!'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-1898679072090152373</id><published>2007-05-20T23:05:00.001-05:00</published><updated>2007-05-20T23:15:25.943-05:00</updated><title type='text'>ShaderFX 1.5 Released!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.lumonix.net/shaderfx_perlin.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://www.lumonix.net/shaderfx_perlin.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Kees and I have been working really hard on ShaderFX recently and we finally finished all of the details, put together screen shots, the web site, and a bunch of new demo videos.  The image at the right is a screen shot of procedurally generated fire that I created using the new Perlin Noise node.  It animates and looks pretty cool.  You can take a look at it all here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.lumonix.net/shaderfx.html"&gt;http://www.lumonix.net/shaderfx.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm really proud of this new version, as it really adds a lot of power to the system and puts the control over some pretty amazing effects right in the hands of artists.  Here's a list of new features that we've added:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Subsurface Scattering&lt;/li&gt;&lt;li&gt;Perlin Noise&lt;/li&gt;&lt;li&gt;Object Space Normal Mapping&lt;/li&gt;&lt;li&gt;DXT5 Normal Map Compression&lt;/li&gt;&lt;li&gt;Bump Mapping&lt;/li&gt;&lt;li&gt;Relief Mapping&lt;/li&gt;&lt;li&gt;Refraction&lt;/li&gt;&lt;li&gt;Projected Texturing&lt;/li&gt;&lt;li&gt;Support for DXSAS format&lt;/li&gt;&lt;li&gt;Custom Code Node&lt;/li&gt;&lt;li&gt;UV Rotation Node&lt;/li&gt;&lt;li&gt;Instruction Count Report&lt;/li&gt;&lt;li&gt;Glow Material Node&lt;/li&gt;&lt;li&gt;Upgraded User Interface&lt;/li&gt;&lt;/ul&gt;We've got a demo version available for download at the Lumonix web site to go download it and let me know what you think!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-1898679072090152373?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/1898679072090152373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=1898679072090152373' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/1898679072090152373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/1898679072090152373'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2007/05/shaderfx-15-released.html' title='ShaderFX 1.5 Released!'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-6620380606389642812</id><published>2007-03-29T18:01:00.000-05:00</published><updated>2007-03-29T18:29:51.703-05:00</updated><title type='text'>HLSL Training DVD</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;Now instead of just telling people to learn, I'm working to help people learn.  Chris Thomas from &lt;a href="http://www.cg-academy.com/"&gt;Cg Academy&lt;/a&gt; has invited me to create a series of training DVDs for the purpose of teaching artists HLSL. I've already created the first DVD, "&lt;a href="http://www.cg-academy.com/pages/topic_games/dvds_hlsl_shader_creation_01/dvds_hlsl_shader_creation_01.php"&gt;HLSL Fundamentals&lt;/a&gt;" and it's now available from Cg Academy.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.cg-academy.com/pages/topic_games/dvds_hlsl_shader_creation_01/dvds_hlsl_shader_creation_01.php"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_rXFWlQoRVPs/RgxHTRDjb5I/AAAAAAAAA0g/PfrYwGep2AQ/s400/packshot_aclm.jpg" alt="" id="BLOGGER_PHOTO_ID_5047487678696877970" border="0" /&gt;&lt;/a&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-6620380606389642812?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/6620380606389642812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=6620380606389642812' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/6620380606389642812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/6620380606389642812'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2007/03/hlsl-training-dvd.html' title='HLSL Training DVD'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_rXFWlQoRVPs/RgxHTRDjb5I/AAAAAAAAA0g/PfrYwGep2AQ/s72-c/packshot_aclm.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-4251247483170405181</id><published>2007-03-15T16:29:00.000-05:00</published><updated>2007-03-15T17:10:52.168-05:00</updated><title type='text'>GDC07 Friday</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;For my last session of the day, I attended &lt;a href="http://jeff-hanna.com/techart_blog/"&gt;Jeff Hanna&lt;/a&gt;'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 &lt;a href="http://www.lumonix.net/"&gt;ShaderFX&lt;/a&gt;, 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!&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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 &lt;a href="https://www.cmpevents.com/GD07/a.asp?option=C&amp;V=1&amp;amp;PV=2"&gt;GDC Website&lt;/a&gt;.  Just do a search on that page for "Download Presentation" to jump to the ones that are available.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-4251247483170405181?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/4251247483170405181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=4251247483170405181' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/4251247483170405181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/4251247483170405181'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2007/03/gdc07-friday.html' title='GDC07 Friday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-8727673152468296166</id><published>2007-03-09T00:27:00.000-06:00</published><updated>2007-03-09T00:53:17.509-06:00</updated><title type='text'>GDC07 - Thursday</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;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!&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-8727673152468296166?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/8727673152468296166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=8727673152468296166' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/8727673152468296166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/8727673152468296166'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2007/03/gdc07-thursday.html' title='GDC07 - Thursday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-4003795245200399749</id><published>2007-03-07T23:36:00.000-06:00</published><updated>2007-03-08T00:07:02.904-06:00</updated><title type='text'>GDC07 - Wednesday</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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)&lt;br /&gt;&lt;br /&gt;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!&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-4003795245200399749?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/4003795245200399749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=4003795245200399749' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/4003795245200399749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/4003795245200399749'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2007/03/gdc07-wednesday.html' title='GDC07 - Wednesday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-7357226695060873916</id><published>2006-12-03T23:37:00.000-06:00</published><updated>2006-12-03T23:54:28.809-06:00</updated><title type='text'>ShaderFX is Available!</title><content type='html'>Kees Rijnen and I have completed the first version of ShaderFX, and it's now available for purchase from the &lt;a href="http://www.lumonix.net"&gt;Lumonix web site&lt;/a&gt;.  There's also a free demo version.  I'm really excited about sharing it with everyone.  ShaderFX is a plug-in for 3ds Max that allows artists to create real-time shaders without needing to know programming or HLSL.  It uses a node-based visual interface - so it makes it fast and easy to create all kinds of cool effects.&lt;br /&gt;&lt;br /&gt;Our product launch went really well and it looks like lots of people were interested in it based on the number of downloads that we had just in the first week.  ShaderFX made the front page of CgTalk, CgChannel, and Gamasutra, as well as several other industry web sites.  We also received lots of great comments and feedback from people all over the industry and we really appreciate the encouragement and support.  Thanks a lot everyone!&lt;br /&gt;&lt;br /&gt;The really exciting thing is that this version is just the beginning.  We've started compiling a list of features to add to our next version and if we get all of the things in that we want, it's going to be a pretty amazing tool.  Not only that, but we plan to add new nodes and additional features to our current version frequently and release them as free updates.&lt;br /&gt;&lt;br /&gt;For anyone wanting to get into creating shaders for the Max viewport and for game engines, this is a very valuable tool, and it's just going to keep getting better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-7357226695060873916?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/7357226695060873916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=7357226695060873916' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/7357226695060873916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/7357226695060873916'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2006/12/shaderfx-is-available.html' title='ShaderFX is Available!'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-116069007819493518</id><published>2006-10-12T16:31:00.000-05:00</published><updated>2006-10-12T16:54:38.250-05:00</updated><title type='text'>ShaderFX</title><content type='html'>I've been working on a really cool project for the last few months.  It's called ShaderFX.  It's a plugin for 3ds Max that allows artists to create FX shaders for Max's viewport.  I'm creating it together with Kees Rijnen who has been a lead tech artist at Bioware.&lt;br /&gt;&lt;br /&gt;In the past, FX shaders have been out of the reach of most 3d artists since the only way to make them was by coding them in HLSL - DirectX's High Level Shading Language - and that generally required begging a programmer friend for help.  ShaderFX changes that.  It uses a visual interface for building shaders by wiring nodes together to get the effect that you want.  It's designed to have a similar workflow as the Material Editor in Max, so that artists who are familiar with making materials for Max's software renderer can pick up the tool and start creating real-time shaders quickly.&lt;br /&gt;&lt;br /&gt;Kees formed a new company to market ShaderFX as well as several other plugins for Max that he has been creating.  You can find out more information about ShaderFX and his other tools at &lt;a href="http://www.lumonix.net"&gt;www.lumonix.net&lt;/a&gt;.  We're about to start beta testing the plugin.  I'll post more information here as things develop.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-116069007819493518?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/116069007819493518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=116069007819493518' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/116069007819493518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/116069007819493518'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2006/10/shaderfx.html' title='ShaderFX'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-115717326646757850</id><published>2006-09-01T23:45:00.000-05:00</published><updated>2006-09-02T00:01:06.476-05:00</updated><title type='text'>Moving and Moving</title><content type='html'>It has been a pretty crazy couple of months for me.  My dad was diagnosed with a terminal illness at the start of the year.  We decided it would be best to move our family to my parent's hometown to help take care of dad for the last part of his life.  We sold our house in North Carolina in July and moved to Cedar City, Utah where my parents live.  Since we arrived we've been hard at work setting up a new place, getting settled in, and helping my parents.  &lt;br /&gt;&lt;br /&gt;I am now an independant contractor working remotely for Vicious Cycle Software - the company where I worked in North Carolina.  They very graciously offered me the chance to continue working for them even though I now live more than 2000 miles away!&lt;br /&gt;&lt;br /&gt;I'm also working on two personal projects that are very exciting and have to do with 3ds Max and shaders.  I'll post more details on them when they're farther along.&lt;br /&gt;&lt;br /&gt;My second move was my web site.  When my site was at MonitorStudios, I got hosting for free because my friend owned the server.  The site got a bit too popular, however, and my friend told me he could no longer pay for all the bandwidth and still give me the server space for free.  I looked around for a good web site host, found a good deal, and moved the site.  At the same time, I also got the domain name - bencloward.com - which I'm very happy about.  It's a lot easier to remember than the old one.&lt;br /&gt;&lt;br /&gt;Big thanks to all of the people that have sent me email to thank me for the textures on my site.  I'm glad that they're useful.  I don't always have time to answer every email, but I really appreciate hearing from people that use my textures.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-115717326646757850?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/115717326646757850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=115717326646757850' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/115717326646757850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/115717326646757850'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2006/09/moving-and-moving.html' title='Moving and Moving'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-114326739318394551</id><published>2006-03-24T23:37:00.000-06:00</published><updated>2006-03-25T00:16:33.196-06:00</updated><title type='text'>GDC - Friday</title><content type='html'>Friday has been my most busy day at GDC.  I started the day off by attending a session put on by two guys from Epic on Modeling next-gen characters.  They detailed the process of creating a character starting at the concept stage all the way through to the completed in-game model.  There were tons of details and they went through it all really fast.  Here are some of the highlights:  They spent 6 weeks concepting their main character and another 4 weeks modeling him. They break their characters up into parts and create a library of max files with lots of parts to they can reuse them.  When exporting a model to Zbrush, it's important to use quads, not triangles.  They go back and forth between Zbrush and Max when working on the detailed model.  Once their models are detailed in Zbrush, they have to break them appart and run them through Polygon Cruncher to reduce the poly count so Max doesn't crash when they import.  They use obj format for going back and forth between Zbrush and Max.  Their characters typically use 2 2048 textures.  They use Max's render-to-texture to create diffuse maps, height maps, ambient occlusion maps, and normal maps for the low res mesh.  The most important map is the normal map.  That's where all the detail is.  The diffuse map is mostly just flat color.  Overall, this session was very informative.&lt;br /&gt;&lt;br /&gt;Next I attended a session by Paul Steed on Defining the Next-Gen Character.  It was basically just a laundry list of all the stuff a character has to have to be considered "next-gen."&lt;br /&gt;&lt;br /&gt;After that I got into the Epic booth and got to see a live demo of Gears of War and Unreal 2007.  It was a very cool presentation.  I was impressed that they're able to use partial rag doll and even full body rag doll and have the character recover and return to what it was doing before.  The also demoed FaceFX.  It's a facial animation add-on for the engine that automatically parses wav files and extracts phonemes.  Then it creates the lip synch for your character and you can go in and add detail and tweek the animation as needed.  The cool part was the ability to control the intensity of normal maps with the sliders in addition to the morph targets so wrinkles in the face to be created.  I was happy to see that they've solved the issue of billboard particles clipping into things.  That's been a pet pieve of mine for awhile.&lt;br /&gt;&lt;br /&gt;Next I attended a session by Kevin Bjorke about creative uses for textures in the shader pipeline.  He talked about mip maps and what you should and shouldn't do with them.  He talked about a shader that he's written that helps you know what texture res to use on your model and find the areas where the UVs are stretching.  I'm definatly going to start using that!  He showed a tool that he wrote for Photoshop that creates mip maps so you can edit them.  He also showed some reall interesting BRDF style shaders that allowed you to paint on the BRDF input textures until you got the results you wanted.  He ended his talk with a toon shader that was pretty cool.&lt;br /&gt;&lt;br /&gt;To end the day, I attended a talk by Neil Hazzard from Autodesk on using real-time shaders in Max.  He explained a lot of things about Max's shader support that I didn't know about.  A lot of the problems I've been having lately with my shaders can be solved with the features he discussed.  I'm going to be studying his slides for a long time.  Neil gave me some time during his presentation for me to show off some of the shaders that I've written.  That was really fun and people seemed to like my work.  Several artists came up to talk to me after the demo about getting together to colaborate on shader writing.  That is probably the most valuable thing for me about the whole trip - meeting some other artists that are also interested in shader writing.&lt;br /&gt;&lt;br /&gt;So that's it - my 2006 GDC experience.  I've made some friends, hooked up with old friends, and really had a great time.  Now I have to get up at 4:30 am to catch my flight home.  :0(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-114326739318394551?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/114326739318394551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=114326739318394551' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/114326739318394551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/114326739318394551'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2006/03/gdc-friday.html' title='GDC - Friday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-114321456610339537</id><published>2006-03-24T09:20:00.000-06:00</published><updated>2006-03-24T09:36:06.133-06:00</updated><title type='text'>GDC - Thursday</title><content type='html'>Thursday at GDC was cool.  The first presentation I went to was by a guy at Factor 5 talking about their new next-gen title, Lair.  It was really neat to see the level of detail that they're able to get on their characters.  They said that when they hire modelers, they look for people that are really good at modeling and don't worry much about the polycounts.  They just tell the guy to build a great looking model.  Then if it needs to be reduced, they have a technical artist do that job.  I think that's a really good strategy since it uses the strengths of both types of people.  The dragon's they're making for the game are around 40k triangles for the base model!&lt;br /&gt;&lt;br /&gt;Next I went to a presentation on next-gen modeling for Gears of War.  The guy was a vehicle and weapon modeler and gave a ton of useful tips for speeding up the process of creating next-gen assets.  One of the main things he does to speed up the high poly model process is to float details on the surface of the geom instead of sinking them into it - even cut lines that should actually be built into the surface - he just floats them on the top of it and when the normal map is created it looks exactly the same.  That's a huge time saver.&lt;br /&gt;&lt;br /&gt;I also worked on our company's career booth on Thursday.  It was fun to talk with people about the projects we're working on at Vicious Cycle and about the job opportunities.  If you're an artist or a programmer looking for a job working on fun projects, head over to the Vicious Cycle web site (www.viciouscycleinc.com) and apply!&lt;br /&gt;&lt;br /&gt;In the afternoon I attended a session given by Kevin Bjorke at Nvidia about the new version of FXComposer.  It's pretty cool because you can use it to edit Cg, and GLSL in addition to HLSL and you can also view all of them running at once in multiple viewports.  It's been re-built to be totally extendable also so devs can adapt it to fit their pipeline better.&lt;br /&gt;&lt;br /&gt;I finished up the day by attending a round-table discussion for lead artists.  They talked about all the lead artist issues like scheduling, dealing with artists that are slow, how to reward people that are good, what to do with artists that want to do one thing but are really good at something else, etc.  It was cool to hear.&lt;br /&gt;&lt;br /&gt;Friday I'll be giving a presentation about shaders together with Neil Hazzard from Autodesk.  That will be fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-114321456610339537?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/114321456610339537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=114321456610339537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/114321456610339537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/114321456610339537'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2006/03/gdc-thursday.html' title='GDC - Thursday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-114309894220340504</id><published>2006-03-23T00:25:00.000-06:00</published><updated>2006-03-23T01:29:02.220-06:00</updated><title type='text'>GDC - Wednesday</title><content type='html'>I started today off with a nice breakfast omlet from a cafe down the street from the convention center.  Then I went and checked out our company's booth on the exhibition floor.  We're selling our game engine to other developers so we've got a booth to show it off.  Here's a link to the engine web site if you're interersted:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.viciousengine.com"&gt;The Vicious Engine&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My first session was on cinematic game design put on by a couple of guys at Midway.  The point of their presentation was that game design should borrow techniques developed in cinema to enhance game presentation while still maintaining what makes game unique - the interactivity.  They showed 9 specific cinematics techniques from film and explained how they translate into games and can push the cinematic quality of a game without turning the game into a real-time rendered movie.&lt;br /&gt;&lt;br /&gt;Next I went to the PS3 keynote speach.  It was ok, but I didn' see anything that really inspired me.  You can read more details on the keynote &lt;a href="http://www.shacknews.com/onearticle.x/41353"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I finished up the morning in a session by ATI entitled, Efficient Shader Tricks to Impress Your Friends.  The presenter showed two shaders he had written and explained how they worked.  The first was written for materials that are semi-tranparent and have a volume.  It used a variation of offset mapping to create the illusion of depth and looked very nice.  The second was a method of lighting terrain with dynamic area lights.  It involved a ton of math, but the results were very nice.  This presentation will be added to ATI's developer site within a few weeks.  After this session I spoke to the presenter about the seams that I'm getting in my skin shader at UV borders.  He offered me a few solutions and asked me to email him about it.  I'm looking forward to working with him on it to make it work without the seams.&lt;br /&gt;&lt;br /&gt;In the afternoon I attended a very inspiring session on character rigging by Steve Theodore.  It was two hours long and Steve just really cranked through the material.  He has placed his slides online &lt;a href="http://www.giantbite.com/steve/bp/bp.html"&gt;here&lt;/a&gt; and I'm planning to study them for the next few months and use the info to improve my character rigging script.  That will be fun!&lt;br /&gt;&lt;br /&gt;I finished up the day by spending a few hours at our engine booth talking to people about our game engine.  That was pretty cool.  It's easy to talk about the engine because it's so powerful.  I'm looking forward to tomorrow's sessions!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-114309894220340504?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/114309894220340504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=114309894220340504' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/114309894220340504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/114309894220340504'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2006/03/gdc-wednesday.html' title='GDC - Wednesday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-114303857600561513</id><published>2006-03-22T08:26:00.000-06:00</published><updated>2006-03-22T08:42:56.026-06:00</updated><title type='text'>GDC - Tuesday</title><content type='html'>I decided to do a blog post for each day that I'm at GDC so I can have a place to collect all the stuff that I learn each day and share the stuff that I think is cool with whoever wants to read it.&lt;br /&gt;&lt;br /&gt;Tuesday was my long plane ride day.  The ride was long so I watched Star Wars episode 4 on the first flight and Toy Story on my second flight.  Movies on planes are nice.  I used to hate flying until I was able to bring my own movies to watch.  Now it's not so bad.&lt;br /&gt;&lt;br /&gt;On the plane, I also did a little bit of thinking about how to structure a system of shaders for a next-gen graphics engine.  I think it would be cool to create a standard list of shader inputs like normal, view vector, light vector, UVs, diffuse color, etc and then make each use a function call to be created.  That way I could write lots of variations of functions for each input - like a normal function that combines multiple normal maps, a UV function that does offset mapping, etc.  I could build a library of functions for each input type.  The main body of the shader would be the lighting function - and I could build a library of different lighting models - blinn, phong, oren-nayar, etc.  Then when I wanted to build a new shader, I could just combine all of my various functions to get the results I was looking for.  If I couldn't get it with what I had, I could write some new functions and add them to the library.  This type of system would allow new shaders to be built quickly, and make all of the shaders work together in an organized system.  It's all just at the concept stage at this point, but I thought I'd throw it out there and see if anybody had any thoughts on it.&lt;br /&gt;&lt;br /&gt;Neil Hazzard from Autodesk has asked me to give a short presentation on my shaders during his talk on Friday.  It's going to be cool to show other people what I've been working on and meet some people that are working on similar projects.  Neil also said that they might be showing a shader demo that I made at the Autodesk booth.  Nice!&lt;br /&gt;&lt;br /&gt;I hope to be able to log some of the interesting tid-bits that I learn on Wednesday in my next post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-114303857600561513?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/114303857600561513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=114303857600561513' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/114303857600561513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/114303857600561513'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2006/03/gdc-tuesday.html' title='GDC - Tuesday'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-114274060283205651</id><published>2006-03-18T21:38:00.000-06:00</published><updated>2006-06-23T23:55:46.436-05:00</updated><title type='text'>Skin Shader</title><content type='html'>I just updated my web site with a new FX shader for Max.  This one is for skin.  Here's a screen shot:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.bencloward.com/images/shaders_skin_complete_blog.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;The shader simulates sub-surface scattering by rendering the diffuse lighting in UV space and then blurring it.  I got the idea from the shader used in ATi's Ruby demos.  This technique was also used in the second and third Matrix movies.  I'm also doing some fancy stuff with normal mapping and specularity.  I'm really excited about this one because I finally learned how to render into an off-screen buffer and then use that buffer as a texture for subsequent passes.  This technique is useful for all sorts of things like glow, depth of field, light bloom, etc.  It's really opening up a lot of new possibilities for me.  I've already written several other shaders using this technique.  I'll be posting them soon too if I can get the time.  You can get the skin shader here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.monitorstudios.com/bcloward/resources_shaders.shtml"&gt;Ben's Shader Page&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Leave a comment and let me know what you think.&lt;br /&gt;&lt;br /&gt;On another note, I'm going to GDC this year.  If anyone wants to hook up with me there and talk about shaders, rigging, or just making games in general, that would be really cool.  Just send me an email.  I've met a lot of people on the web and it'll be nice to finally get to see some of you in person.&lt;br /&gt;&lt;br /&gt;Finally, here are two very cool links related to normal mapping and creating next-gen game assets that I learned a lot from:&lt;br /&gt;&lt;a href="http://boards.polycount.net/showflat.php?Cat=0&amp;Number=91531&amp;amp;amp;amp;amp;page=&amp;fpart=1&amp;amp;vc=1"&gt;&lt;br /&gt;Rorshach's Cool Thread on Polycount&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.iddevnet.com/quake4/ArtReference_CreatingTextures"&gt;Quake 4 SDK Texture Tips&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enjoy them!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-114274060283205651?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/114274060283205651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=114274060283205651' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/114274060283205651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/114274060283205651'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2006/03/skin-shader.html' title='Skin Shader'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-113782062642466411</id><published>2006-01-20T22:59:00.000-06:00</published><updated>2006-04-06T20:04:09.486-05:00</updated><title type='text'>Cube Maps</title><content type='html'>I've been using cube maps for various things in my shaders lately.  I'm especially excited about high dynamic range cube maps because of the nice image quality they give both when used to light objects and also when used for reflections.  Now that both Max and Photoshop support 16 bit float images, HDR cube maps are pretty easy to make - especially since the Nvidia DDS plugin for Photoshop can save a dds cubemap in 16 bit float.  The pipeline for using cube maps is getting better.&lt;br /&gt;&lt;br /&gt;About a month ago, Jolyon Webb from CodeMasters told me about a new tool from ATi that makes working with cube maps even easier.  It's called CubeMapGen.  It will read in a verticle cross HDR cube map right out of HDRshop and save it in 16 bit DDS format.  That means that you don't even have to use Photoshop at all and you no longer have to hand-place the six panels of the cube.  This new tools turns the process of creating a cube map into just two steps.  First, convert a light probe into verticle cross format in HDRshop and save it.  Second, open it in CubeMapGen and resave in 16 bit DDS format.  That's it!  You can also give it the 6 sides as seperate images if you want to.&lt;br /&gt;&lt;br /&gt;Another really nice thing that it does is handle mip-map generation and filtering correctly for a cube map so you never see seams in your cube map no matter what mip-level you use.  Nice!  You can grab this tool here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ati.com/developer/cubemapgen/index.html"&gt;http://www.ati.com/developer/cubemapgen/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm working on a new tutorial about using cube maps for real-time global illumination.  It probably won't be done for awhile since I don't have a lot of extra time to work on it, but I'm planning on explaining how this tool fits into the process&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-113782062642466411?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/113782062642466411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=113782062642466411' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/113782062642466411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/113782062642466411'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2006/01/cube-maps.html' title='Cube Maps'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-113306527712916268</id><published>2005-11-26T20:17:00.000-06:00</published><updated>2006-06-23T23:54:42.703-05:00</updated><title type='text'>Normal Map Bug in Max 8</title><content type='html'>I submited a new normal map bug to Autodesk a few days ago. 3ds Max 8 ships with at least 4 different methods of displaying normal maps in the real-time viewport. These methods are:&lt;br /&gt;&lt;br /&gt; 1. The "DiffuseBump.fx" DX9 shader&lt;br /&gt; 2. The "DX Display of Standard Materials" check box on the Material panel&lt;br /&gt; 3. The "RTTNormalMap.fx" DX9 shader&lt;br /&gt; 4. The Metal Bump9 Material Plugin&lt;br /&gt;&lt;br /&gt;Of these four, all of them except DX Display of Standard Materials have serious visual problems. I believe that the issue is related to the way that Max generates the tangents. Here's an example of the problem:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.bencloward.com/images/tangent_bug.gif" alt="Max 8 Normal Map Tangent Bug" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That big white spot definately shouldn't be there. This is a standard geosphere that's using the "RTTNormalMap.fx" DX9 shader. The normal map that is applied is a simple 127, 127, 255 blue square - basically a blank normal map. I applied a box UV map to the sphere but you get similar artifacts when you use all of the other UV mapping types.&lt;br /&gt;&lt;br /&gt;All of the shaders that I have posted on my web site had this problem too. After playing around with lots of different methods, I discovered that the problem happens when the light vector and eye vector are transformed to tangent space in the vertex shader and then used together with the tangent space normal map in the pixel shader. If I transform the eye vector and light vector to world space in the vetex shader instead and then transform the tangent space normal map to world space in the pixel shader (doing all math in world space instead of tangent space), the issue goes away. The drawback of this solution is that it requires more pixel shader instructions - so the shader will run a little slower.&lt;br /&gt;&lt;br /&gt;Here's hoping that Autodesk addresses this issue in a service pack!  In the mean time, I've updated all of my shaders to use the world space math instead of the tangent space math to give more correct results.  You can grab them &lt;a href="http://www.bencloward.com/resources_shaders.shtml"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-113306527712916268?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/113306527712916268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=113306527712916268' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/113306527712916268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/113306527712916268'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/11/normal-map-bug-in-max-8.html' title='Normal Map Bug in Max 8'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-112974052726699732</id><published>2005-10-19T11:30:00.000-05:00</published><updated>2005-10-19T11:48:47.273-05:00</updated><title type='text'>Back to HLSL Shaders</title><content type='html'>After taking a break for a few months to learn some MaxScripting, I've jumped back into shader writing.  So far I've mainly been focusing my efforts on figuring out the best and least expensive way to do normal mapping in shaders written to work in the viewport of Max 8.&lt;br /&gt;&lt;br /&gt;Up until now I've been using the vertex shader to put all the vectors in tangent space.  Doing all of the lighting calculation in tangent space worked pretty well for Max 7, but when I was beta testing Max 8 I found that the tangent space lighting was causing some very strange lighting artifacts to show up around UV borders.  After seeing this, I went back to Max 7 and realised that the same artifacts were there in 7 as well - just not as prominent.  I have no idea what was causing these artifacts, but I posted them as a bug.  I don't know if the issue was fixed since I haven't gotten my copy of the final version of Max 8 yet.&lt;br /&gt;&lt;br /&gt;Anyway, to get around the problem, I'm now converting all of my normal map shaders so that they do their lighting in world space.  This seems to be working very well.  Putting vectors in world space is much cheaper for the vertex shader, and the lighting annomalies that I saw with my previous tangent space lighting are gone.  Of course, the offset mapping shader has to stay the way that it was since offset mapping requires that the view vector be in tangent space.&lt;br /&gt;&lt;br /&gt;I was excited to see that the problem I posted before with the normal map seams at UV borders is fixed in Max 8.  Nice!  They've also solved the UV mirroring problem, so now you can have mirrored UVs and the normals all work correctly.  Max 8 will be very nice to work with because of these fixes.&lt;br /&gt;&lt;br /&gt;I plan on posting the newer versions of my normal mapping shaders soon as well as some additional shaders that I've been working on.&lt;br /&gt;&lt;br /&gt;Since I'm back on the topic of shaders, I really need to mention that Joel Styles has posted a &lt;a href="http://www.jistyles.com/main.php?id=doc&amp;page=hlsl"&gt;really sweet skin shader&lt;/a&gt; on his site.  If you're looking for a nice HLSL skin shader that works in Max, this is it!  Nice job, Joel.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-112974052726699732?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/112974052726699732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=112974052726699732' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/112974052726699732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/112974052726699732'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/10/back-to-hlsl-shaders.html' title='Back to HLSL Shaders'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-112848613681722952</id><published>2005-10-04T23:09:00.000-05:00</published><updated>2005-10-04T23:22:16.823-05:00</updated><title type='text'>Helping Hands</title><content type='html'>On a completely unrelated note - I got back late last night from Hattiesburg, Mississippi.  I went there on Friday with a group of 24 guys from my church to do volunteer hurricane relief work over the weekend.  (&lt;a href="http://www.lds.org/newsroom/showrelease/0,15503,3881-1-22165-666,00.html"&gt;More info here&lt;/a&gt;)  The eye of Hurricane Katrina passed right over Hattiesburg and the people we talked to said that they had hurricane force winds for 12 hours!  It's been four weeks now and life seems to be slowly getting back to normal, although there is still a tremendous amount of work to be done.  Our team of 24 (along with about 900 other members of our church from the Raleigh region) mainly worked to remove giant trees that had fallen over in people's yards - often times causing major damage to their homes.  We helped to apply tarps to damaged roofs and to clear away the massive amount of debris from downed trees.  You have no idea how heavy a tree is until you try to haul it away!  It was the most fun I've had in a long time, and I've got the sore muscles to prove it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-112848613681722952?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/112848613681722952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=112848613681722952' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/112848613681722952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/112848613681722952'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/10/helping-hands.html' title='Helping Hands'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-112649033981734840</id><published>2005-09-11T20:30:00.000-05:00</published><updated>2005-09-11T23:06:46.653-05:00</updated><title type='text'>PEN Attribute Holder</title><content type='html'>&lt;span style="font-size:100%;"&gt;I've added the functionality of the &lt;a href="http://www.paulneale.com/scripts.htm#PEN_Attribute_Holder"&gt;PEN Attribute Holder&lt;/a&gt; into my character rigging script. PEN Attribute Holder is a cool modifier written by Paul Neale that allows you to save the values of a set of custom attributes as presets and then recall them at any time. It also allows you to save and load presets. This means that I can create hand and finger poses, save them as presets, and recall them at any time during the animation process. I'm hoping that this will speed up the animation on characters' hands and with the time we save we can make the characters' hand movements and poses more expresive. Paul's modifier also has other useful tools for working with sets of custom attributes.&lt;br /&gt;&lt;br /&gt;I want to post a special thank you here to the people that have helped and contributed to my character rigging script. First of all, a big thanks to &lt;a href="http://www.comet-cartoons.com/toons/maxscript.cfm"&gt;Mike Comet&lt;/a&gt; who's incredible rigging script I have used as a framework on which to build my own. I also want to thank Alan Noon for encouraging me to jump in and learn MaxScript. Of course I want to thank &lt;a href="http://www.paulneale.com/"&gt;Paul Neale&lt;/a&gt; for his really cool attribute holder script and all of the other great stuff he has poste&lt;/span&gt;&lt;span style="font-size:100%;"&gt;d on his site. And finally a big thanks to &lt;a href="http://www.marktsang.ver2.biz/"&gt;Mark Tsang&lt;/a&gt;, Sebastian Schoellhammer, Scott Goffman, &lt;a href="http://www.puppetshop.com/"&gt;Kees Rijnen&lt;/a&gt;, and Larry Minton on the various message boards for their help with MaxScript syntax and other bumps-in-the-road that I've run into. People like these who are willing to help out the new guy (me) are just fantastic. Thanks a lot guys!&lt;br /&gt;&lt;br /&gt;I've got more features planned for the script so stay tuned! Also, those of you that come here to read about normal mapping and HLSL shaders, I haven't forgetten or abandoned that stuff. In fact, I've been iching to write a new shader or two .... :0)&lt;/span&gt;&lt;span style=";font-family:Verdana,Arial,Helv;font-size:85%;"  &gt;&lt;span style=";font-family:times new roman;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-112649033981734840?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/112649033981734840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=112649033981734840' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/112649033981734840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/112649033981734840'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/09/pen-attribute-holder.html' title='PEN Attribute Holder'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-112536734087649198</id><published>2005-08-29T20:47:00.000-05:00</published><updated>2005-08-29T21:02:20.883-05:00</updated><title type='text'>More Rig Features</title><content type='html'>I added some new features to my character rigging Max script over the weekend.  First, I improved the stability/predictability of the IK solver on the arms by changing the method that I use to control the swivel angle.  The new solution that I came up with is the best system I've created so far, and best of all, now that it's in my script I never have to set it up again.  I can just push the button and it's done.&lt;br /&gt;&lt;br /&gt;The second feature that I added is the ability to animate the arms with either FK or IK and switch back and forth between them easily in the middle of the animation.  This is a feature that I've always wanted to have.  Usually arms work best when animated with FK in my opinion, since they naturally move in arcs - but there are times when you really need to have an IK solution.  I'm really happy to have this feature now so that I can use both.  I haven't tried to create an animation with it yet - so it's always possible that the IK/FK solution that I came up with won't work correctly and I'll have to go back to the drawing board.&lt;br /&gt;&lt;br /&gt;Speaking of going back to the drawing board, I came up with an auto clavicle system the day after my previous post and implemented it in a couple of the characters at work.  I thought it was a good system and it did work really well - but only if the character had his arms out to the sides.  As soon as the character put his arms in front, the clavicle bone "popped" when the wrist moved above the shoulder.  Anyway, I'm still working on that one.  More to come!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-112536734087649198?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/112536734087649198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=112536734087649198' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/112536734087649198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/112536734087649198'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/08/more-rig-features.html' title='More Rig Features'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-112459688534278941</id><published>2005-08-20T22:32:00.000-05:00</published><updated>2005-08-20T23:01:25.350-05:00</updated><title type='text'>Auto Clavicle - How?</title><content type='html'>I need some help creating the rig for a clavicle that works automatically.  If anyone actually reads this blog that knows what I'm talking about, send me an email.  I really want to know how to do it.  More details below.&lt;br /&gt;&lt;br /&gt;More progress on my character rigging script.  I turned it into a macro script and added a control panel GUI.  Now you can add the script as a button to a Max tool bar.  When you hit the button it brings up the control panel which allows you to choose the settings that you want for the rig before creating it.&lt;br /&gt;&lt;br /&gt;First you push a button that lays down all of the guide points.  You position these points where you want the joints to go.  It creates 6 points for the spine and 4 points for each of 4 fingers on each hand.  If you want fewer joints than that, you can just delete the points that you don't use and the script will only create joints for the points that are there.  Once you've got the points in position for one side of the body, you can hit another button to mirror the positions of the points on the other side.  This is a nice time saving tool.&lt;br /&gt;&lt;br /&gt;Before creating the rig, you can choose the colors that you want want for all of the various parts of the rig, give the rig a name (which gets prepended to all of the rig objects), choose options for adding additional twisty bones to aid in deformation on the arms and legs, etc.&lt;br /&gt;&lt;br /&gt;Once you've got the settings the way you want, you just press the "Create All" button and you're rig is automatically generated.  There are also buttons on the control panel to create all the various parts of the body individually if you want to do that.&lt;br /&gt;&lt;br /&gt;So far, I've used the rigging script on two characters that I've rigged at work and it's amazing.  I wish that I'd done this a long time ago.  It saves so much time and I'm able to have a high quality rig for every character without having to build it from scratch every time.&lt;br /&gt;&lt;br /&gt;Next I'm planning to add more options.  I want to allow you to pick if you want IK arms, FK arms, or both, etc.  I also want to add an auto clavicle system - hense the name of this blog entry.  I want the clavicle joint to stay where it is unless you raise the arm control (at the wrist) higher than the shoulder.  At that point I want the clavicle to rotate up instead of the shoulder - just like a real shoulder joint works.  I want this to work automatically so the animator doesn't have to manually tell the clavicle when to rotate.  If anyone out there knows how to do this, I'd love to hear from you.  I'm planning to spend some time this week investigating the problem.  If I come up with a good solution, I'll post it here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-112459688534278941?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/112459688534278941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=112459688534278941' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/112459688534278941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/112459688534278941'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/08/auto-clavicle-how.html' title='Auto Clavicle - How?'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-112382286086736053</id><published>2005-08-11T23:43:00.000-05:00</published><updated>2005-08-12T00:01:00.873-05:00</updated><title type='text'>Rig Script Progress</title><content type='html'>I've made a ton of progress on my character rigging script.  It's been really fun learning to use MaxScript.  I'm getting better at it - although some things are still quite challenging.  I think that the hardest thing so far has been learning the syntax for wiring parameters.  For some reason, parameter wiring uses a different syntax than when you're doing others things with parameters.  It doesn't make much sense to me - but I'm just new at it.  I'm really greatful to the people on CgTalk and the Discreet support forums that have helped me with the wiring syntax.&lt;br /&gt;&lt;br /&gt;My script makes arms, hands, legs, hips, and spine and links them all together for a complete character.  It allows you to have anywhere from 1 to 6 spine joints.  Hands are optional.  If you add hands, you can have between 1 and 4 fingers and an optional thumb.  Each finger can have between 1 and 3 joints.  I've built a lot of flexibility into it so that it can be used for characters that need to be really light weight (not very many bones) and also for characters that have a full set.  You can even choose to add extra bones in the arms and legs to aid in skin deformation if you need them.&lt;br /&gt;&lt;br /&gt;The best part is that everything is wired, rigged, constrained, etc, and ready to animate.  I even added a bit of code at the end that creates selection sets for the different types of objects (bones, controllers, etc) and hides the objects that you don't need to work with.&lt;br /&gt;&lt;br /&gt;All I have left to do is the neck and head (which shouldn't be too hard) and a bit of clean-up and polish.  Maybe I'll make a nice GUI panel for the whole thing too so you can choose the options that you want.  Once I've got the whole thing done, I'm planning to do some more research into other types of rigs and posibly create some more options for the script.  For example, I could let the user choose between several different types of spine setups, etc.&lt;br /&gt;&lt;br /&gt;I'm really excited about how much rigging time this is going to save me at work.  All of my character rigs will be able to use the great features I've built into this script and all it will take is one button press!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-112382286086736053?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/112382286086736053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=112382286086736053' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/112382286086736053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/112382286086736053'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/08/rig-script-progress.html' title='Rig Script Progress'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-112264293366957035</id><published>2005-07-29T08:09:00.000-05:00</published><updated>2005-07-29T08:15:33.673-05:00</updated><title type='text'>MaxScripted Character Rig</title><content type='html'>I'm taking a break from shaders for awhile to jump headlong into something else - MaxScritpt!  I've started work on a new script that will allow me to build all of the bones and rigging for a character with one click.  It's been a little bit of a challenge for me to get started doing this since I have to look up almost every thing that I want to do - but it will be worth it.&lt;br /&gt;&lt;br /&gt;The cool thing is that I can put a lot of effort into this script upfront so that it creates a really nice rig.  Then all my future characrters can have a very nice rig.  In the past I've only had time to build nice rigs for the main characters in the game and the others had to have simple ones mainly because of the demands of the schedule.  With a scripted rig, all the character rigs can be very very good - because they all come from the same script.  I can use my time to refine the script, customize each rig a bit, and make the skinning better instead of doing the tedious work of laying out bones, creating controllers, wiring things together, etc.  The script will take care of all of that for me.  I'm excited about it.&lt;br /&gt;&lt;br /&gt;So far I've got a script that creates the legs of the character.  I'll post updates here when I make more progress.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-112264293366957035?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/112264293366957035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=112264293366957035' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/112264293366957035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/112264293366957035'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/07/maxscripted-character-rig.html' title='MaxScripted Character Rig'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-112200242237373970</id><published>2005-07-21T22:15:00.000-05:00</published><updated>2005-07-21T22:46:44.890-05:00</updated><title type='text'>My Company Is Hiring</title><content type='html'>The company that I work for, Vicious Cycle, is currently looking for several new people to fill out our team and staff up for upcoming game projects. If you have experience working in the video game industry as an artist, programmer, or level designer this just might be the position you're looking for. You can find out more information on my company's web site here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.viciouscycleinc.com/careers.php"&gt;http://www.viciouscycleinc.com/careers.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When you apply, be sure to tell them that you heard about the postion from me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-112200242237373970?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/112200242237373970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=112200242237373970' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/112200242237373970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/112200242237373970'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/07/my-company-is-hiring.html' title='My Company Is Hiring'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-112179208552399496</id><published>2005-07-19T11:39:00.000-05:00</published><updated>2006-06-23T23:52:45.110-05:00</updated><title type='text'>Additions to Normal Map Shader</title><content type='html'>Some of the guys over on the Polycount board have been asking for some additional features to my normal map specular shader (the one with support for three lights) so I updated the shader to add them. Here's what I changed:&lt;br /&gt; &lt;br /&gt; The shader will now work on ATi cards! Instead of doing all three lights in one pass and blowing the instruction count budget, I split it up so that each light gets its own pass.&lt;br /&gt; &lt;br /&gt; I added a color specular mask texture. This means that you can control the color of the specular highlight per-pixel with a texture map. Before I was just using the alpha channel of the diffuse texture as the specular mask - so per-pixel color adjustments weren't possible. Now they are.&lt;br /&gt; &lt;br /&gt;I added a check box that allows you to quickly switch back and forth between the ATi and Nvidia formated normal maps (negative and positive Y). This makes working with both formats more convenient.  Right now it's happening in the pixel shader - but I may try to switch that so it happens in the vertex shader for better performance.&lt;br /&gt; &lt;br /&gt; I'm happy with the way this one turned out. With these changes, it should be a useful tool for working with normal mapped models in 3ds Max. You can get the updated version of this shader here:&lt;br /&gt; &lt;br /&gt;  &lt;a href="http://www.bencloward.com/shaders_NormalMapSpecular3lights.shtml" target="_blank"&gt;http://www.bencloward.com/shaders_NormalMapSpecular3lights.shtml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Also available on that page is a new version of the shader that uses the alpha channel of the diffuse texture for transparency.  I think I'm going to work on this version of the shader a bit more and then maybe I'll add these features and updates to all of the other shaders - where they apply.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-112179208552399496?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/112179208552399496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=112179208552399496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/112179208552399496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/112179208552399496'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/07/additions-to-normal-map-shader.html' title='Additions to Normal Map Shader'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-112036752328027735</id><published>2005-07-02T23:59:00.000-05:00</published><updated>2006-06-23T23:23:10.030-05:00</updated><title type='text'>More New Shaders</title><content type='html'>Recently I've been working on lots of personal projects. I've been writing new shaders as well as learning the basics of Max Script. I've learned a lot, but I haven't had much time for blog entries.&lt;br /&gt;&lt;br /&gt;On the MaxScript front, I'd like to learn to write Max Scripts for character rig automation, so you can just run the script and it builds the rig for you. So far, I've written a script that generates some point helpers. Then you put the helpers where you want the character's joints to go. Then I wrote a second script that connects those points with bones. It's all very basic so far. I'm just getting my feet wet.&lt;br /&gt;&lt;br /&gt;On the Shader front, I've created two new shaders that I posted on CgTalk.  Take a look at them &lt;a href="http://www.cgtalk.com/showthread.php?p=2431974#post2431974"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The first one is an eyeball shader that does refraction of the iris and caustics from the cornea. I'm pretty happy with how it turned out. Here's a sample pic:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.bencloward.com/images/eyeball_shader.jpg" alt="Eyeball Shader" /&gt;&lt;br /&gt;&lt;br /&gt;The second one is a metal shader. It lets you control the shininess/reflectivity of the surface per-pixel with the alpha channel of the diffuse texture. You can use it for all different types of metal. Here are some of the metal types I came up with:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.bencloward.com/images/metalShader.jpg" alt="Metal Shader" /&gt;&lt;br /&gt;&lt;br /&gt;The thing that I like most about this one is that I finally figured out how to use actual high dynamic range floating point cube maps for image based lighting.  These really add a lot to the realism of the scene and make everything look more vibrant.  I couldn't use them before because FX shaders in Max only support DDS textures (and a few other LDR formats).  Now that Photoshp CS2 has support for high dynamic range images (it has great tools for working with them), I'm able to save my cube maps in 16 or 32 bit floating point DDS!&lt;br /&gt;&lt;br /&gt;Feedback on these is much appreciated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-112036752328027735?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/112036752328027735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=112036752328027735' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/112036752328027735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/112036752328027735'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/07/more-new-shaders.html' title='More New Shaders'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-111793591335267015</id><published>2005-06-04T20:31:00.000-05:00</published><updated>2005-06-04T20:47:19.740-05:00</updated><title type='text'>New Shaders!</title><content type='html'>I have a big pile of shaders that I'm planning to add to the shader section of my web site. I just haven't done it yet because it's been taking me about two hours to make the information page for each one. I'll get to it eventually.&lt;br /&gt;&lt;br /&gt;In the mean time, I've posted two of them on the CGTalk forum. The first is a shader that combines the features of the offset mapping shader and the global illumination shader for one very complex, very cool looking effect! The second is a simple shader that animates grass blowing in the wind. I posted them as Zip files that contain a sample 3DS Max file and the textures to go along with it - in addition to the shader. That way you can see how I've implemented the shader in addition to just getting the shader file itself. You can find them in this thread:&lt;br /&gt;&lt;a href="http://www.cgtalk.com/showthread.php?t=244102"&gt;&lt;br /&gt;http://www.cgtalk.com/showthread.php?t=244102&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I think I'm going to start posting all of my shaders in this type of format since it seems to be a better method of helping people see how these can be used in a scene. I'd love to here what you think of these.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-111793591335267015?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/111793591335267015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=111793591335267015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/111793591335267015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/111793591335267015'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/06/new-shaders.html' title='New Shaders!'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-111663441537959446</id><published>2005-05-20T18:59:00.000-05:00</published><updated>2006-06-23T23:50:12.856-05:00</updated><title type='text'>Normal Map seams in 3ds Max</title><content type='html'>There is a bug that creates lighting seams at UV borders when using normal maps and .fx shaders in 3ds Max 7. I created a sample file to show the results of the bug. You can download it &lt;a href="http://www.bencloward.com/normal_map_bug_test.zip"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This file uses HLSLnormal_map_specular.fx for the DirectX 9 shader. This shader and the required textures are also included with this zip file. More information about the shader is available &lt;a href="http://www.bencloward.com/shaders_NormalMapSpecular.shtml"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Three test cases are shown in the sample file. The first test case (the cylindar on the left) uses a blank normal map - meaning that all of the pixels in the normal map are (127,127,255) - so all of the normals should be pointing straight off the surface. The cylindar has a cylindrical projection UV map applied. In the final release version of Max 7 (7.0 SP1), a seam is clearly visible running from the top to the bottom of the cylindar along the edge where one side of the UV map meets the other. This seam should not occur since the faces on either side of the seam share the same smoothing group and the pixels in the normal map are all exactly the same color.&lt;br /&gt;&lt;br /&gt;In the second test case, I'm using a more complex normal map with the same texture coordinates. The same sceam exists. This seam is not caused by the normal map because if I apply the same normal map to a flat plane and tile it, there is no seam.&lt;br /&gt;&lt;br /&gt;In the last test case, bot the cylindar and the sphere are face mapped, so every quad on the cylindar and sphere have UV coordinates from zero to one. The seams (facets) are clearly visible on both the cylindar and the sphere - but they shouldn't be there because all those faces share smoothing groups.&lt;br /&gt;&lt;br /&gt;I know that this is a bug because if I open the sample file in the Beta version of Max 7 (version 57), there is no seam. Here's what it looks like in Max 7 Beta:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.bencloward.com/images/my%20shader%20in%20max7%20beta.jpg" alt="No Seams in Max 7 Beta" border="0" height="487" width="600" /&gt;&lt;br /&gt;&lt;br /&gt;And here's what it looks like in Max 7 Final version with the seams:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.bencloward.com/images/my%20shader%20in%20max7%20final.jpg" alt="Normal Map Seams in Max 7 Final" border="0" height="466" width="600" /&gt;&lt;br /&gt;&lt;br /&gt;I think that this bug occurs because the smoothing groups are crossing UV borders. This means that each vertex in max has to be split into two verts to send to the graphics card. To handle this case correctly both verts would have to share the same normal but for some reason, the verts on both sides of the seam are not unified.&lt;br /&gt;&lt;br /&gt;If you add a "NormalBump" map to a standard max material and do a software render, there is no seam, so this bug only applies to the real-time viewport display.&lt;br /&gt;&lt;br /&gt;This same bug can also be observed when using the two normal map .FX files that are shipped with 3ds Max, DiffseBump.fx and RTTNormalMap.fx, although these shaders yield incorrect lighting - so I didn't use them for this test case.&lt;br /&gt;&lt;br /&gt;If you have more infomation about this bug, post it here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-111663441537959446?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/111663441537959446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=111663441537959446' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/111663441537959446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/111663441537959446'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/05/normal-map-seams-in-3ds-max.html' title='Normal Map seams in 3ds Max'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-111550411927655124</id><published>2005-05-07T17:00:00.000-05:00</published><updated>2006-06-23T23:51:23.636-05:00</updated><title type='text'>New Shader!</title><content type='html'>I've added a new shader to the HLSL Shaders on my web site.  You can grab it here:&lt;br /&gt;&lt;a href = "http://www.bencloward.com/resources_shaders.shtml"&gt;http://www.bencloward.com/resources_shaders.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This new shader is the same as my Normal Map Specular shader but it adds support for three point lights.  I was impressed with how much nicer the lighting looks when you can have a key light, a fill light, and a kicker/rim light.  Here's an example:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.bencloward.com/images/shaders_specular3lights_all.jpg" width=400 height=299 alt="All Three Lights" border="1"&gt;&lt;br /&gt;&lt;br /&gt;I'm doing all three point lights in one pass, so this shaders requires 68 pixel shader instructions.  That puts it over the limit of 64 instruction in Pixel Shader 2.0 so I had to switch it to use Pixel shader 2.a.  That means it requires a higher end graphics card.&lt;br /&gt;&lt;br /&gt;A lot of people have been asking about my global illumination shader and how it works so I've also started writing a new tutorial on my method of real-time global illumination.  When it's done, the tutorial will cover the use and creation of diffusely convolved cubic environment maps as well as how to create ambient occlusion maps.  I'll get it done as quick as I can.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-111550411927655124?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/111550411927655124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=111550411927655124' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/111550411927655124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/111550411927655124'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/05/new-shader.html' title='New Shader!'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-111258518835412921</id><published>2005-04-03T22:15:00.000-05:00</published><updated>2006-06-23T23:49:14.963-05:00</updated><title type='text'>New Textures!</title><content type='html'>I just uploaded 46 new textures to the texture archive on my web site.  That brings the total texture count to 399!  Go grab them &lt;a href = "http://www.bencloward.com/resources_textures.shtml"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Most of them were taken during our family's vacation to Colonial Williamsburg in Virginia.  That place is the coolest spot on earth for good brick textures.  I also got a lot of good wood textures there.  I especially like wood textures with the iron nails in them where the iron has created weather stains down the wood, like this:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.bencloward.com/textures/wood43.jpg" width=380 height=295 alt="wood 43"&gt;&lt;br /&gt;&lt;br /&gt;Also the brick textures with the moss growing on them are cool:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.bencloward.com/textures/brick27.jpg" width=380 height=295 alt="bricks 27"&gt;&lt;br /&gt;&lt;br /&gt;If you're looking for something specific in the texture archive and don't find it, let me know by leaving a comment here.  I'll see what I can do for you.&lt;br /&gt;&lt;br /&gt;I also really appreciate the kind emails that people have been sending.  If you do use these textures, let me know by posting a comment here or sending me an email &lt;a href = "mailto:bsmji@hotmail.com"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-111258518835412921?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/111258518835412921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=111258518835412921' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/111258518835412921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/111258518835412921'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/04/new-textures.html' title='New Textures!'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-111026122093186011</id><published>2005-03-07T23:41:00.000-06:00</published><updated>2006-06-23T23:48:28.383-05:00</updated><title type='text'>Normal Map Compression</title><content type='html'>I've added support for DXT5 "swizzled" normal map compression to the HLSL shaders on my &lt;a href = "http://www.bencloward.com/resources_shaders.shtml"&gt;shaders page&lt;/a&gt;.  I got the idea to do it while I was working on finishing up the normal mapping tutorial.  I did some tests and was really amazed by how high the quality was on the compressed normal maps - even after 4 to 1 DXT5 compression.  The guy that came up with the idea should get a medal.  It may have been one of the guys that wrote these papers on normal map compression:&lt;br /&gt;&lt;br /&gt;&lt;a href = "http://download.nvidia.com/developer/Papers/2004/Bump_Map_Compression/Bump_Map_Compression.pdf"&gt;NVIDIA - Bump_Map_Compression.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href = "http://www.ati.com/developer/NormalMapCompression.pdf"&gt;ATI - NormalMapCompression.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Normal map compression is going to be extremely important.  This is especially true for next gen consoles which are rumored to have 10 times the processor power as current conoles, but only 2 times as much texture memory.&lt;br /&gt;&lt;br /&gt;I'm probably going to need to write another tutorial that details the steps that need to be taken to get the compression to work correctly.  It's not very hard to do - and I even created an Action for Photoshop that does it almost instantly.  I'll create that tutorial and post the Action along with it in the next few months.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-111026122093186011?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/111026122093186011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=111026122093186011' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/111026122093186011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/111026122093186011'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/03/normal-map-compression.html' title='Normal Map Compression'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-110943747879226409</id><published>2005-02-26T10:58:00.000-06:00</published><updated>2005-02-26T11:04:38.793-06:00</updated><title type='text'>Almost Done</title><content type='html'>Ok, so in my last post I said my goal was to have my 2nd normal mapping tutorial done by today.  I've worked hard on it this week, but I still have one page left to write.  I'm not quite done, but I'm hoping to have some more time tonight to finish it up.&lt;br /&gt;&lt;br /&gt;In the process of writing the part of the tutorial that talks about normal mapping compression, I got interested in the subject.  I think my next big shader project will be to convert all my shaders so that they can used DXT5 compressed normal maps.  Then I can offer both formats for download.  I'd also like to create a Photoshop action that converts a regular tangent space normal map to a DXT5 compressable one.&lt;br /&gt;&lt;br /&gt;Last night I was reading GPU Gems and found some cool techniques for making realistic looking skin.  I want to try that too!  There's just too much stuff to try and not enough free time!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-110943747879226409?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/110943747879226409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=110943747879226409' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/110943747879226409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/110943747879226409'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/02/almost-done.html' title='Almost Done'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-110886567930646182</id><published>2005-02-19T20:07:00.000-06:00</published><updated>2006-06-23T23:26:55.266-05:00</updated><title type='text'>Working on Normal Mapping Tutorial Again</title><content type='html'>After several months of working on my shaders, and crunch time at work, I'm finally getting back to work on my Normal Mapping Tutorial.  You can find what I've written so far &lt;a href = "http://www.bencloward.com/tutorials_normal_maps9.html"&gt;here&lt;/a&gt;.  My current goal is to have the whole tutorial completed by Saturday the 26th of February.  That gives me one week.&lt;br /&gt;&lt;br /&gt;Once the tutorial is done, I will add more of my HLSL shaders to the shaders section.&lt;br /&gt;&lt;br /&gt;If you have any requests for textures, shaders, tutorials, or other additions that you'd like to see on the site, just leave a comment&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-110886567930646182?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/110886567930646182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=110886567930646182' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/110886567930646182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/110886567930646182'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/02/working-on-normal-mapping-tutorial.html' title='Working on Normal Mapping Tutorial Again'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-110851815616313220</id><published>2005-02-15T19:37:00.000-06:00</published><updated>2006-06-23T23:27:59.823-05:00</updated><title type='text'>3DS Max 7</title><content type='html'>I finally got the full version of 3DS Max 7 installed at work.  (We've been waiting to upgrade until our current project was done.)  Up until now I've just been using the beta version of Max 7 to test my shaders.  It turns out that the multi-subobject bug that I mentioned in my previous post was only a problem in the beta version.  The final release version fixes that problem along with a host of others.  That's great for me!  I spent a good portion of the day playing with the real-time shader features.&lt;br /&gt;&lt;br /&gt;I made a new stone wall texture with a normal map and an offset map.  It looks really cool.  I'm going to add it to my texture archive in the next few days.  Here's a screenshot:&lt;br /&gt;&lt;br /&gt;&lt;img src = "http://www.bencloward.com/images/shaders_offest_stonewall.jpg" width=379 height=294 alt="Stone Wall Texture" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-110851815616313220?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/110851815616313220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=110851815616313220' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/110851815616313220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/110851815616313220'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/02/3ds-max-7.html' title='3DS Max 7'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-110835294029876113</id><published>2005-02-13T20:20:00.000-06:00</published><updated>2006-06-23T23:47:44.073-05:00</updated><title type='text'>DX9 Shader Material Bug in 3DS Max</title><content type='html'>I've recently been building a scene in 3DS Max that uses the HLSL shaders that I've written.  I apply the shaders with Max's DX9 Shader material.  (I've written a tutorial on using HLSL shaders in Max &lt;a href = "http://www.bencloward.com/tutorials_shaders1.shtml"&gt;here&lt;/a&gt;.) After working on the scene for a few weeks the viewport performance became very slow and I was no longer able to work in shaded mode.  I was discouraged thinking that I would no longer be able to use Max for my HLSL shader platform because it was just too slow.&lt;br /&gt;&lt;br /&gt;Instead of giving up I decided to do some performacne experiments.  After testing a few different theories I discovered that the frame rate in the viewport was related directly to the number of DX9 materials I was using in a multi-subobject material.  If my model only had one multi-subobject material, my frame rate was more than 100 fps.  If I had two subobject materials the frame rate dropped to 50 fps.  At 4 subobject materials the frame rate went down to 25, and at 8 the frame rate was around 12.  See the pattern?&lt;br /&gt;&lt;br /&gt;I decided that this must be a bug in the way max handles DX9 shader materials as subobject materials so I chopped up my scene so each object only had one material assigned.  Now the frame rate is great and I can work again.  This is kind of annoying since multi-subobject materials are part of my work flow, but I can live with this work around for now.&lt;br /&gt;&lt;br /&gt;If anyone else has had this problem or knows more about it, I'd love to hear from you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-110835294029876113?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/110835294029876113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=110835294029876113' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/110835294029876113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/110835294029876113'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/02/dx9-shader-material-bug-in-3ds-max.html' title='DX9 Shader Material Bug in 3DS Max'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-110683490503148172</id><published>2005-01-27T08:03:00.000-06:00</published><updated>2006-06-23T23:46:04.313-05:00</updated><title type='text'>New Normal Mapping Link</title><content type='html'>I've got a list of links to normal mapping information here:&lt;br /&gt;&lt;a href="http://www.bencloward.com/tutorials_normal_maps8.shtml"&gt;My Normal Map Links&lt;/a&gt;&lt;br /&gt;I recently found a new link to add.  It's a brief tutorial on how to create normal maps in 3DS Max 7.  This is the method I've been using since Max 7 came out.  Here's the new link:&lt;br /&gt;&lt;a href="http://www.cgchat.com/forum/showthread.php?threadid=20424"&gt;Paul's Tutorial&lt;/a&gt;&lt;br /&gt;Thanks to Paul Greveson for putting it together!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-110683490503148172?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/110683490503148172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=110683490503148172' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/110683490503148172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/110683490503148172'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/01/new-normal-mapping-link.html' title='New Normal Mapping Link'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10427262.post-110679412481475849</id><published>2005-01-26T20:41:00.000-06:00</published><updated>2006-06-23T23:44:52.146-05:00</updated><title type='text'>First Post!</title><content type='html'>&lt;span style="font-family:arial;"&gt;For the past year I've been learning to write real-time surface shaders in HLSL and Cg. I've learned a lot along the way and intend to continue to learn. So far I haven't had a very good avenue to use or share what I've learned except through my web site. I have written two tutorials on normal mapping that you can find here:&lt;br /&gt;&lt;a href = "http://www.bencloward.com/resources_tutorials.shtml"&gt;http://www.bencloward.com/resources_tutorials.shtml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The second tutorial on normal mapping is still in progress.  I haven't completed it yet.  I've also posted some of the shaders that I've written.  You can find them here:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;a href= "http://www.bencloward.com/resources_shaders.shtml"&gt;http://www.bencloward.com/resources_shaders.shtml&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;I'm planning to use this blog to keep track of new things as I learn them, to help me sort out my ideas, and to help me keep track of the progress of my projects. Once I get enough info posted on a certain technique or shader, I'll make an official tutorial or shader post in the resources section - but I'm planning to use this blog as my scratch pad.  If you'd like to leave comments, please feel free. I'd love some feedback.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10427262-110679412481475849?l=bcloward.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bcloward.blogspot.com/feeds/110679412481475849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10427262&amp;postID=110679412481475849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/110679412481475849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10427262/posts/default/110679412481475849'/><link rel='alternate' type='text/html' href='http://bcloward.blogspot.com/2005/01/first-post.html' title='First Post!'/><author><name>Ben Cloward</name><uri>http://www.blogger.com/profile/10042906723428493903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.bencloward.com/images/bensface4.jpg'/></author><thr:total>0</thr:total></entry></feed>
