« Posts tagged Maya

[R&D] Fire Starter

Maya Liquid Fire

I’ve started a new project involving Maya and Zbrush and a big part of it is going to use simulation data from Maya. There are three parts, smoke, water, and fire. I haven’t created a fluid effects fire in a while so I thought I would spend the morning working out some flames to get back into the swing of things. This fire was made from a 3D fluid container using a volume based emitter in Maya 2013. After I had parameters I was happy with I baked out the simulation into a cache file. This makes the rendering way faster as you’re not trying to simulate and render each frame at the same time. It also lets you store that data and scrub through your simulation.

I’m working of a Mac Mini right now which is a little weak in the processing department, but hey at least I have something to work with. Come Christmas I will be visiting Winnipeg so that I can get my computer along with the rest of my apartment and move it here to Montreal.

The end result for the project will be a lot more stylized, especially when it comes to colour. I find its always best to match the physical phenomenon as best you can before you start to push the style. The YouTube compression beats up the softness and sharp contrast of the flames, but it’s just a test so I didn’t want to have to sit and wait for a 180 frames and 1080p. This will do as a start for the next step of the project which will be shaping and re shading the fire. As always if you have any questions don’t be afraid to ask. I don’t bite, I promise :)

 

UPDATE

I squeezed in some more time this evening to iterate further on the flames, playing with the colour settings and getting them to spin the way I wanted using Maya’s force fields in the fluid container. This particular test makes the flames too skinny and high, but I feel I’ve nailed the mechanic down to make them spin.

[R&D] CGFX Shaders: Cubemaps

CGSL CubeMap Shader

After my work establishing a Phong model shader I wanted to incorporate cubemaps. Everything went fairly well. The next step is to combine this shader with my normal map shader.

If all goes well I can get that done tonight. I’m having a lot of fun with shader authoring. It’s a nice blend of computer science and art that I’m really enjoying. My end goal for learning CGFX is to be able to produce a small scene in the Unreal Engine where I’ve written all the shaders. Wish me Luck!

 

My First CGFX Shader

My First cgfx Shader

I’ve put if off for a while, but today I decided to jump into writing shaders. It took a while and a lot of wikipedia searches, but I finished tonight after having started this morning.

It’s a Phong shader based on a Lambert model. It has an added Fresnel highlight as well as controls for the glossiness strength and size. For textures it accepts Diffuse, Normal and Specular.

The next part I’d like to add is reflections and more specifically; cubemap reflections. I’m moving to Montreal soon and I think my best chance for work is to apply as a material artist.

I’m hoping my film work combined with my portfolio website and a new library of free to download materials will help me land a job. The maps it’s using right now are from an old ZBrush project, but they are good enough for proof of concept. More to come soon :)

My First cgfx Shader (http://www NULL.terrymatthes NULL.com/wp-content/uploads/2013/09/test_shader2 NULL.jpg)

 

Graveyard Shot Final

Windy Graves UDK

I’ve finished the UDK graveyard scene I was working on and started another :) This scene was fun to work on and it gave me a better understanding of the Unreal Engine as a whole. The most interesting part of the entire process was learning the UDK lighting system and how it handles (or doesn’t) BDRF in materials. For my next project I’m starting with a physically based shader that should make more sense coming from Maya. Putting together all the wind related meshes also taught me how far you can push cloth objects with simple skeletons and there will be more of that in my next piece.

 

Graveyard Scene WIP 1

Scene Snippet

Just before I left for Montreal I was able to snap some pics of my graveyard scene. I’ve got most of the modeling done, as well as the sky and rain systems. The Ivy on the foreground grave still needs to be skin weighted for wind movement, whereas the Ivy on the background grave is using a vertex offset to animate the ivy.

