ARCH TILER for bender 4.0.2 [pavement, wall and roof tile generator]
ARCH TILER is a geonode tree designed for creating roof tiles, wall claddings, pavements, and floors. It operates on the geometry of your basic roof, wall, or floor surfaces, distributing collections of tiles in grid-based patterns. You have the flexibility to adjust various parameters such as offset, scaling, and randomness. When your 3D topology is accurate, the tool automatically identifies locations for tile distribution along ridges, edges, and ridge valleys. In the event of automatic detection failure, you can still manually specify the distribution using attribute settings.
new version V_065 Experimental opacity masks as "booleans" video: https://youtu.be/CRkuBf6aFQg
!!!!!-IMPORTANT: Before starting, ensure your geometry is corrected by applying the scale, merging vertices, and deleting loose vertices.!!!!!
FEATURES:
- One geometry node modifier consolidates all necessary parameters into a single tab.
- Fast - analize the tiles intersecting with borders and apply the cuts/booleans to these only, rest geometry is stored as instance.
- Choose your roof/wall/floor shape, add the geometry node modifier, and specify the tile collections. That's it! Now, you can fine-tune the parameters to achieve your desired result.
- Compatible with cutouts in the geometry, such as windows and doors.
- Precise and customizable offsets, scaling, rotation, and randomness.
- Works with some limitations on organic geometry. In edit mode, specify edge creases where the modifier splits the geometry for a more uniform distribution or set all rules manually in attribute mode.
- Automatically recognizes ridges, edges, bottom of the roof, and ridge valleys on common roof shapes.
- Shader parameters for UV adjustments, including tiling, random offsets, and rotation, if you export to other software you have to use its native randomization (for instance VRayUVWRandomizer)
- For export to other 3D software, down in the modifier parameters mark "realize instances", and apply the modifier. Now you are ready to export (I prefer using FBX or OBJ).
- Experimental opacity masks as "booleans" 100% instanced geometry allowing to use hi-res meshes for tiles and the count of the instances can go up to a few milions. Very fast execution times. From version V_065. See the details at the bottom of this page.
geo node timings and instance numbers for rough idea, I am not sure how the timing works in blender, but here on 7950x the results are much faster, the slowest roof shows 29476 ms, but in reality it executes in 3s
VIDEOS:
-video benchmarking modifier: https://youtu.be/TFPsBXa3duM
-modifier options description: https://youtu.be/YZnL_TMzMnQ
-example weatherboard: https://youtu.be/hTVn5T5JMxY
-example metal roof: https://youtu.be/Nar8j3ycIMk
-example rhomb tiles: https://youtu.be/-1un0SCOYlU
-manual attributes setup: https://youtu.be/N-kSzB-k6Mc
-"I" ridge vs "V" ridge: https://youtu.be/Ai0bZaIkS8I
-scene file viewport walkthroug: https://youtu.be/_GscX1dMsI4
file content:
MANUAL:
Installation:
- append from the original file "rooftiles_V_xxx.blend":
-If you want to start your roof and tiles from scratch all you need is the node tree called "ARCH_TILER", create your input roof geometry shape and create the tile collections.
-if you want to use some basic templates from the file append the collections, then just select your roof geometry, then select one from the templates, press ctrl+L and copy modifiers, (be aware on some template geometry are extra modifiers as subdivision so delete these afterwards)
-or you can join you geometry to one of the templates and delete the template in edit mode. Select your shape, select template, ctrl+J.
Make sure that your input roof shape geometry is clean, apply scale, check the normals they are oriented correctly, delete loose geometry, specify edge creases (not necessary).
All this should work on the common 3D topology with no tweaks. There are exposed angle values to decide where to split the roof, detect the ridges, valleys, holes (windows), bottom of the roof and the apex tips. The signed angle is used, so for the ridge valleys it goes to the negative values. The crease edges are considered as split angles (but not in the manual attributes mode). If this does not work for you, there is still the option to use the MANUAL attributes.
The collections are used to specify all the category elements - tiles/ridges/end ridge tiles/edge ridge tiles/apex. Valleys are negative ridges (where the water runs down during the rain) so there is no collection for this, you can add boolean later to these areas. There are two modes for the main ridge geometry. I called it I and V according to the section of the geometry. In the "I ridge mode" there is one ridge element for all ridge tiles, that should be a flat squared element (small metal border panel), in this mode is this element used for the valleys as well. You can add more elements to each collection for some randomization, but be aware that the dimensions (the bounding box) of the largest element is considered to be the main for all of them.
Shader parameters for UV adjustments, including tiling, random offsets, and rotation, if you export to other software you have to use its native randomization (for instance VRayUVWRandomizer)
Screenshot of the benchmark scene + the nodetree preview (this scene is not included):
Some limitations:
There is FAST instance mode with no booleans and for the booleans it is recommended to use the check holes option and the most simple geometry for the tile elements. Only the faces intersecting with the boolean mesh are recognised for the boolean operation but even with this the results are not perfect. If you are getting some missing tiles near the roof borders expand the "tile border offset fix" value - needed mainly for large panels. If you get wrong boolean results, you should slightly increase the spacing and the tilt to keep the tiles more apart, slightly shift the tiles or use different seed values if you use any random mode. Bool thickness is the value you need to increase if you tilt large tiles too much, there should not be any performance cost. In my testing here apart from the boolean errors the blender geonodes on this task performs faster than the railclone plugin in 3dsmax.
Manual attributes to set:
split - edge boolean domain
ridge - edge boolean domain
cut - edge boolean domain
edge - edge boolean domain
hole - edge boolean domain
apex - point boolean domain
valley - edge boolean domain
attributes to use in the shader editor:
"instance idx" for mesh island id and "UVMap" for the mapping coordinates
MODIFIER PARAMETERS:
mat tiles - material for the tiles and "mode V ridge" tiles
mat I ridge - material for the "mode I ridge" tiles
TILE X
*pattern is the distribution grid of the tiles, there are Y rows and X columns
-spacing/gaps - XY gaps between the tiles (tile is scaled with the pattern)
-scale X tile - of the all tiles pattern in the X dimension, keeps the spacing between the tiles
-scale X tile random - scales the individual tiles randomly, it does not keep the spacing, if they overlap too much adjust the spacing or overlapping
-overlap X tile - overlaps the tiles in the X dimension - it is good when you want to apply the tilt Y tile later
-columns X rand - scales the pattern columns in the X dimension randomly
-shift n X tile - shifts each second row of the tile pattern in the X dimension from 0 to 1/2 tile X dimension
-shift left/right X all - shifts all the tile pattern in the X dimension
-shift rand X tile - shifts randomly all the points of the tile pattern in the X dimension, it changes the tile X scale as well according to the shift amount
TILE Y
-scale Y tile - of the all tiles pattern in the Y dimension, keeps the spacing between the tiles (tile is scaled with the pattern)
-scale Y tile random - scales the individual tiles randomly, it does not keep the spacing, if they overlap too much adjust the spacing or overlapping
-overlap Y tile - overlaps the tiles in the Y dimension - it is good when you want to apply the tilt Y tile later
-rows Y rand - scales the pattern columns in the Y dimension randomly
-shift n Y tile - shifts each second column of the tile pattern in the Y dimension from 0 to 1/2 tile Y dimension
-shift down/up Y all - shifts all the tile pattern in the Y dimension
-shift rand Y tile - shifts randomly all the points of the tile pattern in the Y dimension, it changes the tile X scale as well according to the shift amount
TILE Z
-scale Z tile - it scales the Z tile dimension, the tilt is automatically adjusted according to this scale
-offset Z tile - offsets entire tile pattern in the Z local normal average of the roof island
-rand Z tile - randomize the Z position of the tiles
TILE TILT
*The default X tilt parameter is automatically computed from the tile bounding box Z value and the overlap value, in the modifier tab the default is 0, the value is exposed in cm (how far you shift the end of the tile up in cm on top of the basic tilt). You need to tweak this value for some profiled tiles and you can disable the automatic tilt on/off for the flat metal sheet roofs.
-tilt on/off tile - disable the automatic tilt
-tilt X tile cm up/down - it adds or subtracts from the automatic tilt (tilt on/off tile has to be enabled)
-tilt Y tile - rotate the tiles -90 - +90 degrees around the Y axis
-tilt rand X tile - randomize the X tile tilt (tilt on/off tile has to be enabled)
-tilt rand Y tile - randomize the Y tile rotation
MISC
*roof island is the area of the roof defined by the split edges (manual edge creases or automatic split angle value)
-roof tiles off
-ridges off
-edge tiles off
-inside mesh off
-ROOF down uncut - it automatically detects the bottom (gutter part) of the roof and disables the boolean (cut) for these tiles. Manual attribute "cut"
-RC avg or front - default recommended is avg, this is raycast grid direction, avg raycasts from the average of the roof island normal, the front raycasts from XZ (like from the elevation view). The front keeps the Z distance of the rows, you need to adjust the Y scale of the tiles after. Best experiment yourself in "!FAST mode!"
-rotate flat roofs 90 - the row tile direction on the flat parts of the roof is set according to the longest straight edge queue, if this does not work for you, you can rotate all flat parts 90 degrees here or you can set manually the edge creases 1 to split this part differently for automatic mode or just disable automatic mode by setting the manual attributes.
-tile border offset fix - this parameter is good to increase when you have large tiles and there are some tiles missing in the border parts of the roof island. This value works differently in the "!FAST mode" ; for this mode there is another border offset considered (next parameter below). Best to experiment with this parameter yourself, don't use the "!FAST mode!", turn on the "I: offset" for visual feedback.
-tile fast border offset - same as above but for the "!FAST mode!" only
-collection instance rand/seq - this is how are instances picked from the collection, they can be distributed randomly or in repeating row ( only if you have more objects in one collection)
-MANUAL ATTRIBUTES - this disables all automatic recognition of the roof shape and you need to set this manually in edit mode of the basic roof mesh geometry.
RIDGE
-mode V/I ridge - this is called I and V according to the X section of the tile geometry, "I" is distributed on the roof island borders, "V" is distributed on the "ridge split angle" edges of the entire roof
-spacing ridge - gaps between ridge/edge tiles
-shift Z ridge - adjust the Z position of the ridge tiles
-scale ridge - scale the ridge tiles uniformly, but keeps the spacing
-scale rand ridge - it randomly scales the ridge tiles in small amount, it does not keep the spacing
-shift X /I ridge - it moves the "I ridge" outside or inside of the roof island borders
-extens all ends ridge -
-extens down ridge - it extends the ridge ends at the bottom parts of the roof (where is the gutter), this is necessary when you use the "uncut mode"
-inner ends /I ridge extension - this extends the border "I ridges" in the corners of the roof island mesh holes (windows and other cuts)
-scale edge ridge - scale the edge ridge tiles uniformly, but keeps the spacing
-shift X edge ridge - this moves all edge tiles in the local X direction
-shift Z edge ridge - this moves all edge tiles in the local Z direction
-valley ridge boolean - this is more experimental feature, the boolean here is expensive and causes many artifacts, it joins some of the tiles during the process as well so randomness of the UV shifting and island indexes is in some parts broken
-valley ridge thickness - how wide this part is
-reverse top ridge tiles -
-apex Y shift - move the apex in local Y space
-apex Z shift - move the apex in local Z space
ROOF SHAPE
-bool hole check - boolean value, recommended to use
-bool self check - boolean value, not necessary, expensive
-angle roof split - the value where the roof splits to islands
-angle valley - the value for the ridge valleys (signed angle is used, so it goes to the negative values)
-angle ridges - the value for the ridges
-ridge --/^^ epsilon - this is the tolerance where to decide if the ridge is top horizontal ridge or sloped ridge
-I: offset - only visual feedback to show the border edge offset
-I: grid - show the distribution grid pattern
-I: BB - show bounding boxes of the roof islands
-I: bool - show boolean geometry
-I: all unassembled - show all unassembled helpers
Version V_065:
V_065 setup:
V_065 result:
blender 4.0.2 file including geometry node modifier, basic tile library and materials