Films Training Blog
Pipeline and Tools Characters
Pipeline and Tools Characters
search Login Join
favorite

Development Fund

Support Blender Core Development with a monthly contribution.

theaters

Blender Studio

The creators who share. Access production content and knowledge from the Open Movies.

code

Blender Developer Blog

Latest news and updates on Blender development.

people

Get Involved

Join the community and help with design, development, docs and more.

bar_chart

Open Data

A platform to collect and display the Blender Benchmark results.

menu_book

Blender Docs

Documentation on Blender's features, tools and API.

Blender Conference

The yearly event that brings together the Blender community in one place.

download

Get Blender

Download the latest Blender version, or try the beta!

Films
Training
Blog
Pipeline and Tools
Characters
Search
Login
Join

Course

Procedural Shading: Fundamentals and Beyond
feed Course Overview
Introduction keyboard_arrow_down
  1. 01

    Introduction

    Free
  2. 02

    Definition

  3. 03

    Content Overview

  4. 04

    The Shader Editor

1: Fundamentals keyboard_arrow_down
  1. 01

    Colors, Values & Vectors

  2. 02

    Vectors and Pixels

  3. 03

    Coordinate Types

  4. 04

    Value Control

2: Procedural Textures keyboard_arrow_down
  1. 01

    Noise Textures

  2. 02

    Shape Control

  3. 03

    Repetition

  4. 04

    Texture Composition

  5. 05

    Space Manipulation

3: Shading Principles keyboard_arrow_down
  1. 01

    PBR

  2. 02

    Geometric Dependency - Context Sensitivity

  3. 03

    Generating PBR Maps

4: Shader Composition keyboard_arrow_down
  1. 01

    Blending & Masking

  2. 02

    Randomization

  3. 03

    Semi-Procedural Workflow

  4. 04

    Volumetric Shaders

5: Modular Setup keyboard_arrow_down
  1. 01

    Parametrization

  2. 02

    Nodegroups

6: Automation keyboard_arrow_down
  1. 01

    Drivers

  2. 02

    Animation

Workflow Examples keyboard_arrow_down
  1. 01

    Walls (Chapter 2+)

  2. 02

    Wood (Chapter 3+)

  3. 03

    Dynamic Walls (Chapter 4+)

  4. 04

    Wooden Boards (Chapter 5+)

  5. 05

    Fire (Chapter 6+)

  6. 06

    Rainy Window (Chapter 6+)

Files & Tools keyboard_arrow_down
  1. insert_drive_file

    Example Scene

    visibility_off
  2. insert_drive_file

    Example Scene - Simplified

    visibility_off
  3. insert_drive_file

    Visualization (Chapter 1-4): Value Graph

    visibility_off
  4. insert_drive_file

    Visualization (Chapter 2-5): Space Origami

    visibility_off
  5. insert_drive_file

    Example Shader (Chapter 3-1): Rock

    visibility_off
  6. insert_drive_file

    Example Shader (Chapter 4-1): Dilapidated Cube Scene

    visibility_off
  7. insert_drive_file

    Example Shader (Chapter 4-3): Image Texture De-Tiling

    visibility_off
  8. insert_drive_file

    Example Shader (Chapter 4-3): Semi-Procedural Fishbones Boards

    visibility_off
  9. insert_drive_file

    Example Shader (Chapter 4-4): Procedural Volumetric Clouds

    visibility_off

Course

Procedural Shading: Fundamentals and Beyond
Introduction keyboard_arrow_down
  1. 01

    Introduction

    Free
  2. 02

    Definition

  3. 03

    Content Overview

  4. 04

    The Shader Editor

1: Fundamentals keyboard_arrow_down
  1. 01

    Colors, Values & Vectors

  2. 02

    Vectors and Pixels

  3. 03

    Coordinate Types

  4. 04

    Value Control

