Pipe Trim Sheet & Grunge Shader

General / 20 July 2021

As part of my environment I've made a Pipe trim sheet for the piping situated around the area. Non-tileable components are laid out with their own UVs, whereas the length of the pipe is tiling vertically with space horizontally for padding.

The base material is fairly simple and created in Painter. The real detail comes from the grunge decal applied to its own lower poly mesh over the pipe mesh.

In Painter I break the decal down into its R, G & B channels as masks. One channel acts as the opacity mask and is applied to a side of the mesh so as to feel like dirt gathering on the tops. General dirt is applied within the masked space so as to break up the appearance, and then a final leaking masks is applied beyond the original space to have more detail fit the contours of the shape.

Despite sharing the same texture each channel has its own controlling parameters for strength and tiling so as to make edits in the engine.

Prop Work

General / 16 July 2021

More prop work in my efforts to improve my texturing skills. I've been more active in embracing hand painting even if it's to remove detail from generated masks in an effort to become more comfortable not entirely relying on Painters mask generators.

The props you see here are assets based on those seen in Dishonored 2.

My aim for the future is that I incorporate more stencil painting into my work.

Wooden Box Non-Squared Unwrapping

Making Of / 05 July 2021

- Non-Squared UVs -

My typical approach to UV unwrapping props in the past has been; I figure out the texel density for a 2k texture and fill the 0-1 space as much as I could, if a lot of space was left empty I would fill it with other props and take them as a group to be baked and textured collectively.

This did reduce waste with regards to texture amounts across several assets and such but carried more issues in terms of performance in Painter texturing so many props at once and in-engine if one asset had some changes made to it within the shader unless I wanted that change across all of the assets I would need more than one instance of the said shader. I typically didn't even fill out the space of the UV's.

The example below demonstrating as such.

There isn't a lot of information online as far as I could find talking about this approach, I first learned about it with some of Assassins' Creed Odysseys trim sheets, but really started to understand its implementation when looking at asset work for Dishonored and putting my work into action.

[Asset work by Adrien Thierry - Link]

- Making non-squared Uvs -

For the Corridor Scene which this asset is a part of, I had established a texel density of 1024 pixels per meter.

In Blender, using a 2048 texture with this texel density, the UV unwrap on the box leaves a lot of unused space. Meanwhile, going for a 1024 texture with the same texel density, the UV extends outside of the box 0-1 space. See below:


Knowing I am keeping the width 1024 pixels I set the texel density as such and then pack. I keep the UVs within the width of the texture and extend out vertically. It's then a matter of scaling vertically by half and then go about manually packing. So long as the texture remains a power of 2, i.e. 1024 x 2048/512, etcetera mipmapping will work in the engine and the texture quality won't appear squashed or distorted.

In Painter, it's important to export as the final resolution so that the texture on import to the game engine registers it as such. Substance painter will still display the texture as a squashed square in the UV screen, but it does not negatively affect the texturing.

- Lightmap UV's -

My typical approach to lightmap uvs of the past has been to do an unwrap and then automated pack in a second UV set. If the bake didn't work I would up the lightmap resolution though that wouldn't fix the issue 100% of the time.

I started to appreciate lightmaps once I understand that the grid present in UE's lightmap viewer is representative of the pixels for the texture resolution. Using grid textures taken from the video below I have started to take a better approach to my UV packing.

Depending on the scale of the asset I'll typically start with a 64x64 texture, 2 pixels at least of padding between each island and around the edge.

A useful video on lightmapping: https://youtu.be/pUk-EUV_pbo

Vent Scene Progression #4

Making Of / 19 March 2021

I'm calling this piece finished as the intention around it was to do something small that I could focus on understanding trim sheets and POM a bit better before I make the move on my next big environment piece.

The biggest resource for leaning Parallax at least in Unreal was this video which explains a lot of the process: https://youtu.be/vwR0pDPKzeQ which is a definite recommendation.

POM in action for the console on the container extruding from the prop.


Vent Scene Progression #3 - Update

