Die Gestaltung komplexer Texturen und prozeduraler Muster spielt eine zentrale Rolle in der Welt der Computergrafik und des 3D-Renderings. Unter den zahlreichen Algorithmen zur Erzeugung natürlicher, organischer Strukturen genießt die Voronoi-Struktur beziehungsweise der Worley Noise eine besondere Beachtung. Sie ermöglicht es, spannende natürliche Effekte zu simulieren – von Zellstrukturen bis hin zu Rissmusterungen. Blender, als eine der führenden freien 3D-Suiten, enthält einen speziell entwickelten Voronoi-Knoten, der in Materialien, Kompositoren und Geometrieknoten verwendet wird. Trotz seines deutlichen Nutzens birgt seine Umsetzung technische Herausforderungen, die sich aus der notwendigen Performance und Komplexität ergeben.
Ein zentraler Punkt dabei sind Hash-Funktionen, die im Kern der Voronoi-Erzeugung stehen und einen maßgeblichen Einfluss auf Geschwindigkeit und Qualität nehmen. Die herkömmliche Implementierung von Voronoi in Blender basierte lange auf der sogenannten Jenkins Lookup3 Hash-Funktion, einer bewährten Methode aus den 1990er Jahren. Diese Funktion war über lange Zeit als Standard im Bereich der Pseudozufallszahlen akzeptiert, da sie relativ gut gleichmäßige Verteilungen und eine ordentliche Zufallsgüte erzeugt. Alptraumatisch dagegen ist die Vielzahl der Hash-Berechnungen, die für einen einzigen Punkt im dreidimensionalen Raum erforderlich sind: Das austesten der angrenzenden 27 Gitterzellen ist rechenintensiv und verlangt daher schnelle und dennoch verlässliche Hashing-Algorithmen. Die alte Jenkins-Methode verwendet zahlreiche Bitverschiebungen und XOR-Operationen zur Entmischung der Eingabewerte.
Obwohl sie in früheren Zeiten performant war, ist ihr ein höherer Rechenaufwand und eine schlechtere Anpassung an moderne CPUs und GPUs anzukreiden, die heute Multiplikationen und parallele Verarbeitung besser beherrschen. Vor diesem Hintergrund ergab sich der Impuls, bessere Alternativen zu evaluieren. Moderne Hash-Funktionen für GPU-Rendering, wie sie von Jarzynski und Olano in den letzten Jahren vorgestellt wurden, bieten eine vielversprechende Lösung: Der PCG3D-Algorithmus ist eine speziell auf schnelles, paralleles Hashing optimierte Funktion, die einerseits simpler im Aufbau und andererseits bis zu viermal schneller als die klassische Jenkins-Funktion arbeitet. Er kombiniert Multiplikationen, Addition und Bitoperationen und nutzt moderne Prozessorfähigkeiten besser aus. Die Umstellung in Blender auf den PCG3D-basierten Ansatz für den Voronoi-Knoten bewirkte nicht nur eine deutliche Performance-Verbesserung – mit Messwerten, die zwei- bis dreifach schnellere Berechnungen ermöglichen –, sondern führte auch zu einer veränderten, wenn auch ähnlichen, Voronoi-Musterbildung.
Dies zeigt, wie eng Performance und visuelles Ergebnis bei prozeduralem Rauschen verwoben sind. Blender 5.0 griff diesen Schritt auf und implementierte die neue Hashing-Funktion systemweit für verschiedene Dimensionen. Doch die Komplexität der Blender-Architektur machte die Anpassung anspruchsvoller. Der Voronoi-Knoten ist nicht in einem einzigen Codeabschnitt verankert, sondern in mehreren Teilen implementiert: im CPU- und GPU-Code des Cycles-Renderers, in der EEVEE-GPU-Shader-Implementierung sowie in den CPU-Implementierungen für Geometrieknoten und die Komposition.
Für eine konsistente Darstellung aller Shader und Arten von Berechnung wurde eine umfassende Portierung der neuen Hash-Funktion benötigt, was aufwendig ist, aber langfristig die Wartbarkeit verbessert. Eine weitere Hürde ergab sich im Umgang mit Open Shading Language (OSL), der optionalen Shadersprache in Blender Cycles für hochwertige Global-Illumination-Berechnungen. OSL ist eine C-ähnliche Programmiersprache, die für komplexe Shading-Anforderungen entwickelt wurde. Überraschenderweise besitzt OSL im Jahr 2025 keine Unterstützung für unsigned Integer oder Bitcasts von Float zu Integer – zwei Operationen, die in klassischen Hash-Funktionen essenziell sind. Das stellt Entwickler vor die Herausforderung, sichere und schnelle Hash-Funktionen ohne diese Datentypen zu schreiben.
Im Fall des Voronoi-Knotens konnte dies elegant umgangen werden, indem ausschließlich Integer-Koordinaten gehasht wurden, was ohnehin für die Zellindexierung sinnvoll ist. Der PCG3D-Algorithmus wurde entsprechend auf vorzeichenbehaftete Integer angepasst. Das Fehlen von unsigned Integern und Bitcasts erfordert dabei eine kreative Nutzung der in OSL verfügbaren Operationen. Multiplikation, Bitverschiebungen und XORs sind bei signed Integern nutzbar und bilden eine ausreichende Grundlage, um robuste Hash-Funktionen umzusetzen. So entstand eine modifizierte Variante des PCG3D-Algorithmus, die mit einem Masking von Bits (und damit der Vermeidung negativer Werte) arbeitet – eine pragmatische Lösung zum aktuellen Stand der Sprache.
Interessanterweise nutzte der bisherige OSL-Voronoi-Code standardmäßig OSL-eigene Built-in-Funktionen wie hashnoise(), die intern ebenfalls auf die veraltete Jenkins Lookup3-Hash-Funktion zurückgreifen. Somit komplettierte die Umstellung auf moderne Hashmethoden sukzessive nicht nur die Cycles- und EEVEE-Pfade, sondern auch den OSL-Pfad, wenngleich mit einer stark angepassten Herangehensweise. Die Entscheidung, die Voronoi-Hashing-Logik strikt auf die Hashing von Integer-Gitterzellen zu konzentrieren, brachte mehrere Vorteile mit sich. Erstens wurde die Performance stark gesteigert, weil weniger komplexe Typumwandlungen notwendig sind und der Algorithmus besser mit den integerbasierten Zellkoordinaten harmoniert. Zweitens erhöht sich die Portabilität zwischen verschiedenen Render-Pipelines und Shader-Sprachen, da Integer ein universeller Datentyp sind.
Drittens verbesserte sich die Wartbarkeit des Codes, da der Hashing-Algorithmus nun konsistenter über verschiedene Plattformen und Schnittstellen hinweg angewandt werden kann. Zusätzlich wurde deutlich, dass alte Annahmen aus der Hash-Forschung, wie beispielsweise die Verteufelung von Multiplikationen, längst überholt sind. Während in den 90er Jahren Multiplikationen auf CPUs sehr teuer waren und Hash-Funktionen darauf Rücksicht nahmen, sind diese Operationen auf modernen CPUs und GPUs ausgesprochen schnell. Neue Hash-Funktionen profitieren davon und setzen auf strategische Multiplikationen, um einfache und zugleich hochwertige Streuung zu erzeugen. Die Auswirkungen dieser Optimierungen auf reale Projekte in Blender sind signifikant.
Nutzer profitieren von schnellerer Vorschau im Editor, kürzeren Renderzeiten und effizienteren Echtzeit-Shadern. Gleichzeitig ermöglicht der verbesserte Voronoi-Knoten künstlerische Freiheit mit höherer Komplexität bei stabiler Performance. Das ist insbesondere im Bereich der Geometrieknoten attraktiv, die oft prozedurale Muster zur Modellierung nutzen. Auf der technischen Ebene zeigt das Beispiel also, wie wichtig es ist, klassische Algorithmen stets zu überdenken und an moderne Hardwarearchitekturen und Sprachfeatures anzupassen. Die Zusammenarbeit zwischen Entwickler-Teams von Renderern, Shadern und 3D-Anwendungen kann dabei zu deutlich spürbaren Vorteilen für Endanwender führen.
Das Verständnis von Details wie Datenallokation, Hashqualität, paralleler Ausführung und Spracheigenheiten ist dabei unerlässlich. Nicht zuletzt offenbart sich auch die Relevanz von Open Shading Language als High-Level-Shader-Backend, das sich trotz moderner Ansprüche noch mit teils alten Schwächen konfrontiert sieht. Die Unterstützung fehlender grundlegender Datentypen wie unsigned Integer könnte in Zukunft eine bedeutende Rolle spielen, um weitere Optimierungen umzusetzen und Hack-Lösungen zu vermeiden. Im Bereich der Produktion und visuellen Effekte kommt es auf Software an, die optimal mit Performance und Ausdruckskraft kombiniert. OSL und seine Weiterentwicklung sind daher weiterhin ein spannendes Feld.
Zusammenfassend lässt sich festhalten, dass die Optimierung des Voronoi-Knotens in Blender durch moderne Hash-Funktionen wie PCG3D und die Anpassung an Sprachbesonderheiten wie bei OSL beispielhaft für technologische Evolution in der Computergrafik steht. Die damit verbundene Steigerung der Performance eröffnet neue kreative Möglichkeiten, während gleichzeitig technische Herausforderungen die Entwicklung innovativer Lösungen fördern. Für Anwender von Blender und Entwickler in der 3D-Branche ist es lohnenswert, diese Entwicklungen zu verfolgen, um vom technologischen Fortschritt zu profitieren und die Grenzen prozeduraler Gestaltung weiter zu verschieben.