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 +
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.