I'm catching up on some blog topics. First, I wanted to show you the final version of that musical sketch from the last post. This one has improved dynamics, an added bridge, and a couple of scoring changes that make it feel much more like something you'd hear from your favorite Tetrisphere-alike.
I'm taking FLM275 this semester, which is a music composition / audio engineering frankenclass. Before attending DigiPen, I was a competent musician and occasionally made digital music. After years at rest, I've exercised this hobby once again. Below is a musical sketch I just turned in.
I don't at all try to hide the Niel Voss influences. His music is a style unto its own, one that hasn't seen the light of day in fifteen years. I'm just happy I can channel it successfully. If I get the time, I'll fine tune this track in the future.
Previously, I mentioned Photoshop doesn't have a way to convert a black-and-white image to a black-on-alpha. It still doesn't, but there is a workaround that works for purposes of ambient occlusion.
This doesn't replace Fireworks' "convert to alpha" function, because appending more color channels to your selection is additive. So it doesn't work for full-color images.
// NOTE: This entry assumes you are adding Ambient Occlusion to images without a separate lighting pass.
Most people are content to set ambient occlusion passes to multiply and be done with it. But did you ever notice this looks kinda.. bad? Contact shadows aren't black, and they certainly don't interrupt light sources.
It may not be your fault. Photoshop doesn't have what you need to do this properly.
You need a way to convert your grayscale AO pass into black-on-alpha. The only program I'm aware that can do this quickly and without data loss is Adobe Fireworks. (Trust me, I've tried everything under the sun to get this effect in Photoshop. You can get close, but you can't get it perfect.)
Open your AO pass in Fireworks and Convert it to an alpha map.
Save it off to anything with transparency and open it back up in Photoshop (you can do the whole thing in Fireworks, but it's your choice). When you do, layer it over your render with a Soft Light combine filter. Notice the difference already:
Apply a Hue/Saturation layer and link it to your AO layer. Now, give the AO the general color of the shadows in the scene. Soft Light will take care of mixing this color with the rest of your scene.
You're done! Your scene now has contact shadows in a separate pass that conform to your shadow map colors. Check out the comparison below.
So, I've been wanting to do this since before going to DigiPen. I modeled the Arwing from Starfox 1 (the "high-poly" version seen at the title screen). It is to real-world scale and accurate within half-an-inch. It is also perfectly accurate to the original model (with a few caveats that I'll explain below). Please download your own copy of it if you'd like to sculpt on it or make your own textures.
3dsMax 2013 version. If anyone wants a different file format, please ask.
The goal was to be 1:1 with the original model in the game. There is a seven-year-old level editor out there that its developer never completed. While it could not output an OBJ as promised, it did allow me to get high-resolution orthographics and a vertex list. Those combined with the ability to tumble around the original model while I worked allowed me to get this as authentic as humanly possible.
There are some changes, however. The SuperFX model format allows for things that count as invalid geometry today. Where the original model had T-gons, I added vertices to allow those faces while remaining faithful to the source. Over all, this model has 8 more verts and 11 more faces than the original model. They do not contribute to the silhouette, however.
Regarding size, the original vertex list stepped conveniently into meters. A Google search for documents on the Arwing's design confirms the sizing, so the end result is a model perfectly to real-world scale.
This model is ready for UV mapping or sculpting. Please feel free to do so.
There's an interesting divide between those who paint with color and those who paint with value. Neither one is wrong. When it comes to CG, however, you're usually limited to the Blinn model of shading. Blinn paints with value, specifically adding black and white to surfaces depending on how much light falls on each plane based on its normal.
But what if you don't want make shadows with black? You can certainly change the shadow color of a light, but that doesn't affect the Gourand shadows produced by the Blinn shading. In other words, your cast shadow may be blue, but the object itself is still black. You can change the diffuse and ambient settings in the shader, come up with a color that gets close to the shadow you want, but this is inefficient and changes greatly when light moves across the normal.
Mental Ray users can add color back into the Gourand shadows through final gather, but this process takes several minutes per frame to calculate enough bounce light - and you're STILL fighting against the loss of value that comes by mixing with black.
My solution? Self illumination.
It's a technique usually reserved for making an object glow, but if you remove all "white-ness" from your self-illumination color it tends to only affect shadows. Bingo!
Here is my scene using both techniques back-to-back. The first uses only the default Blinn shading. The second has a self-illumination set to a darkened sky-blue.
Fake, efficient bounce light using self-illumination.
I want you to notice one other thing about the second image. On each pillar near the snowy ground is a touch of bounce light. Since the Quicksilver renderer does not yet support light exclusion (the ability to tell a light to not shine on specific objects), I could not achieve this by adding more lights. Taking what I learned from the color effect previously mentioned, I decided I could use self-illumination to solve this as well - if it could be controlled.
Turns out it can be. You can use a greyscale map, or in my case, a gradient. There is mottled black-to-white gradient controlling how much the pillar self-illuminates (without a set color) to fake light bouncing off the snow back onto the pillar. This is useful, as it adds nothing to render time and looks close enough to ray-traced options. I have yet to determine how to control the color of this bounce light, but I can look into that another day. (Adding color to the gradient ends up being crushed back to grayscale, reducing the effect and nullifying the color choice).
For a game I work on, I was tasked to create a bunch of badges (coughachievementscough) for various things the player does. This is the result.
sketch on paper,
create a heightmap with vectors (Fireworks, Photoshop),
convert to normal passes (CrazyBump),
combine normal passes if needed (Photoshop),
plug into 3dsMax material on a coin object and render.
Average time to completion per design: 15 minutes.
Setup time (3d objects, materials, cameras), 45 minutes.
Rendered with Quicksilver.
This method of normal map creation is something I've been perfecting for a while. So often you'll find a situation where baking a normal map from high-poly is not ideal for time or effort. You can create height maps quickly and have a great deal of control over them in CrazyBump. By creating multiple passes in CrazyBump (one for each material in your texture) and combining them together you get very good results without having to sculpt your details in high poly. You end up sourcing your Photoshop masks from your height map. Cake!
You may notice some of the badges have a background that reflects the environment differently than the foreground. This is not a material change in 3dsMax. This is a normal map overlay of a sphere, masked off from the foreground. The less opaque the overlay, the less the environment reflection bends away from the camera, the brighter it gets in specularity. So, areas I want to really "shine," there is practically flat normals data.
One artifact of the height map method shows up when you have a smooth curved surface. Because you can only have 256 shades of gray in an 8-bit image, this can create aliasing in your normal map. No, seriously, three-dimensional stair-stepping. Ugly. To fix this, mask off these areas in new layers and blur them heavily. As this blurs the three vectors of your normal map instead of the original single vector of your height map, the surface becomes properly and perfectly curved.
If you need to push the strength of your normals, mask off the parts you need into a new layer and set it to overlay. This is not mathematically perfect, but is plenty close enough to achieve the result you want. Examples where I did this are the large star in row 1, the space ship and parking meter in row 4.
I have something for you today. A simpler, better way of rendering wireframes for classwork or portfolios.