Hello and hope you have a good day!
I will just give you a brief introduction about myself before we go to the project.
My name is Joakim Tornhill, from Sweden, and to some of you I am also known as “Blender Insight”.
I think I started with 3D and Blender around 10 years ago, which means pretty late in my life since I’m now 54.
The hobby grew and I thought more and more about joining the game industry, leaving my life as an IT consultant. That was not something that was easy to do! It is much harder to get a job in the game industry compared to learning Blender.
So, I decided to push through the only door that existed, by studying game development, getting picked by the industry as an intern, and then getting a job!
I got accepted by “The Game Assembly”, which is one of the biggest (and best) schools in Sweden when it comes to game development. I learned a lot of new stuff. There was a tool called Maya(!)… but we also went through Substance Designer, Houdini (briefly), Photoshop, Unreal Engine, and scripting in HLSL/GLSL and Python. It was modeling, rigging, creating materials, doing real-time shaders, particles and effects. We built several games from scratch and I learned new stuff every day and had so much fun (except the part called “rigging”—not for me)!
My path finally landed somewhere between an artist and a developer as a Technical Artist and right now I’m living my dream! I’m working in Denmark on a learning game for kids and younger teens called “Word Tag” (yes, you can download it for free on your smartphones).
I will also throw in a very big thank you to all of you who helped me make this possible by buying my courses on Udemy and supporting me financially in other ways during my period of studying. Without that, I would not have been able to make this change in my life’s direction!
My church project - The initial thoughts!
If you have not guessed it by now, the church comes from the Netflix series “Midnight Mass”. I really liked that show, but loved the church!
For those of you who still don’t know how the church looks, here is a link to IMDB for reference (but see the series if you can).
Normally when I do a 3D piece, I use something already existing as a reference and try to keep very close to that. In most cases, it is just a 2D image I see and then get an urge to do. I have to Google a lot of reference images after that selection is made to find out how it would look in 3D from all angles.
My favorite spot to find “my kind of images” is on “Mellie’s Welt der Fotografie” where she has taken photographs of old buildings and things and enhanced them a bit in Photoshop. But I also have a lot of similar web pages and FB groups to go through when my creativity needs a new boost.
However, this time I fell in love with something that was in a film. It already had documentation on most angles, close-ups, distance shots, and so on. It was also a good mix of big and small items.
The reason I just shouted “yes!” to myself was the decay of the church. I love to do procedural materials and here was a dream project!
I also decided that this would be my “never-ending project”. Normally there is always more to do and often I leave a project when I’m able to render an image—but that means it still has millions of polygons, huge node trees of procedural material, bad naming standards, a few things made badly compared to how they would have been made if I had done my best, and so on.
In short, projects look good on the surface but would be impossible to work on for both others and myself if I open them up 6 months later.
This is the state the church is in right now! I really need to make some materials better and lower the number of polygons! This is not the state it will be in the end hopefully. I will try to add foliage and an outdoor scene, do night scenes, bake the material, reduce the amount of polygons, bake normals from high to low poly, do some Substance materials to compare, add more things and details and it will be, as you guessed… a never-ending story.
When I start with something like this, I do not have any blueprints. That means that I have the hardest part right from the start… to find the correct scale on everything.
It is really a pain and a lot of eyeballing and often a massive amount of iterations to get all the items fit together.
It’s very important that the scale is correct, not only for the model, but also for things like adding materials or using particles and arrays. In this piece, I decided that the average human was 1.75, that the height where you sit on a bench is about 40 cm, that the doors should be about 90 cm in width, and so on. After all the decisions are made, it is comparing known stuff to get all the other measurements.
The next step is to just use the default cube and a bunch of other cubes as well, until you have covered most of it. It is really at this stage that I should start to name things, but I rarely do and before I know it I have a huge pile of cubes!
Don’t understand why people remove those cubes anyway. They can be used for all kinds of things.
Depending on what I’m doing, I have different ways to attack the task. For buildings, it is a lot of boolean operations, so a lot of cubes that go through each other and mark windows, doors, chimneys, and towers. It will look something like this:
To not get too bored, I do a few items with slightly higher levels of detail, so I can get a feeling for how they could look.
Then I just keep adding cubes and stuff, so I really see that everything matches in a good way.
When most items are placed, I’ll use the placeholders from the blocking stage as starting points, so I get the outer frame and then start to add details.
It doesn’t have to be perfect. It is more to get that personal boost that it actually can be what you’re aiming for. With just a few enhancements, you can reach that point and then I’m about here in my progress.
From this point all is easy!
I have done all modifications needed to get the scale correct, like lowered the arch in the front, and I can concentrate on all the nice details to put in.
I start to do clay renders using the “workbench engine” and compare those with the reference image. This is both to see if I left something out by mistake, but also to get good camera settings. I often add some shadows and cavities to make the details clearer in the renders.
Since I believe a few of you will ask about the tiles on the roof, I will give a short explanation. These are particles made the old-fashioned way without geometric nodes.
I had an internal discussion in my head about whether I should do it as a material or if I really should create physical objects for it... and to add realism, I went for physical objects.
Each tile is low poly of course, but still, they have a few additional faces because they also use the “Displace” modifier to look a bit different on each placement.
You have to think that this is for an image, so I don’t care if it takes memory or if I use a few extra polygons.
Then I had to place them well, and the easiest way was to divide the base for the roof by the amount of tiles I wanted to use, so it looks like this:
Then I match the number of particles with the number of faces, do some jitter and rotation...and it is done and looks great!
The next natural step will be to create materials. This will, in my case, be procedural. It is only on very rare occasions that I go to any image bank and fetch something. I like to do my stuff from scratch!
I can handle Substance Designer as well as the Shader editor in Blender, but the lazy part of my brain keeps me in Blender, because I often have a lot of interaction between creating material and changing the model and then it’s simply easier for me to stay put.
You see, I want the object to guide the material and then I often need to change a bevel, add a subdivision or tweak some other modifier.
This workflow often makes the unwrapping of a UV-map unnecessary and instead I use the “Generated” or “Object” output. Of course, there will always be some exceptions, but 90% is without guidance from the UV output.
When I later bake the material, I just unwrap the UV with “Lightmap Pack” on the objects and perfect images will be created so the model can be used in other engines and without the huge node tree that I created for a material.
Creating materials in Cycles has one big disadvantage. It takes time to see what you are doing! Often you have to render to see if the result is as expected. Now you almost regret that you selected this path instead of something fast like Substance Designer.
To beat this feeling, I have created a workflow to ease things up. While rendering, I often open another Blender in parallel where I make all those small objects that I need. In this case, it was things like candles, lamps, and the round window.
The computer does not complain that you have two Blenders working simultaneously, so it is a very efficient and nice way to do what has to be done. Then it’s just necessary to append or link the objects to your main project.
Now to the practical part. I start by searching for an HDRI that will suit the scene and my needs. This is a very important step to do before you add a lot of materials because the light does a lot to the end result!
Then you select the object you would like to add a material to and mentally run through all those layers that you would need to create to make it look real. In most cases, it is some different colors and a certain type of structure, but it is also smudge, aging, how it has been used (where do people touch it most often), and a lot of other parameters.
I will give an example.
Example of material - the floor
The final floor of the church looks like this if I remove the walls and roof (and this is the baked result, so the black parts are where the benches stand):
As you can see, there is no repetition of tiles, colors or anything since it was made procedurally before it was baked into PBR images. I know I can increase the roughness, but I like to have some reflections when playing with light later on.
What have I thought of to create this? How many “layers” do you think there are?
Of course, we have the tiles. They should not be of equal length or ordered nicely, so that was the first thing. I needed a base floor and that was my start.
As most users do, I started with a brick texture for the floor. The problem now was to make some kind of offset. You might think to yourself, Google some tutorials on YouTube or just use something saved from “before”. I did that. I often have small material groups and puzzle them together.
Between the texture coordinate and the brick texture, I added my group “Offset”, which looks like this:
…very few nodes, but they do the trick.
Together with the brick texture (and I also use a rotation to reorient the planks...it’s the easiest way to do it), you get this little neat setup where you can control the scale as you wish:
Still not many nodes. Just around 10 in total and we already have the base.
Now I only have to think about the following:
- Base variation of colors for each floor tile.
- Lines and grain in the tree since it is wood. Both a base and some detailed stuff.
- Variable width on the edges, so it doesn't look perfect.
- Variable visibility on the edges to make uneven wear and tear.
- Soft bump around the edges to make the floor go up just a tiny bit near edges.
- Darker noise in the direction of the tiles, so you can feel the wear and age.
- Lighter color/noise near edges following the tiles to make more wear there since they go up a small amount.
- Variable smudge.
- Some tiny amount of dust.
In the end, I had this little node tree for the floor:
..that contains these sub groups;
...and that is all there is to it.
It might look overwhelming, and it is of course, but the important thing is to group every “functional” part of the material. Then the rest of the nodes are more or less only to tweak the input to those groups.
In this material, I could have grouped it even more, since I do the edge wear in the main group, for instance. That is a typical function that would be well suited to have in a subgroup for later use when I do a floor next time.
The above statement is the most important, so by grouping nodes and giving them a proper name, you can reuse them the next time you do similar stuff and it will go rather fast to get it all together when you are on a level where you really know what you are doing.
Since the scene is a church, I thought it was important to get some decent light in the scene. For the outside, I used an HDRI and a sun lamp, but those lights do not add much to the inside.
Fortunately, I had a group of nodes, as I always have, that created a nice glass with fake caustics with rainbow colors and light… the complete thing.
It’s the same glass I teach people to build in my Udemy material course “Become a Material Guru in Blender”.
Basically, it’s about turning shadow into light by using the “Light Path” node. I can tweak the light with color, distance for the caustics to appear, and rather easily make something that looks nice.
I only use a few inputs and it can look like this:
The total “glass-shader” is then hiding in the group, but I do not have to bother about it since I have already created it way back. If you want a peek, it has this appearance:
Then I of course needed regular light, so I added more area lights outside from one side and a lot of smaller point lamps for the lamps inside and the candles. The flame on a candle is just emission. You can do it better with volume, but I thought it was enough here with emission since the flames should be rather distant from the camera.
The final result made beautiful shadows from the lamps, green light from the church windows and I also got this little rainbow border that spices things up a bit. Later, I could add God rays to the images, but for now this is where I am.
Here are a few examples of how it could look:
A few images of the final result
As I have written in the beginning, this church is still not resting and finished as a project. I will continue to tweak things and I currently have no clue how the final result will look. But for those of you who want to see where I am at the moment, I have attached a few images of the result so far.
About the author