2: Procedural Textures keyboard_arrow_down
  1. 01

    Noise Textures

  2. 02

    Shape Control

  3. 03

    Repetition

  4. 04

    Texture Composition

  5. 05

    Space Manipulation

3: Shading Principles keyboard_arrow_down
  1. 01

    PBR

  2. 02

    Geometric Dependency - Context Sensitivity

  3. 03

    Generating PBR Maps

4: Shader Composition keyboard_arrow_down
  1. 01

    Blending & Masking

  2. 02

    Randomization

  3. 03

    Semi-Procedural Workflow

  4. 04

    Volumetric Shaders

5: Modular Setup keyboard_arrow_down
  1. 01

    Parametrization

  2. 02

    Nodegroups

6: Automation keyboard_arrow_down
  1. 01

    Drivers

  2. 02

    Animation

Workflow Examples keyboard_arrow_down
  1. 01

    Walls (Chapter 2+)

  2. 02

    Wood (Chapter 3+)

  3. 03

    Dynamic Walls (Chapter 4+)

  4. 04

    Wooden Boards (Chapter 5+)

  5. 05

    Fire (Chapter 6+)

  6. 06

    Rainy Window (Chapter 6+)

Files & Tools keyboard_arrow_down
  1. insert_drive_file

    Example Scene

  2. insert_drive_file

    Example Scene - Simplified

    Free
  3. insert_drive_file

    Visualization (Chapter 1-4): Value Graph

  4. insert_drive_file

    Visualization (Chapter 2-5): Space Origami

  5. insert_drive_file

    Example Shader (Chapter 3-1): Rock

  6. insert_drive_file

    Example Shader (Chapter 4-1): Dilapidated Cube Scene

  7. insert_drive_file

    Example Shader (Chapter 4-3): Image Texture De-Tiling

  8. insert_drive_file

    Example Shader (Chapter 4-3): Semi-Procedural Fishbones Boards

  9. insert_drive_file

    Example Shader (Chapter 4-4): Procedural Volumetric Clouds

You need to login to view this content

You can join Blender Studio for €11.50/month and get access to all of our training & film content instantly!

Login Join Blender Studio

Workflow Examples

Wooden Boards (Chapter 5+)

21st August 2020

info License: CC-BY
flag Report Problem

Published by

Simon Thommes

Get the example file including the different shader variations here: floor_boards-example.blend

44 Comments

Join to comment publicly.

Julio Cargnin Pereira

5th May 2021 - 16:12

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!

StephenSun

24th August 2020 - 04:45

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.

Huân Lê-Vương

29th August 2020 - 04:42

"the first thing again is... i'm just deleting the material" almost gave me a heart attack :v

Jonathan DelleCave

30th August 2020 - 13:56

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!

Simon Thommes

31st August 2020 - 10:49

*@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!

Huân Lê-Vương

4th September 2020 - 05:48

I found it's easier to use bump for the bolts and the variation. this tutorial cover a lot of thing, thanks again!

Kevin Tatar

27th September 2020 - 16:36

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.

Simon Thommes

28th September 2020 - 10:35

*@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.

Huân Lê-Vương

29th August 2020 - 05:24

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

Simon Thommes

31st August 2020 - 10:31

*@Huân Lê-Vương* Yes, I'm using a plane, but you can also use a cube and align the UVs accordingly

Huân Lê-Vương

31st August 2020 - 07:15

Hello, how can I see the subdivision overlay at 33:51?

Simon Thommes

31st August 2020 - 10:33

*@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.

Huân Lê-Vương

1st September 2020 - 05:48

*@Simon Thommes* thanks.

Huân Lê-Vương

6th September 2020 - 16:43

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.

Huân Lê-Vương

7th September 2020 - 03:02

Edit: what I mean is: https://photos.app.goo.gl/z93isVnLYBBMmwyT9

Show more replies

Simon Thommes

7th September 2020 - 11:44

*@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

Huân Lê-Vương

8th September 2020 - 11:29

