About the Author: Stephan

Repeat Zone in Blender 5.0: Shader-Loops einfach erklärt

Blender 5.0 führt Repeat Zones in den Shader Nodes ein – Schleifen direkt im Material, analog zu den Geometry Nodes. Damit werden iterativ aufgebaute Effekte wie Parallax Occlusion Mapping, Blur-Filter, fraktales Rauschen (fBM) und raymarching‑artige Schritte erstmals nativ und modular im Shader Editor möglich. Die zugehörigen Neuerungen „Closures“ und „Bundles“ machen komplexe Materialien wiederverwendbar und performant.

Quellen: Blender 5.0 Release Notes (Rendering), PR „Shader Nodes: support repeat zones, closures and bundles“ (#141936) sowie Community‑Beispiele.

Repeat Zone in Blender 5.0: Shader-Loops einfach erklärt

Eine Repeat Zone ist ein Bereich im Shader Node-Graphen, dessen Inhalt mehrfach ausgeführt wird. Du platzierst die Nodes, die wiederholt werden sollen, zwischen einem Repeat‑Eingang und einem Repeat‑Ausgang und definierst eine Iterationszahl. Blender „entrollt“ diese Schleife beim Kompilieren für die Render-Engine (Inlining/Constant Folding laut PR #141936), sodass Eevee und Cycles flache, optimierbare Node-Bäume erhalten.

  • Analogie: Wie die Repeat Zone in Geometry Nodes – nur eben im Material.
  • Typische Inputs im Loop: UV/Position, Height-/Normal-Maps, Akkumulatoren (Summe/Mix), optional ein Iterationsindex, falls die UI ihn anbietet.
  • Use Cases: Schrittweise Offsets, Mehrfachabtastungen, mehrstufige Verzerrungen oder Faltungsfilter.

Wichtig: Die Kosten wachsen in der Regel linear mit der Iterationszahl, besonders bei wiederholten Texture Lookups.

Top-Effekte: POM, Blur, fBM & Raymarching

Parallax Occlusion Mapping (POM)

POM simuliert Tiefenparallaxe, indem entlang der Blickrichtung mehrfach eine Height Map geprüft und die UVs schrittweise verschoben werden.

  • Loop-Inhalt: UV-Offset entlang View-Vektor im Tangent Space, Height-Abfrage, Korrektur/Anpassung der UVs, optional Akkumulation eines Stepfaktors.
  • Empfehlung: 8–16 Iterationen für Echtzeit in Eevee; 24–32 für feinere Kanten (je nach Szene/Material). Für sehr flache Winkel eher mehr Iterationen.
  • Hinweise: Saubere Tangent-Space-Normals, Height-Range clampen, Mipmapped Height-Maps verwenden, um Aliasing zu reduzieren.

Blur im Shader

Box-/Gaussian‑ähnliche Blurs lassen sich durch mehrfaches Abtasten einer Textur mit unterschiedlichen Offsets realisieren – die Repeat Zone übernimmt die Sample-Akkumulation.

  • Loop-Inhalt: Gewichtetes Sampling um die Ausgangs-UV (z. B. kreisförmig/konzentrisch), Summe und Gewichtsnormierung.
  • Empfehlung: 8–12 Samples für weiche Echtzeitblurs in Eevee; 16–24 für hochwertigere Ergebnisse. Gewichte ggf. vordefinieren.
  • Hinweise: Offsets skalieren mit Texelgröße (1/TextureSize), Mip-Level passend wählen; Farbraum beachten (Linear vs. sRGB).

fBM (fraktales Rauschen)

fBM kombiniert mehrfaches Noise mit steigender Frequenz (Lacunarity) und abnehmender Amplitude (Gain) zu reichhaltigen Mustern.

  • Loop-Inhalt: Noise(uv * freq) * amp akkumulieren; anschließend für Roughness, Normal-Distortion oder Masken verwenden.
  • Empfehlung: 4–6 Oktaven für Performance, 6–8 für Detail. Startfreq 1.0–2.0, Lacunarity 1.9–2.2, Gain 0.45–0.6.
  • Hinweise: Teure 3D-Noise nur, wenn nötig; sonst 2D-Noise auf UVs.

Raymarching‑artige Schritte

Für stilisierte Kanten, SDF‑ähnliche Kantenprüfungen oder Volumen‑Tricks lassen sich diskrete Schritte in einer Repeat Zone modellieren.

  • Loop-Inhalt: Distanz- oder Dichtefunktion auswerten, Schrittweite anpassen, Akkumulation von Opazität/Farbe.
  • Hinweise: Dies ist kein vollwertiges Raymarching wie in Shadertoys; Komplexität und Genauigkeit sind begrenzt und performance‑intensiv.

Blender Repeat Zone Illustration

Schnellstart: Repeat Zone im Shader Editor

  1. Shader Editor öffnen, Material wählen.
  2. Add >Utilities > Repeat einfügen.
  3. Nodes, die wiederholt werden sollen, zwischen Repeat‑Eingang und Repeat‑Ausgang platzieren.
  4. Iterationszahl setzen. Beginne konservativ (z. B. 8) und erhöhe schrittweise.
  5. Inputs/Outputs sauber definieren: UV, Height/Noise, Akkumulatoren (Farbe, Float, Vektor). Falls verfügbar, den Iterationsindex für Gewichte/Skalierung nutzen.
  6. Testen: Material auf einfache Szene anwenden, im Eevee‑Viewport prüfen und dann in Cycles gegenrendern.

Performance-Tipps: Iterationen in Eevee & Cycles

  • Iteration budgetieren:
    • Eevee: 6–16 Iterationen für interaktive Vorschau; >24 nur selektiv.
    • Cycles: Iterationen sparsam, Fokus auf Reduktion teurer Texture Lookups im Loop.
  • Berechnungen nach außen ziehen: Invariante Teile vor der Repeat Zone berechnen und als Input einspeisen.
  • Texture Lookups minimieren: Gemeinsam genutzte Texturen außerhalb abtasten, im Loop nur leichte Mathematik anwenden.
  • Mipmaps/LOD nutzen: Offsets skaliert zur Texelgröße, um Aliasing zu vermeiden; ggf. schärfere Mips für POM, weichere für Blur.
  • Abbruchkriterien simulieren: Wenn kein „Break“ verfügbar ist, Gewichte in späteren Iterationen gegen 0 laufen lassen oder Schrittweite adaptiv verringern.
  • Auflösung/Entfernung adaptieren: Iterationen von Bildschirmgröße oder View-Angle abhängig machen (z. B. weniger Iterationen in der Ferne).
  • Backen, wo möglich: Statische fBM/Blur-Ergebnisse vorrendern; die Repeat Zone nur für Parameter‑abhängige Varianten nutzen.
  • Profilieren: In Viewport-Stats und Renderzeiten messen; Änderungen isoliert testen.

Neu in 5.0: Closures & Bundles verständlich

Closures repräsentieren in Shader Nodes die physikalischen Streukomponenten (z. B. BSDFs) als eigene, typisierte Größen. Bundles fassen mehrere Closures zu einem übertragbaren Paket zusammen. Laut PR #141936 werden diese Strukturen beim Kompilieren flach gemacht (Inlining/Constant Folding), damit die Render-Engines effizient arbeiten können.

  • Modularität: Komplexe Materialblöcke (z. B. Layer aus Diffuse, GGX, Clearcoat) als ein Bundle weiterreichen und außerhalb mischen.
  • Mit Repeat Zones kombinieren: Innerhalb der Schleife pro Iteration Beiträge sammeln (z. B. leichte Schmutzschicht je Durchlauf) und als Closure/Bundle akkumulieren.
  • Vorsicht bei BSDF‑Kaskaden: Viele Closures in Schleifen erhöhen Kosten und können unphysikalische Summen erzeugen. Gewichtung normalisieren.

Praxis-Setups: Wiederverwendbare Materialien

POM‑Material (Eevee/Cycles)

  • Parameter: Height Scale, Steps, Max Parallax, Edge Clamp.
  • Vor der Repeat Zone: Tangent Space ableiten, View‑Vektor in Tangent Space, Basis‑UV.
  • In der Repeat Zone: UV += viewTS.xy * stepSize; height = SampleHeight(UV); Korrektur der UV abhängig von height; optional Self‑Shadow Proxy.
  • Nach der Repeat Zone: Albedo/Normal bei finalen UV samplen; Roughness ggf. aus Height ableiten.
  • Startwerte: Steps 12, Scale 0.05–0.08, StepSize adaptiv nach Blickwinkel.

Iterativer Texture‑Blur (Box/Gauss)

  • Parameter: Radius (px), Samples, Falloff (Gauss).
  • Vor der Repeat Zone: TexelSize = 1/TextureResolution, Seed für Rotationsmuster.
  • In der Repeat Zone: Offset über Sampleindex ableiten (Ring/Poisson), Sample lesen, gewichtet akkumulieren.
  • Nach der Repeat Zone: Summe durch Gesamtgewicht teilen, optional Mischung mit Original für „Smart Sharpen“.
  • Startwerte: Samples 8–12, Radius 1–3 px.

fBM‑Driven Roughness/Normal Distortion

  • Parameter: Oktaven, Lacunarity, Gain, Distortion Strength.
  • In der Repeat Zone: noise = Noise(uv * freq) * amp; sum += noise; freq *= lacunarity; amp *= gain.
  • Nach der Repeat Zone: Roughness = remap(sum); Normal = perturb(TangentNormal, sum * strength).
  • Startwerte: Oktaven 5, Lacunarity 2.0, Gain 0.5, Strength 0.2–0.35.

Tipp: Packe jedes Setup in eine Node Group mit klaren Ein-/Ausgängen (Skalierung, Iterationen, Textur-Inputs) und markiere sie als Asset. So kannst du sie projektweit wiederverwenden, auch in Kombination mit Bundles/Closures.

Quellen & weiterführende Links

Fazit: Repeat Zones bringen die lang ersehnte Iterationsmacht in Blenders Shader Editor. In Kombination mit Closures und Bundles entstehen modulare Materialbausteine, die sowohl in Eevee als auch in Cycles überzeugen – solange du Iterationen bewusst budgetierst und teure Texture‑Abtastungen im Loop minimierst.

Auf Wunsch stelle ich dir ein kleines .blend‑Demo mit POM‑Loop oder iterativem Blur inklusive Node‑Screenshots und empfohlenen Iterationswerten bereit.

Häufig gestellte Fragen zu Repeat Zones, Closures & Bundles in Blender 5.0

Eine Repeat Zone ist ein Bereich im Shader-Node‑Graph, dessen Inhalt mehrfach (iterativ) ausgeführt wird. Du platzierst die zu wiederholenden Nodes zwischen einem Repeat‑Eingang und -Ausgang und gibst eine Iterationszahl an. Beim Kompilieren werden die Schleifen für Eevee und Cycles entfaltet (Inlining), sodass flache, optimierbare Node‑Bäume entstehen.
Typische Use Cases sind Parallax Occlusion Mapping (POM), iterative Blur‑Filter, fraktales Noise (fBM) und einfache raymarching‑artige Schritte (z. B. SDF‑Checks oder volumetrische Akkumulation). Grundsätzlich eignen sich alle Effekte, die sich in sequenzielle, wiederholte Abtast‑/Rechenoperationen zerlegen lassen.
Öffne den Shader Editor, füge Add > Zone > Repeat Zone ein, platziere die Nodes zwischen Repeat‑Input und Repeat‑Output, definiere die benötigten Inputs/Outputs (z. B. UV, Height, Akkumulator) und setze die Iterationszahl. Teste konservativ (z. B. 8 Iterationen) in Eevee und verifiziere dann in Cycles.
Empfehlungen: POM: 8–16 für Echtzeit (Eevee), 24–32 für feinere Kanten. Blur: 8–12 Samples für schnelle Ergebnisse, 16–24 für höhere Qualität. fBM: 4–6 Oktaven für Performance, 6–8 für mehr Detail. Passe je nach Blickwinkel, Auflösung und Szene an.
Budgetiere Iterationen; reduziere teure Texture‑Lookups im Loop; berechne invariante Werte außerhalb der Repeat Zone; nutze Mipmaps/LOD, Texel‑skalierte Offsets und adaptive Iterations‑Strategien (z. B. weniger Iterationen in der Ferne). Backe statische Ergebnisse, wenn möglich, und profiler die Änderungen isoliert.
Closures repräsentieren typisierte Streukomponenten (z. B. BSDFs). Bundles fassen mehrere Closures oder Werte zu einem Paket zusammen. Nutze sie, um komplexe Materialblöcke portabel und modular zu machen (z. B. Layer aus Diffuse + GGX). Achtung: Viele Closures in Schleifen können Rechenkosten und unphysikalische Summen verursachen — immer normalisieren/gewichteten Mix verwenden.
Der Shader‑Graph bietet kein explizites Break wie in Programmiersprachen; typische Workarounds sind: Iterationszahl dynamisch über eine Maske/LOD steuern, spätere Iterationen durch Gewichte gegen 0 laufen lassen oder adaptive Schrittweiten verwenden. Bei Bedarf Ergebnisse frühzeitig mit Akkumulatoren maskieren, sodass spätere Durchläufe kaum Beitrag leisten.
Packe das Setup in eine Node Group mit klaren Ein-/Ausgängen (Skalierung, Iterationen, Textur‑Inputs) und speichere es als Asset. So lassen sich POM-, Blur‑ oder fBM‑Module projektweit wiederverwenden und mit Bundles/Closures kombinieren.
Ja — Repeat Zones werden beim Kompilieren entfaltet, sodass beide Render‑Engines optimierten Code erhalten. Dennoch solltest du in Eevee konservativer mit Iterationen sein (6–16) und in Cycles Texture‑Lookups und teure Operationen im Loop minimieren. Immer in beiden Engines testen.