My portfolio is severely lacking any type of full on environment piece, so I've decided to work on something fun to get my feet wet. I'm recreating the final boss room of the "Stonecore" which is an instance in WoW: Cataclysm. I have a screen shot here to show what the final boss area looks like.
The Goal: To recreate the final boss area while staying in the visual fidelity of WoW while taking advantage of UDK. I also plan on documenting the process along with shader node breakdowns, texture sheets, cascade breakdowns and all around documentation so that anyone who follows along can learn from my endeavors and mistakes. I plan on disclosing any information people want so that the community may benefit from any knowledge I can give as well as if I have any questions myself, people will know where I am coming from.
Everything I create will be done with the intent of it being a game ready object that could be used in today's engines. Anything I can take advantage of to better show off the scene I will, but it must stand in line with the visual style of WoW.
So far I have created the altar on top of the stairs as well as the Twilight's Hammer flagpole. While not in UDK yet, here are some preliminary shots from marmoset to whet your appetite for more updates.
The next goal is to create the main platform, stairs and brazers. I'll be pulling these into UDK as I create more props and start blocking out the scene itself.
Replies
This is some of the first documentation Ive written for a project, so if I leave out anything you are curious about, feel free to ask. I am not the type to hoard information and will answer questions to the best I can. During the week I have created some more assets and brought them into UDK. Id like to talk a bit about my process and explain some pitfalls I encountered along the way. Assets I have created so far are
Modeling Process
For most all the assets you see (and future assets) I followed along with Bobos weapon tutorial from the DS2 competition. The short of the process is creating a mesh in 3DS Max, enabling NURMS subdivision with the Separate by Smoothing Groups box checked. This gives a nice hard surface model which I then apply a second Edit Poly modifier to (this bakes down the high quality to a mesh) and export to ZBrush for detailing.
Once in ZBrush I can add whatever details, scratches, or extra modeling I need to. For tiling textures (the platform uses three) I would bring the high poly mesh into ZBrush and make sure whatever brush I was using to sculpt had a wrap modifier set to one. This ensures that any details I made could tile properly. Finally I decimate it down and export it as an OBJ. Back in max, I edit or create a low poly shell and UV unwrap it. It is then exporting and taken in xNormal where I create my normal, AO, cavity, and if needed the parallax height map. While I could paint diffuse in ZBrush, I am more comfortable in photoshop and prefer to set up actions to save out my individual files for testing in Marmoset.
Why Marmoset?
Marmoset is a quick way that I can test and see that my textures are tiling and lining up properly. Besides being able to show Diffuse, normals, specular, and parallax I can try out different lighting quickly and see results. While these are not 100% accurate to how UDK renders it is a quick test that makes working in photoshop go by faster and easier.
-Pitfalls
Again, because Marmoset doesnt match UDK 100% I have had some normals not behave properly down the creative road. Marmoset does not like elements that share UV space to be mirrored over. This gave me the bright idea on the altar to create the corner piece and rotate a duplicate 90 degrees three times rather than to apply a symmetry modifier. This result looks great in Marmoset but UDK apparently will wreck your day on this approach. The normals on the top of the altar had very visible seams once lighting is baked that I could not get rid of. My solution thus far was to convert the altar into an Interp actor where lighting effects it dynamically, but the light map is not baked in (at least how I understand it, I could be wrong).
UDK
The only hurdle I have hit in UDK (so far) was the idea that I did not want to create a material for every shading group from scratch. I wanted to have a master material that could drive a great deal of Instance Constants and keep my workload down to a minimum. In order to navigate this, I had to think ahead of what I wanted to achieve in my materials.
Also, to save texture memory I decided to group up certain maps into singular textures. My parallax height map can be found in the alpha channel of my normal maps. Also I have my specular map, material masking and emissive mask set to the RGB of a texture. This has only proven to be problematic in that some materials do not use emissive or need a material mask necessarily and are therefore wasted channel space. I need to see if I can find an alterative way to set up my nodes around this. Perhaps via switches.
Im not really sure on how to show off the material nodes without the photo being a ridiculous size but if people really want to see it I can try and find a way. The Instance constant it creates is pretty basic though.
The idea is that most the Twilights Hammer props can be driven off of this material without me having to create things from scratch or load multiple materials into memory. The best part is with the switches, if I dont use a certain feature I can disable it and save that much more on the backend (as it was explained to me anyways.) When I get to the stone foundations of this level I will be making another material, although this one will rely more on vertex blending.
Questions, comments, feedback? I'll be moving ahead with this and creating more of the Twilights Hammer props in the next week. Let me know what you think in the mean time!
Spikes added. They also have a panner applied so the cloudiness moved along the spike in realtime to keep in how it works in WoW.
very beautiful, very perfect.
Looks good so far.
*tracking*
Rhoutermans - I definitely agree on the spikes. A coworker also mentioned that they look too soft, so I think I will be revisiting them over the next few days.
I created the brazer and started working on the flames. I should have more to post tomorrow as well as a more detailed write up on the creation. The flames are pretty placeholder right now while I try and learn how to work in cascade a bit more. I'm also going to try and make them into a mesh as the billboard just feels really flat. I'll try it out and see what the results are. As I said, more tomorrow!
Let me know if this is the case.
[ame="http://www.youtube.com/watch?v=JYXT0-ZNFFo&hd=1"]StoneCore_001.wmv - YouTube[/ame]
Spikes
Before I started on the spikes I had a few things I wanted to achieve with their construction. I wanted them to all share the same UV space for diffuse, normal, spec, etc but to have different UV shells for the lighting channel. I wanted the texture to animate a cloud texture along the length of the spikes as well.
Modeling the spikes was easy. I made a four sided cylinder in max, tapered it to the top point and then did all of my UV unwrapping, texturing, and ZBrush sculpting with it being straight as an arrow. Once I was done with the basic construction I applied separate bend and twist modifiers to chunks of the spikes to achieve some interesting shapes. This worked out great because I had minimal UV stretching and I was able to re-use the texture layout on all of the spikes.
The material, while mimicking the layout of previous layouts, had to be created specifically for this item. This was mainly due to the panner being applied. Im sure I could have just created a switch that turned off the clouds, but there were some minor tweaks I wanted to have more control over as well.
Brazier
There isnt much to say about the brazier itself. The construction followed the same workflow as the altar and even uses the same material instance. The only difference is that the coals are a separate material channel with a newly created material placed on them. I wanted the emissive channel to look as though heat was moving across the surface. This is the node chain I created to achieve the effect.
The Cosine causes the light to pulse while the constant clamp stops the color from going below a value of one. This was done so that the emissive would never go black. The cloud mask was set to a panner and then multiplied over the constant clamps output to make the brightness appear as though it were moving across the surface and not pulsing in the same location every time. The panner was set to a speed of 5,5. This was the only part of the material that really sets it apart. The rest is more or less business as usual.
Brazier Particle Effects Materials
I knew that I needed to make a particle effect for the fire, smoke and embers. First of all, I knew that I needed a tiling flame texture.
Flame-
While UDK has a tiling flame, I wanted the experience of creating one from scratch and also, I needed it to be purple to keep with the in game screenshots. http://www.cgtextures.com/ has some great shots of flames and while they are not tiling, I was able to create one in photoshop. I also made sure to create an alpha channel for transparency as well.
So, on we move to the material node creation-
First, the Blend Mode is set to translucent and the Lighting Model is set to unlit. The emissive channel is powered by two copies of the flame texture that are tiled at different sizes and panning in different directions and speeds. When added together this cause the fire to look really chaotic as it dances. Of course, in your case you may find better results with different values. Try it out to see what you get! Then I multiply by a scalar parameter which is to control the emissive intensity. Finally I multiply by a vertex color. This is important! If I want to change a color value over time in Cascade, it is controlled by a vertex color.
The opacity is pretty simple. Youll see a TexCoord is plugged into a component mask (G) which is a really simple way to create a gradient in UDK. When multiplied into the moving alpha channels this ensure that the top of the flame always fades out. This is then multiplied by the vertex colors alpha for the same reason I explained before.
Youll also notice I have an unconnected node in a red box. I decided to use a mesh for my flames, however, if you decide to use a billboard effect you will need this node. If you search UDK for Mask you will find a circular image with a slight falloff. If I set the textureCoord to 1, .5 then I get the stretched out half circle which works great for a final multiply mask. If I multiply that node at the end of my chain I will get the following effect on a billboard.
Embers-
The ember effect is simply a material that uses the circular mask I just mentioned multiplied by a vector parameter for color and a scalar parameter for emissive intensity. These are then multiplied by a vertex color so I can have animated control over the emissive power and opacity in cascade. Really simple.
Smoke-
Ill be honest, Im not totally happy with the smoke as of yet and I may come back to it later but as for now, here it is.
As you can see, its really simple. Most my editing for this to look good will be done in cascade so ON TO CASCADE!
Brazier Particle Effects Creation (Cascade)
Im still learning about Cascade as it is so my explanations may be lacking. For some great tutorials, Polycounts very own Lee3Dee has a site called www.explosions-rainbows.com which has some pretty neat stuff on it. You can also find his Youtube channel at http://www.youtube.com/user/gizm0san . He doesnt have anything to do with this project, but he makes some damn fine tutorials. Also, 3Dmotive has bought out ImbueFX and should hopefully be releasing a cascade video set in the future (I hope )
Flames-
The flames are pretty basic as they are mainly controlled by the texture itself. The big change is that theyre referencing a mesh instead of being place on a billboard effect. They are the only particle in this chain that does that. They have a slight randomness in size that allows them to change when they spawn and their lifetime is set between 5 and 8. There really isnt much to these.
Embers-
I had some fun making these. The embers needed to really appear as random as I could make them. Their lifetimes are set between 1 and 10 and the size is between 5 and 25. The main point I made was to create a solid range that they could move around in without them flying clear out of the path. The color over life node also makes it where they are much brighter when they spawn and they found out before they die, so that they dont disappear suddenly. The orbit is what causes them to spin wildly.
Smoke-
The smoke is by far what took the longest as well as the most amount of tweaking. Most of these nodes are self explanatory for their purpose. It was really just trial and error for the most part. I edited these nodes so that the smoke rotated as it moved upwards, the size of the clouds doubled over time, and the clouds moved upwards at slightly different speeds to break up uniformity.
Youll also notice that even though my smoke texture was grey, it transitions from a purple to a very dark grey over its life. This is all controlled by adding that vertex color node within our material. Over the lifetime of the smoke I am multiplying a color over our texture. As it nears the end of its life, I am also animating the alpha of the vertex to fade the clouds out so they dont disappear suddenly.
If you have any questions please feel free to ask. Im off to work on this more and get my ass kicked playing Dark Souls.
The pillar with the stonework has a long way to go yet. I just finished baking it this morning and still need to paint all of it and import into UDK.
Edit: Also, here's the wires for the green pillar
Got a bit more work done. Hopefully I'll get some more done this weekend.
Your meshes are quite dense, so it might be an idea to experiment with Vertex Lighting as @JamesWild mentioned to see what results you get.
Layout is kind of bad right now but I am still lacking a number of assets. Once I get more to work with I'll also be tweaking the lighting of course.
Working on a column at the moment. Blocked in some basic color, but the entire right side has no detail at the moment.
I know I haven't been updating this as much I had wanted to but I finally have some free time to work on it again. This is a basic layout in UDK I've put together, One of the things I have noticed right off is that the lava pit in the center is too large compared to the screens from WoW. I'll be resizing that pretty soon. Also, the lighting is temporary at the moment.
As far as right ups I want to make one this weekend if I have time. Two of the assets I'll be working on will have some vertex blending in the materials and I think that will be a fun topic to cover. Also, possibly how I sculpted the rocks. Anyways, let me know what you think.
So, I worked on getting the vertex painting shaders up and running. I'm pretty happy with the way they turned out. There is still a long way to go on this with making models as well as all the lighting setup, but it's nice to be working on it again. Been a while since I was up to almost 4am working on something. Anyways, I'm going to try and create a write up regarding the rock modeling as well as the materials for my vertex painting. In the mean time, comments are always welcome.
Rock Lobster and/or sculpting
So I have never done any type of rock sculpting before this and to say it was a learning experience is more of an understatement. I created my sculpts in ZBrush from ZSpheres which all in all, are probably not the best way to go about creating them. I mainly worked on pulling shapes out with the move brush, clay tubes, and masking out areas and using the transpose tool. After laying out basic shapes I was able to work with the Trim Dynamic, Planar Flatten, and sPolish brush to smooth out surfaces while retaining the hard edge look I wanted from my rocks. There isnt much workflow to be discussed with the rocks as most of it was trial and error.
Once I was happy with the mesh I would export a condensed version of it to 3DS Max for the creation of the in-game asset. In all honesty it was not that different except that previous meshes were created in max and then taken in ZBrush, the rock assets were created in ZBrush from zSpheres or primitives first.
One of the issues I had though was that some of the rock assets I was going to create were used multiple times in the same scene, however some of them looked to use different textures or a different level of material blending. That being said, well move on to the next topic.
Material Blending
One of the issues I wanted to solve was proper material blending. You can see that while both these models are the same there is some texture blending going on with the one on the right. There are also pillars that are pure green as opposed to a mix of the two colors.
I also wanted to re-use the broken pillars that circle the lava pool but I wanted control over the material so that they did not all look the same.
While I could do all this through masking that feels wasteful and doesnt give me as much control. Vertex blending of materials however allows me paint the effect I want on individual models. It seemed to be a winning solution.
The best source I can point you too for material blending is over at 3DMotive. There is just a ton of information there and Ryan Smith has some excellent videos on the matter.
For the first pillar I wanted to have a transition that faded naturally between a hard rocky surface and a sheen almost crystal appearance. This made things easier as I didnt want the normal map to transition just the cube map, specular channels, and diffuse color. I did run into one major problem though. It seems that when using vertex painting I could not use the vector transform in regards to the cube map. As soon as it was attached it would completely break the entire chain.
The results I got without it were nice enough so Im not incredibly worried about it but if there is a workaround that someone knows, please pass it on to me. Still, the end result wasnt too bad.
Issues with the molten pillars were another matter entirely and these kept me up pretty late. I wanted the molten material to appear white hot and as it transitioned feel as if it were eating into the rock from within. This was done by layering two different LERP chains on top of each other. The first chain was the base of the molten rock and was made to look a darker orange. The second chain lay on top of the first and was created to glow hotter and more constrained as well as pulse and animate the hot spots.
Overall I am pretty happy with these results and I can use this same shader with the floating rocks above the lava pool. Knowing that at any time I can adjust the vertex painting to get different results is greatly efficient. Also, most all nodes dealing with color or intensity values are set into parameters and can also be adjusted on the fly.
Thanks for reading and if you have any questions or comments about my workflow, let me know. Im excited to hear from you.
Added some of the floating rocks.
Your scene is coming together now, but I'd give one piece of advice:
You're remaking an area from an existing game in the same graphical style as in that game - so don't get too bogged down with making it absolutely accurate. It's OK to do your own interpretation and add your own spin on things
As well as this, I'd suggest refining your silhouettes a bit more - the larger rocks in particular are looking a bit jagged (not in a good way) around the edges. You could really spare a few extra polygons to help push the overall shape.
A good trick is to put a flat texture on an object and see if you can actually tell what it is supposed to be by its shape.
Keep it up though!
And maybe it's just me, but I feel like in the comparison shots your version is missing the added lighting on the altar, it doesn't stand out as much as in the original and I guess it's sort of meant to be the centerpiece.
But great work, and a very informative thread, so this one is going into my bookmarks
Also, congratulations on the plug!
Agree with this. Also, behind the altar has that fiery light which really helps with the composition. Make sure to add that or something like it as well.
First, panner node will move the UVs along the U or V axis. It is a cheap and easy way to animate a texture without having to animate the mesh, and it is extremely useful on tiling textures. In the case of the brazer flames, it allows the flames to move across the surface of the plane in a chaotic way.
The numbers on the panner has to do with the speed it moves in that axis. So, you'll notice one of them is marked as [ 1,2] which means that it is moving at a rate of 1 in the U axis and 2 in the V axis. As far as I know these numbers are fairly arbitrary and I just had to fiddle with them until I found something that worked well.
The texture coordinate nodes have to do with how many time the UV sheet will tile. I wanted the more chaotic flames to be smaller in size to the slow moving ones so they tile twice in U and V.
Lastly, the colors on the graph are just there. It has to do with what numbers you plug in, you have no direct control over it via color picker or anything like that.