*@Simon Thommes* Thanks! I have to admit that I've been addicted to procedural shader and math stuffs since I watched your tutorials!

Simon Thommes

8th September 2020 - 15:52

*@Huân Lê-Vương* Awesome to hear!

Huân Lê-Vương

9th September 2020 - 13:25

*@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?

https://photos.app.goo.gl/aBU7pPT51Rd9axL86

Huân Lê-Vương

9th September 2020 - 13:35

This is the X value of the vector before fraction operation:

X=sqrt[x*n(n+1)+1/4] -1/2

x: the separated x from the generated coordinate.

I tried to "inverse" that.

Simon Thommes

9th September 2020 - 14:32

*@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: https://cloud.blender.org/p/procedural-shading/5f58c924b85c2deba4fb2a47

Huân Lê-Vương

9th September 2020 - 14:36

*@Simon Thommes* Thanks for you reply. I can't reach the link though.

Simon Thommes

9th September 2020 - 14:39

*@Huân Lê-Vương* I fixed the link, it should work now

kroneborge

3rd October 2020 - 19:36

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

https://photos.app.goo.gl/HAjffLoDr713pXMw9

Simon Thommes

5th October 2020 - 13:00

*@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.

victor p

13th October 2020 - 12:39

Hi Simon, this is a bit weird

https://drive.google.com/file/d/1qrC2QUR1H6vn8QiOU4bgk3SQn1CEnuuq/view?usp=sharing

It looks fine when i use material preview, but as soon as i switch to cycles this happens

https://drive.google.com/file/d/1aqh7pbo2qVK8wELWHHpM9uWmtyJuruc9/view?usp=sharing

Can you tell me what do i need to fix? Thank you

Simon Thommes

13th October 2020 - 18:33

*@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.

victor p

14th October 2020 - 06:29

*@Simon Thommes* the floorboard example you attach on the description works fine in my computer

https://drive.google.com/file/d/1aE69vHxq1DQhO6ACah8uiUl3-VTpjFSc/view?usp=sharing

i also using gtx 1080. Any idea why? Here is the blendfile if you have time to take a look at it

https://drive.google.com/file/d/1H6zCRmCxyJlulWxMy_01ALK7T3oHmb36/view?usp=sharing

victor p

14th October 2020 - 12:38

*@Simon Thommes* I found the problem, its in the uv map node, if i uncheck the "from instancer" then the brick pattern appear.

Simon Thommes

14th October 2020 - 14:36

*@victor p* Ah, interesting. Good to hear you figured it out!

victor p

14th October 2020 - 15:10

*@Simon Thommes* Thank you

Aron

19th October 2020 - 19:18

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?

Simon Thommes

20th October 2020 - 13:02

*@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.

tredeau

22nd November 2020 - 04:56

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!

Simon Thommes

4th January 2021 - 11:06

@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.

L-L

20th October 2021 - 17:48

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.

Simon Thommes

24th October 2021 - 12:37

@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.

L-L

24th October 2021 - 18:16

@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.

Wayne Batchelor

27th January 2022 - 21:42

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

Simon Thommes

28th January 2022 - 12:41

@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.

Lorenzo Spinola

5th September 2022 - 16:03

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

Geoffrey T. Blackwell

2nd October 2022 - 18:13

(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

2nd October 2022 - 18:28

@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).

Simon Thommes

3rd October 2022 - 10:55

@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

Blender Studio

The Creators Who Share.

Facebook Logo Twitter Logo YouTube Logo
  • Films
  • Blog
  • Training
Pipeline and Tools
  • Cloud Rig
  • Blender Kitsu
  • Contact Sheet Add-on
  • Blender Purge
  • Blender Cloud Services
Characters
  • Einar
  • Security Bot
  • Huginn
  • Pack Bot
Studio
  • Terms & Conditions
  • Privacy Policy
  • Contact
  • Remixing Music
  • Blender.org
Loading...