Get the latest Blender, older versions, or experimental builds.
Stay up-to-date with the new features in the latest Blender releases.
Access production assets and knowledge from the open movies.
Documentation on the usage and features in Blender.
Latest development updates, by Blender developers.
Guidelines, release notes and development docs.
A platform to collect and share results of the Blender Benchmark.
The yearly event that brings the community together.
Support core development with a monthly contribution.
Perform a single donation with more payment options available.
The Shader Editor
Colors, Values & Vectors
Vectors and Pixels
Geometric Dependency - Context Sensitivity
Generating PBR Maps
Blending & Masking
Walls (Chapter 2+)
Wood (Chapter 3+)
Dynamic Walls (Chapter 4+)
Wooden Boards (Chapter 5+)
Fire (Chapter 6+)
Rainy Window (Chapter 6+)
You can join Blender Studio for €11.50/month and get access to all of our training & film content
Aug. 21st, 2020
Get the example file including the different shader variations here: floor_boards-example.blend
Join to comment publicly.
That is being such a journey for me... spent 3 to 4 days only on this class trying to digest, apply and comprehend all the concepts here worked. Hardest part for me is mixing the height maps on the right order and positioning them correctly. Map Range Node is good but also difficult to grasp. Thank you Simon for sharing this deep knowledge with us!
Thanks for updating and sharing!
This series helps me a lot with the understanding of not only the shader system in Blender but all the other shader principles covered in the remain 3D software such as UE, MAYA, Unity, 3DS, etc.
"the first thing again is... i'm just deleting the material" almost gave me a heart attack :v
For some reason at (30:25) the hide value option is missing in my node interface. Thank you for making this series, I've really struggled with understanding the node trees and this has helped a ton!
*@Jonathan DelleCave* Thank you for pointing this out! This is a feature that is new in Blender 2.90. I did not realize this at the time of recording, but luckily Blender 2.90 is going to be released later today.
I'm glad the course is helping you!
I found it's easier to use bump for the bolts and the variation. this tutorial cover a lot of thing, thanks again!
Oof. This is quite complicated. I have a question though. How did you learn all that? I mean you are teaching us. But someone must've taught you in some way. Or are you reading the Blender Docs. I'm just curious on how you were able to get all this knowledge.
*@Kevin Tatar* I mostly figured things out on my own. A lot of this comes from math education and then trying to apply it to creating patterns.
I like to figure things out myself but also when I started doing this sort of things with shader nodes the resources were really sparse. Now there is more, but as far as I know there still is no other comprehensive course for it. That's why I am making this series.
Hello, my UV doesn't look like yours. I use the deafult cube and only scale the Z.
edit: oh it should be a plane
*@Huân Lê-Vương* Yes, I'm using a plane, but you can also use a cube and align the UVs accordingly
Hello, how can I see the subdivision overlay at 33:51?
*@Huân Lê-Vương* There I simply went into edit mode. If you want to be able to see the wireframe in object mode you can also activate it as a viewport overlay.
*@Simon Thommes* thanks.
So I'm still playing around with this shader. Maybe off topic but at 8:49 is it possible to Snap the value to a step of 1 then 2 then 3 then 4... procedurally?
The math is "n(n+1)/2=1+2+3+...+n" but can't find a way to do that.
Edit: what I mean is: https://photos.app.goo.gl/z93isVnLYBBMmwyT9
*@Huân Lê-Vương* Interesting question! The problem with the math is, that you first have to define, where the coordinates are split into cells.
To be able to do that, you have to invert the equation: https://math.stackexchange.com/questions/2041988/how-to-get-inverse-of-formula-for-sum-of-integers-from-1-to-n/2041994
Then you can apply this operation to the coordinate and snap with an increment of 1: https://cloud.blender.org/p/procedural-shading/5f56001df17d08c945d84c71
*@Simon Thommes* Thanks! I have to admit that I've been addicted to procedural shader and math stuffs since I watched your tutorials!
*@Huân Lê-Vương* Awesome to hear!
*@Simon Thommes* So I tried to create a cell system based on the math (1x2x3 / 2x3x4).
As we use a square root operation, the value is shifting a bit when I try to create a heigth map for the woods.
Is there anyway to "compensate" that?
This is the X value of the vector before fraction operation:
x: the separated x from the generated coordinate.
I tried to "inverse" that.
*@Huân Lê-Vương* You have to build your new coordinate value in a way that it is linear in each segment. For example by using the initial coordinate and shifting and scaling it for each cell accordingly:
*@Simon Thommes* Thanks for you reply. I can't reach the link though.
*@Huân Lê-Vương* I fixed the link, it should work now
I was trying to do the first part on my own, and I came up with this method to divide the floor into squares, is there a problem with doing it this way?
It's basically just the same method yes? though not quite as compact
*@kroneborge* Awesome! That is totally valid. It is essentially the same method. I was doing it this way as well when we had very limited functionality on the vector math node.
I would recommend to still get used to the way of using vector math nodes though. Having a more compact node setup makes you node-tree much more readable and also flexible for quick changes.
Hi Simon, this is a bit weird
It looks fine when i use material preview, but as soon as i switch to cycles this happens
Can you tell me what do i need to fix? Thank you
*@victor p* As far as I can tell this might unfortunately be a restriction due to the complexity of the material. Can you tell me what graphics card you are using for rendering? And do you have the same issue when trying to render the resulting shader from this video that is linked in the description? I recorded the video using a GTX 1080.
*@Simon Thommes* the floorboard example you attach on the description works fine in my computer
i also using gtx 1080. Any idea why? Here is the blendfile if you have time to take a look at it
*@Simon Thommes* I found the problem, its in the uv map node, if i uncheck the "from instancer" then the brick pattern appear.
*@victor p* Ah, interesting. Good to hear you figured it out!
*@Simon Thommes* Thank you
I tried this shader on my own , I have a qusetion. I want to edge emphasize so i made geometry pointiness and map range node(from min:0.5, from max: 0.6) what you use in example2.
but It see just black (i see in cycle) so i think displaced object can't apply pointiness. Is it correct?
*@Aron* Correct, the calculation of the pointiness is done before the displacement and thus it does not affect it unfortunately. For emphasizing edges in the shader you would have to create a map of the edges as another pass youself.
Hi Simon, would it be possible for you to create a workflow example video covering the stone walls? I looked at the example file and the shader you created for the stone part of the walls is a bit overwhelming for me. I'd really appreciate it if you could explain it. Thanks!
@tredeau It is not planned to add more workflow examples for this scene. If you take a closer look, you can see that the nodetree for the stone walls is very similar to the wooden floor boards, that I explain in this video.
In fact the only thing that is really different is the rock texture itself. The main part of the shader is the tile pattern, that is the same as what I explain in here.
There's a point I'm still confused about and maybe you can enlighten me. I fail to understand, around 41min45 and onwards, how adding 1 prevents values from going below zero. When you say the values are "centered around 0" does this also imply they're necessarily locked between -1 and +1 (in which case I get how adding 1 centers them around 1), but if that's so I must have missed a decisive information because I don't get why they're locked between -1 and +1. Sorry for the probably very basic question.
@L-L The 'never below 0' was a bit of a slip on my part. If the negative values are scaled up enough, adding 1 will obviously not make them positive. The main takeaway to focus on here though is not to necessarily make all values positive, but to center them around one after the multiplication. That way, multiplying with 0 will make this tilt operation have also 0 impact on the height map.
@Simon Thommes Few I'm actually releaved because I've looked for all the possible ways that adding 1 would prevent having negative values and it took me quite a while and I still couldn't figure it out it was driving me crazy ! I totally get how centering around 1 is useful afterward, thanks for taking the time to answer.
When a shader grows to this size, does the rendering time take a big enough hit that you would get better response by using a texture or, using a texture and baking? In Eevee or Cycles. Thanks
@Wayne Batchelor Yea, that's a tricky question. It really depends on what you are optimizing for, your specific requirements in terms of resolution and quality, the configuration hardware you are working with.
Generally: Node-based shaders are heavier on the rendertime (CPU/GPU) and baked textures are heavier on the memory usage.
But, of course, both methods have dis-/advantages apart from that.
There is no 'fits all' solution for this.
Something weird is happening to me...I reache dthe point where I created the high map for the boards, in the shader preview, that works like eevee if I got it correctly, look fine...but in cycles looks completely different
(NOTE: I'm using 3.3) When performing the Round-to-Modulo operation at about the 11-minute mark, I was experimenting with different values and, for a reason I cannot figure out, it does not work with 7 (or, it seems, any multiples of 7, or any number that rounds to a multiple of 7). Giving a value of 7 results in 8 rows being shaded with the values 0, 1, 2, 3, 4, 5, 6, 7 and then looping down to 1, 2, 3, 4, 5, 6, 7, and then again restarting at 1. It seems to me it shouldn't reach a value of 7 at all and should loop back to 0, not 1.
@Geoffrey T. Blackwell As I experiment with this more, it makes less and less sense. When the "Width" value is sufficiently small for there to be dozens of rows, the looping pattern eventually breaks down with EVERY value I've tried (except zero, which does return a completely black surface).
@Geoffrey T. Blackwell Hm, for me this is working totally fine. The behaviour you're discribing sound a lot like a floating point precission issue to me though. When I set the snapping value to not exactly 1, but 0.9999 instead, I end up with the same result.
Try using the Floor operation instead or try setting the snapping value to slightly above 1, like 1.0001
I'm so confused at around 37:00. In the video the displacement works well (also in the example file it works). But in my blend file, the displacement shifts up and down drastically and I just can't get it right. Big thx if someone replies! Here's my blend file (the shader named "wooden board" is the one that requires help): https://drive.google.com/file/d/1-JpHMJj2twouuSaqqOXbTH3DJ9a8CUhw/view?usp=sharing
@Eric need help desperately DX