I've started to design the wax rock sequence I'm going to be creating. It's been a bit of a struggle trying to decide what this wax/rock hybrid looks like. The idea is that this is a type of rock that, when heated, melts into wax. When cooled, it hardens into rock. Although I haven't worked with this concept much yet, I initially had the idea to embed amber into areas of the hardened rock, as if fossilized. Right now I've just focused on the rock so I don't dive too deep into this ambiguous hybrid material.
Rock material
Here's some of the work I've been doing testing the material for the rock. This rock arch mesh I've created has been my guinea pig for my experiments so far. It's a more complex hero element, so if I can work with this as my test case, it'll all be downhill from here.
The work in progress rock material here is the rock in a hardened state, before it begins to melt. I've been looking a lot at igneous and lava rock for inspiration. The nature of these rocks is very similar to what I'm creating. The large forms are sort of blobby, as if once liquid that was once flowing and dripping was hardened in place, but the finer surface texture is somewhat rough and porous from the air bubbles formed.
Vertex color masks for different normal map details
Right now, the material shown in the picture is set up to utilize vertex color as a paintable mask for different tiling normal maps. At the bottom, there's a slightly finer, more porous looking normal map, where on the arch it is a bit larger, blobbier detail.
I set it up this way to maximize reusability of the material across all of my wax rock meshes and also to make the process of testing out different looks for the rock a bit more streamlined. Since I'm planning on having a variety of different rock pieces, I wanted to be able to have a few types of rock surface detail that I could paint onto instance specific areas on each mesh, rather than hand sculpting model-specific normal maps for each mesh.
Unfortunately, something I overlooked was that vertex colors can't be used on Skeletal Meshes. These meshes will need to be Skeletal Meshes because they're going to melt with Morph Targets.
I'm not incredibly disappointed though, because everything I'm doing here can done with texture masks instead of vertex color once I decide on a final look for each piece.
I've also been playing around with strategies for minimizing seams. A complex form like this one is difficult to UV without compensating in the form of either seams or stretching. Seams can be glaring, and so I had this set up to use a vertex color to unmask projected textures that I could paint in areas where seams were apparent.
I set it up this way to maximize reusability of the material across all of my wax rock meshes and also to make the process of testing out different looks for the rock a bit more streamlined. Since I'm planning on having a variety of different rock pieces, I wanted to be able to have a few types of rock surface detail that I could paint onto instance specific areas on each mesh, rather than hand sculpting model-specific normal maps for each mesh.
Unfortunately, something I overlooked was that vertex colors can't be used on Skeletal Meshes. These meshes will need to be Skeletal Meshes because they're going to melt with Morph Targets.
I'm not incredibly disappointed though, because everything I'm doing here can done with texture masks instead of vertex color once I decide on a final look for each piece.
I've also been playing around with strategies for minimizing seams. A complex form like this one is difficult to UV without compensating in the form of either seams or stretching. Seams can be glaring, and so I had this set up to use a vertex color to unmask projected textures that I could paint in areas where seams were apparent.
Painted style and displacement
Here I've tried to incorporate the same methods to achieve the painted style as I have on other assets so far. As of now, I have yet to add the "painted edge" silhouette detail through opacity masked mesh layers (these are shells of the original mesh pushed out along the vertex normal in the World Position Offset of the shader.)
An issue I was running into here was that, eventually, I'm looking to tessellate and displace the mesh when the wax starts to melt and drip. Displacing a mesh and instancing it multiple times to create the painted mesh shells to add silhouette detail was much too intensive for what it was worth, and slowed everything down quite a bit. I'm still debating what the best option is here, but since there is no material instance override for whether or not a material is tessellated, I came up with a fairly decent workaround. I decided to set up the rock material into a Material Function that outputs all of its base material attributes. From there, I made two different materials, one with displacement and one without. The mesh shell layers, set up by the rock asset's Blueprint, are assigned dynamic material instances of the non-tessellated parent material, and only the first mesh layer uses the displaced material. The Blueprint is also able to copy material instance parameters for every dynamic material instance, which makes it incredibly easy to keep consistency change material instance parameters for all layers.
So, the painted silhouette detail is soon to come. I'm still deciding on the type of brush stroke that would define the wax rock material best. The rougher brush-like strokes that worked well for tree bark don't seem to fit here. I'm thinking more along the lines of differently displaced wavy and angular impressions of the base silhouette with less stroke information. So far, I'm using the same method for normal maps (stepped values, slightly warped UVs of the same normal map blended by a dithered mask) but we'll see what happens as I continue to play with this.
An issue I was running into here was that, eventually, I'm looking to tessellate and displace the mesh when the wax starts to melt and drip. Displacing a mesh and instancing it multiple times to create the painted mesh shells to add silhouette detail was much too intensive for what it was worth, and slowed everything down quite a bit. I'm still debating what the best option is here, but since there is no material instance override for whether or not a material is tessellated, I came up with a fairly decent workaround. I decided to set up the rock material into a Material Function that outputs all of its base material attributes. From there, I made two different materials, one with displacement and one without. The mesh shell layers, set up by the rock asset's Blueprint, are assigned dynamic material instances of the non-tessellated parent material, and only the first mesh layer uses the displaced material. The Blueprint is also able to copy material instance parameters for every dynamic material instance, which makes it incredibly easy to keep consistency change material instance parameters for all layers.
So, the painted silhouette detail is soon to come. I'm still deciding on the type of brush stroke that would define the wax rock material best. The rougher brush-like strokes that worked well for tree bark don't seem to fit here. I'm thinking more along the lines of differently displaced wavy and angular impressions of the base silhouette with less stroke information. So far, I'm using the same method for normal maps (stepped values, slightly warped UVs of the same normal map blended by a dithered mask) but we'll see what happens as I continue to play with this.
Melting morph targets
A test with morph targets. This is a pretty simple and unrefined test, but you can get an idea of how this is going to work. The arch is an interesting problem to solve with this, because in order to melt, the mesh needs to be able to separate from itself in the middle. I've split the rock arch mesh up into four pieces: bottom left, upper left, upper right, and bottom right.
The first time I tested this, I only split it into a left and right side. I was a bit unsatisfied with my inability to make the rock melt onto itself because of all the smaller arches that I couldn't meld into itself without some gross stretched, squeezed, and overlapping geometry. I used lattices to manipulate the form for the blendshapes/morphtargets I created in Maya. It looked more like the rock was just squishing down on itself.
With the mesh split up into four pieces, I'm able to get some overlapping action and make the top meshes melt down onto the lower meshes. A general rule I'm following is that, with anything that melts, the bulk of its volume flows down from the origin of its melting to its base. Since this is just a test, I feel like I could push that even more here. The melting of the top meshes over the bottom also isn't quite convincing here yet. I'm also looking to incorporate intermediate blendshapes for a less linear morphing.
With the mesh split up into four pieces, I'm able to get some overlapping action and make the top meshes melt down onto the lower meshes. A general rule I'm following is that, with anything that melts, the bulk of its volume flows down from the origin of its melting to its base. Since this is just a test, I feel like I could push that even more here. The melting of the top meshes over the bottom also isn't quite convincing here yet. I'm also looking to incorporate intermediate blendshapes for a less linear morphing.