Making Of / 15 March 2021

A quick update on progress with the scene. All tiling materials are in the scene, the master material is nearly finished and I have successfully been able to integrate a trim sheet into the scene with POM.

Right now the next step is to get the final textures in and then I can go about detailing the scene using masks.

Vent Scene Progression #2 - Master Material. Part a

Making Of / 13 March 2021

A quick update on progress so far for the Master Material for the entire scene in keeping with using just tiling textures (Trim sheets will be worked on later).

I'm going to run through my initial workflow but this is all subject to change as I learn more.

In blender each asset to the scene is given two UV sets; the first is texel density correct (I am going for a texel density of 1024/meter using 2048 textures due to how close the camera is going to be to everything being such a small scene), the second set is packed to use up the entirety of the 0-1 UV space and will be the one sent to Substance Painter.

To make sure Painter accepts the correct UV select the camera icon by the UV set you're using (this was the same back in Maya)

In Painter the prop's baked onto itself and then I create the 3 channels like in the previous project, each associated with a channel of R, G or B and add the wear and tear (right hand mesh). I also assigned different parts of the prop a colour once again in R, G, B or left plane white (left hand mesh). I export 2 textures; the ID mask and the wear and tear mask (making sure to set them to Masks inside of the engine).

In engine the Master material is currently set up as so. I plan to break a lot of it down into Material Functions once I had the general layout sorted and a lot of stuff is placeholder.

1 - Tiling texture has its inputs; a UV editing function for scaling and rotation, and then some minor parameters like normal strength and rough. This should all be done before any additional changes in the material.

2 - This is where I use the ID mask and break it into its channels. First the Base Colour is sent through a 'Desaturate' node in case I want to completely wipe the colour and just have a grayscale colour map. Once greyscale the colour is sent through a 'Blend Overlay' function with a colour parameter that is then added back onto the original texture through a LERP, the channel mask acting as the Alpha. This is done for each of the 3 channels.

3 - I have separate mask inputs for both the prop mask and ID. A texture coordinate is plugged into both and it is assigned to the second UV set of the prop.

4 & 5 - These are placeholder right now for the mask changes, one being a general grime material and the other being for edge wear. The Red channel is used as a LERP back in 1 for a slight roughness change.

6 - All these materials are layered over each other.

7 - This is a final detail normal input that should properly be put earlier in the material but it is just empty right now.

8 - Here everything is combined, I use 'Saturate' nodes to help clamp the different inputs before they are fed into the final Material.

The results without the layered wear and tear using one tiling texture and an ID mask.

Vent Scene Progression #1 - Initial Stages

Making Of / 13 March 2021

Currently working on my next piece for my portfolio while in the process of job hunting. I intentionally want to keep this project on the smaller scale so as to be able to really focus in on what I want to do and be done with it in a matter of a few days instead of weeks.

The key inspirations behind the workflow for this scene are that seen in Alien Isolation and Star Citizen; using tiling textures in combination with trim sheets for the majority if not all of the scene. I want to also expand on the previous projects use of unique prop masks and work it more into this scene by using all three channels now that I know where I am going with the material set up and workflow.

The scene itself is inspired by the vents we see in the Alien franchise with some initial reference gathering below. The intention is to keep with typical Sci-fi environments we on Artstation but approach it differently. Adding on that working in such a small scenes means a more conscious attitude to prop and light blocking and general texture quality.

Utilising a 2x2 meter trim sheet for the entirety of the scene modelled in Blender and going to be touched up in Designer.

With this scene I want to start bringing more focus to blocking the scene with props and lights as though it was a navigable environment. Right now it's in the very immediate Blockout of route.

I want to get better at keeping tabs on my production as though I was a part of a team and have so started to work Trello into my production.

Alleyway Environment Breakdown #4 - Lighting

Making Of / 10 March 2021

