Very timely! With displacement work so well for nanite, AND quixel ORD channels having displacement, I'm doing all kinds of heavily displaced materials. This is a super-useful (and pretty quick) technique for breaking up repetition at distance while keeping crazy detail up close. Thanks again!
Awesome!! IMO, definitely one of the BEST Texture Bombing methods I've seen so far! Question: Based on your experience, I would be interested in knowing which Texture Bombing Method (say the 5 most common?) works best with which types of Textures. For example, I think I read that Cell Bombing works best with granular-type textures (fine stone, dirt, cement, etc??.) and others work best for more defined textures (Ground Twigs/Leaves textures), etc. Thanks again for the video!
I use cell bombing for any organic texture. rock, grass, ground with twigs, or anything. But in case of textures that have pattern, like brick or tiled wood, the bombing methods don't work correctly.
Алексей, привет! Прикольно встретить здесь своего приятеля. Такого рода инструменты есть много где , в короне например, но для анриала урок весьма полезный.
Thank you for posting the video! I have a question. Is there a way to reduce Texture Repetition for textures with patterns (e.g. bricks or tiled wood)? If there is, I would like to ask if you can make a video!
The simplest and quickest method would be using some sort of macro variation solution. For example you can blend a texture over a brick wall at different scales. Something like that uses multiple texture samples though. You can achieve a similar result by using a texture that has finer shapes and just scaling it larger. You just have to be careful with how large you scale it as to not make it a blob 😂 Another great method for things that have a pattern is using a mask that breaks the surface up into sections. This technique has been commonly used on wood floors. So imagine you had a 6x6 meter brick wall texture. Create a mask of that texture that has been tiled at least once, if not twice. Then randomly select different bricks to mask by each channel. The final result is a packed texture that selects 3 groups (4 if you use the alpha) that can be used to shift the colors. Since the mask is scaled 2 or 3 times larger in order to be the same scale, you end up with a really nice break up over a large area. This is similar to an ID mask, but since it’s based on your tiling texture it has to be created manually. Substance Design uses techniques like this to create things like brick walls, but if you’re using much more organic image based or photogrammetry based textures then you’ll need to create it manually. Of course you can always combine methods. For example with these two you could actually blend a macro type texture with the random brick selection mask so that you only needed a single texture to accomplish both. Sacrifices normally have to be made to combine techniques though. There are many techniques for things like this. Everything has pros and cons and it just depends on your needs. A lot of the neat solutions like this are sort of “tricks of the trade” things that can be nearly impossible to find online. For example, imagine a beach that needs textured. Extremely complex surface and has very little to cover it. You can capture screen shots of beaches from drone images. Then create a composition using them in photoshop that fits the exact beach area in your map. So you would take a top down screenshot of the map, aligning your beach composition to its location. This is a super high level approach that tackles multiple problems at the same time. For example, it not only looks very real because it has details and patterns captured from real life, but it solves distance scale macro variation. Then the details can be broken up to create masks that can be packed into a texture. Then that can be used to place different types of sand. Combine this with a traditional macro texturing solution and a technique like the one shown in this video and you can create something that’s a true cut above. Combine this with techniques such as displacement, decals and scattering content using pcg…with the same masks…and you have essentially reached the pinnacle of texturing a beach. 🤣 I sort of went on a tangent here, but hopefully this helps someone 🙂
@@anthonymerle310 First of all, thank you for your reply! Other than the first solution you mentioned, the vertex painting technique, I haven't had the chance to try the others yet, so I'll need to look for videos or blog posts to help me understand them better.
@@youngsiks5434Glad I can help! I pretty much never respond to comments. No idea what compelled me this time. Vertex painting is a good solution sometimes. It depends though. For example, the granularity of your painting mask is dependent on how many vertices the model has. It can be a nice way to save on texture memory since you can store 4 masks into the mesh itself. One caveat is in order to have good blending using a height map might be needed. Not always though. For example you could use one of the channels for one of the textures and multiply by a constant or run through a power node or cheap contrast. Using vertex painting requires you to actually paint it in a believable way, although it does give really good control. However, painting a front house facade vs the side of a 6 story building vs a few city blocks def makes a difference. For example, aside from time, the more content it is or the larger the mesh surface has to be the more geometry you might need. I think you’ll also find that manually painting something that feels random is pretty hard. Vertex painting gives you basic masks that only provide what you paint. Using an actual texture allows you to create a lot of potential variations. Of course you can always use a combination of the techniques. The textures in your materials are what will dictate performance, for the most part though. Storing vertex colors is pretty cheap. I don’t think I’ve seen anyone use vertex painting for subtle variations to remove tiling. I’ve pretty much only seen it used to combine different surfaces. One idea you could try is using a macro texture for a brick wall….captured from a real brick wall. Just remove defining details. Then blend it with a brick texture. As you distance yourself from it maybe decrease contrast of the main base color texture, allowing the macro to mostly take over. To take it one step further you could do a high pass filter over the original to extract the most important details. Then with that information and the original texture you could create a distance blend version of it. So in the end you would have your original base color, the distance blend version and then the macro created from an actual wall image. I know I keep using a wall as the example, but the same applies to any surface.
@@anthonymerle310 Ah! I'm still a student, so I'm not very familiar with the various techniques within the engine, but thank you for sharing this information! I'll look into distance blending and study more about it! Thank you once again for taking the time to respond!
I didn't exactly understand the question, but I think what you're talking about. If you increase the displacement magnitude, some areas may look bad, especially in the black areas of the alpha channel of the cell texture. I hide it by decreasing the displacement magnitude.
In short: very little, the Texture Variation uses noise instead of cell & it blends the "visible lines" based on height rather than the same texture alone. The cost is similar but the result is cell can give more variation (without looking as broken). There is a little more to it, but that's the basics.
Any notes on the performance? I noticed it samples the texture at least twice as much but I would be interested in the precise calculations and performance hits on a big terrain. It also needs to sample that voronoi texture but that doesnt have to have a huge resolution, right?
The most important thing is the increasing sample count, I think. I haven't gone deep into the exact performance calculations though. When using with landscape material, I'd use it only on layers where the repetition is really obvious and can't be hidden by foliage and stuff.
@@johanparada you don't have to apply it to a landscape material node. You should apply it to each texture in the material. And it's the same as in the video.
You add an offset from the Voronoi texture, which has a fixed size, so I think it would repeat if the map is larger than the area covered by the Voronoi texture.
@@gone41674 the voronoi texture is also tiling. so it can go on forever. just make sure the relation between the texture size and the cell size is reasonable. like I mentioned in the considerations section of the video
@@HojDee Yes, I’m aware that the Voronoi texture is tiled, which is the problem. Tiling causes repetition, since the UV offset is read from the Voronoi texture, the final texture will also repeat. This repetition will occur if the world size exceeds the coverage of the Voronoi texture.
@@gone41674 because of the random offset, rotation, and scale, it can't be seen. At the beginning of the video I showcase an example, the Voronoi texture has tile 10 times. I don't see any repetition there
@@tomastoegel4973 in the end, I made it a material function. It can be used in any material inside unreal engine. For 3ds max, the principles are the same I guess. If you're familiar with its material system you should be able to create it
hi! get it here: www.hojdee.com/courses-details/free-downloads and here's the tutorial on how to get it, if you run into any issues: ua-cam.com/video/8yRxmuY9If4/v-deo.htmlsi=770df6CkfG-jx-Cj
6:27 Why divide? Multiplication could be used to achieve the same result but with much cheaper instruction cost. Divide should be avoided where it's possible.
@@SirRebonack multiply is cheaper, you're correct. But with modern hardware, the difference is not that significant. If you wanna make it really optimized though, you should go with multiply for sure.
@@nikoheino3927 The shader compiler cannot optimize this division because it is based on dynamic data (sampled texture). Division is fine to use on parameter values, which are able to be optimized. Division is significantly more expensive than multiplication.
Hi, when i try to sign up on your web site it just wount send me the verification link to the mail (gmail), also your discord links are expired(on profile and in descriptions too).
the site is having temporary issues. you can get it from my discord channel. in the assets section. I checked the discord link in the description of this video. it works
Very timely! With displacement work so well for nanite, AND quixel ORD channels having displacement, I'm doing all kinds of heavily displaced materials. This is a super-useful (and pretty quick) technique for breaking up repetition at distance while keeping crazy detail up close. Thanks again!
@@inwardocean glad to help :)
Be careful of doing this too much, as it will start to affect performance
Bro this is incredible. You have no idea for how long i have been trying to find this.
glad I could help
Thank you so much for making this video!
Your content is great and the way you explain things is so understandable.
@@galravid-tal8517 glad you liked it :)
Fantastic work! Recommending your channel to my discord.
@@rileyb3d thanks man! I appreciate it :)
You are absolutely killing it bruh, I learned a lot from you
glad to hear that man :)
best tutorial by far
thank you.
glad you liked it :)
Excellent bit of knowledge. Thanks a lot for sharing it!
@@alltradesjack6594 glad you liked it man :)
FINALLY! I’ve been trying to do something like this for AGES!
@@loganasaurusrex8246 glad I could help :)
Awesome!! IMO, definitely one of the BEST Texture Bombing methods I've seen so far!
Question: Based on your experience, I would be interested in knowing which Texture Bombing Method (say the 5 most common?) works best with which types of Textures.
For example, I think I read that Cell Bombing works best with granular-type textures (fine stone, dirt, cement, etc??.) and others work best for more defined textures (Ground Twigs/Leaves textures), etc.
Thanks again for the video!
I use cell bombing for any organic texture. rock, grass, ground with twigs, or anything.
But in case of textures that have pattern, like brick or tiled wood, the bombing methods don't work correctly.
@@HojDee - thanks. Would be nice if Epic eventually makes it a built-in Node!
Thanks! This is a great explanation. Looking forward to de-tile my landscapes :)
glad it helped :)
Awesome! Will keep it when I create a new environment :)
great :)
Very helpful!!
thx
@@-kris5923 glad to hear that kris :)
Very cool, I use similar techniq in redshift. Thank you!
@@LexFomin you're welcome :)
Yeah, it's math stuff. It can be done in any engine I think
Алексей, привет! Прикольно встретить здесь своего приятеля. Такого рода инструменты есть много где , в короне например, но для анриала урок весьма полезный.
thank you a big geek, i love you
@@TvCinemaCraft glad you liked it man :)
quality tutorial man...
thanks!
Thank you for posting the video! I have a question.
Is there a way to reduce Texture Repetition for textures with patterns (e.g. bricks or tiled wood)?
If there is, I would like to ask if you can make a video!
patterned textures are a bit tricky. I'll make a video when I find a solid solution
The simplest and quickest method would be using some sort of macro variation solution. For example you can blend a texture over a brick wall at different scales. Something like that uses multiple texture samples though. You can achieve a similar result by using a texture that has finer shapes and just scaling it larger. You just have to be careful with how large you scale it as to not make it a blob 😂
Another great method for things that have a pattern is using a mask that breaks the surface up into sections. This technique has been commonly used on wood floors. So imagine you had a 6x6 meter brick wall texture. Create a mask of that texture that has been tiled at least once, if not twice. Then randomly select different bricks to mask by each channel. The final result is a packed texture that selects 3 groups (4 if you use the alpha) that can be used to shift the colors. Since the mask is scaled 2 or 3 times larger in order to be the same scale, you end up with a really nice break up over a large area. This is similar to an ID mask, but since it’s based on your tiling texture it has to be created manually. Substance Design uses techniques like this to create things like brick walls, but if you’re using much more organic image based or photogrammetry based textures then you’ll need to create it manually.
Of course you can always combine methods. For example with these two you could actually blend a macro type texture with the random brick selection mask so that you only needed a single texture to accomplish both. Sacrifices normally have to be made to combine techniques though.
There are many techniques for things like this. Everything has pros and cons and it just depends on your needs. A lot of the neat solutions like this are sort of “tricks of the trade” things that can be nearly impossible to find online.
For example, imagine a beach that needs textured. Extremely complex surface and has very little to cover it. You can capture screen shots of beaches from drone images. Then create a composition using them in photoshop that fits the exact beach area in your map. So you would take a top down screenshot of the map, aligning your beach composition to its location. This is a super high level approach that tackles multiple problems at the same time. For example, it not only looks very real because it has details and patterns captured from real life, but it solves distance scale macro variation. Then the details can be broken up to create masks that can be packed into a texture. Then that can be used to place different types of sand. Combine this with a traditional macro texturing solution and a technique like the one shown in this video and you can create something that’s a true cut above. Combine this with techniques such as displacement, decals and scattering content using pcg…with the same masks…and you have essentially reached the pinnacle of texturing a beach. 🤣
I sort of went on a tangent here, but hopefully this helps someone 🙂
@@anthonymerle310
First of all, thank you for your reply!
Other than the first solution you mentioned, the vertex painting technique,
I haven't had the chance to try the others yet, so I'll need to look for videos or blog posts to help me understand them better.
@@youngsiks5434Glad I can help! I pretty much never respond to comments. No idea what compelled me this time. Vertex painting is a good solution sometimes. It depends though. For example, the granularity of your painting mask is dependent on how many vertices the model has. It can be a nice way to save on texture memory since you can store 4 masks into the mesh itself. One caveat is in order to have good blending using a height map might be needed. Not always though. For example you could use one of the channels for one of the textures and multiply by a constant or run through a power node or cheap contrast.
Using vertex painting requires you to actually paint it in a believable way, although it does give really good control. However, painting a front house facade vs the side of a 6 story building vs a few city blocks def makes a difference. For example, aside from time, the more content it is or the larger the mesh surface has to be the more geometry you might need. I think you’ll also find that manually painting something that feels random is pretty hard. Vertex painting gives you basic masks that only provide what you paint. Using an actual texture allows you to create a lot of potential variations. Of course you can always use a combination of the techniques. The textures in your materials are what will dictate performance, for the most part though. Storing vertex colors is pretty cheap.
I don’t think I’ve seen anyone use vertex painting for subtle variations to remove tiling. I’ve pretty much only seen it used to combine different surfaces.
One idea you could try is using a macro texture for a brick wall….captured from a real brick wall. Just remove defining details. Then blend it with a brick texture. As you distance yourself from it maybe decrease contrast of the main base color texture, allowing the macro to mostly take over. To take it one step further you could do a high pass filter over the original to extract the most important details. Then with that information and the original texture you could create a distance blend version of it. So in the end you would have your original base color, the distance blend version and then the macro created from an actual wall image. I know I keep using a wall as the example, but the same applies to any surface.
@@anthonymerle310
Ah! I'm still a student, so I'm not very familiar with the various techniques within the engine, but thank you for sharing this information!
I'll look into distance blending and study more about it!
Thank you once again for taking the time to respond!
nice tutorial, do u have link for that voronoi texture in png format? i am trying toimplement it in other game engine
@@aadarshgupta6800 not really. The unreal file is on my website. You can get it.
@HojDee but as i mentioned i wanna try this technique in another rendering engine and the voro texture is in unreal format
@@aadarshgupta6800 message me in discord. I'll export it and send it to you when I get home
@@HojDee Thanks alot!😄
Hi, Thanks for tut, I have problem when use displacement appear both texture cell , how to only make displacement for main texture?
I didn't exactly understand the question, but I think what you're talking about. If you increase the displacement magnitude, some areas may look bad, especially in the black areas of the alpha channel of the cell texture. I hide it by decreasing the displacement magnitude.
is there a way with simpler nodes to make random rotation? its to heavy the way you show it...
you can skip the rotation. or add a switch to turn it on or off. it works great with just the offset and the scale. or even just the offset
what's the difference with using texture variation nodes?
I was about to ask the same. That node does the trick
In short: very little, the Texture Variation uses noise instead of cell & it blends the "visible lines" based on height rather than the same texture alone. The cost is similar but the result is cell can give more variation (without looking as broken). There is a little more to it, but that's the basics.
@@DamienRamirez thanks for the explanation
Any notes on the performance? I noticed it samples the texture at least twice as much but I would be interested in the precise calculations and performance hits on a big terrain. It also needs to sample that voronoi texture but that doesnt have to have a huge resolution, right?
The most important thing is the increasing sample count, I think. I haven't gone deep into the exact performance calculations though. When using with landscape material, I'd use it only on layers where the repetition is really obvious and can't be hidden by foliage and stuff.
I have a problem when I choose the modeling option, there are no tools
maybe the plugin is not enabled
Thanks a lot!
@@ilyachernobrov you're welcome man :)
I cant find the voronoi texture in the files...
there was some issue with the file. I've fixed it. download the textures file
Thanks!!!
you're welcome man :)
I guess my question is how to apply it to a landscape material node
@@johanparada you don't have to apply it to a landscape material node. You should apply it to each texture in the material. And it's the same as in the video.
Does this have some impact on the performance?
Yes, a bit, because of the indirect texture call that may invalidate the texture cache.
and also the increasing sampler count. the impact is not that much. but you gotta watch out for it. especially if developing for mobile
@@thutmosisSeven Thanks for the info!
@@HojDee Appreciate it!
Does it work for an infinite world size? For example, if you set Size - Main Texture to 0.01, would it still avoid repetition?
You add an offset from the Voronoi texture, which has a fixed size, so I think it would repeat if the map is larger than the area covered by the Voronoi texture.
@@gone41674 the voronoi texture is also tiling. so it can go on forever. just make sure the relation between the texture size and the cell size is reasonable. like I mentioned in the considerations section of the video
@@HojDee Yes, I’m aware that the Voronoi texture is tiled, which is the problem. Tiling causes repetition, since the UV offset is read from the Voronoi texture, the final texture will also repeat. This repetition will occur if the world size exceeds the coverage of the Voronoi texture.
@@gone41674 because of the random offset, rotation, and scale, it can't be seen. At the beginning of the video I showcase an example, the Voronoi texture has tile 10 times. I don't see any repetition there
i cant register on your site
@@samwinchester3201 please check your spams for the verification email.
good job
thanks
Is there any way to download or buy your cell bombing MF file?
@@indigochoiart I've put it on my patreon. The link is in the description
@@indigochoiart it's also available in the epic's city sample project, if you have it.
@@HojDee thanks for the good work
@@indigochoiart glad to help :)
UNABLE TO RECEVIE YOUR VERFICATION EMAIL FOR YOUR WEBSITE
the site is having temporary issues. you can get it from my discord channel. in the assets section
god bless youuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 😭
thanks man
Ok, definitelly the way but should be as one material like a "plugin" with all parametres in it. I wait for something similar in 3DS max.
@@tomastoegel4973 in the end, I made it a material function. It can be used in any material inside unreal engine.
For 3ds max, the principles are the same I guess. If you're familiar with its material system you should be able to create it
I think the most important question is, how expensive is this method on the GPU?
it increases the texture sample count. makes it twice. so that's the real bottleneck, I think. it's not optimized in that sense
What is difference between cell bombing and texture bombing?
@@simonb1009 the method is different. cell bombing is cheaper and works better in my opinion
@@simonb1009 watch this video to learn more about texture bombing
ua-cam.com/video/SfJY3e-3wwY/v-deo.htmlsi=v9Vs-QccW6OJlX7l
Hi! can t find cell texture. Can you give direct link? thanks
hi! get it here: www.hojdee.com/courses-details/free-downloads
and here's the tutorial on how to get it, if you run into any issues: ua-cam.com/video/8yRxmuY9If4/v-deo.htmlsi=770df6CkfG-jx-Cj
Yeap, me neither, can you provide the link for your website ?
@@Cyberex there was some issue with the file. I've fixed it. download the textures file
6:27 Why divide? Multiplication could be used to achieve the same result but with much cheaper instruction cost. Divide should be avoided where it's possible.
@@SirRebonack multiply is cheaper, you're correct. But with modern hardware, the difference is not that significant. If you wanna make it really optimized though, you should go with multiply for sure.
not sure how its handled here, but atleast in most programming languages, the compiler optimized most divisions into multiplications.
@@nikoheino3927 The shader compiler cannot optimize this division because it is based on dynamic data (sampled texture). Division is fine to use on parameter values, which are able to be optimized. Division is significantly more expensive than multiplication.
@@SirRebonack oh okay, good to know.
TextureVariation node is also useful... oO
yeah. I'll make a video about it in the future
it's useless if you use normal
@@alexCompany not really
I think going through all the material is very time consuming. epic should make auto texture edit plugin.
@@anotherreality7951 you could just make it once and reuse it anywhere you want
Hi, when i try to sign up on your web site it just wount send me the verification link to the mail (gmail), also your discord links are expired(on profile and in descriptions too).
the site is having temporary issues. you can get it from my discord channel. in the assets section.
I checked the discord link in the description of this video. it works