Tessera AntiTiler


Measured: the taller tap wins 67.7% of seam pixels, up from ... black-and-white tile. ... itself (1.17%). ... cannot break by construction: it preserves the mean exactly, so every cell has


by MSU_Games


Price History +

Break visible texture repetition with variance-preserving stochastic sampling—the contrast stays, the grid goes. URP and HDRP, triplanar, biplanar, Unity Terrain. Six drop-in shaders.

Core

- Variance-preserving stochastic sampling on a hexagonal triangle lattice

- Optional per-cell rotation — breaks the of a pattern, not just its

position. Ships at 0, because it is a gift to gravel and a disaster for

floorboards, and the shader cannot tell them apart.

- Distance LOD measured in pixels per cell, so it behaves identically at any

resolution, focal length, view angle and UV scale. It cross-fades continuously

onto a single tap; at full fade the expensive path returns *exactly* what the

cheap path returns (measured: 2.7e-8 mean deviation).

- Integer hash instead of — the same material looks

identical on every GPU.

- Explicit gradients throughout. Not an optimisation: with implicit derivatives

the hardware differentiates the UV, which jumps at every cell border,

and the mip drops to its coarsest level along a net of seams.


Projection

- Triplanar with no UV set at all, using exact surface-gradient normal

reconstruction instead of the usual whiteout approximation. `Normal

Strength = 0` is therefore a true no-op (5.1e-9), not an almost-flat normal.

It is not more expensive than the approximation — the instruction count is

counted in the documentation.

- Projection weights with compact support: a plane contributing less than 1/255

of the dominant one carries exactly zero and is skipped, so the branch is

exact rather than merely invisible.

- Biplanar mode for mobile and standalone VR — a constant 3.81 fetches per map,

independent of blend softness.


Material and terrain

- One fused PBR node reads albedo, normal and mask through one tap set.

Shader Graph cannot pass a struct between nodes, so three separate nodes

recompute the same lattice three times; only a single Custom Function can fix

that.

- A ready-made terrain shader for URP and HDRP with a bound material: select the

Terrain, assign it, done. No graph of your own and no cbuffer workaround.

- Unity Terrain with up to four splat layers, skipping any layer whose control

weight is zero.

- Height-based splat blending taken from the blue channel of Unity's mask map —

without a single additional texture fetch, because the mask is read anyway.


Quality layers (all optional, most default to off)

Height blending against double contours on cobblestone, brick, tile and

cracked rock. Measured: the taller tap wins 67.7% of seam pixels, up from

33.9% — at contrast 0 it is pure chance, because the weights know nothing

about height.

Histogram-preserving blending for two-humped textures such as marble or

black-and-white tile. In the blend band the occupancy of the empty middle of

the histogram falls from 12.3% to 1.14% — the rate of the source texture

itself (1.17%).

Macro variation against repetition at mean-value scale, which the core

cannot break by construction: it preserves the mean exactly, so every cell has

the same expected value.

Detail blending in the near field, for when the base texture simply runs

out of texels.


Usability

- Six ready-made shaders (URP/HDRP x UV/triplanar/terrain). Textures in,

checkboxes set, done. The terrain pair ships with a bound material: select the

Terrain, set its Material, done - no graph and no cbuffer workaround.

- Material inspector with grouped controls, tooltips and 20 state-dependent

warnings that point at measured cliffs rather than generalities — for

example that `Height Contrast` gets above 6, or that biplanar stops

paying for itself above `Projection Sharpness` 32.

- The only precompute step (texture mean) runs automatically on import.

- Nine SubGraphs and commented HLSL for anyone who wants to build their own graph.

Break visible texture repetition on large surfaces with variance-preserving

stochastic sampling — the contrast stays, the grid goes. URP and HDRP,

triplanar and biplanar, Unity Terrain splatmaps, height, histogram, macro and

detail blending. Six drop-in shaders including Unity Terrain; Shader Graph

optional.


The problem

One ground texture, tiled a hundred times, reads as a grid. The eye finds the

period in seconds and then sees nothing else. The usual answers all cost

something: more textures cost memory, decals cost draw calls, bigger textures

only move the problem further away.


The approach

Stochastic sampling splits UV space into a triangular lattice and reads the

texture once per cell with its own random offset — and, optionally, its own

rotation. Three of those taps are blended barycentrically.

That alone makes the surface flat, because averaging independent random

variables shrinks variance. This asset computes exactly how much was lost and

puts it back, rather than hiding it:

```

result = mu + (blended - mu) / sqrt( SUM wi^2 )

```

The gain bounds itself. Where one tap dominates, `SUM wi^2` is 1 and nothing is

touched. Where three taps meet equally it is 1/3, so the gain is sqrt(3) — the

most the blend can ever need. Nothing is hand-clamped.

That is why a blend band here looks like more of the same material instead of a

soft patch. Measured: local RMS contrast inside the blend band is 1.035x the

contrast of the dominated core. With the correction switched off, the same

measurement reads 0.78.