Scene Snippet (http://www NULL.terrymatthes NULL.com/wp-content/uploads/2013/06/SceneSnippet NULL.jpg)

I’m quite happy with the look of my high detail tree, but I still have to tweak the leaf cards a little as some of them don’t line up with the branches I’ve painted on the branch cards. Speaking of vertex weights the trees also need this. I’m going to use the same material wind network the grass uses so they move together. Painting up the trunk and branches in Zbrush was fun and eventually I saved out a surface noise setting for the bark so that I could apply the same look across the entire tree without having to sculpt each notch in the bark. This setting can also be loaded up for any other trees I might create to help things look consistent from tree to tree.

High Detail Tree for UDK (http://www NULL.terrymatthes NULL.com/wp-content/uploads/2013/06/mayaTree NULL.jpg)

Sky Material Network (http://www NULL.terrymatthes NULL.com/wp-content/uploads/2013/06/skysetup NULL.jpg)Vertex Ivy Material Network (http://www NULL.terrymatthes NULL.com/wp-content/uploads/2013/06/ivySetup NULL.jpg)Vertex Coloured Ivy (http://www NULL.terrymatthes NULL.com/wp-content/uploads/2013/06/vertexIvy NULL.jpg)Graveyard WIP paintover (http://www NULL.terrymatthes NULL.com/wp-content/uploads/2013/06/paintover NULL.jpg)The material networks are purposefully obscured as they aren’t final and I wouldn’t want anyone to follow them as they are not yet complete. When I’m done I’ll post a better breakdown of the these. I’ve also included a quick Maya shot of the foreground tomb’s ivy and it’s vertex weighting. The base of the leaves are black to keep them from shifting and the weight falls off to red towards the edges of the leaves. You don’t have to be too meticulous with the weights as you can manipulate them in the UDK treating them just like any other RGB value.

After all is said and done I think I’m the most excited about implementing torches on the fence in the background. I apologize for the crushed levels in the video. When I get back to Winnipeg I’ll re-compress it with adjusted settings. If you visit my Youtube (http://www NULL.youtube NULL.com/user/DelightningVFX/videos) channel you’ll see the pyre tests (http://www NULL.youtube NULL.com/watch?v=w2k-J_Bhme4) I’ve made in the past and I’m going to turn these into “flipbook textures” (video game GIFs) to be used in conjunction with particles to make a really believable torch. I’ll post more towards the end of next week.

 

 

Wish me luck fellas, I’m really happy with how everything is coming together and I can’t wait to show everyone the scene when it’s complete.

Maya Fur Tips

Fur as grass

Fur as grass (http://www NULL.terrymatthes NULL.com/wp-content/uploads/2013/04/furpic NULL.jpg)
Hey dudes, and dudettes. Here’s a few tips on dealing with Maya fur as it can be a little hairy… get it?! Seriously though, Maya fur can be confusing and a little tricky to work with, so if you don’t have cash to blow on some fancy plugin here are a few tips to help you guys out.

A) Triangulate your fur surface! Fur seems to like triangles. If you notice you’re getting odd bald spots this can be the reason.

B) UVs are KING. Maya fur is heavily dependent on the face distribution of your model’s UVs. Tiny faces on your UV sheet are going to have really really low fur density. More often than not you have to create a second set of UVs for fur to operate on. This is OK though as the fur menu lets you choose which UV set to base your fur on. To access this menu go to Windows > Relationship Editors > UV Linking > Fur/UV. Make sure you are giving an even face distribution on your new UV set.

C) You will NOT see textured colour in your fur even after hooking up the proper tip and base colour maps until you hit the “Bake” button at the top of the fur description. Anytime you add a new maps in you’re going to want to bake as well.

D) Fur colour is very sensitive. The maps plugged into your fur descriptions colour slots should be crushed down quite low. For the fur above my “Color Gain” values in the file node’s “Color Balance” roll out were set as follows: Base Color=0.130 Tip Color=0.310 Base Ambient Color and Tip Ambient Color =0.230

E) If you fur shadows aren’t showing up you will have to increase you “shadow density” in the fur description under the Mental Ray roll out.

