The classic 2×4 brick.

If you have read part 2, you might think, well that minifigure looks kinda nice and all, but what about good ol‘ classic bricks? And what happens if we go even closer, so we can see all the micro details?

Taking it to the next level

Please pardon me if my blog posts are not completely straightforward. Part 1 is a bit more theoretical and part 2 more practical. In this 3rd part, I want to revisit everything and see if we can improve upon it. This means that there might be some overlap, but since I am learning at the same time as I am typing this, I hope that this is alright.

Angles matter

We already know how important the viewing angle and the light position is. While inspecting classic LEGO bricks more closely, I took some pictures which show the fresnel phenomenon and light interaction in general quite impressively.

This is the very same brick from 4 different angles

Did I nail it?

CG vs photography – brick on side

CG vs photography – brick upside

This is the final result. While building the shader, I constantly switched between the two photographs and I tried to match both of them at the same time as closely as possible. This was a good quality check for myself, to see if the shader would hold up with different viewing angles.

LEGO Shader Breakdown

The brick we are looking at is from my parents’ attic which I used to play with in the mid-90s. What we see here is an honest example of many many years of wear and what happens when a kid is not too cautious with their toys. Everything annotated below is what we already discussed in one of the previous blog posts. Let’s stack up all these effects one after another. While doing so there will be some new discoveries/techniques in it that weren’t in the previous posts. We will take a closer look at those findings.

Since I got asked quite a lot what my textures look like, there is now always the texture map right next to it. I also included links where I got the textures from – whenever I didn’t create them myself. This should allow you to to build your own LEGO shader.

What we discovered so far

Red Diffuse Brick

BRDF: GGX vs Beckmann

GGX is known for its hot core with a long tail. It got quite popular in recent years – especially for metals. While being more expensive to calculate, the added fidelity is easily worth it. Looking at our photo reference, the hot specular highlight with its long falloff is quite apparent.



Smudge and Fingerprints as Roughness Map

This has been covered in part 2. The tricky part here is to grade the roughness map, so it has an overall very low value but has still enough contrast to create variety.

🔗 smudge texture – corneliusdammrich
🔗 fingerprint textures –


Even though we use GGX, it feels like there is an additional veeery broad long falloff. The side facing the light is considerably brighter/paler than the stud side. An additional very subtle coating/reflection layer can help to simulate this kind of grease.

overall high roughness value so we don’t create additional highlights.

🔗 grease texture –

Subsurface Scattering Revisited

In part 2, I stated sss would be ‘nice to have’. Let me rephrase this to: ‘SSS is absolutely essential’. Looking at the edges of the brick, we can see the red-yellow color shift quite easily. When comparing the two renderings with and without it, it almost looks like a model change because the edges got so soft. A good quality check is to expose up the reference and the rendering to see if the color shift matches. The sss brings us a big step closer to our photograph.

brick side diffuse
brick upside SSS
exposed up rendering – diffuse vs SSS
brick upside diffuse
brick up SSS
final result – CG SSS vs photography

Displacement vs Bump

I think we all agree that displacements are always better than bump/normal maps in terms of realism. I didn’t really bother with displacement maps yet, because I thought LEGO bricks would be too tiny and it wouldn’t make any real difference. While this might be true for a complete set, looking at our pirate from part 2 again, it becomes clear that, no matter how many bump maps we throw at it, the geometry, especially the silhouette will always look perfect. And yes, LEGO is extremely precise and that’s one of the reasons we love it so much, but it’s not mathematically perfect. The edge wear is the most obvious candidate that would benefit from being displaced since it’s modifying the edge and therefore becomes visible in the silhouette.

a simple noise texture with sparsely spreaded dark areas to simulate scrapes/dents. It might be helpful to mask this to edges with a curvature map.


The unevenness helps to deform our perfectly circular highlights. This is discussed in part 2.

very subtle broad noise texture


micronoise to get rid of the perfect roughness cg look. Also covered in part 2.

highly frequent minute noise

Vertical Stripes

I’m running out of names for all those bump maps, so I decided to call this phenomenon ‘vertical stripes’ Any better suggestions? I was able to take some pictures showing this effect quite drastically. Not exactly sure why certain bricks have it, but with a heavily stretched noise texture this one is easy to mimic.

stretched noise texture masked by a ramp


