Subgraphs

You already have six drop-in subgraphs: Flat/Triplanar/Spherical for Diffuse (color) and Normal. Using these, you can add the hex-based seamless logic to any Shader Graph (Unlit, Lit–Built-in/URP/HDRP

What each subgraph does

  • Flat (Diffuse): makes a regular UV-mapped texture seamless.

  • Flat (Normal): same logic, but for a normal map so it stays in sync with the color path.

  • Triplanar (Diffuse/Normal): seamless + axis-blended projection; great for cliffs/rocks or broken UVs.

  • Spherical (Diffuse/Normal): seamless spherical mapping; removes polar seams on round meshes.

Each subgraph takes the texture and the seamless controls, then outputs the final value you should plug into your master node (Base Color / NormalTS, etc.).


Ports you’ll see (names may vary slightly)

From the screenshot:

  • Texture (Texture2D) – the map to sample (albedo for Diffuse, normal for Normal).

  • UV (Vector2) – source UV (usually UV0 for Flat).

  • Scale (Float) – hex cell size/density.

  • Ratio (Float) – UV scale mode: 0=Standard, 1=Auto, 2=Free.

  • Tiling (Vector2) – classic tiling multiplier.

  • Offset (Vector2) – classic UV offset.

  • Focus (Float) – border softness between hex cells.

  • Rotate (Float) – per-cell random rotation amount.

  • Zoom (Float) – per-cell random scale amount (around 1×).

  • ZoomLerp (Vector2) – min/max scale range for Zoom (e.g., 0.95–1.05).

  • Axis (Vector3) – used by Triplanar (xyz axis weights); ignored by Flat.

  • Style (Float)0=Texture, 1=Both, 2=Debug.

Sphere subgraphs also expose spherical controls (e.g., Side Line, Side Smoothness, Polar Point, Polar Smoothness).


Flat (regular UV) — Diffuse

  1. Open your Shader Graph.

  2. Drag SeamlessConverter (Diffuse) into the graph.

  3. Wire:

    • Texture → your albedo texture property.

    • UVTEXCOORD0 (UV0).

    • Tiling / Offset → your material properties.

    • Scale, Focus, Rotate, Zoom, ZoomLerp, Ratio, Style → expose as material controls (recommended).

  4. Connect the subgraph output to Base Color/Albedo of your master node.

Result: your original shading stays the same, only the sampling becomes seamless.


Flat — Normal

  1. Drag SeamlessNormalConverter.

  2. Wire it exactly like the Diffuse path, but set Texture to your normal map.

  3. Ensure the texture import is Texture Type: Normal Map.

  4. Output → NormalTS (URP/HDRP) or Normal input on Built-in PBR Master.

Color and normal now share the same seamless UV logic—no mismatches.


Triplanar — Diffuse & Normal

  1. Use TriplanarSeamlessConverter (Diffuse) and TriplanarSeamlessNormalConverter (Normal).

  2. Provide world data if the subgraph asks for it (e.g., Position (World), Normal (World)—via Shader Graph nodes).

  3. Set Axis (Vector3) to control axis weights (start with (1,1,1)).

  4. Connect Diffuse output → Base Color, Normal output → NormalTS.

Ideal for cliffs/meshes with stretched or missing UVs; hex logic still breaks repetition.


Spherical — Diffuse & Normal

  1. Use SphereUV (Diffuse) and SphereNormalUV (Normal).

  2. Wire the seamless controls as usual; then tune sphere-specific ports:

    • Side Line / Side Smoothness – equator band width/softness.

    • Polar Point / Polar Smoothness – pole radius/blend strength.

  3. Outputs → Base Color / NormalTS.

Great for planets, bulbs, and any rounded props that suffer from pole seams.


  • Focus: 0.15–0.6 (higher = softer borders)

  • Rotate: 0–30 (use degrees or normalized amount per your subgraph)

  • Zoom: ~0.9–1.2 (subtle variation reads best)

  • ZoomLerp: (0.95, 1.05) as a safe default

  • Tiling: avoid extreme values—let the hex variation do the work

  • Scale: pick a value that yields ~2–6 hex cells across the visible area, then adjust


Per-object variation (optional)

If you want each instance to look slightly different, add a Seed float to your material and feed it to the subgraph (if exposed). Alternative: derive a seed from Object ID or hashed World Position inside your graph.


Pipeline notes

  • Built-in: Connect outputs to your PBR/Unlit master as usual.

  • URP/HDRP: Use Base Color and NormalTS; enable SRP Batcher for CPU savings.

  • Magenta materials: Import the correct variant from SeamlessConverter/Renderers/.


Common pitfalls

  • Normal looks wrong: Not imported as Normal Map, or color/normal aren’t using the same seamless path.

  • Still repetitive: Increase Rotate/Zoom, raise Focus, and keep Tiling moderate.

  • Banding on spheres: Adjust Side Line/Side Smoothness/Polar parameters.

  • Debug in builds: Set Style back to Texture for release.

Last updated