The majority of lighting went in hand with the development of the blockout. I knew from the start I did not want to be using baked lighting but instead fully dynamic. Quixels own Medieval tutorial provided the base for my ideas behind lighting (link at the bottom) and I took a lot of elements from that including Unreals' new sky atmosphere lighting and using Screen Space Global Illumination (SSGI) on top of using Distance Mesh Fields.

One issue found during development with Distance Mesh fields would be props being too big, for instance the Dumpster which is not fully accurately represented. Though this didn't prove to be much of an issue in the end it is definitely something I will be keeping an eye on here on out.

Lighting went as follows:

First starting with the atmosphere lighting with fill likes from all openings to mimic city light coming from behind.

Following that key lights are introduced as hot spots across the scene. I like to in all of my environments have larger lighting set behind walls often projected against buildings; I feel its widens out the world and helps provide some depth and more specifically layering to the scene beyond what we see.

Following that is lights emanating from windows, and then a large swath of fills lights across the scene with no shadows to help brighten up and fill in dark spaces.

In the end lighting was a fun experience for me and I believe did I good job between keeping the scene dramatically lit and ensuring enough light for the majority of the scene to be readable. There was one prominent issue in the original upload I fixed after the fact you can see discussed in my polycount thread.

Quixel link:


Polycount Thread:


Alleyway Environment Breakdown #3 - Materials & Shaders

Making Of / 10 March 2021


For the buildings I wanted to explore a workflow I've recently been learning about here and there involve baking out individual masks for modular pieces that can be used over tiling textures to break up repetition without needing unique textures for each piece in the scene.

Starting out I provided each building piece 2 UV sets, one for Texel density, and the other for a unique 0-1 unwrap with the most prominent faces given larger space in the UV. From there it's into Substance Painter for a bake. Using Painter I create 3 User channels and split them between R, G and B and then create masks within each. On export these 3 channels are packed and the buildings ambient occlusion is packed into the Alpha of the texture.

In-engine the material set it starts with the tiling textures and a unique dirt mask made in Designer that is used to create the dirty version of the base texture. Those two are Lerp-ed using the previous building mask and the AO is added in near the end using a AO blend function. At the very end of the shader are some cannibalised sets up from Quixels shaders to add in a detail normal and specular.

As I was learning as I was going there's still plenty more that could be done with this shader/optimisation and I never did get around to utilising the Green or Blue channels. This workflow is definitely one that will be explored deeper in my next project now that I have the basics learnt.

A lot of this workflow was trial and error with experimentation but a good place to start is with this video: https://youtu.be/SybpVltvwN0https://youtu.be/EXPi4lWlkn4


I would say about 90% of tiling textures used were sourced from Quixel, with one or two taken from Substance Source and myself making two from scratch when I couldn't find the necessary equivalent anywhere else.

Using Quixel textures didn't stop at me simply importing them to Unreal and that was it but instead typically taking them into Substance Designer to dirty up and make the shapes more pronounced. I think some results were pretty hit or miss and going into the future I more likely take the time to learn Quixels own Mixer so I can keep the entire process in one place.

Detail Normals

I used one prominent detail normal in this scene quickly made with Designer that can be shaped and tiled independently of the rest of the textures.


Alleyway Environment Breakdown #2 - Pre-Production

Making Of / 09 March 2021

Originally the plan was to set the scene on top of the buildings but that quickly changed after I realised the scale of the project it would need to be.

I start by gathering references into a Miro board (this should stay up for a good while: https://miro.com/app/board/o9J_kvuLQ5s=/) where I can break down images, highlight aspects and mark notes and then carry relevant parts over to my Pureref for when I'm using specific references.

Blockouts done in Blender, I get the shapes, switch between Blender and Unreal as I work out the lighting and then start breaking the scene down after I know what I want including modular aspects and props. I find it important to do it this way because I can constantly be making tweaks and changes.

When it comes to reference gathering the probably most important source I found was in fact Google Earth; it had honestly skipped my mind that was a thing for a good few years now. Google and Pinterest are okay but Google Earth allows you to get unaltered references for buildings and the materials that go into making them as well as see the same make-up for a building across multiple instances.