This is something probably everyone has already seen a million times, but for some reason, I never really bothered with it. However, the more I am inspecting it, the more I love this phenomenon. While scratches on a surface are usually completely random, it looks like they would have a radial flow around hot highlights. That’s because those scratches are in fact tiny cuts into the surface and thus the outer walls inside those cuts catch the most light, creating this illusion. This is especially apparent on metals, but also on our favorite plastic toy.

There are 3 main ingredients to make this work.

  • A lot of very thin, long random lines packed together on a texture
  • No filtering/mipmap whatsoever for the texture (high res)
  • super low bump strength
very dense high resolution fine random lines

Broader/Thicker Scratches

additional variety, as seen in part 2
sparse thick random lines


aaand even more variety, as seen in part 2
heavily graded, cleaned up texture so we only get a few of these deep dents/scrapes

🔗 dents/scrapes/random wear texture – corneliusdammrich


One thing I ignored until now is dust. It seems this is also something that hasn’t been done for the first LEGO movies either. However, for The LEGO Movie 2, it is an important design element/cue for the story and it greatly supports the scenario. On newer bricks, you can actually see the individual dust particles as they settle onto the bricks over time. The only way to recreate this would be to actually simulate particles/curves on our LEGO geometry and render them. This is something I definitely would love to explore at a later stage.

However, looking at our old brick reference again, the dust looks a bit more “baked in”. This can be achieved with shading/textures, I think. Additional tiny hairs/fuzz can help to break up all those little random dust particles/points.

Dust Layer

There are probably multiple ways of implementing this. I think it would make sense to implement this as a separate layered shader. That way we have full independent control over it. If we mask it with a triplanar projection in the Y-axis, we can make sure that the dust only settles on the normales facing upwards. For larger scale sets, we could also mix in an AO as a supporting mask.

dust especially around studs where it’s hard to clean up with your fingers.
accumulated dust around studs, with random sparkles and additional tiny fuzz/hairs

🔗 dust textures –

That One Special Stud

Another little detail is the little circle on top of one stud. Every brick has one of those. I guess this is where the liquid plastic gets injected into the mold? This is something I modeled in.


That’s it for part 3! This post was – again – far longer in the making than I intended it to be. I think the main takeaway here is, that it’s important to get the fundamentals right. I was trying to render big LEGO sets and I just wasn’t completely satisfied. I realized, that I still didn’t know enough about plastic shading to pull off a believable rendering. So I decided to go back to square one and try to nail a single brick to really understand what is going on.

There are still a lot of things I haven’t looked into too much, like slopes, transparent bricks, rubber for tires and cloth for sails/flags. Well, I guess, lots of opportunities for more blog posts to follow smile

10 Replies to “Exploring LEGO Material Part 3

  1. could you post an image of the ending node setup for reference:)
    thanks for the great blogs love them do much!

  2. Hey Stefan, awesome study! It’s definitely a good read and helps a lot in recreating a shader like this. Just like Jonah says: a node setup or values would help even more to fully get the head around the shading. Like SSS values for example: I don’t feel I get it right while I am trying recreating a plastic shader for LEGO.

  3. Great research from you. And thanks for this great adventure on how LEGO sets look and how you replicated it. Please I want to render a lego set, and I want to know in rendering the LEGO figure did you put textures on each piece to get those details or you merged the pieces. I wanted to know wether I have to change the properties for each brick or just an overall shader will do.

  4. Incredible. Any pointers on getting better at this sort of thing? Or is it just keep trying haha. Can’t wait to see what else you create

  5. Hy great work

    are you planning to release the shaders
    i can’t figure this out i am on c4d and redshift

  6. Reading various articles on the Animal Logic website and works by independent 3D Artists Lego Digital, Finding the Bricks Exported from programs like Lego Digital Designer, Studio 2.0 or Mecabricks are not fully optimized for production within Maya. So I wonder what the topology would be more correct or closer to what is being worked on at the cinematographic level? Any comments can be very helpful. Thanks in advance.

    1. Reading various articles on the Animal Logic website and independent works by 3D Artists, I find that the bricks exported from programs like Lego Digital Designer, Studio 2.0 or Mecabricks are not fully optimized for production within Maya. So I wonder what would be the most correct or closest 3D mesh or topology to what is being worked on at the cinematographic level? Any comments can be very helpful. Thanks in advance.

  7. This guy: is using Mecabricks end exports to 3D Studio – his results are quite amazing. So I think Mecabricks’ bricks should be sufficient. Maybe if you talk about blockbuster cinema this might be not sufficient. But I think what matters more is lightning and texture then the level of detail of the bricks.

Leave a Reply

Your email address will not be published. Required fields are marked *