The final render.
Very compressed VFX demo gif because Google Sites doesnt appreciate large image files and I don't appreciate dial-up speed image loading :) I'm very glad I took the time to allow myself to create these effects. While they weren't in the brief they really help breathe a sense of life into the otherwise static scene, and they were really fun to make. I want to make more. Every project needs fire now.
Light complexity - good overall
Shader complexity - it's good to know that POM is relatively inexpensive for such a cool effect.
Roughness - I think this shows good variation overall
This project was, by far, the widest in scope I have ever attempted. The jump from creating one hero asset to an entire scene was a bit steep if I'm honest but I appreciate nothing if not a good challenge. In terms of figuring out workflow, this was a trial by fire (ha!) and having to balance so many different aspects of production was enlightening. This project has also clearly highlighted my preferences within development for tech, vfx and optimisation. My favourite parts of this project were getting the cobblestone POM shader working and creating the fire effect.
In terms of critique I think the scene still feels a bit empty. Considering my intial block out was only 6x6 meters whereas the final render was for an 8x8 scene I think the emptyness was to be expected and I would like to have compensated better for it. I think adding the graffiti, ladder, boxes and moss decals made a massive difference, but some piles of leaves or newspaper sheets on the floor and table would have added a lot to the overall impact of the scene. I didn't have time to figure out the best way to go about applying decals to a surface with POM so it might have been a case that I needed more geometry for the leaf piles and such anyway.
In terms of tri count the final set up, not including instancing, came to just over 24k tris. I had about 700 left which I could have used to create some small assets to go on the table perhaps, or maybe for some foliage alphas for hanging moss but really I think that was reasonably close to budget. I don't thing my geometry was wasteful, but I did have quite a lot of geometry carved into the yellow wall to make the pillars look more interesting. I think this was worth it but upon reflection the reason I ended up using geometry rather than just AO was probably because of that issue I noted with no material AOs rendering. If I had spotted that earlier it might have changed the way I approached some assets but overall I think it was worth the cost. It's a very nice wall.
In terms of presentation and lighting I think it was successful. I would like to explore post-processing more in the future as I limited myself to only adjusting the exposure rather than messing with any other settings. Through this project I also finally discovered where my comfort zone ends in 3D and that is with the Unreal cinematic sequencer. I have no experience with cinematics or video editing so opening that panel was intimidating to say the least. I didn't have time to get it working this time round, but for my future environments I'd like to be able to produce a basic fly through or pan around to show off the scene from a players perspective.
In conclusion I learned a lot about workflow and time management on larger projects, as well as VFX and shaders - all things which I will be optimising across all my future projects to my heart's content.
As far as a reintroduction to PBR materials and sculpting goes I consider this project a success. I think my ambitious goal of the stalk hand worked out really effectively and I'm pleased with the overall composition - the peak of the stalk, fingers and tongue form a triangular composition which is easy on the eyes. I think the materials themselves are effective, especially the stalk which looks very high detail despite being relatively low-poly.
The final tri count was 4952 which is comfortably close to the 5K limit. I ended up using only one texture sheet as I didn't think the stalk and tongue could be justifiably called "props" and it was much easier to get a consistent texel density using one 2048 sheet.
One thing I would have liked to improve was the final presentation of the asset. I used a very basic stage and three point lighting set up which is definitely passable but I think some props and scenery wouldn't have gone amiss- perhaps a gravestone or some basic terrain at the very least.
No lights - I'm actually not sure why I can see anything in this scene with all the lights off. Auto exposure is disabled and the only thing close to a light is the emissives on the fire and blinds - do emissives generate light now with lumen?
Ok I looked it up and it looks like yes emissives now have a bloom effect enabled by default as you increase the intensity. If I wanted to I supposed I could tone this down with a post process but I think it looks okay and isn't strong enough to actually impact the final set up.
Main directional light - I wanted to have a distinct slice of light coming through the archway to give the impression of dusk as well as to help break up the composition a bit. It also helps to highlight my lovely cobblestone which is appreciated.
I added a subtle warm spotlight channel-locked to the sofa, barrel and table. This was to simulate the firelight which would have an intense drop off anyway. I wanted this light to flicker so I created a material light function which is a really cool and easy way to make a light flicker! I was worrying I'd have to learn how blueprints work in the span of 2 hours but instead I just got to plug a sine wave into the emissive function and it just... worked. Why is everything so deceptively simple? It makes me nervous.
This was the initial formula I ended up using for my flickering light. It was a bit too uniform and the frac node was doing strange things at when the wave returned a whole number value.
I'm sure there must be a more efficient way of doing this but for me this worked. I used two different sine waves multiplied together so that the periods between intensity would have a bit more variety. This method of manually adjusting the range also resulted in a much cleaner result because the wave wasnt being truncated at either extreme, instead it was being squished a bit flatter overall and shifted up. Representing this graphically also showed me that I could also safely remove the clamp node because the values are already nicely in their own range.
In conclusion, I want to use more maths because I miss it dearly.
I used a point light to fill out the shadows and actually light up the scene enough for it to be visible. I think this lighting set up is quite effective. If I'd had time I would have made a custom skybox but for now I think the Unreal default one complements the scene quite nicely.
With post processing - spot the difference. All I did was slighly adjust the exposure as overall the lighting was working pretty well. I didn't want to push or reduce the emissive bloom as it seemed to be working quite well, so I just left it as is.
While lighting I happened to notice these weird letters in my table shadow. At first I thought it was some kind of error but no...
I had to untick another box. I guess having this enabled by default is useful for studios sharing non-final images but for me it was annoying.
While I was down so low to the table I noticed it wasn't catching any interesting light. Turns out the roughness map had imported blank. Easy enough to fix, but a strange thing to happen in the first place.
There's nothing like deciding to spontaneously learn a new piece of software in one sitting. Thankfully EmberGen has a free trial and a default fire simulation. This was very fun to play around with. The initial flames were too intense and I got to click on lots of random nodes and adjust a bunch of stuff to figure out what makes each aspect tick.
I reduced the scale of the flames and changed the emitter shape to be more log-like. I think this is much more bonefire-y looking. Initially I exported this as an 8x8 sprite sheet, however dividing a 2048x2048 sheet into 64 images leads to a very pixelated fire so I eventually reduced this to a much more reasonable 6x6 with a managable 36 images.
I set up the flames as a niagara system running through each image in the sheet. It looked really cool! But everytime I moved the camera it would shift and start clipping through the barrel. This would be fine as long as I lined it up for the renders but that would be cheating annoying to do and I wouldn't learn anything useful. So I set about trying to fix it.
I knew the fire would need to turn to follow the camera as I rotated around horizontally, but the issue was coming from the vertical movement. Therefore I googled how to axis lock my effect and got tragically few results. Eventually I found one vaguely related youtube video and a blog from 6 years ago about a completely different version of unreal. This showed me it was possible I just had to find where the render settings were in this version!
Before locking the Z-axis - fire clips through the barell in an attempt to follow the direction of the cameral.
After locking the Z-axis. I still get some weird effects when viewing from very low angles but I think this is just a side effect of it being an alpha. In an actual game setting as long as its viewable from a crouch and a jump it's probably fine so I am satisfied with this solution.
Look, I would love to describe to you exactly how I made these sparks but I just used the Niagara directional burst emitter and then messed with a bunch of numbers until it looked roughly right. I wasn't aiming for incredibly realistic sparks with realtime fizzle here, I just wanted a little blue burst of noise to add a bit of variety to the colour in my scene.
The main thing I tweaked was the particle scale and adjusted the velocity settings to make the sparks move along the Z axis a bit more than the XY so it seems like they're falling rather than exploding.
I enjoy the physics based particle systems a lot, even though this is about as basic as VFX can get I can already tell this is something I'm interested in pursuing further.
My friend was having a problem with her scene where the ambient occlusion between her fence panels wasn't showing up when plugged into the material slot. However, it would show up when plugged into the base colour so the map wasn't empty it was like the AO slot had been disabled. At first I offered a work around of just multiplying the AO into the colour channel but then we noticed that in the buffer visualisation mode for material AO there was nothing at all showing up - this was a system wide issue and a strange one at that. Why would AO be disabled?
I won't lie, I'm not super up to speed on how lumen works yet but I know it does funky things with lighting so I assumed it was in some way the culprit. After some effective googling I found a possible solution.
You just have to untick this box. That's it. I have no idea why it is enabled by default. It could at least flag that there's no point using material AO without disabling it first.
Sure enough I checked this on my own scene and wow look at all that ambient occlusion! It is there it's just invisible.
After unticking the box my AO was finally working. I'm suprised I didn't notice this before somehow, but seeing as most of my materials were originally from designer and so had no AO I guess it didn't occur to me to check. But now I know!
Before fixing the material AO. To be fair it's lack is not apparent at first as the in engine lighting is doing most of the heavy lifting when it comes to shadows and occlusion.
After fixing material AO (fixing the AO did not magically add a ladder, I did that). The effect is most noticeable at the bottom of the walls and in the shadows within the gaps of the yellow wall. The effect is very subtle in screenshots but more apparent in engine, the scene suddenly felt like it had more depth.
My initial design had a lot of leaves across the floor to add to the space but because of the POM on my cobblestone shader I knew this wasn't going to work as I originally planned anymore. So instead I needed to come up with some more clutter to fill the space and balance out the composition a bit more.
Firstly I added a ladder. This was in my original sketch up and I even modelled a basic version I just forgot about it until now. It actually turned out to be a really effective addition to the scene! It adds the implication of transversability and verticality to the scene and it also works as a leading and dividing line across the join between the two walls.
Clutter corner.
In addition I also added some moss decals created in substance painter, some graffiti I drew in photoshop and some basic cardboard boxes. I also added some sticker decals to the boxes. Every time I play a game now I'm going to be looking around the environment to look for stickers on things and then trying to decide if they were decals or hard textured.
Also, I know there's no marking criteria for humour per se, but putting the "This way up" stickers on the boxes upside down and saying not to stack on the stacked boxes brought me some joy. This counts as narrative details right?
I blocked out the rough proportions of where I wanted the windows and windowsill to sit on the wall. I then took those measurements from UE5 and made some basic boxes in 3ds max to work from.
While doing that I was also deciding on what to do for my decal and seeing as the yellow wall was already on my mind I decided to give the fusebox an electrical hazard sticker to make it more clear that it is a fusebox and not just a random metal cabinet on the outside of a wall.
For the base of my first decal I was making a sticker for the fuse box. This means I could use a standard electrical warning label as a base which is definitely allowed and not super illegal copyright infringement or plagiarism. I checked.
After adding some grunge in photoshop and creating an alpha channel for the opacity mask I set up the material in unreal.
Successful decal implementation. Please know that I immediately fixed the forward shading priority of my lights after taking this screenshot. The yellow text across the middle of my screen finally got annoying enough that I googled how to make it go away (change one number in my directional light to be 1 instead of 0).
This model started off so well but it turns out every time you add a new edit poly modifier in 3ds max you have to RE-ENABLE any selection culling like backface or occluded. I learned this the hard way after accidentally welding a bunch of verts on the back of my model together. Learn from my errors.
Thankfully because I was in a modifier I could just delete that layer and start again from the base model with a new modifier while remembering to re-enable occlusion culling.
A great start with the TurboSmoothing to make the high poly but the lower part clearly needed more control loops.
This looked much better. I ended up reducing the geometry of the high poly to create the low poly rather than using the initial model because I wanted to keep some of the more important control loops as there are some really tight corners along sides of the shelf.
Note to self: if using symmetry so you don't have to fix the same problem twice, remember that your beautiful UVs will be flipped as soon as you collapse the modifier. I need to figure out the correct order for lowpoly/add extra geometry/unwrap because currently my workflow is chaotic and causing issues like this.
At this point I just expect to run into strange normal map issues when baking, it's just part of the process. For this one it was easy enough to solve asn I just needed to add more control loops to help capture the normal shift around the hard edges.
Nice (enough) baking!
I learned the beauty of the edit poly modifier with this window asset. Trying to unwrap something after adding control loops around every edge is VERY FIDDLY and not fun. So instead I unwrapped the super low poly then used an EP modifier to add in the control loops, and another modifier to weld down the unnecessary geometry that the last modifier introduced.
This is the window and windowsill UV sheet. I unwrapped the back off of the main sheet because nobody will ever see it and therefore I decided it doesn't need any dedicated texture space. Realistically could I have just deleted the geometry all together? Maybe, but something about open edges on such a thin model gives me the impression I'll end up with weird lighting artifacts.
Using designer for this saved so much time compared to having to draw it manually. I used the tile generator to create strips then used flood fill to add a gradient to imply the shadows between the blinds. I added a small amount of directional noise to add some surface interest and then applied a gradient map to give them a wooden look.
This decal was working the way I wanted but it needed something more to help it stand out from the wall behind it
I added an emissive to imply the lights are on behind the blinds. I think this works really well! It definitely gives more of a sense of life to the window.
I could have just faked the impression of glass but I wanted to try and create my own basic glass shader. Firstly I discovered there are several dozen different ways to simulate glass and a lot of them I didn't like, so I decided to frankenstein my own method. Some values are already a given like the refractive index of glass which is 1.52, but for the rest I just put in a reasonable guess and then tweaked it until it looked good.
I used the unreal help notation to figure out how to set up the fresnel node but as the edges of the glass are hidden and it's otherwise a flat place it didn't seem to do much. So in order to simulate the increase in reflections as the incident angle gets shallower I decided to plug a dot product into the metallness node. The difference between the metallness and specularity is still a mystery to me as the documentations don't explain the maths behind them, but I think specularity refers to the amount of light reflected and metallness the clarity of reflection? Glass has a specularity of 0.5 so I just plugged that in and hoped for the best.
Strange artifacts when viewing the glass from a shallow angle. I needed the Fresnel to apply here when I am viewing from a shallower angle I need more light to be reflected. The specularity can't change so the only other thing I thought could be adjusted frame-to-frame was the metallness.
For this to work I needed to calculate the angle between the viewer and the surface of the glass. I had no idea how to do this so I searched for camera nodes and a pixel node. I found these two and then discovered there's a node that just DOES the dot product calculations for you automatically. That's so cool! Once I plugged it all in it seemed to be working how I intended. I don't know if this is the most efficient way to make a glass shader but it works and I learned a lot by doing it so I consider this a success overall.
Asset zoo (with temporary gladiator for scale)
Using the shell modifier to add some thickness to my meshes
Trim sheet UV
For the table wood I used a wood grain texture for the albedo and roughness maps then used smart masks to add some grunge and a position generator to add the look of rising damp on the legs.
I liked the rust effect but the colour of the base metal was looking too cold, so I went to the PBR guide to get the correct values for metals.
I much prefer this colour iteration. It looks a lot more like corrugated iron or steel rather than the more aluminium-esque colouring from before.
90% of this plaster material is going to be communicated in the normal map so I started by focusing on creating an interesting mix of surface noise.
For the roughness and colour I used the same initial noise mask and then corrected the levels for the roughness and added a gradient map for the albedo.
needs ao and more detail
I can keep this answer short and simple: efficiency. From the artists' perspective reusable materials save time as not all assets have to be individually modelled and textured. From the player perspective, the download size of the new game they just bought won't require 300gb of free space just for wall textures and their GPU won't explode from trying to do 70 draw calls to render each individual blade of grass. It's a win-win situation really.
In all seriousness though, rendering environments can be expensive in terms of paid-time for artists and hardware-cost for players. By reusing assets and textures time, money, space and sanity are all being saved.
In terms of hiding repetition the easiest ways to achieve this is though decals, alphas and just composing things cleverly. For example, if you have a stack of identical books, rotate a couple of them to make them stand out or flip one over so a different cover is showing. If a wall texture is looking repetitive, stick a foliage alpha like some hanging vines over it. As for decals they can go on anything. Add some algae, some peeling plaster details or some random stickers and magically the previously boring repetitive surface now looks interesting and unique.
For generating environment assets faster then procedural softwares like Houdini are the modern solution. Node-based environment generation tools which can be packaged and shared around a studio will save artists massive amounts of time. Gone are the days of manually placing pipeworks or bridge planks - now only one person has to set up the function and then everyone else can replicate it with enough customisation and variety in the procedural generation to avoid repetition. As well as this, I think substance designer is also an efficient time-saver for developing custom smart materials as a base which can then be brought into painter to add a bit of variety.
Sorry to break the 4th wall of this blog, but as you read my enthusiastic description of the journey I went on figuring out how to make this material I would appreciate it if you could bear two things in mind. Number one, I used a really helpful and short tutorial series for the Zbrush portion of making this material. The main things I learned from it were how to use alphas as brushes and how to use the offset tool to create a perfectly tileable texture. Secondly, when I was making this material I did not know that Unreal 5 no longer supported tesselation for height maps. If I had known that I would have chosen a completely different kind of material for the floor that was not so reliant on depth to feel real. However, instead I got to learn how to use a very cool thing called Parallax Occlusion Mapping as a work around so my efforts weren't wasted; it was all worth it in the end! I have also learned the very important lesson of checking whether a feature is supported before I assume it is just because it was in the previous version.
Stone after adding the alpha but before reducing detail.
To create this material I started by sculpting a single squarish stone which I could duplicate to create the cobbled look. I duplicated this stone and created two other variations, one still square but with heavier damage, and one smaller more narrow stone. Between these three sculpts I had 18 unique faces available to use as individual cobbles in my floor.
Next I used the alpha tool in Zbrush along with some free rock alphas to create some rough surface noise. I then reduced this by using the trim dynamic brush to flatten some of the less dramatic areas of interest as these wouldn't be very clear in a bake anyway. I wanted just enough to create the impression of it being a rough stone surface.
Stone after reducing the surface noise down using trim dynamic.
All 3 stone variations ready to be arranged into the floor material.
My document size at this point was 2048x2048 just to make life easier for when I would eventually need to take screengrabs.
After arranging the stones onto a plane in Zbrush and grabbing a document I used Substance Designer to check it was all tiling correctly.
It was tiling correctly!
After adjusting the rotation of some of the inner tiles to add a bit more randomness I used substance painter to bake the detail of the cobbles onto a plane and then used the mesh map export preset to bring all of that information into substance designer.
My beautifully organised substance graph.
Texturing in substance designer seems to be about 20% technical knowlege and 80% trying out random things and seeing what happens. For example, I initially used the roughness map to make the albedo but it didn't have enough variation in value so I decided to try and mix it in with a random greyscale flood-fill of the original mask which was created using the polygroups from Zbrush. This was great until I realised nodes do not like it when you try to blend linear/greyscale information with colour input, so then I had to figure out how to convert something in greyscale to something with colour. I ended up using a gradient map from black to white to trick the system into thinking it was in colour. While writing this I just realised I could have just used the gradient map to make the greyscale the colour I wanted and then remove the unnecessary blend node. I'm going to go and try that now...
...well at least now I know how to make this a lot more efficient for next time.
Most of the other work I did in substance was adding noise to the roughness and normal maps, particularly where the dirt between the tiles would be as there was no baked information there to work with. I think next time I would try to sculpt in some dirt just to add a bit more variety to that part of the material. However, seeing as this is just the floor and the dirt would barely be visible anyway I don't think this is a major loss in terms of the final visual outcome.
An artist's interpretation of the events of Week 12's Game Production session, when I discovered that Tesselation had been Deprecated from UE5.
This is what the material looks like with no tiling, no height and no worldspace adjustment - not the worst thing I've ever seen but definitely not what I'd like. I knew I needed to find a solution otherwise this material would go to waste and it was far too pretty to let that happen.
I am not one to get myself down because of something as trivial as the removal of a key feature which my entire workflow depends on. However, this was definitely a problem and one I was very invested in finding a solution to. After some research I discovered that tesselation had been deprecated because nanite can supposedly achieve similar results. However, from my understanding that is a lot more costly than old fashioned height maps and requires me to import a highpoly mesh which is something I didn't feel was appropriate for this project. As much as I would enjoy teaching myself the ins and outs of nanite overnight I figured there was probably a less invasive solution. The next potential solution I came across involved using an unstable experimental plug in which I was absolutely not going to risk on my biggest university project to date. Thankfully, I soon discovered Parallax Occlusion Mapping which is both low cost and relatively easy to figure out. It works by procedurally creating a 3D definition on textured surfaces by using a displacement map - not too different from the height map workflow I was using in Substance Designer.
In order to achieve POM on my cobbled material I used this tutorial which was incredibly useful but it didn't explain the technical side as much as I'd like it to. That's why I was very excited to discover this article from Gamedev.net which is fascinating! One day I want to write awesome articles like this to help other artists understand how these kinds of tools work. I'm not going to pretend to understand it completely but I feel like I have a justifiable grounding in the maths and physics principles it is based on and I can appreciate how cool and useful it is despite being relatively old technology in game development terms. The only drawback to this method is that the depth is projected beneath the surface of the material which means the stones look like they sink into the plane rather that protruding from on top of it. However, this is primarily noticeable at the edges of the plane, which I am hoping to cover with walls anyway. I am unsure how this will affect the look of objects that rest on the surface of the ground, but for now I will just avoid decals on the floor and try to find the best angles to view the scene from as the parallax calculations are all based on viewpoint anyway. In an actual gameplay environment, if somebody is staring close enough at my floor texture to notice that the props don't quite sit right on it then I must have made a really boring game. One potential solution to this would be enabling the pixel depth offset feature but this will introduce other issues with self shadowing which I would rather avoid for now considering I have the whole rest of the environment to create.
This is the visual result after enabling POM and figuring out how to enable tiling using world align which was difficult as the primary UV slot was used up by the POM nodes.
The original UVs.
This week I decided to revisit the pumpkin while deciding what to do next for the backyard project. I was not happy with the unwrap. While it made a good use of the texture space it was actually sacrificing more in quality due to the added seams and distortion than it gained from the marginal increase in texel density.
While the original UV sheet initially looked much better, the final results were significantly improved by redoing the unwrap so it was worth doing. I think I need to appreciate that rounder and more organic forms are not going to tessellate as nicely as the more square shapes will and there's no point in forcing it to the detriment of the overall asset.
The redone UVs.
Before - visible seams around eyes, harsh normal transitions
After - no visible seam, much smoother transition
Basic baked material - looking much better with fewer visible seams.
At this point I knew roughly what I was doing with the textures and hoped that the new unwrap would mean they looked a lot less distorted. This was particularly true of the stalk which I needed to have a vein pattern following the direction of the arm and not just the direction of the unwrap. Now that those two are roughly aligned, or at least consistent across the 2D and 3D with minimal distortion, it should look a lot better.
Thanks to substance designer I have now also discovered the usefulness of cells textures so I think I will use those for the pumpkin itself and the tongue over the directional noise I was using in the previous version.
Initial material pass in unreal - I used the metalness map as an emissive to test how it looked in engine before creating a real emissive map. I know there is a way to enable it in substance painter but for the purposes of this test I think I'll get a good impression from doing it this way.
The initial version in unreal. At this point I decided I should just learn how to actually use emissives rather than cheating and using the metalness map as a stand in and see if that increased the impact of the pumpkin's glowing eyes.
For some reason when I reopened the file the emissive map didn't load in with it. An easy fix but a bizarre issue. I think it might be due to having to work on the same project across multiple machines where file paths vary. Or it's haunted.
This version is definitely a lot more impactful for what that is worth. I think the glowing eyes was a fun choice even if it's not the most sensible. The pink tint adds a nice warmth to the underside of the stalk too which is interesting. I am really starting to like the lighting capabilities of UE5.
I knew exactly what I wanted for the sofa texture and that was a grimey dark green microfibre-esque material. I used second hand furniture websites to get a good idea of what areas wear out faster and used mostly smart masks to achieve this effect in painter.
The coolest thing I learned about during this was the paths tool. This let me draw on the edge piping around the cushions and then adjust the height of those lines directly. This saved so much time over trying to sculpt them in Zbrush and it really helped sell the sofa overall.
I decided to do an exploded bake because no matter how I change the cage the cushions will always be overlapping with each other by nature of how this sofa is designed. This did mean I had no AO baked into where the cushions would sit but I don't think this will be noticeable, and if it is then I can come back to painter and use a simple position generator to add a bit of occlusion to them.
I did get these strange really intense normal seams which isn't something I have seen before. In the pumpkin I'm fairly sure that the strange seams were cause by a lack of geometry on the low poly but that shouldn't be an issue here.
These seams don't leave any visual artifact on the final material, and there's no strange lighting behaviour that I could see, so at this stage I'm not planning to waste time trying to rectify this non-problem. Even though I might really really want to.
It looks fine in engine as well so I will move onto the next steps of my environment for now.
In order to make the rerop process as quick as possible for the sofa, I used the inbuild retop modifier in 3ds max. However, as I discovered with the pumpkin project, it had a tendecy to create large spirals instead of clean loops so some adjustments were needed to create the final version. I ended up setting the modifier to a higher tricount than I actually wanted so that I had the freedom to go in and remove what I deemed to be unnecessary geometry, such as loops on the large flat areas of the sofa which made no impact on the silhouette itself.
The unwrap was more challenging as I'm not used to unwrapping rounded forms yet.
As a result, I mostly treated them as cuboids and relaxed the islands where I could to reduce distortion. This is by far the least efficient UV sheet I think I have ever created; this is also the first big project I have had to manage myself, so I decided that for now it isn't worth spending an extra 2 hours to save 5% extra space on a texture sheet where the shapes don't tesselate nicely anyway. Besides, I might come up with some small extra assets that can fit into the empty space before the project is over.
I knew I wanted the sofa to be the main focus of my scene so this was going to get priority out of all the assets. I want it to look run down and dilapidated, like it has been left out in an alleyway for weeks at a time. I used this image as reference for the creases when sculpting, although I knew I wanted my sofa to be a thicker leather material, so while I kept the mapping of the creases the same I altered the intensity as leather would not fold as neatly as this microfiber couch did.
My first step was creating a basic block out of a sofa in 3DS max using dimensions I got from a furniture website to make sure everything was properly proportioned.
Now that I am more familiar with zbrush I didn't use any new tools this time around. However I did finally get to make use out of the very entertaining sliders in the deformation menu such as inflate and gravity which I used to make the pillows look both plump and saggy in no time. The creates were all hand sculpted using dam standard as the crease brush itself wasn't giving the desired results. I was initially going to include the edge tubing as seen in the reference photos, but in the grand scheme of things I don't think it is necessary to sculpt it and if the sofa still looks like it needs more detail during the texturing stage then I will add it in substance using a normal modifier.
While researching how to use designer I found this blog which loosely outlined one method of making stone tiles. These weren't exactly what I was after but I knew the tehcniques used would be helpful and so I decided to try and recreate it.
It definitely did not work, but on the bright side I discovered how to use the incredibly useful tile sampler/generator and histogram scan nodes.
While creating this test material I realised that I wanted a more cobbled and rough look for the flooring rather than the smooth stone tiles I had seen before. I wasn't sure how to achieve this in substance painter but I knew that I could potentially use zBrush to sculpt in some height and then bake that down onto a plane.
Using histogram scan to segment broken areas of tiles.
Sometimes it pays off to just start again. I have the useful habit of assuming everything can always be fixed, but sometimes I need to know when to quit and my first attempt at blocking out this environment just wasn't working. Firstly, it didn't really feel like a "Backyard", but more importantly I was working to towards a more stylised environment when I think this project is better suited to a more realistic look. This will give me a better chance to develop my skills in substance designer, and allow for a more diverse range of assets within the scene. I decided to take inspiration from Prague's Old Town.
I created this archway using my new favourite tool in 3ds Max 2024 - Booleans! It's like playing with cookie cutters but for techy grown-ups.
I drew over the basic block out in photoshop to get an idea of how my idea might look.
After implementing the basic assets I used my gladiator from last year to assess the proportion of the scene and realised I needed to reduce the scale by about 25% so it didn't look like the oversized set of a mid 2000s kids show. As a result the scene is now smaller than the ideal 8x8m but this is something I will worry about adressing later when I can expand the scene without worrying about the current composition.
For this project I'm less focused on my idea and more focused on what kind of cool material shaders and VFX I can integrate into the scene. I'd like to include a fire effect somewhere and I had the idea of setting the scene at a fishing lake so I could also create a water shader. This then gave me the idea of creating a small fire-fish effect where the small licks of flame given off by the campfire would look like little fish swimming upwards if you looked very closely. I then decided to set this scene in an underground cave with a rockpool and blue glowing mushrooms to add a nice warm/cold contrast to the lighting. My first step was to block this out in 3ds max to get the basic composition and scaling down.
Initial block out based on the 8mx8m brief requirement. This version had a campfire and a fishing rod, but it was lacking the narrative element that makes a scene interesting to examine. At this point I decided to change from a cave to a crumbling temple ruin.
I refined the scaling and restricted the water to a small pool area. I think the crumbling walls are a good way to add interest and I might try to learn how to use the Boolean modifier to make the destroyed pillars break up in a more complex way.
I think the composition of this scene is effective, but I will likely need to add more props. It's hard to judge the visual density of a scene without textures so for now I think I am going to work on getting to grips with substance designer in order to progress while my idea develops.
I decided to edit some of the triangulation around the pumpkin's eyes to make sure any lighting artifacting was reduced.
In the initial AO bake I noticed these strange artifacts on the tongue.
I used modified smart masks to add some contrasting shadows in the stalk.
This artifact was really starting to bug me as no adjustments to the bake were having any impact. Initially I thought it was a clipping issue caused by the shape of the tongue and the size of the cage but no adjustments fixed it.
On a whim I decided to go back to 3ds max and check for any issues with the UV and I discovered that some of the faces were overlapping.
I fixed the overlapping UV faces and this resolved the issue.
My initial pumpkin retop was created using the step build tool manually over the surface of the pumpkin. However, I wasn't happy with the overall topology - the edge flow needed improving.
I had the idea to improve the topology by experimenting with the conform tool. I created a sphere and used the tool to mould it to roughly the shape of the pumpkin. I then deleted the mouth and eyes where the angle changes dramatically and manually retopped those areas.
Overall I think this version was much better as I was able to adjust the tri count easier as the swift loops worked well on the simplified geometry.
I decided to do a quick pass to check for overlapping vertices and ngons.
Here I noticed again the edgeflow was looking wonky and needed cleaning up.
I realigned the verts to make the overall shape a bit more efficient.
In this image the facets on the tongue are still visible. I subdivided it before export to make sure that detail isn't projected during the final bake.
This week I stuck to my plan and focused on refining the smaller details. I ended up using the move tool with accucurve enabled to pull out the points on the stalk-hand as well as the tongue, and then focused on keeping things interesting compositionally but reasonably straightforward in terms of retopping.
I really like how the stalk has turned out. I think I could have done something even more dynamic but for a short term project I think it works quite well. I'm pleased with the composition of the whole piece, the shapes feed into each other quite well.
The tri budget for this project is 5k and I think I will be able to stay within that limit quite easily but choosing where to allocate the extra detail might be more challenging. The silhouette is very round so I will prioritize that to avoid faceting. Finally, I decimated the pumpkin down to a reasonable few hundred thousand points.
The decimated and polygouped asset.
Initially I tried individually exporting each piece of the pumpkin but by tooth #3 I was getting annoyed by the repetition and decided I needed a new approach. I didn't want to flat merge all the subtools together because that would make my life more difficult when it comes to do the retop, so I decided to try out polygroups. I assigned each subtool its own group and then merged the tools together, then when I imported it to 3DS each subtool imported as is own object. I did have to rename them all but that was significantly quicker than individually exporting every single piece.
Considering that last October I had no 3D experience at all my comfort zone has expanded rapidly over the year. Comfortable doesn't necessarily mean I can get everything done fast and flawlessly, I think of it more that if anything did go wrong I trust myself to figure it out and fix it. I'm comfortable sculpting and enjoy exploring PBR materials in Substance Painter and Unreal. I enjoy unwrapping, rigging and skinning too. The high-to-low workflow is something I'm less familiar with but I'm hoping the pumpkin project will provide enough of a refresher to get me feeling confident in it.
I think the area I am least comfortable in would be building/sculpting characters. Last year the gladiator was the project I was least happy with overall and I think that knocked my confidence a bit. Character art isn't my favourite discipline and I think there's just a lot more that can go wrong with a character both in terms of design and technical execution so maybe this year I will try and focus on overcoming that especially in the saddled creature project.
At this point I'm very confident that technical art is something I want to pursue and while I have a solid foundation in programming in GML and Python, I want to expand that and learn C# for scripting as it is used in both Unreal and Unity. I know that you can create custom tools for 3DS max and this is something I also want to learn how to do but so far I haven't felt the need to as the projects have been fairly straightforward.
The final thing I want to try and learn this year is how to use Houdini. While it might not be relevant to this years projects, I think getting a good grounding ahead of my final projects in year 3 would be wise. Plus it also looks really fun. From what I've seen it's node based, similar to the Niagara particle system I used in Unreal for the backpack project last year, only Houdini is much more powerful.
My first project for this module is a PBR and sculpting refresher with the theme of pumpkin. I really enjoyed both of these process' in the backpack project so this time round I'm hoping to extend my knowlege especially in regards to the sculpt. I want to try something more organic and challenging so a pumpkin is the perfect project to start with.
My initial concept for this project is a grinning pumpkin with a stalk that looks like a grabby hand which in a game it could use to drag itself forwards. While this isn't the most refined piece of concept art in the world, it does convey the general vibe I'm going for, so I'll use this as a starting point and work in zbrush to work out the finer details.
I do really like this idea as it is a nice balance of fun and scary but I am not sure how it is going to look with the realistic textures this project is designed for us to create.
Starting with a primitive sphere, I used the move tool to create a rough tooth shape.
I used Zremesher to reduce the polycount to a much more manageable number.
I used the polish by features tool to smooth out the silhouete of the tooth.
I then sharpened up the edges of the teeth using the inverted dam standard brush to give them a more refined look overall. This is what the teeth looked like in their final form.
I also used the clay buildup brush to create the pumpkin skin texture and carved the ribs in using dam standard. While doing this I wanted to know how many rubs pumpkins have on average and the answer is it varies, but for a standard pumpkins it's about 10-12. Each rib on the outside of the pumpkin shows where a line of seeds grow on the inside.
I also learned that the mark on the bottom of a pumpkin is called a blossom because that's where the flower bud grows when the pumpkin is tiny.
Next week I want to focus on refining the stalk and reducing the muddiness of the pumpkin texture. I think I will also need to change the shape of the tongue, especially towards the end where the tip gets very thin. If I don't inflate it I think it will cause artifacting during the bake similar to what happened with the thin parts of my backpack project.