F) Work in a linear fashion aka Linear Workflow (http://vimeo NULL.com/8119194).

That’s all for now. May the fur be with you!

[Game] UDK Windy Grass

Windy Grassy Plain

Windy Grassy Plain (http://www NULL.terrymatthes NULL.com/wp-content/uploads/2013/03/windyplain NULL.jpg)Making grass move in the UDK isn’t overly complex but it does requite a decent handle on Maya and the Unreal Development Kit’s material editor. The concept at it’s core is to use the Material Property “world offset position” to make your grass wave. Control of the grass is split between three different systems: the “wind directional actor”, the material network we create for the grass, and our grass mesh’s vertex colours.

Maya

Our verdant journey starts here. I’m not going to go over modeling a grass plane, but if you have any trouble you can just take a look at the one I made here to see the relative complexity of the mesh.

Maya Grass Plain Mesh (http://www NULL.terrymatthes NULL.com/wp-content/uploads/2013/03/grassmesh NULL.jpg)

After you have created your planar mesh you’re going to need to jump into painting “vertex colours”. Vertex colours are literally just RGB values you’re painting on your mesh’s vertices through Maya’s vertex painting system. Before you go all nuts painting up your mesh you’re going to have to change a few of Maya’s options to ensure that vertex colours will appear properly in your viewport. The steps for enabling vertex painting can be found on Autodesk’s help site here (http://download NULL.autodesk NULL.com/us/maya/2010help/index NULL.html?url=Coloring_polygons_Make_vertex_colors_visible NULL.htm,topicNumber=d0e213327). After you get vertex colours working you can move on to the next step which is painting (http://download NULL.autodesk NULL.com/us/maya/2010help/index NULL.html?url=Coloring_polygons_Assign_colors_to_polygon_vertices_by_painting NULL.htm,topicNumber=d0e213575) a red gradient from the bottom of your mesh to the top. Lower red values will cause the vertex to be less affected by wind. Below I’ve placed a couple more grass planes along with the original.

 Vertex Painted Grass Meshes (http://www NULL.terrymatthes NULL.com/wp-content/uploads/2013/03/vertexColors NULL.jpg)

After your painting is complete you are ready to export your mesh for the UDK. You don’t have to do anything special on export in Maya to carry your vertex colours into the UDK just export your grass plain as a standard FBX.

Unreal Development Kit

Our mesh is done and it has all the properties it needs to accept directions from the “world offset position” in the material node we’re going to create. The first thing to do is start a new map and import your materials and models for your grass. After everything is imported create a new material.

In this material up with whatever diffuse, normal, and specular etc. that you need and then clear a fair amount of space in your material editor because node network we are going to create for wind is going to take up a bit of space.

Before we create the windy section of the material I wanted to break down the core of the wind network. I mentioned earlier we are using the “world offset position” attribute in our material  to animate the grass. As you can imagine, feeding the world offset position a constant value would yield no animation. We need some way to animate the actual value we are sending to the world offset position.

To accomplish this we are going to use two nodes. The “Sine” node and the “Time” node. The time node will give us the changing value we need. Plugged into the sine node we can create a continually oscillating value between 0 and 1. This is the same principal I used to animate optical flares in my previous post (http://www NULL.terrymatthes NULL.com/unreal-2/materials/sprite-channel-controller/).

Next we need a way of incorporating the red values of our vertices to control the wind falloff on our grass mesh.

The wind instructions to affect the grass are going to come from a “Wind Direction” actor. Your going to need to put on in your scene and they are located in the classes hierarchy tab. When you bring up it’s properties you’ll see that there are a few different controls that we can use to affect the wind. Be sure to play around with these so you can get a good idea of how you’ve weighted your vertices after the network is complete. Beyond the diffue map, there isn’t anything in the network that you can’t grab directly from the right click menu in the material editor. Go ahead an copy the network below, then assign it to your mesh.UDK Windy Grass Material Network (http://www NULL.terrymatthes NULL.com/wp-content/uploads/2013/03/windyGrassNetwork NULL.jpg)

After updating your material network you should see the grass now waving at a constant rate in the wind. After this it’s up to you to discover some more interesting ways to make your grass move. Also take a minute or two and think about all the implications of this technique. There are a lot of things in video games you could apply this type of procedural animation to.

Conclusion

If you have more than one mesh that will use wind you should really look at setting up your material so it can be used for instancing. This material network can get large and loading it in for each plant is going to cause you some performance loss.

I hope this gave you a good understanding of wind principles and showed you a new way to spice up your Unreal Development Kit environments.

If you’re stuck on a particular step or want to know more about creating material instances ask away and I’ll do by best to help :)

[R&D] Maya Software Clouds

Software Clouds Test


 

The above video is a slide show of viewport renders from a few evenings ago. I am working on a project that needs clouds and I thought I would give fluid container clouds a spin. Playing with clouds is lots of fun! The render times are quick and there are a fair amount of preset styles to technically guide your artistic desire. If you’ve ever played with Maya fluids you’ll be familiar with a lot of the attributes because clouds are essentially pre-emitted voxel data paired with a distinct look gained through the fluid container’s attributes. The opacity ramp can be changed just like any Maya fluid to help thin out or thicken up the clouds. The clouds get their texture through noise. usually “Perlin” or “Billowy“. The clouds I was playing with all came with a larger fluid container that encompassed the “cloud” container. This container is set to create a haze gradient that starts out transparent at the top and gets thicker as it descends in the Y axis  You can dramatically change the look of the clouds by colouring the “haze” container. This container is essentially the infinite sky the clouds are painted on. This sky isn’t technically infinite though as it’s confined by the dimensions of the container.

The container is actually quite small when  you import the cloud presets. I had to scale mine up 20-30 times their initial size before they were large enough to encompass the render view. Before you go and scale up your clouds you should know that there are several ways to “scale” clouds. You could…

  • [A] increase/decrease the physical space the clouds occupy
  • [B] increase/decrease the physical size of the cloud within that space
  • [C] increase/decrease the entire simulation size essentially scaling all elements equally

To Achieve [A] you  would increase the size X Y Z values under  the “Container Properties” roll out in the “cloudLayerShape” node.

Scaling the clouds within the space [B] is done by changing the “Frequency” slider under the “cloudLayerShape” node’s “Textures” roll out.

The simplest form of scaling [C] will just give increase the general size of the simulation making everything “bigger”. You can just select the fluid containers in your viewport and scale them to get this done.

That’s all for now :)

Software Clouds Test (http://www NULL.terrymatthes NULL.com/wp-content/uploads/2013/03/cloudsF NULL.jpg)

[Game] A Grave Affair

Grave Texture Mapped UV Islands

I’m creating a cemetery scene so you can imagine that I’m going to need some tombstones. I have sculpted another since my last WIP and thought I would share it. As I was breaking down the scene I was trying to think of ways I could maximize my work time. I wanted to make sure I wasn’t sculpting more assets than I needed to make the scene look full. From that point on I decided that all the tombstones were going to have a different design on each side. This would let me cut the number of tombstones that needed to be created in half.

Just like the last mesh I started in ZBrush my sculpting the general shape. With hard objects like this I like to start by smashing together basic geometric shapes with Dynamesh. After I have the basic shape it’s time to save a copy and start sculpting wear and tear. I was able to use the noise profile that I saved from my last sculpt to break up the noise on this one as well. Saving out the noise and other commonly used elements will also help me to keep things artistically cohesive throughout the production of the scene.

(http://www NULL.terrymatthes NULL.com/wp-content/uploads/2013/01/gravesculptL NULL.jpg)

Dynamesh is your best friend in ZBrush while creating game assets! Maybe it’s because I started working with 3D before ZBrush was around, but I just love the ability to kit bash with ZBrush while staying largely ignorant of topology. Gone are the days of matching up verts and integrating meshes before they can be treated as a single surface. With  the tombstone here I was able to take a human skull I had modeled for a previous project and insert it into the top of the grave. The book sculpted the same way, but I created the book within ZBrush as a separate subtool. If you’ve never merged dynamesh objects before it’s actually quite simple. Start by making sure both objects are dynameshes themselves and then use subtool master to merge all visible subtools. They aren’t quite the same yet though. They should be one sub tool, but you’re going to have to ctrl drag and empty marquee selection to have ZBrush retopologize your dynamesh subtool once more. Bam! It should be all one surface now. If the objects look to crude then you need to turn up your dynamesh resolution before dragging to retopologize.

Like most of the assets in the scene I’m trying to keep the poly count around 1K. And speaking of polygons I wanted to address a common misconception about them. A lot of people fret about poly count in-game design. Whether its triangles or quads less is not always better. We’ve gotten to the point on mid level hardware where poly count isn’t the limiting factor it used to be. “I spent a solid few months of optimizing polys, lightmap UV channels, collision meshs for everything in UT and the act of stripping 2million polys out of a level generally improved the FPS by 2 or 3 frames.” – Kevin Johnstone (http://www NULL.polycount NULL.com/forum/showthread NULL.php?t=50588). Texture maps represent modern geometry more than polygons do at levels of high frequency detail. We are using lots of texture memory to affect and displace geometry. Stripping down the polygons to an absolute minimum is going to cripple the ability of a normal/displacement map to affect the perceived detail of your asset. If you need a few more verts to make an edge look better just do it!

If textures are the new limiting factor then what you should be aware of is “draw calls“. Your video card can only do so many of these per rendered frame and keeping this low is going to have a big impact on performance. A draw call is done for each material on a mesh every frame.  One mesh doesn’t equal one draw call. A lot of engines will actually limit the number of materials you can put on a single mesh.  The 600 series Nvidia cards can do roughly 600 draw calls per frame and that’s pretty good. When you think about how many textures that is you might that’s a lot, but each of those calls is slowing down performance.  One last thing worth mentioning is that even instanced meshes with the exact same materials will require separate draw calls. This means that if you have a metropolitan city full of instanced buildings each individual building is adding another draw call. If you have more than one material on heavily instanced assets you can see how this would start to adversely affect your frame rates. Just try and keep the number of materials on each mesh as low as possible :)

Just like our last tombstone mesh I broke out the damaged bits and strong surface changes into their own “UV Islands”. These islands are keeping xNormal from casting seams along the edges of those areas. The key is to break out UVs where the geometry sharply differs from the continuity of the surface around it. In the following diagram I’ve outlined the UV islands in blue on both the mesh and UV editor. You can see how these areas differ from the geometry surrounding them. Doing this with your light map UVs as well as your texture UVs will help shadow fall across your object with less error.

(http://www NULL.terrymatthes NULL.com/wp-content/uploads/2013/01/GraveUVL NULL.png)

During the initial baking of normals I produced two errors outlined in below. These particular errors were not from UV mapping, but from floating vertices that weren’t connected with an edge. Retopologizing in ZBrush is awesome, but now without its downside. I find the vertices you lay down quite hard to see and the cursor snapping can give you errors if you’re backed to far out by not connecting your edges. On closer inspection of the erroneous areas I was able to find the floating geometry and correct it. Now you can see how this got rid of those errors on the updated normal map texture. Always inspect your errors thoroughly. Chances are your error is coming from errant geometry at the site or flipped normals. If your normal map comes out looking like details are being projected on from the front to the back or vise versa you’re having scale issues. Your models scale is too small for xNormal to properly bake the texture map.  The UDK’s native scale in Maya is too small so you’re going to have to scale up your geometry 20-50 times its actual size to get proper normal map bakes.

Normal Map Errors on UVs (http://www NULL.terrymatthes NULL.com/wp-content/uploads/2013/01/UVerrorL NULL.jpg)

The job I’m working has the potential for me to work on some “magic” type effects so I am going to post a couple R&D clips this weekend. These will be geared more towards film although I will try to explain the fundamentals well enough so that you may apply it to Cascade in the UDK. If your still  feeling confused about baking normals? Check out Tombstone WIP2 (http://www NULL.terrymatthes NULL.com/unreal-2/materials/tombstone-wip-2/) to learn more about game asset creation with the UDK in mind. Until then Cheers,

Terry