💎 Get Afterglow: curtisjamesholt.gumroad.com/l/afterglow ⭐ Also on Blender Market: blendermarket.com/products/afterglow ❤ Join as a Member: www.youtube.com/@CurtisHolt/join ❤ Join as a Patron: patreon.com/curtisholt
Hexagon scattering is simple a case of voronoi scattering where it’s using a regular seed pattern to generate the voronoi graph. The reason you don’t see it used often is because the regular pattern can really stand out. The blend method here does a fantastic job of hiding the regular borders though (since it makes them irregular :P) so you can use the hexagon grid as an optimization- and that’s really cool!
Should be available soon! It’s been ready to release for a week or two but I’ve been moving house so haven’t been able to record the release video yet. Just managed to get things set up yesterday, so hopefully I can get it done soon.
A wonderful tease! A very good high level explanation. Can't wait to be able to get my hands on something like this. it's extremely interesting. and btw your afterglow is quite useful. 🦄
Can you do an example on a tiled texture? Like a fired ceramic tile? If you have different images of each individual tile are you able to randomly tile them in different patterns and size?
Wonderful nose group. I can't wait to access it myself. This is very, very exciting news. Thank you and I wish you all the best with your health issues. Chris. 🐴
nice work! interesting to get not only instrument and manual, but whole evolution of how it was invented which can be useful for other people and their own instruments in the future.
Such amazing work! I'd love to see how this progresses and if it might be able to be baked into or transferred to a real-time game engine. Such a 🦄node!
I neeeeed this. I've created my own voronoi scattering nodes with some custom features, but this looks so much more useful and flexible. Great tech! :)
Can you please drop a link to the previous research you found about hexagonal texture scattering and height map blending? I’d love to adapt those techniques to other more npr use cases!
I came up with most of it by myself tbh so I don't really know where to find resources. I might do a blog post on my tumblr on proper height blending since I made some interesting discoveries and got into quite a bit of math, but the general scattering is pretty simple conceptually. you have cells that map a texture to them like a typical tiling setup, the issue is that each pixel only samples the texture once so you get seams between the cells. to fix this, you have each cell also sample the texture transformed such that it matches one of the neighbors, and you can use that new texture sample to check how a texture scaled larger than the cell might overlap from that particular neighbor. you do that for each neighbor and either use regular blending or some kind of height blending to blend between the cells at the seams :3 Square grids are quite common for this but you can imagine how doing 9 texture samples can get a little expensive. you can optimize this further if youre clever you can reduce the texture samples a lot, and with hexagonal tiling and some clever neighbor optimizations, this setup only does 3 texture samples :D
@@krisp- very thorough, thank you! If you have other technical blog posts I’ll check them out! In terms of height blending, is it a smooth max function mixed with distance from the edge of the cell, or is it something more complex? Once I’m set up again I want to try creating my own setup with a uv grid texture to really get into the nitty gritty.
@@liteningstrike12 no smooth max here because it tends to cause some problems with brightening close to equal values that blend together. regular maximum with some smoother color blending is pretty sufficient. It's also a bit more complex than just distance to the edge of the cell conceptually, but math-wise its pretty optimized. It's much smoother and avoids the hard edges you get with that cell distance, the general idea is that each cell has these smooth "weights" that fade out to 50% towards the edges and fade out more beyond the edges, and the sum of all cell weights always sum up to 1 before any custom weighting for height blending.
🦄 this is so cool. I would be curious about the math. But truly, this functionality is so insane. Would buy this as a standalone product for sure. That blending is incredible
🦄 it's just blow my mind and having thought in maybe in future just build plane, cube or low poly as model and texturing doing the rest to achieve final result. Power of scattering
I am... Insanely impressed, especially my that math. where can you learn all of this more advanced texturing workflow and skills? Loved the video, keep up the great work 🦄
A lot of the math knowledge is just a solid understanding of math and shaders from things like graphics programming now applied to material workflows again in blender :3 I do quite a bit of graphics programming and I think that's probably the best context to learn this level of math in the context of shaders
while this method does allow you to use those kinds of blending modes to blend between cells, this implementation actually uses some custom heightmap-based blending :3
I'd be curious to see what this kind of blending does to textures like wooden planks that have very defined directions. I'd assume it won't look anything like an infinite wood texture but it's hard to imagine what the end result would actually look like.
Certain textures with more directionality can work decently well if you juts use random positional offsets and maybe scaling instead of random rotation, but very uniform textures or things with very defined repeating patterns are definitely the weakness of these kinds of texture scattering approaches. That's also largely due to the fact that with a texture like wooden planks, there honestly isn't a way to cleanly map that onto a 3d object without UV unwrapping to begin with. What it would look like here though is hexagonal cells with that same kind of heightmap blending between each cell, mapped to each of the 3 axes via triplanar mapping. sorta like 3 hexagonal tiling wood textures with random transforms in each cell projected onto the x y and z directions.
Would you be able to export the result of these models as a USD? I’m looking for way to apply realistic organ textures to anatomical reconstructions in an automated fashion that would avoid the need to UV unwrap?
No emoji from me, because emotions are complex and multivariant and cannot be captured in pictographic form. But I did indeed make it to the end. Very interesting approach.
@@theneonbop pretty close! but there are some unique challenges. rather than interpolating colors (which is really just a weighted sum) you take a weighted maximum of the heightmaps, meaning you darken each heightmap by some factor and take the max. the issue with this is that while the sum of two heightmaps multiplied by 0.5 is still 0.5 on average, the max of two heightmaps multiplied by 0.5 is much darker, so by itself this produces pretty dark and noticeable seams between cells or triplanar edges. tldr theres a liiittle bit more math involved with taking a proper weighted maximum of two heightmaps but yeah its otherwise pretty similar to interpolation :3
@CurtisHolt 7:29 are you aware, that you are demonstrating dx normal map? i mean its quite possible, that your node is taking this aspect into consideration under the hood. its just kinda weird to see dx normal map in the tutorial, while software you demonstrating it in uses ogl/vulkan.
oh wow thanks for pointing that out! I didn't actually catch that while making the node somehow even though I've made that mistake myself with normal maps in substance software. Since I spent a bit finding the correct signs of axes to use in the triplanar normal correction stuff, the normal correction in the shader was specifically geared towards directx normal maps instead of opengl/vulkan ones. It's a super easy fix but I'm so glad you caught it lol
@@soundsbeard would probably need metadata to check automatically :/ the only way to do it algorithmically would be to compare it against the gradient of the heightmap, but if you have the gradient of the heightmap you can just generate the normals on the fly anyway. I can get on board with killing dx normals though :3
@@krisp- ahahaah ;D dis is da wae. normals, generated from the height map might differ from those, baked from the sculpt. not that significantly may be, but algorithm based on checking normal map file with auto generated map from height sounds like a plan. may be this is exactly what UE uses under the hood (i've heard it detects map type on the fly). but i've never dived into it that deep. im just that Karen from the internet, whining around with 'you use wrong normal map type! you don't mark normal type in the filename! get me the manager!' ;D btw followed you on masto.
@@soundsbeard Yeah generating normals from height is essentially what the bump node does, just in a slightly different space :p the issue with that is you need triple the texture samples so normal maps are still generally better for realtime use. I appreciate the follow btw!
Awesome, can't wait to see what you eventually develop with this however it would be nice if you actually just released the node group without some sort of pre arranged package built around it. That way people could explore it on their own. 🦄
Sure, but it's not just one node group at the moment, and the work isn't completely done. There's the triplanar / biplanar nodes for multi-map and single images (or inputs). Then there's preamble / postable versions, which aren't finished for all of them, but then there's slightly more optimized versions of those which may or may not need to be 'ambled', and potentially other variations of the methods yet to be explored. So we need to decide on what to package (or how to package) the tool as a standalone.
It depends what you mean by fidelity in this case, the height blending can be done with different geometric patterns. Different patterns may be more appropriate for different types of underlying textures depending on the scale of details within the map. Different shaped meshes may present those textures better or worse depending on where the seams happen to lie on the surface, which may also be a matter of scale as much as the pattern of seams. So I guess the quick answer is: it depends, but it would be nice to give people as much option as possible.
hexagonal tiling has some unique properties that actually allow for fewer texture samples when blending with neighboring cells compared to a square grid or geodesic grid! the cell blending itself ends up requiring only 3 texture samples per pixel :3
💎 Get Afterglow: curtisjamesholt.gumroad.com/l/afterglow
⭐ Also on Blender Market: blendermarket.com/products/afterglow
❤ Join as a Member: www.youtube.com/@CurtisHolt/join
❤ Join as a Patron: patreon.com/curtisholt
Bro you gey?
I love how a free and open source tool like blender brings brilliant people like you guys together to make cool shit
Really nice result. Maybe this one deserves a paper.
Nice node !!! Hope it will be realeased soon !!!
Where the “shut up and take my money” meme when you need it?
Incredible work. Keep us posted!
🦄
Wow, these experimentations could be really game changing! Great work Curtis & Chris 👏
Hexagon scattering is simple a case of voronoi scattering where it’s using a regular seed pattern to generate the voronoi graph. The reason you don’t see it used often is because the regular pattern can really stand out. The blend method here does a fantastic job of hiding the regular borders though (since it makes them irregular :P) so you can use the hexagon grid as an optimization- and that’s really cool!
Don't know if you said, but can we expect a public release for this anytime soon? Would be a instant pickup for me.
🦄 I love that you're teaching people how to seed their creations from physical reality. More of this please.
🦄 I can't wait to get this wonderful node group!
Should be available soon! It’s been ready to release for a week or two but I’ve been moving house so haven’t been able to record the release video yet. Just managed to get things set up yesterday, so hopefully I can get it done soon.
A wonderful tease! A very good high level explanation.
Can't wait to be able to get my hands on something like this. it's extremely interesting. and btw your afterglow is quite useful. 🦄
Cool, can't wait to see this as a product!🤖
“Hexagons are Bestagons”!!! A nod to CGPGrey? Also what a genius solution! Great explainer video 🦄
Really interesting Curtis. Looking forward to seeing where this goes next 🦄
❤ great work here would love to see more about this node and setup 💯 🦄
Curtis : "so this is quite messy",
Curtis 1 second later : shows very satisfying visual node organization
This node is incredible, and such a relaxing lovely video to watch :)
Love the "inside the ballpark" quality of these exciting developments. 🦄
Looking forward to this power node!🦄
this is absolutely insane
Great results! Thank you. 🦄
Woaaaah! The world just keeps getting better. Thanks for sharing.
🦄 That is some amazing work. Thanks for showing and thanks @krisp
Incredible node! Thank you for the excellent breakdown.
This one looks exciting!! 🦄
This is amazing! Big props to Kris and yourself. I studied computer graphics and still the quality of this kinda blows my mind. :D
Can you do an example on a tiled texture? Like a fired ceramic tile? If you have different images of each individual tile are you able to randomly tile them in different patterns and size?
Whoa. Can’t wait to get my hands on this when you release it! 😲🦄
Amazing work!!
Wonderful nose group. I can't wait to access it myself. This is very, very exciting news. Thank you and I wish you all the best with your health issues. Chris.
🐴
This looks very promising! Looking forward to see where it goes!🦄
Really interesting concept!
🦄 can't wait to see what you do with this.
🦄 Looking forward to future developments…cheers
nice work! interesting to get not only instrument and manual, but whole evolution of how it was invented which can be useful for other people and their own instruments in the future.
Amazing work, and great explainer vid! 🦄
Such amazing work! I'd love to see how this progresses and if it might be able to be baked into or transferred to a real-time game engine. Such a 🦄node!
I've only been waiting for a solution like this for cleaner spherical mapping for, oh... 30 years now? Nicely done!
Incredible Work Really Nice Results even for a Inprogress Research 🦄
I neeeeed this. I've created my own voronoi scattering nodes with some custom features, but this looks so much more useful and flexible. Great tech! :)
its a game changer, looks amazing 🦄
Can you please drop a link to the previous research you found about hexagonal texture scattering and height map blending? I’d love to adapt those techniques to other more npr use cases!
I came up with most of it by myself tbh so I don't really know where to find resources. I might do a blog post on my tumblr on proper height blending since I made some interesting discoveries and got into quite a bit of math, but the general scattering is pretty simple conceptually. you have cells that map a texture to them like a typical tiling setup, the issue is that each pixel only samples the texture once so you get seams between the cells. to fix this, you have each cell also sample the texture transformed such that it matches one of the neighbors, and you can use that new texture sample to check how a texture scaled larger than the cell might overlap from that particular neighbor. you do that for each neighbor and either use regular blending or some kind of height blending to blend between the cells at the seams :3
Square grids are quite common for this but you can imagine how doing 9 texture samples can get a little expensive. you can optimize this further if youre clever you can reduce the texture samples a lot, and with hexagonal tiling and some clever neighbor optimizations, this setup only does 3 texture samples :D
@@krisp- very thorough, thank you! If you have other technical blog posts I’ll check them out! In terms of height blending, is it a smooth max function mixed with distance from the edge of the cell, or is it something more complex? Once I’m set up again I want to try creating my own setup with a uv grid texture to really get into the nitty gritty.
@@liteningstrike12 no smooth max here because it tends to cause some problems with brightening close to equal values that blend together. regular maximum with some smoother color blending is pretty sufficient.
It's also a bit more complex than just distance to the edge of the cell conceptually, but math-wise its pretty optimized. It's much smoother and avoids the hard edges you get with that cell distance, the general idea is that each cell has these smooth "weights" that fade out to 50% towards the edges and fade out more beyond the edges, and the sum of all cell weights always sum up to 1 before any custom weighting for height blending.
Fascinating work, tnx for sharing and could indeed make for a cool product.
Beautiful work and results! 🦄
Now this would be a real interesting tool to use, Really would love to play around and see what can be created or combined for it! 🦄
The scalpel + thumb print mode is really quite slick
Incredible work! I would like to acquire this node you're working on!
When will it be ready?
🤣 Absolutely loved the epic intro. (Long-time lurker here. Big fan of your channel. Keep up the great work)
I wonder if it works with bricks texture
I really like the cinematic intro about most touching topic in blender
Great video and setup 🦄
🦄 this gave me some stuff to think about for my own experimenting, very cool
🦄 this is so cool. I would be curious about the math. But truly, this functionality is so insane. Would buy this as a standalone product for sure. That blending is incredible
LOVE It, and cant wait to see more examples 🎉🦄
🦄 it's just blow my mind and having thought in maybe in future just build plane, cube or low poly as model and texturing doing the rest to achieve final result. Power of scattering
🦄 this exactly what have been trying to accomplish for terrain in UE5.
🦄 Looks very promissing!
This is amazing!
looking forward to this as a tool!would be amazing for more realistic procedural wear (scratches, dents, etc.)
Respect. Love what s you doing..
Alright that's legitimately amazing
Holy crap! I'm not super skilled in texturing (yet) but this does look like a game changer. Is that node going to be released as a product on its own?
It will likely be released as a standalone product, but we are still discussing it.
I am... Insanely impressed, especially my that math. where can you learn all of this more advanced texturing workflow and skills? Loved the video, keep up the great work 🦄
A lot of the math knowledge is just a solid understanding of math and shaders from things like graphics programming now applied to material workflows again in blender :3 I do quite a bit of graphics programming and I think that's probably the best context to learn this level of math in the context of shaders
🦄 That is very impressive!
Best video open. I'm a sucker for a good dramatic.... pause.
so it looks like you are using Lighten/overlay/multiply to blend the height maps? I've seen similar approaches for making noise blend across seams.
while this method does allow you to use those kinds of blending modes to blend between cells, this implementation actually uses some custom heightmap-based blending :3
incredible. 👨🔬
🦄
This is insane work
🦄 I had been wondering what you were doing with this, interesting.
epic stuff mate, this will save a lot of tears lol
Very cool. 🦄
this is really really cool
Is this node available anywhere? 🦄
Not just yet as we’re still experimenting, testing, optimising. Discussing whether to make it available as a standalone tool.
@@CurtisHolt - I'll be looking for it too
@@CurtisHolt I would love to buy it as a standalone when available, great work as always
I'd love to get my hands on this tool!🦄
It's now available, if you're interested in checking it out!
th-cam.com/video/Sfj-jiJvl_I/w-d-xo.html
@@CurtisHolt I had completely missed that video, thank you!
Any updates? Given enough available machine resources, it seems likely that this node could be included in a future Blender update.
The most recent update was the release of the node groups on Gumroad:
th-cam.com/video/Sfj-jiJvl_I/w-d-xo.html
@@CurtisHolt Going to check! Thanks!
🦄 Nice one!
🦄great work! take care of yourself
Verrry nice. 🦄
Incredible. But can you make any not tileable texture seamlessly tileable and bakeable into assets for game engines???
🦄🐝Some amazing clever going on in here.
want this! 🦄
I'd be curious to see what this kind of blending does to textures like wooden planks that have very defined directions. I'd assume it won't look anything like an infinite wood texture but it's hard to imagine what the end result would actually look like.
Certain textures with more directionality can work decently well if you juts use random positional offsets and maybe scaling instead of random rotation, but very uniform textures or things with very defined repeating patterns are definitely the weakness of these kinds of texture scattering approaches. That's also largely due to the fact that with a texture like wooden planks, there honestly isn't a way to cleanly map that onto a 3d object without UV unwrapping to begin with.
What it would look like here though is hexagonal cells with that same kind of heightmap blending between each cell, mapped to each of the 3 axes via triplanar mapping. sorta like 3 hexagonal tiling wood textures with random transforms in each cell projected onto the x y and z directions.
Would you be able to export the result of these models as a USD? I’m looking for way to apply realistic organ textures to anatomical reconstructions in an automated fashion that would avoid the need to UV unwrap?
No emoji from me, because emotions are complex and multivariant and cannot be captured in pictographic form. But I did indeed make it to the end. Very interesting approach.
Looks amazing. The hill climbing algorithm (right?) is right at home here.
its probably just thresholding the depth with some amount of blending
@@theneonbop pretty close! but there are some unique challenges. rather than interpolating colors (which is really just a weighted sum) you take a weighted maximum of the heightmaps, meaning you darken each heightmap by some factor and take the max. the issue with this is that while the sum of two heightmaps multiplied by 0.5 is still 0.5 on average, the max of two heightmaps multiplied by 0.5 is much darker, so by itself this produces pretty dark and noticeable seams between cells or triplanar edges.
tldr theres a liiittle bit more math involved with taking a proper weighted maximum of two heightmaps but yeah its otherwise pretty similar to interpolation :3
wow. this looks rad.
🦄I need this kinda node in my life.
@CurtisHolt
7:29 are you aware, that you are demonstrating dx normal map?
i mean its quite possible, that your node is taking this aspect into consideration under the hood.
its just kinda weird to see dx normal map in the tutorial, while software you demonstrating it in uses ogl/vulkan.
oh wow thanks for pointing that out! I didn't actually catch that while making the node somehow even though I've made that mistake myself with normal maps in substance software. Since I spent a bit finding the correct signs of axes to use in the triplanar normal correction stuff, the normal correction in the shader was specifically geared towards directx normal maps instead of opengl/vulkan ones. It's a super easy fix but I'm so glad you caught it lol
@@krisp- thanks for reply, i wish someday all software will be able to detect these things automatically. or... dx normals would be dead at last ;D
@@soundsbeard would probably need metadata to check automatically :/ the only way to do it algorithmically would be to compare it against the gradient of the heightmap, but if you have the gradient of the heightmap you can just generate the normals on the fly anyway.
I can get on board with killing dx normals though :3
@@krisp- ahahaah ;D dis is da wae.
normals, generated from the height map might differ from those, baked from the sculpt. not that significantly may be, but algorithm based on checking normal map file with auto generated map from height sounds like a plan. may be this is exactly what UE uses under the hood (i've heard it detects map type on the fly).
but i've never dived into it that deep. im just that Karen from the internet, whining around with 'you use wrong normal map type! you don't mark normal type in the filename! get me the manager!' ;D
btw followed you on masto.
@@soundsbeard Yeah generating normals from height is essentially what the bump node does, just in a slightly different space :p the issue with that is you need triple the texture samples so normal maps are still generally better for realtime use.
I appreciate the follow btw!
Awesome, can't wait to see what you eventually develop with this however it would be nice if you actually just released the node group without some sort of pre arranged package built around it.
That way people could explore it on their own. 🦄
Sure, but it's not just one node group at the moment, and the work isn't completely done. There's the triplanar / biplanar nodes for multi-map and single images (or inputs). Then there's preamble / postable versions, which aren't finished for all of them, but then there's slightly more optimized versions of those which may or may not need to be 'ambled', and potentially other variations of the methods yet to be explored. So we need to decide on what to package (or how to package) the tool as a standalone.
@@CurtisHolt The advancement alone is worth waiting for. You rock, thanks for your hard work.
so. freaking. cool. 🦄
I like this one! 🦄
Excellent. I will buy it when my salary comes.
Exactly what substance does for ages. But nice blender users can do too
Very nice !
Ooooo, me likey…..and would love this!
Creatve, strange, and more abstract -- I have found my tribe. 😅
The results look fantastic! I do wonder though; why hexagons and not geodesic tesselation? Wouldn't triangles offer more fidelity?
It depends what you mean by fidelity in this case, the height blending can be done with different geometric patterns. Different patterns may be more appropriate for different types of underlying textures depending on the scale of details within the map. Different shaped meshes may present those textures better or worse depending on where the seams happen to lie on the surface, which may also be a matter of scale as much as the pattern of seams.
So I guess the quick answer is: it depends, but it would be nice to give people as much option as possible.
hexagonal tiling has some unique properties that actually allow for fewer texture samples when blending with neighboring cells compared to a square grid or geodesic grid! the cell blending itself ends up requiring only 3 texture samples per pixel :3
I would really like to see a technical breakdown of this hex-tiling node..🦄🦄
Hey Curtis, can you look into an add-on called Magic Coordinate Addon and talk about it? ♥
mind blown
oh... emoji, cos I made it to the end... has to be this one 🤯