# Non-overlapping Tiles

calendar_today

03.04.2022

label

Modeling, Architecture

mouse

18.0

### Description

Creating non-overlapping tiles without jumping through too many loops can be quite a challenge. In such cases, code examples from the Shadertoy community can be really inspiring to us Houdini artists. This original code written by a user called fizzer cleverly offsets a checkerboard and supports scaling as well as shifting the entire pattern.

### 1 Code

A primitive wrangle creates tiles based on randomized world positions:

``````float s = chf('scale');
vector2 t = chu('offset');

vector2 uv = (set(v@P.x, v@P.z) + t) * s;

vector2 f = frac(uv);
vector2 c = floor(uv);
vector2 offset;
vector2 tile = c;

float r0 = rand(c);
int orient = (int(c.x) + int(c.y)) & 1;
tile[orient] += f[orient] > r0;
offset[orient] = f[orient] > r0 ? 1.0 : -1.0;

float r1 = rand(c + offset);
tile[orient ^ 1] += f[orient ^ 1] > r1;

u@tile = tile;``````

In `uv` we offset and scale the position attribute. The result gets split up in fractional `f` and integer `c`. After declaring `offset` and `tile` we generate random values for `r0` and `r1` which will be compared with `f`. For orient we check if the sum of the integer components of `c` is even or odd using a bitwise `&` operation with 1. Next, `orient ^ 1` flips the value stored in orient based on whether the sum of the x and y coordinates in c was even or odd.

### 2 Result

The primitives get split up based on the `tile` attribute and a divide node removes inner edges, which leaves us with clean tiles that can be projected onto surfaces or used as a base for texturing.